Java as a Legacy Language

Can you believe that Java has become a legacy language? The writing has been  on the wall – attacked early and  viciously by Redmond after Bill Gates and company reversed themselves and instead out innovating Sun’s  Java; they  attempted to kill it by not updating the JVM on Windows and creating a rival .NET runtime [CLR] . This was followed by three increasingly proprietary clones of Java : J++ then C# and finally J#.  But the killer blow was leaving an old version of JVM on hundreds of millions of Windows desktops and making the download update perversely hard to do.

Java  prospered somewhat on the desktop in a round about way – being the preferred industrial strength Web UI seen through JSP, JSF, Java FX and some very popular Java web upload and file management routines. But with the emergence of JavaScript frameworks like jQuery, EXTjs,  mootools   among other Web 2 tools meant that Web side prosperityof AJAX clipped Java on the Web. And despite having a lead in the mobile GUI space, Java ME interface has played second fiddle to HTML5+JavaScript, Apple’s Objective C, and Google’s GWT version. For which, Google and Oracle/Sun are locked in a a major legal dispute on Google’s “appropriation of Java”.

So now the legacy of Java may well be the JVM rather than Java the language. The JVM improves in speed, portability and security while Java the language becomes ever more complicated. Look at recent overviews of Java versus C++. Java as a programming language has become  ever more complex especially in the enterprise application space:
SYS-CON – Is Complexity Hurting Java?
Java Complexiy – Cyclomatic Complexity measures for Java methods
PCWorld – Google frustrated by Java and C++ complexity
VelocityNews – Java vs C++, the standard guides tell the story of complexity
Artima – Java: at an evolutionary dead end
Clearly with Generics, Java took a turn for the worse according to many developers. But also the size and redundancy built into the Java libraries – particularly J2EE almost from its inception – added to the learning overburden for many developers.

But perhaps the killer  problem has been the unrelenting rejection of Java by Steve Jobs and Apple. Suddenly Java and the JVM have become the no-longer cross platform developer tool as Java and the JVM are outlawed on iOS and all iPad, iPhone, and iPod systems. In addition, Apple announced that Java and the JVM on Mac OS/X have been deprecated. This has broad implications because deprecated tools cannot be used for applications  in the Mac App Store and  a lot of popular Web languages like Groovy, Jython, and JRuby which have had an uptick of usage with their JVM support; now have to look elsewhere for runtime support on Apple’s mobile and desktop OS. This has not been popular:
Lachlan’s Ramblings – a sympathetic view of Java “support” by Apple – Apple is offloading all Java development to Oracle
MacDailyNews – views Mac OS/X Lion dropping of Java, Flash, Samba and other cross platform tools as non-events and non-issues
Neowin – Java apps will not be allowed on Mac App Store
StackOverflow – resignation that Java on iOS and Apple Mobile Apps is effectively dead
wikipedia – see the table and iOS support for cross platform development – nada, rien, nyet, nothing
Clearly, Java as a key component of cross platform development, is dead on iOS and fast reaching dead on MacOS/X. This is a deliberate strategy by Apple making the process of moving apps from Mac and iOS to other platforms [or vice versa] difficult to do in the name of performance and security and other illusory advantages.

The result puts the new JavaFX 2 in a tight spot because Java’s “write once, run anywhere” promise, already shaky, is almost completely down the drain. However, JavaFX has other problems of acceptance in the developer community:
– when will JavaFX get real community acceptance
Infoworld – Is it too late for JavaFx to succeed?
OReilly – 2011 overview of JavaFX making RIA with Java
So Java as a cross platform development tools is on the wane thanks to a distinct push over the cliff by Apple and less than vigorous support from Oracle. But the language has been in danger for over a decade with many J2EE revisions, JavaME versus JavaFX conflicts, and “the simple language” becoming complex. For certain niches such as server-side development, process control, and specialized telecommunication systems [Windows, Unix, and Linux program domains] – Java will likely continue to prosper. In contrast the JVM-Java Virtual Machine runtime has continued to improve.

JVM – Java’s Lasting Legacy

The JVM-Java Virtual Machine will probably have a longer lasting legacy than Java itself. First, because Java’s latest editions are failing in its effort to provide a simple, succint but effective enterprise  programming language. One look at Java Generics will underline this problem. Second, the other promise of Java was a cross platform development tool – write once run anywhere. Gradually that has decayed first with Microsoft’s $2billion assault on the language, Open Software’s foolish resistance to allowing Java as a part of the GNU and other Linux  product distributions, and now the coup de grace from Apple.

In contrast the JVM has done 4 things very well:

1)proved that a cross platform interpreter could work well on a broad set of CPU+OS platforms;
2)proved that Java and JVM combo  could be a viable solution for diverse IT franchises: GUI and visual development; communications and networking systems; database and BI applications; server-side web delivery; SOA and Enterprise data integration; stand alone process control systems among others;
3)performance of the JVM, in its tuned hotspot and hybrid form, could approach  within 70-90% of the best C/C++ benchmarks;
4)the JVM could be adapted for use by a very broad array of programming languages.

Thus as use of Java starts to wane, ironically the performance of the JVM has improved dramatically in Java 7 as seen in the following benchmarks – sometimes outperforming the best C/C++ systems.The JVM may well carry new languages like Lua, Jython/Python and JRuby to prominence.

The Broader Problem: Continued Silos of Information and Development

One of the critical consequences of the fall of Java from the position of WORE – Write Once Run Everywhere – is that cross platform integration and compatibility has reached a dangerously enfeebled state. Now there are ever more isolated  islands of development – Windows vs Linux/Unix vs Mac desktop and server platforms; Android versus iOS vs  RIM/QNX vs Meego/Qt mobile platforms;  HTML+JavaScript vs PHP vs Cold Fusion vs  ASP vs JSP Web development platforms; a  variety of realtime and process control OS platforms; and a similar diversity of Cloud operating systems. The need to move software among these platforms is growing ever stronger; yet there are almost no development programming systems as versatile, secure and performant  as Java. Already mobile developers that have to move HTML+JavaScript code from the Web to mobile platforms like iOS or Android are confronted with non-trivial conversion efforts.

There is  a bitter irony here – the man now being deservedly praised for  innovative brilliance in the world of  hardware and software, Steve Jobs, is also responsible for a petty, own-advantage decision. Steve Jobs can take credit for  completing the task that Bill  Gates could not do – destroying Java.  Now many can argue that Java did grievous harm to itself and that other players were instrumental in its downfall – but only Steve can claim honors for applying the coup de grace to Java; but not to the JVM.