The future of Java seems uncertain since Oracle bought Sun. The first issue came with Oracle’s lawsuit against Google for implementing their own JVM on Android, though the details are unclear. (I thought Sun JVM was open-source at some point.) Then Apple decided that it didn’t want to port Sun/Oracle JVM to OS X anymore and that Oracle would have to do the work.
Now Oracle is saying there will be two JVMs – one free and one paid. Initially I was upset, but after reading The Register’s take, I’ve calmed down. For one, Oracle will be merging their own high-performance JVM with the former Sun JVM. Then that code base will result in both the free and paid versions. As far as I can tell, Oracle hasn’t given any information on the differences, though The Register speculates performance enhancements. Compared to the current situation, I imagine this means the free JVM will be faster.
Also note that we’re only talking about the virtual machine here, not the compiler (as far as I can tell). I doubt Oracle would move to an annoying shareware/popup-spam version for the free JVM; people would just use the old Sun JVM instead. I can’t think of any way they could get away with reduced functionality in the free JVM. The leaves systems issues like performance optimizations and sysadmin options (such as detailed monitoring of the JVM). Non-free performance optimizations seem a little awkward, but I can image it might be a type of package deal with Oracle products; it makes sense to have a JVM optimized for their software, given their dependence on Java.
The change is probably nothing to worry about, but I have to wonder whether they could do a better job at managing the community’s reaction. My main lingering concern is that Oracle’s handling of Java may be too heavy-handed for developers and may lead to a steady decline in (professional) Java software. If this takes place, then we would probably need to phase Java out from academia also. On the other hand, C/C++ has both commercial compilers and the excellent gcc compiler; perhaps the JVM will take that path also.