Java is religiously backwards compatible. Modern java projects are not as enterprisey and boilerplatey, but, as jdk21 is backwards compatible with jdk1.3, you can still happily write code as if it’s 2003.
Additionally, the java space is huge, so just wildly googling will probably not help you that much.
Is that why every single application will only work with some ancient version of Java?(usually 8, sometimes 1.6 or 11)
I can’t think of many cases where Java 21 is a drop in replacement, and I don’t think anyone actually used 17.
That’s entirely the fault of applications (or more likely their libraries) using internal APIs or JNI. As long as it isn’t doing anything screwy with reflection and class loading or using the sun.*
packages that aren’t part of the language specification, Java bytecode compiled for ancient Java versions will still work on modern versions.