Difference between OpenJDK and Adoptium/AdoptOpenJDK
In short:
- OpenJDK has multiple meanings and can refer to:
- free and open source implementation of the Java Platform, Standard Edition (Java SE)
- open source repository — the Java source code aka OpenJDK project
- prebuilt OpenJDK binaries maintained by Oracle
- prebuilt OpenJDK binaries maintained by the OpenJDK community
- AdoptOpenJDK — prebuilt OpenJDK binaries maintained by community (open source licensed)
Explanation:
Prebuilt OpenJDK (or distribution) — binaries, built from https://hg.openjdk.java.net/, provided as an archive or installer, offered for various platforms, with a possible support contract.
OpenJDK, the source repository (also called OpenJDK project) - is a Mercurial-based open source repository, hosted at
https://hg.openjdk.java.net. The Java source code. The vast majority of Java features (from the VM and the core libraries to the compiler) are based solely on this source repository. Oracle have an alternate fork of this.
OpenJDK, the distribution (see the list of providers below) - is free as in beer and kind of free as in speech, but, you do not get to call Oracle if you have problems with it. There is no support contract. Furthermore, Oracle will only release updates to any OpenJDK (the distribution) version if that release is the most recent Java release, including LTS (long-term support) releases. The day Oracle releases OpenJDK (the distribution) version 12.0, even if there's a security issue with OpenJDK (the distribution) version 11.0, Oracle will not release an update for 11.0. Maintained solely by Oracle.
Some OpenJDK projects - such as OpenJDK 8 and OpenJDK 11 - are maintained by the OpenJDK community and provide releases for some OpenJDK versions for some platforms. The community members have taken responsibility for releasing fixes for security vulnerabilities in these OpenJDK versions.
AdoptOpenJDK, the distribution is very similar to Oracle's OpenJDK distribution (in that it is free, and it is a build produced by compiling the sources from the OpenJDK source repository). AdoptOpenJDK as an entity will not be backporting patches, i.e. there won't be an AdoptOpenJDK 'fork/version' that is materially different from upstream (except for some build script patches for things like Win32 support). Meaning, if members of the community (Oracle or others, but not AdoptOpenJDK as an entity) backport security fixes to updates of OpenJDK LTS versions, then AdoptOpenJDK will provide builds for those. Maintained by OpenJDK community.
OracleJDK - is yet another distribution. Starting with JDK12 there will be no free version of OracleJDK. Oracle's JDK distribution offering is intended for commercial support. You pay for this, but then you get to rely on Oracle for support. Unlike Oracle's OpenJDK offering, OracleJDK comes with longer support for LTS versions. As a developer you can get a free license for personal/development use only of this particular JDK, but that's mostly a red herring, as 'just the binary' is basically the same as the OpenJDK binary. I guess it means you can download security-patched versions of LTS JDKs from Oracle's websites as long as you promise not to use them commercially.
Note. It may be best to call the OpenJDK builds by Oracle the "Oracle OpenJDK builds".
Donald Smith, Java product manager at Oracle writes:
Ideally, we would simply refer to all Oracle JDK builds as the "Oracle JDK",
either under the GPL or the commercial license, depending on your
situation. However, for historical reasons, while the small remaining
differences exist, we will refer to them separately as Oracle’s
OpenJDK builds and the Oracle JDK.
OpenJDK Providers and Comparison
Provider | Free Builds from Source | Free Binary Distributions | Extended Updates | Commercial Support | Permissive License | Website |
---|---|---|---|---|---|---|
AdoptOpenJDK | Yes | Yes | Yes | No | Yes | https://adoptopenjdk.net |
Amazon – Corretto | Yes | Yes | Yes | No | Yes | https://aws.amazon.com/corretto |
Azul Zulu | No | Yes | Yes | Yes | Yes | https://www.azul.com/downloads/zulu/ |
BellSoft Liberica | No | Yes | Yes | Yes | Yes | https://bell-sw.com/java.html |
IBM | No | No | Yes | Yes | Yes | https://www.ibm.com/developerworks/java/jdk |
jClarity | No | No | Yes | Yes | Yes | https://www.jclarity.com/adoptopenjdk-support/ |
OpenJDK | Yes | Yes | Yes | No | Yes | https://adoptopenjdk.net/upstream.html |
Oracle JDK | No | Yes | No** | Yes | No | https://www.oracle.com/technetwork/java/javase/downloads |
Oracle OpenJDK | Yes | Yes | No | No | Yes | https://jdk.java.net |
ojdkbuild | Yes | Yes | No | No | Yes | https://github.com/ojdkbuild/ojdkbuild |
RedHat | Yes | Yes | Yes | Yes | Yes | https://developers.redhat.com/products/openjdk/overview |
SapMachine | Yes | Yes | Yes | Yes | Yes | https://sap.github.io/SapMachine |
Is OpenJDK 11 or AdoptOpenJDK same stable like Oracle JDK
Update 2021-09
- For versions 8 through 16, Oracle required a fee if their own Oracle JDK product was used in production, but not for dev, test, and training usages.
- For Java 17, the Oracle JDK product is available under a new
No-Fee Terms and Conditions license, discussed on the Oracle
company blog.
On my first reading, it appears this new license makes production use free-of-cost (along with dev, test, and training usages), except for products sold for a fee while bundling the Oracle JDK product. But I am not an attorney, so read the terms yourself and consult legal advice as needed.
Keep in mind that many other vendors continue to provide implementations of the Java specs, as shown in the flowchart below. Some of these vendors sell support plans, either optionally or as a requirement for use of their product. Never assume, always read the detailed requirements for any distribution you obtain.
Another 2021 update: Add Microsoft to the list of vendors seen below.
tl;dr
Oracle and Adoptium (formerly AdoptOpenJDK) are but two of several vendors offering builds and installers.
All of the implementations of Java available today are based entirely or substantially on the source code provided by the OpenJDK project. All of them should show the same compatibility, stability, and functionality promised by the Java platform specifications.
You have a choice of several vendors offering one or more implementations of the Java platform. Some of those require payment of a fee in some situations, and some are free-of-charge. All are high-quality and frequently updated, per their support and end-of-life policies.
There is no one best vendor or product; choose according to your needs.
Details
OpenJDK is a project hosting an open-source implementation of the Java platform specifications. This project is run by Oracle, IBM, Apple, Red Hat, Azul Systems, SAP, and others. This project offers only source-code, not complete builds nor convenient installers.
Many vendors provide builds based on OpenJDK. Most are direct builds with little or no added value, though vendors have the right to include fixes or features as long as they abide by licensing terms.
Oracle is one such vendor. Oracle offers three products:
- Oracle JDK for their paying customers (and free-of-cost for others doing developing & testing, but not deployment)
- jdk.java.net, builds of OpenJDK, based directly and entirely on OpenJDK source code, no added value. Provided free-of-cost and unsupported.
- GraalVM, a very special Java implementation, with editions either free-of-cost or fee-based.
Oracle has declared their intention to keep Oracle JDK at feature-parity with OpenJDK. They even went so far as to donate some of their commercial products such as Mission Control and Flight Recorder to the OpenJDK project. So you should expect the same stability, speed, and features — except that Oracle reserves the right to more quickly ship patched versions of their supported product to their paying customers when warranted. Submitting to OpenJDK and getting a release there may take more time.
Oracle is not the only vendor producing builds of Java with and without paid support options. Some individual companies provide builds with and/or without paid support. And key members of the Java community have combined their efforts, founding the Adoptium project, formerly known as AdoptOpenJDK.net, and now housed at the Eclipse Foundation. This project hosts infrastructure for building and testing OpenJDK builds for a variety of hardware and OS platforms, some of which offer a choice between the HotSpot and OpenJ9 JVMs. See Difference between OpenJDK and AdoptOpenJDK.
Here is a flowchart I made that may assist you in choosing a vendor for a Java implementation.
There are no wrong choices here. As far as I know, all of these vendors do a solid job of building, publishing, and updating their releases. But here are a few considerations that might lead you to a particular vendor.
Technical difference between AdoptOpenJDK and Red Hat OpenJDK for Windows
Red Hat provides OpenJDK 8 Windows binaries under exactly the same license as AdoptOpenJDK and any other open-source OpenJDK 8 build - under the GNU GPL v. 2 with classpath exception. All the restrictions about the "development use" are related only to the subscription (support) that can be purchased from Red Hat.
Technical differences between Red Hat OpenJDK 8 for Windows and other mentioned builds are pretty minor, as all these builds pass TCK. Generally Red Hat builds are trying to stay as close as possible in behaviour to OpenJDK 8 package that is included in RHEL and CentOS.
Differences:
RH OpenJDK 8 build is done from the sources of OpenJDK RPM package that is used on RHEL/CentOS. These sources are generally very close to upstream sources, but contain some changes (see points below) and may include some bugfixes (RPM patches) ahead of time. RHEL/CentOS changes can be tracked in a publicly-available repo for CentOS RPM
RH OpenJDK 8 includes Shenandoah garbage collector
RH OpenJDK 8 uses sources from RHEL/CentOS for dependency libraries (zlib, giflib, libjpeg-turbo, libpng,
nss(nss is not used anymore)) instead of the (partial) sources of these libraries that are included in-tree in upstream jdk sourcesElliptic Crypto implementation in RH OpenJDK 8 includes only 3 most popular elliptic curves - NIST P-256, NIST P-384 and NIST P-521.
RH OpenJDK 8 uses the set of root CA certificates from RHEL/CentOS
RH OpenJDK 8 may use slightly newer timezone data - it is taken from RHEL/CentOS
RH OpenJDK 8 includes all Java sources code inside the src.zip file (that is used by IDEs to allow browsing jdk code), in upstream build substantial part of these sources is not included
RH OpenJDK 8 does not include demos and samples
RH OpenJDK 8 includes a set of font files
all native binaries in RH OpenJDK 8 are signed by RH certificate
RH OpenJDK 8 installer includes a JavaFX implementation
RH OpenJDK 8 installer includes a WebStart implementation
Source: I work on OpenJDK Windows builds at RH.
What is the difference between IBM Semeru and Adoptium
There's some discussion of the difference between the two from IBM over in https://github.com/docker-library/official-images/pull/10666#issuecomment-894204729:
Eclipse Temurin delivers OpenJDK + Hotspot images, and IBM Semeru Runtimes going forward will deliver both Open and Certified (JCKed) versions of OpenJDK + Eclipse OpenJ9 images.
It is a confusing story and transition, I will try to add a bit of background.
AdoptOpenJDK up until now was producing OpenJDK binaries with both Hotspot and OpenJ9 VM's. With Adopt's move to Eclipse, legal restrictions prevent the new Eclipse Adoptium group from producing/releasing OpenJ9 based binaries. As a result, IBM will be producing OpenJ9 based binaries in 2 flavours, Open and Certified, both under the family name IBM Semeru Runtimes. Essentially the same binaries, released under different licenses.
So I suppose what you'll want to be looking for is comparisons between Hotspot and OpenJ9 (and I imagine any speed differences between those would be somewhat workload dependent, but there are quite a few articles online that have done actual benchmarks, such as https://www.ojalgo.org/2019/02/quick-test-to-compare-hotspot-and-openj9/).
Isn't AdoptOpenJDK using (the JVM of) OpenJDK?
Update: AdoptOpenJDK has changed its name to Adoptium, as part of its move to the Eclipse Foundation.
OpenJDK provides complete source code for a full implementation of the Java Platform as defined in the Java Specifications, JSRs, and JEPs. An implementation of the Java platform includes many things, among them:
- A Java programming language compiler to create
.class
Java bytecode files from your.java
source code files. - A Java Virtual Machine (JVM) that can, at runtime, interpret and/or compile those Java bytecode files, turning them into executable code that can run on the host computer’s cores using the native instruction set of that CPU.
- A runtime environment that connects Java apps with the host machine’s resources such as file system and network facility.
- A required set of Java class libraries (java.util, java.time, etc.).
An implementation of Java has the option of providing a Just-In-Time (JIT) compiler/optimizer as part of the JVM. The OpenJDK project includes source code for the HotSpot JIT.
People providing builds or installers for the Java Platform are free to use HotSpot or to choose another JIT compiler technology. OpenJ9 in one such alternative JIT, developed at IBM, now open-sourced through the Eclipse Foundation, and provided free-of-charge. In the past, another alternative JIT was JRockit, owned by Oracle. Parts of JRockit have been merged into the current version of HotSpot.
The AdoptOpenJDK project offers you choice of either the HotSpot engine provided by Oracle via the OpenJDK project or the alternative OpenJ9 engine provided by the Eclipse Foundation.
With either choice you get the same class libraries from OpenJDK codebase, the same tools including Mission Control and Flight Recorder from OpenJDK, and the same utilities from OpenJDK. Only the JIT/JVM is different whether you choose HotSpot or OpenJ9.
AdoptOpenJDK is only one of several vendors providing distributions of Java techonology as binaries/installers. Most of these are based mostly, if not entirely, on the OpenJDK project’s source code releases. Here is a flowchart showing you the various vendors.
And here is a list of possible motivations to consider in selecting a vendor.
Related Topics
Java Conventions: Use Getters/Setters Within the Class
@Onetomany List<> VS Set<> Difference
Console Application with Java and Gradle
How to Mock New Date() in Java Using Mockito
How to Pass a JSON Array as a Parameter in Url
Using a Prepared Statement and Variable Bind Order by in Java with Jdbc Driver
How to Configure Httponly Cookies in Tomcat/Java Webapps
Detect Internet Connection Using Java
How to Add a Timeout Value When Using Java's Runtime.Exec()
What Is the Largest Possible Heap Size with a 64-Bit Jvm
Java: What's the Difference Between Autoboxing and Casting