The Java SE landscape is strewn with acronyms that it has picked up over the last 25 years. Sometimes those acronyms even mean multiple things. This post attempts to explain them all in terms of two main groupings:
- Java Development Kits (JDKs)
What is 'OpenJDK'?
The phrase OpenJDK is used to describe at least three fundamental things in the Java ecosystem.
Firstly, there is a place called OpenJDK which lives at https://openjdk.java.net/ also known to some as The OpenJDK Project, which is a place to collaborate on an open-source implementation of the Java specifications from Oracle - https://www.oracle.com/java/technologies/java-se-glance.html, which are released every 6 months. Sun Microsystems open-sourced the majority of Java in 2006 under the GNU General Public License (GNU GPL) version 2 with a linking exception. OpenJDK serves as a continuation of that change. This is the use that I will refer to througout this blog. When I say OpenJDK I mean the https://openjdk.java.net/.
OpenJDK can also refer to Oracle's free official reference implementation of the Java specifications which live at https://jdk.java.net. These are version specific binaries built from the source code which is available on GitHub at https://github.com/openjdk of OpenJDK. Many other vendors use the term OpenJDK for their specific JDK binary, which is produced by building a binary off the OpenJDK code on GitHub. For example AdoptOpenJDK, which is available at https://adoptopenjdk.net/. Oracle provides fixes to this JDK for 6 months (until the next release of Java).
Lastly, OpenJDK can also refer to just the source code repository on GitHub that we spoke about earlier, available at https://github.com/openjdk. This is the reference implementation of the Java specifications that we mentioned above.
Who Contributes to the OpenJDK Project?
There are various channels to contribute to OpenJDK. This blog from Oracle has a graphic which breaks down committers for Java 15 - those that committed code to OpenJDK. To contribute to OpenJDK, you need to use a JDK Enhancement Proposal (JEP) to start with.
Correction with thanks to Marc Maathuis: You don't always need a JEP to contribute to the OracleJDK. Bug fixes, for example may not. Contributors need to have signed the Oracle Contributor Agreement.
What are JEPs?
JDK Enhancement Proposal (JEP) is a proposed change to OpenJDK. You can think of them as the roadmap for Java. Like all good roadmaps, there's no commitment to inclusion or timescales. Some JEPs require changes to the Java specifications. In this instance, a corresponding Java Specification Request (JSR) is required.
What is a JSR?
A Java Specification Request (JSR) may detail potential specification changes (where present) that arise from one or more JEPs. Not all JEPs will have JSRs; if the JEP doesn't have changes to the specifications, you don't need a JSR. A JSR may also be a suggested new specification for Java SE that does not require a JEP, such as a new specification for an API for computer vision. JSRs are considered for inclusion in the Java specifications by the Java Community Process (JCP).
What is the JCP?
What are JDKs?
Java Development Kits (JDKs) are implementations of the Java SE platform specification by different vendors and groups of people, such as the open source community. Some of them are built from the OpenJDK code on GitHub. JDKs include the Java Runtime Environment (JRE), as well as other tools that help you develop Java.
What is the Java Runtime Environment (JRE)
The Java Runtime Environment (JRE) is a component of the JDK that is required to run Java. It used to be a separate download from the JDK, but, since Java 11, it's now part of the JDK itself rather than a separate entity meaning you can no longer download it separately.
Are all JDKs the same?
Vendors may introduce little implementation differences such as garbage collection, branding, and utilities, but they are all implementations of the Java platform specifications. For the purpose of this blog I've assumed the Java SE platform.
When can you call something a JDK?
To be called a JDK officially, the binaries need to have passed a Java Compatibility Kit (JCK) for that release, which is a collection of tests provided by the Technology Compatibility Kits (TCK), for testing each JSR to ensure that the implementation of the specification behaves as expected. Oracle’s OpenJDK we spoke about earlier has passed the TCK, for example.
What's the Technology Compatibility Kit (TCK)?
The Technology Compatibility Kit (TCK) is a set of tests that is applicable for a JSR. There has been controversy on the license for the TCK given it's an open source project. There is now a specific license to allow the TCK to be run against the OpenJDK under the GPL license.
Who Makes JDKs?
There are lots of JDKs out there. They all vary in terms of license, support, branding, and implementation differences. The list includes, but is not limited to AdoptOpenJDK, OracleJDK, Oracle OpenJDK, RedHat, Alibaba, Azul, Bell Soft, Amazon, and IBM.
It is also possible to build your own JDK, but that's a whole other blog! Talking of blogs, this one from the Java Champions is excellent and helps fill in some of the gaps as well.
'OpenJDK' is either:
Java Development Kits:
- A binary which is an implementation of the Java platform specification that has passed the TCK
- Some JDKs are free to use, some have a cost associated with them for various things such as commercial use, fixes and support
Contributions to Java and updates:
- Anyone can contribute to OpenJDK
- The JCP is used to manage updates to the Java specifications. Anyone can join the JCP.
- JEPs) are the process for including changes to the OpenJDK (the source reference implementation of Java).
- JSRs are the standards for Java SE, which may, or may not be implemented in the JDK itself.