Apache Harmony Finale
The Apache Harmony PMC initiated a vote earlier this week to begin the process of moving the codebase into the Apache Attic and disbanding the PMC. With 18 for and 2 against, the result will be that the Apache Harmony project will be wound up and placed in the Attic for posterity.
Apache Harmony was an open-source clean-room implementation of the JDK, released under the Apache license, but could never call itself Java compatible as Sun refused to honour the JSPA which would give them access to the Testing Compatibility Kit (TCK), a pre-requisite of which is needed before an implementation can call itself Java. Apache's open letter to Sun, published on April 10th 2007, asked for and failed to receive clarity on the subject.
The primary corporate sponsor of the Apache Harmony project was IBM, who founded the project in a hope of having a less restricted version of the JDK under a non-viral license. However, with Oracle's takeover of Sun it became clear that the JSPA wasn't going to be respected, which left no choice for Apache but to resign from the JCP in December 2010.
When IBM joined OpenJDK there were already questions of whether IBM would continue to be involved in two implementations. At the time, Rod Smith, vice president of emerging technologies at IBM, suggested:
… that they would, but also made it clear that IBM would be shifting its development effort from Apache Harmony to the OpenJDK. As part of this, Smith noted that IBM could bring some innovations from the Harmony project across to the Java SE Reference Implementation.
This subsequently resulted in Tim Ellison, PMC of Apache Harmony, stepping down from the role. Although there was an opportunity for either the community or another commercial sponsor to step in and continue the Apache Harmony goal, with Oracle's firm stance on the matter it wasn't ever likely to be able to call itself Java. The main beneficiary of the Apache Harmony codebase was Google, who used it to provide their runtime library for Android (although compiled down to the Dalvik virtual machine). However, since Google is currently involved in disputes with Oracle and so avoided getting involved in the Apache Harmony project.
With no PMC and no active committers, ex-PMC Tim Ellison proposed on the mailing list that Apache Harmony be moved to the Attic, where the source code will remain available under a read-only version but no further development work will occur. This does not preclude the possibility of the work being used in the future under a different project, but history suggests this is unlikely to be the case. Instead, Google's focus is on new programming languages such as Go and Dart, both of which could be used in a future version of Android should the Oracle case go against it.
Apache Harmony provided not only a clean-room viral-free implementation of the JDK and JVM, but also strove to provide modularity in a way that OpenJDK still has not. Packages were modularised and broken down into separate units, so applications that needed e.g.
java.net could be bundled, but without
java.awt. Although this subset would not be a full Java implementation, many memory-constrained devices would benefit from the faster startup times by not loading unnecessary classes. It also solved problems such as the circular references between e.g.
java.applet, and thus transitively to
java.awt long before Jigsaw started to investigate these problems.
However, advances in Apache Harmony's JVM did not keep up with the performance of Hotspot and other JIT improvements with OpenJDK, with the result that it was rarely used for performance critical systems. And whilst it was capable of booting Eclipse, it was not widely used outside of demonstration cases.
The Apache Harmony language libraries live on, in a forked repository of the Google Android codebase.
Google's use of Harmony in Android
Google's use of Harmony has been a concern for me. The Harmony code tends to be pretty buggy to begin with, as one would expect without access to the Testing Compatibility Kit (TCK).
However, Android has been using a subset of Harmony - and I fear over time, this subset will diverge in capability and compatibility from the official Java stuff, making it very difficult to take advantage of tooling outside the ADT and other libraries which may depend on features in the official Java.
Although Andy Rubin defined android's openness in terms of being able to get the source code, Google shares no roadmap whatsoever with regular developers … and in the absence of encouraging information, my worries grow.
If Google does take the nuclear option and drop Java, it will be very disruptive for developers. Would I port all of my code to whatever they choose ? I doubt it, especially if its just as easy to port to iOS or WP7/8.