In this tutorial, we'll explore the differences between Oracle Java Development Kit and OpenJDK. First, we'll take a closer look at each of them, and then we'll compare them. Finally, we'll list other JDK implementations.
2. Oracle JDK and Java SE History
JDK (Java Development Kit) is a software development environment used in Java platform programming. It contains a complete Java Runtime Environment, a so-called private runtime. It's thus named because it contains more tools than the standalone JRE, as well as the other components needed for developing Java applications.
Oracle strongly recommends using the term JDK to refer to the Java SE (Standard Edition) Development Kit (there are also Enterprise Edition and Micro Edition platforms).
Let's take a look at the Java SE history:
- JDK Beta – 1995
- JDK 1.0 – January 1996
- JDK 1.1 – February 1997
- J2SE 1.2 – December 1998
- J2SE 1.3 – May 2000
- J2SE 1.4 – February 2002
- J2SE 5.0 – September 2004
- Java SE 6 – December 2006
- Java SE 7 – July 2011
- Java SE 8 (LTS) – March 2014
- Java SE 9 – September 2017
- Java SE 10 (18.3) – March 2018
- Java SE 11 (18.9 LTS) – September 2018
- Java SE 12 (19.3) – March 2019
Note: the versions in italics are no longer supported.
We can see that the major releases of Java SE came approximately every two years until Java SE 7. It took five years to move from Java SE 6, and another three after that to reach Java SE 8.
Since Java SE 10, we've come to expect new releases every six months. However, not all releases will be the Long-Term-Support (LTS) releases. As a result of Oracle's release plan, the LTS product releases will only happen every three years.
Java SE 11 is the latest LTS version, and Java SE 8 will receive free public updates until December 2020 for non-commercial usage.
This development kit got its current name after Oracle bought Sun Microsystems in 2010. Before that, the name was SUN JDK, and it was the official implementation of the Java programming language.
OpenJDK is a free and open-source implementation of the Java SE Platform Edition. It was initially released in 2007 as the result of the development that Sun Microsystems started in 2006.
We should emphasize that OpenJDK is an official reference implementation of a Java Standard Edition since version SE 7.
Initially, it was based only on the JDK 7, but since Java 10, the open-source reference implementation of the Java SE platform is the responsibility of the JDK Project. And, just like for Oracle, the JDK Project will also deliver new feature releases every six months.
We should note that before this long-running project, there were JDK Release Projects that released one feature and were then discontinued.
Now let's check out the OpenJDK versions:
- OpenJDK 6 project – based on JDK 7, but modified to provide an open-source version of Java 6
- OpenJDK 7 project – 28 July 2011
- OpenJDK 7u project – this project develops updates to Java Development Kit 7
- OpenJDK 8 project – 18 March 2014
- OpenJDK 8u project – this project develops updates to Java Development Kit 8
- OpenJDK 9 project – 21 September 2017
- JDK project release 10 – 20 March 2018
- JDK project release 11 – 25 September 2018
- JDK project release 12 – Stabilization phase
4. Oracle JDK vs. OpenJDK
In this section, we'll focus on the key differences between Oracle JDK and OpenJDK.
4.1. Release Schedule
As we mentioned, Oracle will deliver releases every three years, while OpenJDK will be released every six months.
Oracle provides long term support for its releases. On the other hand, OpenJDK only supports the changes to a release until the next version is released.
Oracle JDK was licensed under the Oracle Binary Code License Agreement, whereas OpenJDK has the GNU General Public License (GNU GPL) version 2 with a linking exception.
There are some licensing implications when using Oracle's platform. Public updates for Oracle Java SE 8 released after January 2019 won't be available for business, commercial, or production use without a commercial license, as Oracle announced. However, OpenJDK is completely open source and can be used freely.
There's no real technical difference between the two, since the build process for Oracle JDK is based on that of OpenJDK.
When it comes to performance, Oracle's is much better regarding responsiveness and JVM performance. It puts more focus on stability because of the importance it gives to its enterprise customers.
OpenJDK, in contrast, delivers releases more often. As a result, we can encounter problems with instability. Based on community feedback, we know some OpenJDK users have encountered performance issues.
If we compare features and options, we'll see that the Oracle product has Flight Recorder, Java Mission Control, and Application Class-Data Sharing features, while OpenJDK has the Font Renderer feature.
Also, Oracle has more Garbage Collection options and better renderers.
4.5. Development and Popularity
Oracle JDK is fully developed by the Oracle Corporation, whereas OpenJDK is developed by Oracle, OpenJDK, and the Java Community. However, top-notch companies like Red Hat, Azul Systems, IBM, Apple Inc., and SAP AG also take an active part in its development.
As we can see from the link in the previous subsection, when it comes to popularity with the top companies that use Java Development Kits in their tools, such as Android Studio or IntelliJ IDEA, Oracle JDK used to be the more preferred, but both of those companies have switched to the OpenJDK based JetBrains builds.
Furthermore, major Linux distributions (Fedora, Ubuntu, Red Hat Enterprise Linux) provide OpenJDK as the default Java SE implementation.
5. Changes Since Java 11
As we can see in Oracle's blog post, there are some important changes starting with Java 11.
First of all, Oracle will change its historical “BCL” license to a combination of an open source GNU General Public License v2 with the Classpath Exception (GPLv2+CPE) and a commercial license when using the Oracle JDK as part of an Oracle product or service, or when open source software isn't welcome.
Each license will have different builds, but they'll be functionally identical, with only some cosmetic and packaging differences.
Also, traditionally “commercial features,” such as Flight Recorder, Java Mission Control, and Application Class-Data Sharing, as well as the Z Garbage Collector, are now available in OpenJDK. Therefore, Oracle JDK and OpenJDK builds are essentially identical from Java 11 onward.
Let's check out the main differences:
- Oracle's kit for Java 11 emits a warning when using the -XX:+UnlockCommercialFeatures option, whereas in OpenJDK builds, this option results in an error
- Oracle JDK offers a configuration to provide usage log data to the “Advanced Management Console” tool
- Oracle has always required third party cryptographic providers to be signed by a known certificate, while cryptography framework in OpenJDK has an open cryptographic interface, which means there's no restriction as to which providers can be used
- Oracle JDK 11 will continue to include installers, branding, and JRE packaging, whereas OpenJDK builds are currently available as zip and tar.gz files
- The javac –release command behaves differently for the Java 9 and Java 10 targets due to the presence of some additional modules in Oracle's release
- The output of the java –version and java -fullversion commands will distinguish Oracle's builds from OpenJDK builds
6. Other JDK Implementations
Now let's take a quick look at other active Java Development Kit implementations.
6.1. Free and Open Source
The following implementations, listed in alphabetical order, are open source and free to use:
- Amazon Corretto
- Azul Zulu
- Codename One
- Eclipse OpenJ9
- GraalVM CE
- Jelatine JVM
- Jikes RVM (Jikes Research Virtual Machine)
- Liberica JDK
- Multi-OS Engine
6.2. Proprietary Implementations
There are also copyrighted implementations:
- Azul Zing JVM
- Excelsior JET
- GraalVM EE
- Imsys AB
- JamaicaVM (aicas)
- JBlend (Aplix)
- MicroJvm (IS2T – Industrial Smart Software Technology)
- PTC Perc
- SAP JVM
- Waratek CloudVM for Java
In this article, we focused on the two most popular Java Development Kits today.
First, we described each of them, and then we emphasized the differences between them. We also paid special attention to the changes and differences since Java 11. Finally, we listed other active implementations that are available today.