Ever since Oracle, in 2018, split its JDK build licensing into two tiers—commercial, which can be used for free in development and testing but you have to pay to use it in production, and open-source, which is free in any environment—quite a few open-source builds based on the OpenJDK source code have appeared.
Now, well into 2021, we’re at the point where there are many alternatives to the original Oracle JDK build. Some of them (e.g., Microsoft, Red Hat, and Amazon Corretto), seem to have a self-serving purpose—namely, to help Java run better (or at all) on their own technology. Others (e.g., Zing and OpenJ9) are adding technology in some way. And others (e.g., Zulu and AdoptOpenJDK) appear to be trying to become a non-Oracle supplier of builds with their own (ostensibly cheaper) support contracts.
With all these choices, we felt like it was a good time to review the currently available OpenJDK builds. Here’s a run-down of the most commonly used ones and their primary offerings.
Microsoft just announced its own OpenJDK build. They are essentially providing Windows-specific optimizations that haven’t made it back to the OpenJDK source code yet.
It’s an open-source, no-cost long-term support (LTS) distribution of OpenJDK that is free for anyone to deploy anywhere. It’s TCK compliant for Java 11 and includes binaries for Java 11, based on OpenJDK 11.0.10+9, on x64 server and desktop environments on macOS, Linux, and Windows. They’re also publishing an early-access binary for Java 16 for Windows on ARM, based on the latest OpenJDK 16+36 release, and providing a port to Windows ARM ( JEP-388 ) for Surface Pro X.
Per Microsoft: “Over the past 18 months, we contributed more than 50 patches covering areas such as MacOS packaging, build and infrastructure, GC fixes, and enhancements for Windows. … We are now excited to continue building on this work by producing binaries based on OpenJDK 11 for x64 platforms covering the three major operating systems and to share this work with the Java community and our Microsoft Azure customers.” Regarding TCK compliance, Microsoft reports that “Our binaries for Java 11 have passed the Java Technology Compatibility Kit (TCK) for Java 11."
2. Azul Platform Prime
Azul Platform Prime, formerly Zing, is fully TCK compliant with the Java SE 11, 8, or 7 specifications. Per Azul, thanks to Zing, “…Java apps can scale to high levels of performance with unprecedented response time consistency and meet your most demanding service level requirements – without application changes or even recompilation.”
Azul also claims that Zing is the “only JVM that eliminates Java garbage collection pauses for large heap sizes” and solves issues with GC that have plagued developers since Java’s inception.
It’s optimized for Linux server deployments and designed for enterprise applications and workloads that require large memory, high transaction rates, low latency, and consistent response times.
3. Azul Platform Core
Azul Platform Core, formerly Zulu, presents itself as a cost-effective Java support alternative to Oracle and a way to “get Java without lock-in risk.” Key features include:
- Security updates backed by strict SLA
- Lower price than an Oracle Java SE subscription
- 100% open-source
- No proprietary licenses or “field of use” restrictions
- Quarterly and out-of-band security updates and bug fixes
- Verified TCK compliant with Java SE
4. Red Hat
Red Hat claims its OpenJDK build is “functionally very similar” to Oracle’s and “should require little to no changes”, although it’s likely to require some code changes.
It is baselined from OpenJDK and TCK compliant, and it may include bug fixes for RHEL/CentOS ahead of incorporation into OpenJDK. It has some cryptography differences, slightly newer timezone data (taken from RHEL/CentOS), and includes a JavaFX and Java Web Start implementation.
5. Eclipse OpenJ9
Eclipse OpenJ9 is an IBM contribution to the Eclipse Project. Per Eclipse, it is a “high performance, scalable, Java virtual machine (JVM) implementation that represents hundreds of person-years of effort.”
It was originally built to run on mobile devices with limited memory and it’s been optimized for fast startup, lower memory footprint, and quick ramp-up. However, the lower-memory footprint comes with a sacrifice in compute, so the TPS is usually markedly lower than OpenJDK.
Eclipse OpenJ9 is TCK compliant for Java SE.
6. AdoptOpenJDK (soon-to-be-called, “Eclipse Adoptium”)
AdoptOpenJDK, which will soon become “Eclipse Adoptium” as part of AdoptOpenJDK’s move to the Eclipse Foundation, provides prebuilt OpenJDK binaries for free.
AdoptOpen JDK’s mission is to:
- Enable R&D by OpenJDK developers, academics, and researchers.
- Provide an open, common, audited, build infrastructure for vendors to use (if they wish).
- Provide a place to try out build and test infrastructure ideas that could be co-opted/re-implemented in OpenJDK.
They offer community support, and recommend IBM for commercial support. AdoptOpenJDK is not TCK compliant at the moment.
7. Amazon Corretto
Last but not least, we have Amazon Corretto. a no-cost, multiplatform, production-ready distribution of the OpenJDK. Corretto’s modus operandi is largely to support Amazon Linux and optimizations for Amazon services. It comes with long-term commercial support that includes performance enhancements and security fixes.
Corretto is certified as compatible with the Java SE standard and Amazon runs it internally on thousands of production services. With Corretto, you can develop and run Java applications on popular operating systems, including Linux, Windows, and macOS.
Here is a list of patches to Corretto 8 not available in OpenJDK 8, and here’s a list of patches for other versions of Corretto. Corretto is TCK compliant with Java SE.
So there you have it. Of course, there’s nothing wrong with using various distributions of OpenJDK, depending on your needs.
Which JDK have you tried and which is right for you?