Key Takeaways
- OpenJDK 11 free security patches ended in late 2024 – if you haven’t arranged extended support, every CVE since then is sitting unpatched in your runtime.
- Your actual EOL date depends on which vendor build you run, not a single community-wide date.
- Upgrading to Java 17 or 21 is the right long-term move, but library lock-in and certified application stacks make it harder than it looks.
- Extended lifecycle support from vendors or third parties like TuxCare lets you keep OpenJDK 11 patched while you plan a migration on your own timeline.
If you’re running OpenJDK 11 in production today, you’re already past the cliff. Free community patches stopped landing in late 2024, and every CVE published since then has gone unfixed in your runtime unless someone is paying for it.
The OpenJDK 11 end of life isn’t something you’re planning around anymore – it happened, and your security posture has been quietly drifting because of it. This guide walks through the actual dates, what changes when community support ends, and the realistic options available when “just upgrade to Java 17” isn’t a sentence you can actually finish this quarter.
OpenJDK Life Cycle Overview
OpenJDK doesn’t have a single, unified support lifecycle – and that’s the first thing that trips teams up.
The upstream OpenJDK project itself only commits to six months of updates per release. Every other timeline you’ve ever seen comes from a downstream vendor: Red Hat, Oracle, Amazon, Azul, Microsoft, Eclipse Adoptium. Each one ships its own build, and each one sets its own EOL date.
That distinction matters more than most people realize. The terms “end of life” and “end of support” get used interchangeably until a CVE shows up – and then suddenly the difference matters enormously. EOL usually means “no more free updates from this provider.” End of support means “no help available anywhere, paid or free.” For OpenJDK, you can hit EOL on your current vendor and still find paid support elsewhere. That’s the entire point of vendor and third-party extended support programs.
Here’s a rough map of what each lifecycle phase actually gets you:
|
Lifecycle phase |
What you get |
Typical duration |
|
Active development |
New features, bug fixes, all CVE patches |
6 months (upstream) |
|
Vendor LTS support |
Quarterly security updates, bug fixes |
4–8 years, vendor-dependent |
|
Extended/paid support |
Backported CVE patches, no new features |
1–4+ years past EOL |
|
End of life |
Nothing, unless you have a paid contract |
Indefinite (you’re on your own) |
Worth knowing: The “LTS” label on Java 8, 11, 17, 21, and 25 is a vendor convention, not an upstream OpenJDK commitment. Oracle started it; the rest of the ecosystem followed. The project itself moves on every six months regardless of what’s on your server.
OpenJDK Release Types
OpenJDK ships on a six-month cadence, but vendors treat releases very differently depending on whether they’re LTS or not.
LTS Releases
LTS releases are the ones vendors commit to maintaining for years. Java 8, 11, 17, 21, and 25 are the current LTS versions. These get backported security patches, bug fixes, and quarterly Critical Patch Updates from major vendors. If you’re running anything in production, you almost certainly want an LTS release – that’s precisely why they exist.
Community support typically includes free security patches and bug fixes, but ends at each version’s declared EOL date. After that point, updates are only available through vendor-specific or third-party extended support programs.
Beyond the OpenJDK community, vendors and distributions offer their own builds and support timelines for OpenJDK versions. These timelines vary as well, and understanding the key differences between OpenJDK vs. Oracle JDK can help you choose the right distribution for your long-term support strategy.
Non-LTS Releases
Non-LTS releases (Java 9, 10, 12, 13, 14, 15, 16, 18, 19, 20, 22, 23, 24, 26) get six months of updates and then disappear from active support. They’re intended for developers who want early access to features, not for production workloads. According to New Relic’s 2024 State of the Java Ecosystem report, fewer than 2% of production applications run a non-LTS version – which makes sense, because doing so is essentially signing up for a forced upgrade every six months.
Extended Support Tiers
Beyond standard LTS, vendors layer on paid extended support phases. Oracle gives LTS versions five years of Premier Support followed by three years of Extended Support, then indefinite Sustaining Support – which includes no security fixes. Red Hat offers a similar structure, with a separate ELS-1 phase for OpenJDK 11 as a paid add-on. Third-party offerings like TuxCare’s Endless Lifecycle Support for OpenJDK take this a step further, offering ongoing CVE patching for as long as you need it, regardless of which vendor build you originally deployed.
Insider tip: Your “LTS” support window is whatever the vendor whose build you downloaded says it is – not what Oracle says. The Microsoft Build of OpenJDK, Amazon Corretto, Azul Zulu, and Eclipse Temurin all have different end dates for the same Java version. Check your actual vendor’s published lifecycle page before assuming you have years left.
OpenJDK 11 End of Life: The Dates That Actually Matter
Java 11 was released in September 2018 as the second LTS release after Java 8. The support timeline varies significantly depending on whose build you’re running – and as the table below shows, some vendors have extended their timelines well beyond what most teams expect.
|
Vendor / build |
OpenJDK 11 EOL |
Notes |
|
Oracle Premier Support (Oracle JDK) |
September 2023 |
Paid Extended Support available through Jan 2032 |
|
Red Hat build of OpenJDK |
October 31, 2024 |
ELS-1 paid extension available until October 31, 2027 |
|
Eclipse Temurin (Adoptium) |
At least October 2027 |
Community-driven, dependent on contributor capacity |
|
Amazon Corretto |
January 2032 |
EOL extended in October 2024 from original September 2027 date |
|
Microsoft Build of OpenJDK |
September 2027 |
Check Microsoft’s lifecycle page for exact dates |
|
Azul Zulu |
January 2032 |
Paid extended support available until January 2034 |
The picture is more varied than most teams assume. If you’re on Red Hat’s build without an ELS-1 subscription, free patches ended October 31, 2024. For teams managing broader software stacks on this platform, keeping track of the upcoming RHEL 8 end of life timeline is equally critical for operational planning. Oracle’s Premier Support ended even earlier, in September 2023. But if you’re on Corretto, Temurin, or Azul Zulu, you may still be within your vendor’s active support window. Your actual exposure depends on which build you’re running and how current your patch level is, not just the version number.
Watch out: “We’re on a supported version” often means “we downloaded the latest build six months ago and never updated since.” OpenJDK vendors ship quarterly Critical Patch Updates – if your build’s patch level is more than 90 days old, you have unpatched CVEs even if your version is technically still under support.
What About OpenJDK 8?
Java 8 has a similar story, though its timeline stretched longer than most expected. Oracle’s free public updates for Java 8 ended in January 2019 for commercial users. However, vendors have maintained their own builds well beyond that.
Red Hat’s OpenJDK 8 support extends through at least 2026 for RHEL subscribers, and Azul, Amazon Corretto, and Eclipse Temurin have continued providing builds with varying levels of active maintenance. As of early 2026, Java 8 still represented a significant share of production workloads – in some surveys, roughly comparable to Java 11.
The difference between Java 8 and Java 11 is that Java 8 has been in “extended” territory for longer, so organizations still running it tend to be more intentional about the decision. Java 11 teams are frequently at the beginning of that conversation, often because the EOL date snuck up on them.
If you’re managing both Java 8 and Java 11 workloads, the considerations are similar. The volume of CVEs that accumulate over a long-lived LTS release is sobering – Java 8’s CVE history is a useful reference point for what Java 11 is now heading into without patches.
Java 11 and 8 Are Still Everywhere
New Relic’s data – drawn from hundreds of thousands of production applications – puts Java 11 and Java 8 together at roughly 62% of production workloads, with Java 11 at 33% and Java 8 at 28.8%.
There are real reasons for this, not just organizational inertia. Java 11 and 8 are stable, well-understood versions that power web applications, backend services, middleware platforms, and internal tools across nearly every industry. Many of these depend on frameworks with their own lifecycle constraints – if a middleware platform is certified only on Java 11, upgrading the runtime isn’t a unilateral decision the ops team can make.
Rewriting or upgrading an application isn’t always feasible when it’s business-critical, poorly documented, or maintained by a team that’s half the size it was when the app was built. That’s not a failure – it’s the reality of how enterprise software works.
What Happens After Community Support Ends?
The day after EOL, nothing dramatic happens. Your JVMs keep running. Your apps keep responding. That’s precisely the problem – the failure mode is silent, and it shows up later as a CVE you can’t patch.
Here’s what actually changes:
- CVE patches stop arriving for your Java version: Any vulnerability discovered after EOL will never be fixed in your runtime through free channels – it accumulates, and your exposure grows with each new disclosure.
- Compliance frameworks start creating friction: SOC 2, PCI DSS, HIPAA, and FedRAMP all require documented patch management for known vulnerabilities. Running an EOL runtime doesn’t cause an automatic audit failure, but defending it becomes progressively harder.
- Dependency drift accelerates: Libraries and frameworks drop support for older Java versions as their own ecosystems move forward, so the software around your frozen runtime quietly degrades in compatibility.
- Container base images stop refreshing: The openjdk:11 images on Docker Hub were deprecated well before community EOL. If you’re still pulling them, you’re pulling a static snapshot with known vulnerabilities baked in.
- Vendor liability shifts to you: Most enterprise software contracts have clauses about running supported software. Once you’re on an EOL runtime, you’ve taken on that risk personally.
Why “Just Upgrade” Is Harder Than It Sounds
The standard advice – “upgrade to Java 17 or 21” – is the right answer in a slide deck and the wrong answer for a lot of real codebases. Here’s why teams stay on OpenJDK 11 even when they know they probably shouldn’t.
Library and Framework Lock-In
A surprising number of production Java applications depend on libraries that haven’t been recompiled or tested against newer JDKs in years. Once you move from Java 11 to 17, you start hitting issues with:
- Removed APIs that older libraries quietly relied on
- Stronger encapsulation (introduced in Java 9, tightened since) breaking older bytecode-manipulation libraries
- Incompatibilities in agents like legacy versions of Lombok, Mockito, or Byte Buddy
- JAXB, JAX-WS, and other Java EE APIs that were removed from the JDK entirely
Picture a 20-person engineering team mid-migration: they’ve upgraded the application code, build tools, and CI pipeline. Then their internal SSO library – last maintained by an engineer who left three years ago – throws an IllegalAccessError on the first integration test. That’s a week of debugging before they decide to fork the library, and that’s just one dependency.
Certified Application Stacks
Enterprise software vendors certify their products against specific Java versions. ERP systems, banking platforms, insurance underwriting tools, and healthcare software often have a support matrix that says “Java 8 and 11” – and nothing else. Upgrading the underlying JDK voids your support contract. In that scenario, the runtime upgrade isn’t blocked by code complexity; it’s blocked by a contract clause.
Migration Cost and Risk Tolerance
Migrations break things – that’s what teams have learned from every prior LTS jump. A realistic Java 11-to-17 migration for a non-trivial codebase involves auditing every direct and transitive dependency (often 200+ libraries), updating build tools and CI pipelines, re-running full regression suites and load tests, coordinating across services, and refactoring around removed APIs. For a team running 10 services, this is a quarter of engineering time. For a team running 200 services, it’s a year-long program.
Reality check: Vendors love to publish “easy migration” guides showing a Java 8-to-17 upgrade in a 30-minute screencast. Those demos use clean Spring Boot apps with five dependencies. Your production codebase has years of accumulated complexity, several abandoned internal library forks, and probably at least one JAR that nobody knows the origin of. Plan for that, not the demo.
What to Do After OpenJDK 11 Reaches End of Life
There are three realistic paths forward, and the right one depends on how much migration runway you actually have.
Extended Lifecycle Support
If you can’t migrate in the near term but can’t afford to leave CVEs unpatched, extended support is the cleanest answer. Major vendors like Oracle and Red Hat offer paid extended phases with defined terms, and independent providers fill the gap for organizations that need something more flexible.
TuxCare’s Endless Lifecycle Support (ELS) for OpenJDK covers versions 6, 7, 8, 11, and 17 – including versions already past their community EOL. It’s designed specifically for teams that need ongoing security patches without being forced into an upgrade timeline they can’t realistically meet:
- Backported CVE patches for OpenJDK past community EOL
- Vendor-agnostic – works regardless of whether you originally deployed the Red Hat build of OpenJDK, Adoptium, Corretto, or a custom installation
- No application code changes required
- Coverage continues for as long as you need it, not a fixed two- or three-year window
- Covers Enterprise Linux variants and Debian-based distributions, including RHEL, CentOS, AlmaLinux, Rocky Linux, Oracle Linux, Debian, and Ubuntu.
TuxCare’s ELS for OpenJDK is a runtime-level solution – it patches the Java runtime specifically. If you’re also running an EOL Linux distribution underneath (say, CentOS 7), TuxCare offers separate ELS for operating systems that covers the full OS package set, including OpenJDK where it’s part of the OS package set. These are separate products. ELS for OpenJDK gives you the runtime coverage regardless of your OS; ELS for the OS covers the entire distribution. Depending on your situation, you might need one, the other, or both.
If your concern is purely the Java runtime – even running it on a current, supported OS – TuxCare ELS for OpenJDK handles that without requiring an OS-level subscription.
Migrate to Java 17 or Java 21
If you have the engineering capacity and your stack will tolerate it, migrating to a current LTS is the right long-term answer. Java 17’s adoption hit 35% of production applications in 2024 according to New Relic, and Java 21’s adoption rate in its first six months outpaced Java 17’s by nearly 3x.
Java 17 is a meaningful step forward, though it has its own support timeline to plan around. Learn more about OpenJDK 17 EOL before committing to it as your long-term target.
Some practical starting points:
- Run
jdeps --jdk-internalsagainst your application JARs to surface usage of removed internal APIs early - Audit every Maven/Gradle dependency for the latest version that supports your target Java release
- Stage the migration through dev, test, and a canary deployment before fleet-wide rollout
- Budget time explicitly for “we found another library” surprises – they’re not hypothetical
Java 21 is the better target if you can get there. It has one of the longest remaining support window across vendors, and includes virtual threads – which can meaningfully reduce thread-pool overhead for high-concurrency workloads.
Stay on EOL and Accept the Risk
This is what many teams are quietly doing. If you choose this path, do it deliberately:
- Document the decision formally and get sign-off from security and compliance leadership
- Implement compensating controls (WAF, runtime application self-protection, stricter network policies)
- Monitor CVE feeds for Java 11 and Java 8 weekly and assess each disclosure against your actual exposure
- Set a hard deadline for migration or extended-support adoption – “we’ll get to it eventually” is how you end up still on Java 11 in 2028
This is the riskiest path and it’s not sustainable indefinitely. But if the realistic alternative is shipping a half-tested migration in two weeks, a documented and controlled holding pattern is sometimes the more defensible choice. The critical difference is intentionality.
From the trenches: The teams that navigate EOL transitions cleanest are the ones that started planning 12 months before the date. If you’re reading this in 2026 and still running OpenJDK 11 without a plan, the comfortable runway is gone. Pick one of these three paths this quarter.
Your Next Steps After OpenJDK 11 EOL
OpenJDK 11 upstream community support ended in late 2024, and several vendor support windows are closing over the next few years. Your JVMs don’t care about those dates – but your auditors, your CISO, and your incident response team increasingly will.
If you can migrate, target Java 21 rather than Java 17 – the support runway is longer, and virtual threads are a meaningful improvement for high-concurrency workloads. If migration isn’t realistic right now but you need ongoing security patches, TuxCare ELS for OpenJDK covers Java 8, 11, and other versions past EOL across multiple enterprise Linux and Debian-based environments – worth evaluating before your next compliance review.
Whichever path you pick, pick it on purpose. The worst outcome is the default one – staying on EOL Java 11 because nobody made a conscious decision to do anything else.




