Understanding the various JDKs

My tweet yesterday about the fact that JRockit is now free, and the updated license to support that, raised a few questions from some of my Eclipse colleagues. Coincidentally, their questions were exactly the same ones I’ve had, so I thought I would try to put some of the concepts I’ve learned in writing.  Here’s my notes, with the caveat that others may explain it from a different direction or starting point.

First, there’s OpenJDK.  It’s an open source JDK.  Oracle is working on it’s governance board, development process and boosting ease of participation. Although it has a ways to go in that regard, it’s been quite well participated, adopted and used for some time.

Then there’s the Oracle JDK (aka Sun JDK). Think of it as OpenJDK minus SomeStuffNotNeededByOracleJDK plus SomeAdditionalStuffNeededByOracleJDK.  The “Oracle JDK” is what I’d point most Java Application Developers to who just wanted to do Java developement, and it has the same JVM bits your mom might end up with on her desktop through java.com.

As an aside, what is the “SomeStuffNotNeededByOracleJDK” and “SomeAdditionalStuffNeededByOracleJDK”? It’s really not important for 99.9% of the world, but if curiosity has the best of you (like me), it’s things that help build extra platforms outside of Oracle’s scope on the ‘NotNeededByOracleJDK’ side, and binaries that are licensed and not able to be made open source (some ui / font stuff for example) on the ‘AdditionalStuffNeededByOracleJDK’ side.

So, what is IcedTea?  Well, Oracle provides Oracle JDK for the set of platforms it does business on, and its up to others to make JDKs for any additional platforms. IcedTea provides webstart, plugin implementations, a build harness (and more) for OpenJDK to help the various Linux ditros do their own JDK builds.  A typical Java Application Developer probably isn’t going to use IcedTea, instead, they’d consume the JDK provided by their Linux distro provider – thanks to IcedTea.  More info can be found here, and here.

So, what is HotSpot? It’s the Java byte code execution engine – it’s in OpenJDK (and ergo the downstream linux jdks) and of course Oracle JDK. When it was new, HotSpot was branded and marketed because of how much of an improvement it was, but now it’s ubiquitous and often people refer to it as a synonym for modern Java, or specifically the JVM.

Years ago, BEA [edit: bought a company with] built it’s own Compiler/JVM to compete with HotSpot, called JRockit. And as announced, Oracle is working to merge those technologies, much of which will find it’s way down to OpenJDK for the benefit of all the downstream JDK builders and users.

In summary:
– OpenJDK is the core code base, which includes the HotSpot JVM
– Oracle JDK is OpenJDK (+/- stuff) – if you’re on a supported platform, it’s the defacto choice for most people
– IcedTea is a harness that Linux distros use to make JDKs for their platforms/harness/patch set/ – http://icedtea.classpath.org/wiki/IcedTea_JDK6_Patches for the list of IcedTea 6 patches, for example.
– HotSpot and JRockit are modern optimized JVM brands, and the tech is being merged and bits will find their way to OpenJDK


About DonaldOJDK

This blog is for both personal and professional topics. Nothing here should be considered official for any past, present or future employer (or my wife and kids)!
This entry was posted in Open Source, OpenJDK. Bookmark the permalink.

3 Responses to Understanding the various JDKs

  1. Raffe Paffe says:

    JRockit was originally developed by a Swedish company called Appeal Virtual Machines and acquired by BEA in 2002

  2. DonaldOJDK says:

    Thanks for the correction!

  3. leo says:

    why don’t make _one_ development kit that rules them all? as a java n00b, to many jdk out there baffled me, and end up installing them all just in case..

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s