Editorial photograph of an engineering team evaluating Oracle Java and OpenJDK runtime options
Oracle / Java vs OpenJDK

Oracle Java vs OpenJDK. What actually differs in the binary.

Same source tree, different file. This is the head to head at the artifact level: what is identical, what genuinely differs, and the short list of things that actually break on a swap.

Contact Us Oracle Practice
500+Enterprise clients
$2B+Under advisory
Industry Recognized
500+ Enterprise Clients
$2B+ Under Advisory
11 Vendor Practices
100% Buyer Side Independent

Oracle JDK and a mainstream OpenJDK build of the same release are not the same file, yet they come from the same source and Oracle itself calls them interchangeable. This page runs the head to head at the binary level: what is identical, what genuinely differs, and what actually breaks on a swap.

Key takeaways

  • Oracle publishes its own list of how Oracle JDK differs from an OpenJDK build at Java 11 and later. It runs to six items. Five of them are packaging, branding or telemetry, and one touches runtime behaviour.
  • The single behavioural difference in the security stack runs in the buyer's favour. Oracle JDK refuses unsigned third party cryptography providers. OpenJDK builds accept them. Migrating relaxes the rule rather than tightening it.
  • Java 8 is where the divergence is real. OpenJDK builds before JDK 10 shipped an empty trust store, Flight Recorder only reached OpenJDK 8 at update 262, and JavaFX and Web Start were bundled only by Oracle.
  • The trust store, not the bytecode, is the number one cause of a failed swap. Temurin, Corretto and Oracle JDK ship different root certificate sets, and a private or niche public certificate authority present in one and absent in another fails the handshake at runtime, not at build time.
  • Substituting an Eclipse OpenJ9 based build such as IBM Semeru is not a like for like swap. It is a different virtual machine with different garbage collector flags and a different heap profile. HotSpot based builds are the like for like set.
  • None of this changes the commercial answer. Oracle prices the Java SE Universal Subscription per employee, so a partial migration that leaves one Oracle install behind saves nothing at all.

The technical question is narrower than most buyers expect. Oracle and every mainstream distributor compile from the same source tree at the OpenJDK project, and for Java 11 onward Oracle's own engineering blog describes its builds and the OpenJDK builds as functionally identical and interchangeable.

That does not mean the two files are byte identical. They are not. It means the differences are enumerable, and this page enumerates them rather than gesturing at risk.

Cover of the Redress Compliance Oracle white paper

White Paper · Oracle Java

Oracle Java SE Renewal & Exit

The buyer side route out of the Java SE subscription. Read it free.

Read the white paper

Are Oracle JDK and OpenJDK the same binary?

No, they are not the same file, but at Java 11 and later they are compiled from the same source and Oracle publishes the differences itself. That list is the honest starting point for any technical risk conversation.

What Oracle itself lists as different

Oracle's engineering post Oracle JDK Releases for Java 11 and Later names the divergences that survived the Java 11 convergence. Read it with a single question in mind: does this change how my application behaves at runtime?

Oracle's own difference list, scored for runtime impact

Difference Oracle names What it actually is Changes runtime behaviour?
Version banner textOracle prints Java(TM) SE Runtime Environment, OpenJDK builds print OpenJDK Runtime EnvironmentOnly if your code parses it
UnlockCommercialFeatures flagOracle JDK warns and continues, OpenJDK errors and refuses to startYes, if the flag is still in a startup script
Advanced Management Console usage loggingOracle telemetry that reports JVM usage to an Oracle consoleNo, and losing it is usually welcome
Signed cryptography providersOracle JDK requires third party JCE providers to be signed, OpenJDK does not enforce itYes, but it relaxes on migration
javac release targeting on 9 and 10Older Oracle targets exposed extra modules such as JavaFX and JNLPCompile time only, and moot at 11 and later
Packaging and installersOracle ships branded installers and a separate JRE layout, OpenJDK ships archivesNo, but it breaks install scripts

What is genuinely identical

The parts that decide whether your application runs are shared source. Nothing on this list has a vendor specific implementation in a mainstream HotSpot build.

  • The HotSpot virtual machine, including the interpreter, the C1 and C2 just in time compilers and their optimization behaviour.
  • The garbage collectors, G1, Parallel, Serial, ZGC and Shenandoah where the release includes them, with the same tuning flags and the same defaults.
  • The class library, the module system, the compiler and the standard tools such as jlink, jpackage, jcmd and jstack.
  • The TLS implementation, protocol support, cipher suite ordering and the algorithm restrictions in java.security.
  • The bytecode your application produces and consumes, which is why a jar built on one runs unmodified on the other.

Where the divergence is real: Java 8 and earlier

Java 8 is a different conversation, and this is the part most comparison articles skip. The convergence Oracle describes happened at Java 11, so an estate still on 8 is comparing genuinely different products.

  • The trust store was empty. Oracle's root certificate set was only contributed to OpenJDK at JDK 10 under JEP 319. Builds of OpenJDK 8 from source shipped an empty cacerts file, and distributors substituted their own set. Your Java 8 trust anchors are a distributor decision, not a Java decision.
  • Flight Recorder was a paid feature. On Oracle JDK 8 it sat behind a commercial licence and the UnlockCommercialFeatures flag. It only reached OpenJDK 8 as a backport at update 262 in 2020.
  • JavaFX and Web Start were bundled by Oracle only. Neither shipped in a plain OpenJDK 8 build. An application that uses either needs a separate component, not just a different JDK.
  • Unlimited strength cryptography was a download. Before 8u161 the policy files were a separate manual step on Oracle JDK, which is why old build documentation still references them.

What actually breaks when you swap the binary?

A short and repeatable list, and it is almost never application code. In the estate reviews behind this page the same seven items accounted for effectively every pilot failure.

The seven things that actually differ in practice

The real difference list, with the failure mode and the test that catches it

What differs How it fails The test that catches it
Trust store contentsTLS handshake fails at runtime against one specific endpointDiff the cacerts subject list between old and new, then connect to every outbound endpoint
Bundled JavaFX or Web Start on 8Class not found at startupGrep the codebase for javafx and jnlp imports
UnlockCommercialFeatures in a start scriptJVM refuses to start on OpenJDKGrep every start script and container entrypoint for the flag
Vendor string parsingLicence check or feature gate in the application misfiresGrep for java.vendor and java.runtime.name reads
Font rendering and locale dataServer side PDF or image output shifts by a pixel or a glyphRender a reference document and compare, only for estates that generate documents
Install layout and path shimsAutomation that hardcoded an Oracle path or registry key breaksSearch configuration management for hardcoded JAVA_HOME values
OpenJ9 instead of HotSpotTuning flags rejected, heap and startup profile changeConfirm the build is HotSpot based before you call it like for like

The trust store is the one that gets people

Every distributor decides what goes in cacerts. Oracle ships the set from its own root certificate program, Eclipse Temurin ships the Mozilla list, and Amazon Corretto ships a set curated by Amazon.

Those sets overlap heavily but not completely. The failure is nasty because it is silent until the first call to the one endpoint whose issuer is missing, which may be a quarterly file transfer rather than a login page.

The fix is mundane. Export the subject list from the outgoing JDK, diff it against the incoming one, and import anything your estate depends on. Do this once at the standard level rather than per application.

The substitution that is not like for like

Not every build labelled OpenJDK is a HotSpot build. IBM Semeru and older AdoptOpenJDK OpenJ9 builds use the Eclipse OpenJ9 virtual machine, which is a genuinely different implementation.

OpenJ9 can be an excellent choice, particularly for memory density in containers. It is simply not a drop in replacement in the way Temurin, Corretto, Zulu, Liberica and the Microsoft build are, because the tuning flags and heap behaviour differ.

If you want the zero surprise path, restrict the shortlist to HotSpot builds and treat OpenJ9 as a separate evaluation. The distribution choice guide covers how to write that shortlist as a specification.

How do you prove which build is actually installed?

Three artifacts settle it, and you need all three because each one can be wrong on its own. This matters twice: once for your migration evidence, and once because it is exactly what an Oracle review keys off.

The three checks that settle it

  1. The version banner. Run java with the version flag and read the second line. Java(TM) SE Runtime Environment means an Oracle build. OpenJDK Runtime Environment means an OpenJDK build, including Oracle's own free GPL builds.
  2. The release file at the top of JAVA_HOME. Read the IMPLEMENTOR and IMPLEMENTOR_VERSION fields. Oracle Corporation, Eclipse Adoptium, Amazon.com Inc., Azul Systems and Microsoft each write a distinct value here, and it survives a renamed directory.
  3. The package or installer record. The RPM or Debian package list on Linux, the JavaSoft registry keys and Programs list on Windows, and the JavaVirtualMachines directory on macOS. This is the artifact that carries the install date.

What each artifact proves, and what it does not

Artifact Proves Does not prove
Version bannerOracle branded build or notWhich vendor, or whether the build is licensable
release fileThe distributor and the exact buildWhen it was installed or by whom
Package or registry recordInstall date, patch level and hostAnything about an unzipped copy with no package record
All three togetherA defensible position on scope and datesCopies inside third party application bundles

Why the banner alone is not enough

Oracle publishes its own GPL licensed builds of OpenJDK, and those print the OpenJDK banner. A banner check therefore cannot distinguish a Temurin install from an Oracle build of OpenJDK.

That distinction matters, because Oracle's OpenJDK builds stop receiving updates six months after release. An estate that standardized on them is on a treadmill rather than a destination, even though nothing about it is licensable.

Capture all three artifacts before you remove anything. Install date, patch level and host record are the evidence that bounds any retroactive claim, and deleting the binary first destroys it. The CI and workstation cleanup guide sets out the capture order, and the Oracle Java audit response playbook covers what happens if a review starts before you finish.

Do both builds ship the same security fixes in the same quarter?

Yes for a release inside its maintained window, because the fixes originate in the same upstream update project and land on the same quarterly cycle. Parity ends at the version tail, not at the vendor.

How a quarterly fix actually reaches your build

Oracle publishes a critical patch update four times a year, in January, April, July and October. The same fixes flow through the OpenJDK updates project for that release line, and each distributor builds, tests and ships from there.

The variable is lag, not content. Mainstream distributors publish within days of the Oracle date, and that lag is measurable, so write it into your standard as a service level rather than assuming it.

Where parity genuinely ends

When a release leaves its free window, Oracle continues to patch it for subscribers while the community updates project continues under a different maintainer. The two sets can drift on backports for old lines.

This is a real consideration for a Java 8 or Java 11 estate and close to irrelevant for a Java 17 or later estate. Check the window for your specific release on the Oracle Java SE support roadmap before you treat the two as equivalent.

Why does the price differ if the binaries do not?

Because you are not buying the code. You are buying a licence to run Oracle's build outside its free window, plus a support contract. Oracle prices the Java SE Universal Subscription against your headcount, not your usage.

The metric that makes partial migration pointless

The Java SE Universal Subscription counts every employee in the organization, not every Java user or every server. One remaining Oracle install therefore prices the whole workforce.

State that once and plan around it. A migration that reaches 95 percent of the estate and stops delivers zero licence saving, which is why the discovery step matters more than the technical step.

The binaries converged in 2018. The prices did not. That gap is the whole commercial argument, and it does not require a single technical concession to make.

The full metric mechanics, the price ladder and the modelled cost of each path sit elsewhere in this library. See the Oracle Java licensing pillar for the metric, the Oracle Java licensing benchmark for what peers pay, and three migration patterns cost modeled for the five year comparison.

What do you give up in support terms by swapping the binary?

One thing, precisely: a contractual counterparty who is obliged to fix a defect in the runtime itself. Everything else you keep, and that counterparty is purchasable from several vendors.

What you lose and what you keep

  • You lose the right to raise a service request against the JVM with Oracle and to receive a patched build under a service level.
  • You keep the quarterly security updates, the same code, the same tooling, and the ability to buy an equivalent obligation from Azul, Red Hat, IBM, BellSoft or your cloud provider.
  • You should measure how many runtime level service requests you have actually raised with Oracle in the last three years. In most reviews the honest answer is none.
Editorial photograph of a server room and engineering team evaluating Java runtime distributions
The number of runtime level support tickets an enterprise has raised with Oracle in three years is usually the fastest way to price what the support contract is worth.
37
Java estate reviews 2024 to 2025
7
Differences that caused every pilot failure
90%
Workloads with no Oracle Java dependency

Source: Redress Compliance advisory engagement file, 2024 to 2025.

When is Oracle JDK genuinely the right binary to run?

When something you cannot change depends on it specifically. That is a narrow set, and it is worth testing rather than assuming, because assumed dependencies are the most expensive kind.

Feature dependency

Oracle GraalVM and the Enterprise tier compilers are the clearest example, and they are a separate product decision rather than a JDK decision. Test whether your workload actually uses the Oracle specific path before you accept the dependency.

Certification and support dependency

An independent software vendor that certifies only Oracle JDK creates a real obligation, particularly in regulated estates where the certification matrix is auditable. Ask the vendor in writing whether a HotSpot OpenJDK build of the same release is supported.

In practice most vendors either already support it or will confirm it in writing when asked. The written answer is worth obtaining early, because it is also the artifact that unblocks your internal risk committee.

Where the common advice on Oracle Java versus OpenJDK is wrong

The standard advice is to run a full application regression programme against the new runtime before committing. We disagree, and the estate evidence is fairly blunt about it. The set of things that can differ between two HotSpot builds of the same release is enumerable and short, and a functional regression suite exercises almost none of it. Teams spend a quarter re running tests that were always going to pass, then get caught by a trust store gap that no functional test would ever have found. Test the seven item list directly, in a soak environment, against real outbound endpoints and real document rendering. That takes days, not a quarter, and it actually catches the failures.

Suggested reading

What should a buyer do next?

  1. Run a discovery sweep and record, for every Java install, the vendor string, the release file IMPLEMENTOR value, the install date and the host. Capture before you change anything.
  2. Split the estate by major version. Java 11 and later is a configuration exercise. Java 8 and earlier needs the bundled component and trust store checks in full.
  3. Grep the whole codebase and every start script for the four strings that matter: UnlockCommercialFeatures, java.vendor, javafx and jnlp.
  4. Export the trust store subject list from your current Oracle JDK and diff it against your candidate build. Reconcile the gaps at the standard level, once.
  5. Restrict the candidate shortlist to HotSpot builds unless you are deliberately evaluating OpenJ9 as a separate decision.
  6. Ask any independent software vendor that certifies only Oracle JDK for a written position on a HotSpot OpenJDK build of the same release.
  7. Soak test the seven item difference list rather than the application portfolio, then move.
  8. Lock new workloads to the chosen build in your base images and build agents so Oracle Java cannot drift back in. Engage independent Oracle advisory before you renew or migrate.
Need help? Try our AI agents. Ask the Oracle Java licensing AI agent → Scoped to one vendor and one problem. Runs in your browser.

Frequently asked questions

Is OpenJDK the same as Oracle Java?

Not the same file, but built from the same source, and Oracle describes its Java 11 and later builds as functionally identical and interchangeable with OpenJDK builds. The virtual machine, the class library, the compiler and the garbage collectors are shared code. The differences are in branding, packaging, telemetry and a handful of edge behaviours.

What is actually different between Oracle JDK and OpenJDK at the binary level?

Oracle names six differences for Java 11 and later, and only two touch runtime behaviour. The UnlockCommercialFeatures flag warns on Oracle and errors on OpenJDK, and Oracle enforces signing on third party cryptography providers while OpenJDK does not. The rest is the version banner, Oracle telemetry, an old compile time targeting quirk and installer packaging.

Will my application break if I switch from Oracle JDK to OpenJDK?

Rarely, and when it does the cause is usually the trust store rather than the code. Differences in the bundled root certificate set can fail a TLS handshake against one specific endpoint at runtime, with no build time warning. Diff the certificate subject lists before you cut over and most of the risk disappears.

How do I tell which Java build is installed on a server?

Check three things, not one. The version banner distinguishes an Oracle branded build from an OpenJDK build, the release file at the top of JAVA_HOME names the actual distributor in its IMPLEMENTOR field, and the package or registry record carries the install date and patch level. Capture all three before removing anything.

Is Oracle JDK faster than OpenJDK?

No, not for the same release on a HotSpot build. Both run the same HotSpot virtual machine with the same just in time compilers, the same garbage collectors and the same defaults. Measured differences in a benchmark are almost always configuration or version differences rather than vendor differences.

Do OpenJDK builds get security patches as fast as Oracle?

Yes for a release inside its maintained window, because the fixes come from the same upstream update project on the same quarterly cycle. Mainstream distributors publish within days of Oracle's critical patch update date. Write that lag into your standard as a measurable service level rather than assuming it.

Is Java 8 the same story as Java 11 and later?

No, and this is the exception that matters. The convergence Oracle describes happened at Java 11. On Java 8, OpenJDK builds shipped an empty trust store until the root certificates were contributed at JDK 10, Flight Recorder was an Oracle paid feature until it was backported at update 262, and JavaFX and Web Start were bundled only by Oracle.

Does keeping one Oracle Java instance still cost the full subscription?

Effectively yes. The Java SE Universal Subscription counts every employee in the organization rather than every Java user, so one remaining Oracle install keeps the whole workforce in scope. A migration that reaches 95 percent of the estate and stops delivers no licence saving at all.

White Paper · Oracle Java

Renew or exit Oracle Java SE on your terms.

The renewal and exit map for Oracle Java SE: employee metric math, OpenJDK and Azul paths, and the timing that protects leverage.

Used across more than five hundred enterprise engagements. Independent. Buyer side. Built for procurement leaders running the next renewal cycle.

Get the white paper →
Opens the white paper landing page. We only email you about this download.
Run the Oracle Java license calculator against your estate in under five minutes.
Open the Tool →
Per Employee
Universal Metric
$15
Per Employee, Starting Tier
12+
Java Distributions
100%
Buyer Side
$2B+
Under Advisory

Oracle Java and OpenJDK are the same engine. The only question worth asking is whether your estate has a reason to pay per employee for it.

Fredrik Filipsson
Co Founder and Group CEO, Redress Compliance
Pass it on

Know someone facing this exact decision?

Send this to whoever owns the renewal, the audit response, or the budget. It takes two clicks and it saves them a quarter of guessing.

Share on LinkedInShare by email