I remember, for a while Cypress had in its documentations actually a warning about POs and recommended not to use them. I got curious as to why (because I am a big fan of POs) and dug deeper - I think at some point on a sales slide I found the reason "because POs have internal state". I started then to write my POs without any internal state (which you don't need with Typescripts property getters) and have luckily scaled my app with dozens os POs and hundred of tests. Later they removed that recommendation and seem to accept that people like POs.
"builtins" are primitives that Bash can use internally without calling fork()/exec(). In fact, builtins originated in the Bourne shell to operate on the current shell process, because they would have no effect in a subprocess or subshell.
In addition to builtins and commands, Bash also defines "reserved words", which are keywords to make loops and control the flow of the script.
Many distros will ship a default or skeleton .bashrc which includes some useful aliases and functions. This is sort of like a "standard library", if you like having 14 different standards.
'[' is an external binary in order to catch any shell or script that does not interpret it as a builtin operator. There may be a couple more. Under normal circumstances, it won't actually be invoked, as a Bash script would interpret '[' as the 'test' builtin.
Could have happened 5 years ago. Could have happened 5 years before that. But it won't ever happen if the techy people that have the capabilities of making it happen are too busy self-righteously laughing about how it hasn't happened yet. Luckily that doesn't stop progress, but it sure doesn't let it get to the speed it could.
Meanwhile, I hope you're happy with the state of things. You have every right to point and laugh if you are happy with the direction Microsoft, Apple, and Google have led us. But if you aren't, it isn't too late to make efforts to change those directions.
If we're going to reference the past, let's not hyper-fixate on every failed "call to arms" while ignoring how future they were trying to fight actually happened...
Then SDKMAN! will perform the switch automatically when you enter the directory.
https://sdkman.io/usage/#env-command