Not just Java. Python, Ruby, Node etc suffer from the same problem. And I am talking as an end-user here.
I once downloaded something based on one runtime which then proceeded to download another runtime which it needed to run one little script. There are programs out there that have node/npm as a dependency.[1] People are crazy.
> your 3 listed reasons make a very argument for "a normal compiled language"
One of my hobbies involves writing compilers and parsers.[2][3] I have tried a lot of "normal" languages and have stuck to Java (in spite of its excessive verbosity) for work reasons. Some languages I cannot tolerate for aesthetic reasons.
For now, there is no alternative to TypeScript.
> you wrote software 2 ways: shellscripts and Java. You replaced them with...any entirely new interpreted language(JS)
I used to run a mixed-environment (Windows + Linux) and a lot of glue code that drove other software had to be written twice (sh/bash + cmd/bat) before WSL came along. That problem has disappeared.
I also used to write a lot of tools (servers and cli apps) in Java. Some of those I have moved over TypeScript-on-Deno.
> I'm not denigrating JS/deno/node/whatever
I used to look down on JS a decade or so back. My experience with Rhino and now Deno changed that. There is a lot of stuff I do now which I simply would not do if I have to fire up an entire Java project to do.
[1] https://archlinux.org/packages/community/x86_64/nodejs/
Are shell scripts cross-compatible if you haven't installed WSL?
So how is this statement wrong for shell scripts? You can't write a shell script that "runs the same on Linux/Windows without forcing the user to download a runtime" because you can't write a shell script that runs on Linux/Windows.
> - Single executable: Write programs that run the same on Linux/Windows without forcing the user to download the entire universe like other runtime environments.
OK, I understand your comment wrt Java, but with shellscripts? What universe are you downloading?
For that matter - your 3 listed reasons make a very argument for "a normal compiled language". Consider an older/popular one...C++. It's very typed, compiled to a single executable, and "bundling" is "linking"(you can do it any way you like, including staticly linking all your deps).
If I understand your comment, are you saying that previously you wrote software 2 ways: shellscripts and Java. You replaced them with...any entirely new interpreted language(JS)?
I'm not denigrating JS/deno/node/whatever, I'm pointing out your 3 reasons are built in features to any compiled language in the last 40 years.