By: +David Herron; Date: June 19, 2008
Java is finally Free and Open .. hey, The Fedora/IcedTea team have reached a great milestone. Their build of the OpenJDK has passed the (extensive) JCK test suite. I bet they now have a huge appreciation the extent to which we took the slogan "Compatibility Matters!".
Since this inspired Rich to take a walk down memory lane... in May 2006 I was in the audience for the JavaOne keynote. I was real excited because a project I'd been working on intensely was about to be announced by Jonathan Schwartz and Mark Shuttleworth from the stage. This project, the Operating System Distributor License for Java (DLJ) was our latest hope to improve the state of Java on Linux by giving the world the JDK's rebundled with a more permissive license. It was going to usher in an age of nirvana and happiness, but it seems that Jonathan Schwartz and Rich Green had a different idea in mind. Jonathan and Mark did announce the DLJ project that day, and DLJ derived JDK's have been shipping in several Linux's and Solari since then. However Jonathan and Rich a few minutes after the DLJ announcement completely upstaged it with "It's not a matter of if but when" (or something like that).
Thus ensued a huge amount of work. The initial open sourcing happened on the first Java Freedom day, November 13, 2006. The second Java Freedom Day happened at JavaOne 2007 when the rest of the OpenJDK was released ... except... there was two issues, first that some code was encumbered and we weren't able to open source it right away. This made for a more complex build situation where replacement code was available as binary to plug in the holes left by the encumbered source. The second is we never got to open sourcing the plugin or java web start.
I see the slashdot thread, IcedTea's OpenJDK Passes Java Test Compatibility Kit, has it's usual set of mistakes and misconceptions so I'll be answering some of them as I go through the rest of this.
The IcedTea project formed almost immediately and initially its purpose was to reuse Classpath code to fill the gaps of the encumbered code. At some point in (?late?) 2007 they had a complete unencumbered IcedTea build derived from the OpenJDK7 source tree. At the same time in the OpenJDK team work was done to replace the encumbered code by various means. For some code we were able to get permission to release it under open source, in other cases we chose open source alternative implementations. For example a remaining encumbrance is the font rendering code, and in the OpenJDK we are using open source font rendering code (FreeType) but the closed source code is continuing to be used in the commercial JDK builds.
Performance .. the OpenJDK uses the exact same HotSpot as is used in regular JDK builds. Performance should be 99.9% the same. Since some of the GUI rendering code differs the GUI performance is likely different.
" Only 4% of the Sun Java code wasn't released. So IcedTea only had to implement the 4% of Java that wasn't GPLed." This is no longer true... the OpenJDK6 source tree is 100% unencumbered.
OpenJDK7? OpenJDK6? In the beginning there was OpenJDK, and it was pleasing to Richard Stallman and he smiled. However there was a promise made to have an open source implementation compatible with Java 6, and thus was OpenJDK6 born. OpenJDK6 is an example of making reverse progress by moving forward into the past ... OpenJDK6 is a fork of OpenJDK7 where features and code was removed until it could pass the JCK tests. If you look in the IcedTea project there are two branches, the one derived from OpenJDK7 and the one derived from OpenJDK6. It's the OpenJDK6 which the IcedTea/Fedora project have made pass the certification tests.
What's the big deal? This is Sun's own code base so of course it's going to pass the compatibility tests ???
Not so fast, as there are some differences from any other release which passed JCK6a. The last version to pass JCK6a was the Java6 release (which is up to Java 6u6). Remember that OpenJDK 6 started life as a fork of OpenJDK 7. While OpenJDK7 started from the JDK6 source tree ... some changes had been made. There was 20 builds worth of Java7 new feature development and bug fixes, and there was source tree rejigglings related to open sourcing. Further there were changed introduced by removing the encumbrances, and there were changes introduced by IcedTea/Fedora. This means there's a lot of ways a conformance failure could have been inserted.
Hey, great news and I hear there is some celebration at FUDCON. Wish I'd been able to attend.