I'm listening to the 'holidays 2008ish' episode of Javaposse and in reviewing their last years predictions they have enough fumbling around the status of OpenJDK that I want to do a little bit of explaining.

OpenJDK 6 != JDK 6

There are circuitous historical reasons for this but the fact is that OpenJDK 6, as good as it is, does not correspond to JDK 6uN for any value of N.  OpenJDK 6 began as a fork of OpenJDK 7, and the team stripped out code from the OpenJDK 7 fork until it became compatible with the Java6 specification as verified by the JCK 6 test suite. Joe Darcy has posted several blogs about this OpenJDK 6 Genealogy, OpenJDK 6 and 6u10 features, OpenJDK 6: Logistics of Partial Merge with 6u10, and the most important of these is:  Forward to the Past: Toward OpenJDK 6 If you're scratching your head going "huh??", well, I don't blame you, just read Joe Darcy's blog postings and it will be clear as, well, uh, I just hope it's clear why. The bottom line is that OpenJDK 6 works rather well, several Linux distros are using it as their JDK, it can be built to pass the JCK6b test suite, meaning OpenJDK 6 can be used to build a compliant JDK, and unfortunately it is this evolutionary sidetrack which we hope will be relatively short-lived.  It serves a purpose, namely of having an fully open OpenJDK compliant with Java6 ....

OpenJDK ~=~ IcedTea

It seems some people really like typing "./configure" rather than setting up environment variables and running "make".  The IcedTea project originally began due to incompleteness in the OpenJDK (gaps due to encumbrances) and the community requirement of a fully open source toolchain and code base.  IcedTea has long been a set of patches applied to OpenJDK, along with a different build system that is "./configure" based as I just said. In OpenJDK we've replaced the encumbered code such that there are no gaps any longer.  As we've done so I believe the IcedTea project has shrunken the number of patches they use.  One nice thing seems to be that the IcedTea configure script makes it easy to build OpenJDK in many different modes such as using the Zero Assembler port to support compiling on non-x86/sparc chipsets, etc.  A big piece IcedTea provides is a plugin/java-web-start infrastructure.  We haven't been able to open source our plugin and of course for 6u10 we completely rewrote the plugin.  It is hoped we will open source the new plugin into the OpenJDK project but to my knowledge that decision has not been made concrete set in stone. I don't spend much of my time looking at IcedTea so don't be alarmed if I've missed something ...

OpenJDK 7 == JDK 7

Okay, given that there is not a Java7 JSR and all the JCP stuff related to that issue ... Hopefully all that will be straightened out and we do have a proper Java7 JSR, so for the following please assume that's the case, that Java7's JSR status is straightened out ... the plan is that beginning with OpenJDK7/JDK7 that the code bases will be nearly identical.  It is obviously expensive to maintain a fork, and if JDK7 were to diverge strongly from OpenJDK7 it would do two things: a) be very expensive, b) undermine our efforts at an open source ecosystem.  But "nearly identical" does mean it's likely there will be some differences. Remember those gaps due to encumbrances?  Some of those gaps were simply code we couldn't open source as of May 2007 but have since done so, other gaps are for code we still have to gain approval on (e.g. SNMP), but there is some code where there are open source replacements where we still use the old closed source code.  This is primarily in font and graphics rasterization.  The old closed source rasterisation code, while being encumbered, has had 10+ years of bug fixing and fine tuning etc and, for any open source replacement to displace that code in productized JDK builds, it would have to be provably as fast and stable and good quality as the existing closed code.

What took so long?

If we had followed normal release patterns JDK7 would be shipping about now.  That is, Java6 shipped in December 2006 and our normal pattern is 18-24 months between major releases meaning the JDK7 launch would have been 2-5 months ago.  What happened?  Well, clearly there was a resource crunch on several angles.  For example getting the nearly complete OpenJDK source release in May 2007 took a lot of effort from lots of people.  But there was also certain announcements at JavaONE in May 2007 (a little thing named JavaFX) which also turned into a major rethink of Java (as some have said, this ain't yer Dad's Java) and also a major piece of work to accomplish.  In other words instead of producing JDK7 we did JDK6u10 and JavaFX.