Which OpenJDK Distribution Should You Use? Temurin, Corretto, Zulu, and More
Downloading Java used to be a single link to Oracle’s site. Today a search turns up OracleJDK, OpenJDK, Eclipse Temurin, Amazon Corretto, Azul Zulu, and more — all labelled “JDK”, all free, all slightly different. And Oracle’s licensing has changed several times in recent years, often in ways that catch even in-house legal teams off guard. This article walks through Oracle’s licensing history from Java 8 to Java 25 and then covers the mainstream OpenJDK distributions so you can pick one that fits your situation.
Background
What this article covers:
- How JDK, JRE, and JVM relate, and why the distinction matters
- OracleJDK vs. OpenJDK
- Oracle’s licensing history, including the 2023 switch to per-employee pricing
- What LTS, GA, and EA mean, and which LTS releases are current
- Nine mainstream OpenJDK distributions and when each one is a good fit — Eclipse Temurin, Amazon Corretto, Azul Zulu, Microsoft Build of OpenJDK, IBM Semeru Runtime, Oracle GraalVM, BellSoft Liberica, Red Hat build of OpenJDK
Why you need a JDK
JDK stands for Java Development Kit — the software bundle needed to develop, compile, and run Java code. It includes the JRE (Java Runtime Environment) and the JVM (Java Virtual Machine). Over twenty-plus years the JVM has accumulated serious engineering, which is why many other languages now run on it: Kotlin, Groovy, Scala, JRuby (Ruby on the JVM), Jython (Python on the JVM), and more.
OracleJDK vs. OpenJDK
OracleJDK is the JDK distributed from Oracle’s website. Commercial use requires paid licensing. OpenJDK is an open-source version Oracle also publishes, licensed under GPLv2 with Classpath Exception — because it’s GPL, it’s fine to use commercially for free.
Oracle’s lawsuit against Google and its periodic “Java is going paid” announcements have scared a lot of people. Setting the Google lawsuit aside, Java has always had free and paid parts — early on the boundary was just unclear. Some features inside the official JDK were free, others were paid, and the split was murky enough that probably even Oracle’s own sales reps couldn’t always tell. On top of that, if OracleJDK itself was free, the official OpenJDK’s existence became awkward. The eventual cleanup: OracleJDK is paid, OpenJDK is free. A rough analogy is Red Hat Enterprise Linux being paid while AlmaLinux and Rocky Linux are free (RIP CentOS).
Roughly from Java 11 through Java 16, OracleJDK was fully off-limits for commercial use without a license. Starting with Java 17, Oracle introduced the No-Fee Terms and Conditions (NFTC) license, and OracleJDK 17, 21, and 25 (the LTS releases) became free for production use again — but only from the LTS’s release until one year after the next LTS ships, after which you need a paid subscription. This churn is why a lot of organizations have simply switched to third-party OpenJDK distributions: the license terms don’t shift under your feet.
OpenJDK (builds by Oracle) is Oracle’s own open-source build, but its security-update window per release is relatively short — Oracle focuses on moving the newest version forward. Fortunately there are plenty of OpenJDK builds from other vendors with longer support commitments, which is what the rest of this article covers.
Oracle’s licensing history
Oracle’s Java licensing has changed several times. A rough timeline:
- Before Java 8 (2014): OracleJDK was free for production use. OpenJDK was a backup; most people just downloaded OracleJDK.
- Java 11 (2018): OracleJDK switched to the OTN License, requiring a paid subscription for commercial production use. Oracle also stopped maintaining official OpenJDK 8 binaries, which is what propelled AdoptOpenJDK and other community builds into the mainstream.
- Java 17 (September 2021): Oracle introduced the NFTC license. OracleJDK 17 became free for production again, with a time limit — free updates continue for one year after the next LTS ships, after which continued updates require a paid subscription.
- January 2023: Oracle changed the Java SE subscription to bill by total company employee count, not by the number of people actually using Java, and the count includes contractors and outsourced staff. For mid-to-large companies this multiplied costs several times over. This single change was the biggest Java-ecosystem story of recent years, and it pushed a lot of enterprises to migrate off OracleJDK entirely.
- Java 21 (September 2023), Java 25 (September 2025): NFTC continues. But because of the 2023 employee-based pricing, third-party distributions gained significant market share — Eclipse Temurin, Amazon Corretto, and Microsoft Build of OpenJDK all saw visible growth.
The practical takeaway today: avoid OracleJDK if you can. License terms that can change at any time become a company-wide cost liability. A third-party OpenJDK distribution is more stable. All of the distributions below share the same OpenJDK source at their core — feature parity is essentially identical. The differences are in which versions are supported, which platforms, how long maintenance lasts, and any extra tooling the vendor adds.
Why there are so many JDKs
The Java language has shared specifications and standards. JEP 286: Local-Variable Type Inference, for example, proposed the var keyword for local variable declarations with compiler inference, which landed in Java 10. The OpenJDK organization accepts proposals for new Java features, revises them through discussion, and votes on whether they become standard — sometimes only defining an interface without prescribing an implementation. That’s why different companies and organizations can all build their own OpenJDK implementations that still conform to the spec. It’s similar to how Unix has many Unix-like operating systems and the Linux kernel has many Linux distributions — the overwhelming choice is partly just the consequence of an open spec.
For a concrete example of what comes out of this process, see Evolution of Java’s switch: From Java 7 to Java 26, which walks through how switch evolved from supporting String in Java 7, to switch expressions and yield in Java 14, pattern matching for switch in Java 21, and primitive types in patterns in Java 26 preview — each step going through the JEP proposal, discussion, and vote cycle.
More background: Java Community Process on Wikipedia.
Java and JDK versioning
- EA — Early Access. Unstable previews, e.g. 26EA means Java 26 is not yet a general release.
- GA — General Availability. Production-ready. Usually not labeled explicitly, e.g. Java 25.
- LTS — Long-Term Support. Keeps getting security updates even after newer versions ship. The current LTS releases are 8, 11, 17, 21, and 25. Absent a specific reason, use the latest LTS (Java 25 as of 2026).
The distributions
Eclipse Temurin
- Homepage: https://adoptium.net/
- Project page: https://projects.eclipse.org/projects/adoptium
- Downloads: https://adoptium.net/temurin/releases/
- Docker: https://hub.docker.com/_/eclipse-temurin/
- Platforms: Linux (x64, arm64), macOS (x64, arm64), Solaris, Windows (x86, x64)
- Versions: LTS 8, 11, 17, 21, 25, plus the latest feature releases
- Recommended
A top-level project under the Eclipse Foundation, with major companies including IBM, Red Hat, and Microsoft contributing. Temurin supports the widest range of OS and CPU architecture combinations in the list above; the downloads page has more than I’ve listed. Spring’s official docs and many official Docker images default to Temurin — it’s one of the mainstream choices in the OpenJDK world today.
Amazon Corretto
- Homepage: https://aws.amazon.com/corretto/
- Downloads: https://docs.aws.amazon.com/corretto/latest/corretto-17-ug/downloads-list.html
- Docker: https://hub.docker.com/_/amazoncorretto
- Platforms: Linux (x64, arm64), macOS (x64, arm64), Windows (x64)
- Versions: LTS 8, 11, 17, 21, 25, plus the latest feature releases
- Recommended
Amazon’s OpenJDK distribution. Their page describes it as “a no-cost, multiplatform, production-ready distribution of the Open Java Development Kit (OpenJDK).” Corretto ships for the common OS and Docker targets, and it’s what AWS itself uses across its cloud services.
Azul Zulu
- Homepage: https://www.azul.com/
- Downloads: https://www.azul.com/downloads/?package=jdk
- Docker: https://hub.docker.com/r/azul/zulu-openjdk
- Platforms: Linux (x86, x64, arm, arm64), macOS (x64, arm64), Windows (x86, x64, arm64)
- Versions: LTS 6, 7, 8, 11, 17, 21, 25, plus the latest feature releases
- Recommended
Azul’s free OpenJDK distribution, with the widest version range — all the way down to Java 6 (formerly 1.6). It also covers the common OS + CPU combinations. If you’re stuck maintaining a legacy Java 6 or 7 system, Zulu is one of the few distributions that still ships these builds. Azul, like Oracle, offers both a free and a paid tier: Zulu is the free one with no commercial restrictions; Core and Prime are paid, though free for evaluation and development (a model similar to current Oracle).
AdoptOpenJDK
- URL: https://adoptopenjdk.net/
- Not recommended — migrate to Eclipse Temurin
The AdoptOpenJDK project has been discontinued; the highest version released is 16. The team moved the project under the Eclipse Foundation as Adoptium, and what’s now called Eclipse Temurin is its successor. If you still have AdoptOpenJDK in production, switch to Eclipse Temurin (or any of the other distributions covered here). Thanks to Java’s strong backward compatibility, migrating between JDK vendors rarely causes issues, and Amazon, Azul, Eclipse, and others still maintain older LTS lines (8 and 11).
Microsoft Build of OpenJDK
- Homepage: https://learn.microsoft.com/en-us/java/openjdk/
- Downloads: https://learn.microsoft.com/en-us/java/openjdk/download
- Docker: https://mcr.microsoft.com/en-us/product/openjdk/jdk/about
- Platforms: Linux (x64, arm64), macOS (x64, arm64), Windows (x64)
- Versions: 11, 17, 21, 25
- Recommended
Microsoft’s OpenJDK distribution, released in 2021. It primarily serves Azure and Microsoft’s internal Java workloads (Minecraft Java Edition runs on this). Microsoft hired a number of former OpenJDK core contributors, so maintenance quality is solid. If your workloads are on Azure or your organization already lives in the Microsoft ecosystem, this is a natural fit.
IBM Semeru Runtime
- Homepage: https://developer.ibm.com/languages/java/semeru-runtimes/
- Downloads: https://developer.ibm.com/languages/java/semeru-runtimes/downloads/
- Docker: https://hub.docker.com/_/ibm-semeru-runtimes
- Platforms: Linux (x64, arm64, ppc64le, s390x), macOS (x64, arm64), Windows (x64)
- Versions: LTS 8, 11, 17, 21
- Recommended for specific scenarios
The main difference between Semeru and the other distributions is its JVM: OpenJ9, not the usual HotSpot. OpenJ9 has a lower memory footprint and faster startup, which makes it well suited to containers, microservices, and serverless — anywhere memory cost and cold-start time matter. For long-running workloads where throughput matters most, HotSpot is typically still ahead, so benchmark your actual application before choosing. If you run on IBM mainframes (z Series or Power Series), Semeru is also one of the few distributions that supports those architectures.
Oracle GraalVM
- Homepage: https://www.graalvm.org/
- Downloads: https://www.graalvm.org/downloads/
- Platforms: Linux (x64, arm64), macOS (x64, arm64), Windows (x64)
- Versions: LTS 17, 21, 25
- Recommended for specific scenarios
GraalVM is also from Oracle but is a separate product line from OracleJDK. Its defining feature is Native Image: compile a Java application into a single native executable, dropping startup time from seconds to tens of milliseconds and significantly reducing memory usage. Well-suited to serverless and CLI tools. Spring Boot 3, Quarkus, and Micronaut all have solid Native Image support. Starting with GraalVM 21, Oracle introduced the GFTC license, which makes the distribution free for production use — much simpler than the previous Community Edition + Enterprise Edition dual track. Be aware that Native Image requires every use of reflection and dynamic class loading to be known at build time, which departs from traditional Java development habits; verify compatibility before committing your project.
BellSoft Liberica
- Homepage: https://bell-sw.com/libericajdk/
- Downloads: https://bell-sw.com/pages/downloads/
- Docker: https://hub.docker.com/r/bellsoft/liberica-openjdk-debian
- Platforms: Linux (x86, x64, arm, arm64, ppc64le, riscv64), macOS (x64, arm64), Windows (x86, x64, arm64), Solaris
- Versions: LTS 8, 11, 17, 21, 25, plus the latest feature releases
- Recommended
One of Spring’s officially recommended JDKs, and one of the few distributions shipping a “Liberica Full” variant with JavaFX bundled in (other distributions require a separate install). The CPU architecture coverage is unusually wide — including less common ones like RISC-V — which is useful for embedded devices and edge-computing scenarios. BellSoft also has its own Native Image offering called Liberica NIK, which extends GraalVM.
Red Hat build of OpenJDK
- Homepage: https://developers.redhat.com/products/openjdk/overview
- Platforms: Linux (x64, arm64, ppc64le, s390x), Windows (x64)
- Versions: LTS 8, 11, 17, 21
- Recommended for RHEL users
Red Hat’s OpenJDK distribution, primarily serving Red Hat Enterprise Linux (RHEL) customers — a RHEL subscription includes corresponding Java support. If your environment is already on RHEL, this is the most natural choice and bundles the licensing cleanly. Red Hat is also a long-term maintainer of OpenJDK 8 and 11, contributing a meaningful share of security updates back to the upstream OpenJDK community.
Others
Other OpenJDK distributions exist but aren’t covered in depth here — Alibaba Dragonwell, Tencent Kona, SapMachine (from SAP), and so on. For a more exhaustive comparison, see Which Version of JDK Should I Use?, which keeps an up-to-date matrix.
References
- How much does Java cost? (Medium)
- Which Version of JDK Should I Use?
- Java Community Process (Wikipedia)