Course – LS – All

Get started with Spring and Spring Boot, through the Learn Spring course:

>> CHECK OUT THE COURSE

1. Introduction

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
  • Java SE 13 – September 2019
  • Java SE 14 – March 2020
  • Java SE 15 – September 2020
  • Java SE 16 – March 2021
  • Java SE 17 (LTS) – September 2021
  • Java SE 18 – March 2022
  • Java SE 19 – September 2022
  • Java SE 20 – March 2023
  • Java SE 21 (LTS) – September 2023

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 17 is the latest LTS version, and Java SE 8 received 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.

3. OpenJDK

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.

4.2. Licenses

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.

4.3. Performance

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.

4.4. Features

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:

  • AdoptOpenJDK
  • Amazon Corretto
  • Azul Zulu
  • Bck2Brwsr
  • CACAO
  • Codename One
  • DoppioJVM
  • Eclipse OpenJ9
  • GraalVM CE
  • HaikuVM
  • HotSpot
  • Jamiga
  • JamVM
  • Jelatine JVM
  • Jikes RVM (Jikes Research Virtual Machine)
  • JVM.go
  • Liberica JDK
  • leJOS
  • Maxine
  • Multi-OS Engine
  • RopeVM
  • uJVM

6.2. Proprietary Implementations

There are also copyrighted implementations:

  • Azul Zing JVM
  • CEE-J
  • Excelsior JET
  • GraalVM EE
  • Imsys AB
  • JamaicaVM (aicas)
  • JBlend (Aplix)
  • MicroJvm (IS2T – Industrial Smart Software Technology)
  • OJVM
  • PTC Perc
  • SAP JVM
  • Waratek CloudVM for Java

Along with the active implementations listed above, we can see a list of inactive implementations and a short description of every implementation.

6.3. Differences Between Amazon Corretto JDK and OpenJDK

One popular implementation of the Java Development Kit is Amazon Corretto. Although it is based on OpenJDK, there are a few differences between them.

Amazon Corretto is a free, multi-platform, production-ready distribution of the OpenJDK. It is developed, maintained, and supported by Amazon Web Services (AWS) and is designed specifically for running Java applications on AWS and other cloud platforms. Amazon Corretto provides long-term support (LTS) and security updates at no cost.

Another key difference between OpenJDK and Amazon Corretto JDK is that Amazon Corretto includes additional features and optimizations that are specifically designed to improve performance, security, and reliability in production environments.

To summarize, OpenJDK and Amazon Corretto JDK are both implementations of the JDK, but they are designed for different purposes. OpenJDK is an open-source development tool, while Amazon Corretto JDK is a production-ready distribution of OpenJDK designed for use in cloud environments with free long-term support.

7. Difference Between OpenJDK and AdoptOpenJDK

In September 2020 AdoptOpenJDK underwent a rebranding and transitioned to Adoptium. This change in branding is significant, and it reflects a broader mission beyond just providing OpenJDK binaries.

OpenJDK and AdoptOpenJDK/Adoptium, although interconnected, are distinct projects, each offering free and open-source implementations of the Java Platform, Standard Edition (Java SE). To elucidate the contrasts between OpenJDK and AdoptOpenJDK/Adoptium, let’s delve into the key differences:

7.1. Project Origin and Governance

OpenJDK serves as the official reference implementation of the Java Platform and is overseen by Oracle. Functioning as an open-source project with contributions from diverse individuals and organizations, it plays a central role as the primary development kit. On the other hand, AdoptOpenJDK/Adoptium stands out as an independent community-driven initiative. Tailored to provide convenient access to well-crafted, pre-built OpenJDK binaries for various platforms, it operates autonomously from the official Oracle-led ecosystem.

7.2. Build and Distribution

OpenJDK provides source code that developers can use to build their binaries. Consequently, users are responsible for compiling the code and generating the Java runtime tailored to their specific platform. In contrast, AdoptOpenJDK/Adoptium seeks to streamline this process by providing pre-built binaries for various operating systems. This allows users to conveniently download and use these binaries directly, eliminating the necessity for manual compilation.

7.3. Binary Distribution Models

OpenJDK employs a model where the source code is made available, often distributed through package managers or directly from the official OpenJDK website. Users are required to compile the source code independently to acquire a functional Java runtime. On the contrary, AdoptOpenJDK/Adoptium simplifies this process by presenting users with pre-built binaries. These binaries can be easily downloaded and installed, offering a user-friendly alternative to the compilation of source code. AdoptOpenJDK/Adoptium further enhances user convenience by providing installation options compatible with various package managers such as apt, yum, and others.

7.4. Community Involvement

Within the OpenJDK community, a diverse range of contributors, including individuals and companies, actively participate. The project is governed by the OpenJDK Community, with Oracle assuming a significant role in its ongoing development. Conversely, AdoptOpenJDK/Adoptium is a community-driven initiative that actively encourages contributions from individuals and organizations. Operating independently of Oracle, AdoptOpenJDK/Adoptium is dedicated to fostering a collaborative environment to ensure the provision of freely accessible, high-quality OpenJDK binaries.

7.5. Licensing

Both OpenJDK and AdoptOpenJDK/Adoptium share a common foundation, relying on the same source code and typically adhering to an identical licensing model. Specifically, they are released under the GNU General Public License, version 2, complemented by the Classpath Exception (GPLv2+CPE). This licensing structure underscores the commitment of both projects to open-source principles and accessibility.

8. Conclusion

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.

Course – LS – All

Get started with Spring and Spring Boot, through the Learn Spring course:

>> CHECK OUT THE COURSE
res – REST with Spring (eBook) (everywhere)
11 Comments
Oldest
Newest
Inline Feedbacks
View all comments
Comments are closed on this article!