But what should be done with Java. Well a few of the things really are rather obvious and are based on the shift around mobility. J2ME was hugely successful in low powered devices but Android and iOS have really shown a new way forwards. Java needs to recognise that JavaSE is pretty much irrelevant these days and start planning accordingly.
Stop viewing JavaSE as the base platform, the desktop is irrelevant
So what does this mean? Well it means that we need to break Java free from the cruft of JavaSE, yes for compatibility reasons there should still be a JavaSE (lets call it Java Desktop Edition) this is something I talked about in 2006 on what should be done for Java SE 7 but I'd say its now even more relevant. We need a base Java platform that people can innovate from "write once, run anywhere" was a good slogan but its time has past, or rather its now more specific its "write once, run on any compatible platform" so if you build for Java Desktop it works for Java Desktop, if you build for Android it works for Android, if you build for Java Enterprise Edition then it works on... yup Java Enterprise Edition.
What all of these things need however is a much smaller and tighter base platform and a standard way of specifying the libraries that are, and can be, loaded to support an application. The base platform needs to be small and tight to enable it to be an base for smartphones, standard phones and embedded devices. Moore's Law sort of indicates that even in the embedded space we are getting towards the level where we don't need the KVM or more restricted VMs. That is the second piece
The base platform is VM + the minimum libraries + a dynamic loading approach
There is quite a radical shift in those two pieces but its about really developing Java as a language and allowing innovation around its platforms. Having a core where people can innovate on the basic language elements, and have all areas leverage that, is much better than having a world where putting something like JAX-WS into a desktop profile is considered a good idea. This brings us down to the third piece which is about control.
There is a need to "bless" certain platforms and enable commercial and open source vendors to have their solutions certified against those platforms, they also need to be able to control the core VM (not the libraries) and the syntax of the language, using the term "Java" should be restricted to those who use the standard VM and the standard syntax. Other companies could also choose to create their own platforms (e.g. Android) and have certification elements but these would have to have certification that they are "Java" in terms of VM and syntax.
Stop viewing other platforms (Apache, Android) as competition and see them for what they are - a massive increase in the available market of and for Java developers
So how to "bless" these elements? Well clearly the JCP has been subverted by, IMO, the myopic Sun (now Oracle) leadership who railroaded through their own opinions based on completely flawed views of the market. So should the JCP be ditched? No it shouldn't but what it should be is revolutionised. I suggest that there be a core Java board which is focused purely on the platform and has a remit that covers just the JVM and language syntax.
Next up there is an "libraries" board which covers standards which are considered to be library, or library loader, elements which should be standardised. Pieces like JAX-WS, Midi support et al would go here. This board and its standards teams focus purely on getting the standard right.
Next we have 4 "profile" boards - Mobile, Desktop, Web, Enterprise. These are the equivalent of the JavaSE and JavaEE groups but their only role is in agreeing what goes into a profile not in driving those profiles. This allows people to create the biggest bloated Desktop profile that they want but not impact EE (which does not have to be based on Desktop). Web is a new profile that is aimed at addressing the challenges of browser deployments, it might be too late for Java to get involved in this battle but I think its worth considering
JCP to be reorganised around Core, Libraries and Platforms
The main thing though that Oracle need is a leader to take on Java in its new Commercial age, I presented on this in 2008 and it really hasn't changed. Java needs to grow up but still allow itself to be a playground for creativity. Sun were a great creative company but they didn't have the brains to make the commercial shift required. Oracle do have the commercial brains but they haven't yet applied them to Java in the way they have in other areas, most notably middleware.
So that is what I think Oracle should do
1) Change the leadership
2) Recognise that JavaSE is an anachronism
3) Split between Core, Libraries and Platforms
Its this that I think will help Java support the huge legacy base that it has and enable the innovation that is badly needed. But as with all good companies this change in direction needs to come from the top which means Java needs a "suited James Gosling" who can take a pragmatic commercial view on how to create the biggest possible Java market because ultimately that is how Oracle, one of the world's largest Java vendors, will make the most money.