Editorial photograph of an IT asset team running a Java cleanup audit on a glass wall plan
Article · Oracle · Java

Java licensing cleanup. Remove it. Prove it.

A cleanup is a removal project with an evidence requirement bolted to it. The deliverable is not a lower install count. It is a dated register that proves, machine by machine, that Oracle branded Java is gone and cannot come back.

Contact Us →Read the analysis Oracle Hub
30 to 70%Typical Java cost reduction
500+Enterprise clients advised
Industry Recognized
500+ Enterprise Clients
$2B+ Under Advisory
11 Vendor Practices
100% Buyer Side Independent

Most Java cleanups fail on the last mile. The runtimes come off the machines, nobody writes down what was there, and two years later the organisation cannot prove any of it happened.

This page is the project itself: the six populations to sweep, the removal runbook for each, the nine field removal record, and the seven documents that make the whole thing hold up.

Key takeaways

  • Removal without a record is worse than no removal. You destroy the evidence that a binary was covered and keep none that it left.
  • Six populations, not one. Servers, developer endpoints, pipeline agents, container images, vendor packaged applications, and appliances. Most projects sweep two of the six and declare victory.
  • The vendor packaged population is the one that bites. Roughly one estate in four finds an Oracle runtime inside software it bought from somebody else.
  • Detect by provenance, not by version. Two runtimes reporting the same version number can carry completely different obligations.
  • Two rescans, at 30 and 90 days. A single scan on the day of removal proves nothing about drift, and drift is the whole risk.
  • Write an exception list, sign it, and give it an expiry date. Every estate keeps a few Oracle runtimes. Undocumented exceptions are what an auditor finds.

Where this page states a licensing position it is grounded in Oracle's published terms and in the distributors' own documentation: Oracle's Java SE licensing FAQ, the Java SE Universal Subscription page, the OpenJDK project, Eclipse Adoptium and Amazon Corretto.

Two adjacent pages carry the parts this one deliberately leaves out. The metric and its history sit in the Oracle Java licensing reference. If a notice has already arrived, start with the Java audit defence tactics and the audit claim defence framework instead, because a live audit changes what you are allowed to remove.

What is a Java licensing cleanup actually removing?

It is removing Oracle branded Java runtimes from every machine that does not have a documented reason to keep one. That is the whole scope. It is not a Java upgrade, not an application modernisation programme, and not a negotiation.

The three states a machine can end in

  • Clean. No Oracle branded runtime present, a replacement distribution installed where Java is still needed, and a dated removal record.
  • Excepted. An Oracle runtime remains, with a named owner, a written reason, an approval and an expiry date. Excepted machines are counted, not hidden.
  • Covered. The Java present is licensed by something you already own, typically a restricted use grant inside another Oracle product. These need proof, not removal.

Every asset in the estate ends in exactly one of those three states. A cleanup is finished when no asset is in a fourth state called unknown.

When to start one, and when not to

The three good moments are a renewal twelve months out, the closing of an acquisition, and the quarter after a friendly call from an Oracle representative asking about your Java estate. All three give you time to work without a deadline someone else set.

The bad moment is the week after a formal audit notice lands. At that point you freeze the estate instead, because removing binaries once a claim exists destroys your own evidence and invites an argument you cannot win.

Try Vera AI · free trial
Before the auditor finds it, Vera already has.
  • Every risky clause flagged with the verbatim quote and page anchor
  • Entitlements, caps, and protections verified across your whole contract portfolio
  • Paste ready replacement language and an evidence trail for the response
Start the free Vera AI trial →30 day free trial · no card needed

How do you find every copy, including the ones no tool sees?

You sweep six populations with a different technique for each, because no single tool sees all six. The mistake that defines a failed cleanup is running one discovery product across the server estate and treating the output as the estate.

The six populations and how each one is actually detected

Six populations, six detection techniques

PopulationWhere the copies actually sitHow you detect themTypical share
Servers and virtual machinesPackage manager records, plus loose archives unpacked under an application directoryResolve the Java command to a real path, then read the release file for the implementor value25 to 40%
Developer endpointsFetched straight from the vendor download page, outside the software catalogueEndpoint agent plus the code signing certificate on the executable20 to 35%
Build and pipeline agentsDeclared in the pipeline file, not installed on the runnerRead the toolchain declaration in the repository, not the agent5 to 10%
Container imagesInside base images you inherited rather than images you wroteLayer scan in the registry plus the software bill of materials5 to 15%
Vendor packaged applicationsA private runtime buried in the vendor's own directory treeFile system scan under each vendor install root, then ask the vendor in writing15 to 30%
Appliances and plant systemsFirmware you cannot open and must not patchA written statement from the manufacturer, not a scan2 to 8%

Provenance beats version, every time

Two runtimes can report the same version number and carry entirely different obligations. The question is never which version, it is who built this file and under which terms it was obtained.

  • On Linux and similar systems, resolve the Java command to its real location and read the release file that ships alongside it. The implementor value names the builder.
  • On Windows, read the code signing certificate on the executable and the installer product entry. A signature from Oracle is difficult to argue with, and so is its absence.
  • On macOS, enumerate the installed virtual machines directory and read each bundle's property list.
  • In containers, read the release file inside the image layer. Do not trust the image tag or the base image name.
  • In build pipelines, read the distribution named in the toolchain declaration. That is the licensing fact. What is cached on a runner is not.

The three places copies survive a first sweep

Almost every cleanup finds a second wave after the first pass is declared complete. The same three hiding places produce it.

  1. The artifact repository. Your own internal repository has been proxying and caching Oracle archives for years. Developers pull from it without ever touching a vendor site.
  2. Disaster recovery and image backups. Restore a machine from a 2021 image and the runtime returns exactly as it was, along with its licensing question.
  3. Machines that were powered off during the scan. Laboratory kit, seasonal capacity, and the small population of laptops belonging to people on long leave.

How do you actually remove Oracle Java, population by population?

You remove it with a different method per population, in waves, each wave gated by a rollback plan. Bulk removal across an entire estate in one change window is how a cleanup turns into an outage review.

The removal runbook

What you do, what breaks, and what you keep

PopulationThe removal actionWhat breaks if you rush itThe record you keep
ServersInstall the replacement, repoint the environment variable and any service definition, restart, then remove the old runtimeServices that hardcode an absolute path in a startup script fail on restart, often days laterChange ticket, before and after runtime evidence, service restart confirmation
Developer endpointsPush the replacement through the management tool, then remove the old package and clear the local cacheLocal build tools pinned to the old path stop working and engineers reinstall Oracle themselvesDevice compliance report before and after, dated per device
Pipeline agentsChange the distribution named in the toolchain declaration, then rebuild the agent imageBuilds pass locally and fail in the pipeline, or worse, pass with the wrong runtimeThe merged change to the pipeline definition, with commit reference and date
Container imagesChange the base image, rebuild, and expire the old tags in the registryOld tags stay pullable forever and quietly return to productionRegistry evidence that old tags are gone, plus a fresh bill of materials
Vendor packaged applicationsAsk the vendor in writing which runtime it ships and who licenses it. Then upgrade or exceptReplacing a private runtime yourself voids the vendor's support statementThe vendor's written answer, filed with the exception record
Appliances and plant systemsDo not touch. Obtain a written statement and place it on the exception listUnplanned downtime on systems that are not yours to patchThe manufacturer's letter, with the review date

Choosing the replacement distribution

Standardise on one distribution across the estate and one supported version line. Two distributions doubles your patch surface for no licensing benefit, and it makes the evidence pack harder to read.

Replacement options and what actually decides the choice

DistributionWhere it fits naturallySupport routeThe question to ask first
Eclipse TemurinMixed estates with no single cloud allegianceCommunity builds, commercial support available from several vendorsDoes your application vendor name it in its certification matrix?
Amazon CorrettoEstates already weighted to Amazon Web ServicesFree, with long term support builds published by AmazonAre your on premises servers covered by the same policy?
Microsoft Build of OpenJDKWindows fleets and Azure workloadsFree, published and supported by MicrosoftWhich version lines are covered, and for how long?
Azul builds of OpenJDKRegulated environments that want a contract and a named support deskCommercial, with broad version coverage including older linesDo you need a supported build of a version everyone else has dropped?
Red Hat build of OpenJDKEstates standardised on Red Hat Enterprise LinuxIncluded in the existing operating system subscriptionDoes the entitlement extend to your Windows and container workloads?

The cleanup is not finished when the last runtime is uninstalled. It is finished when a stranger can read your register and reach the same conclusion you did.

How do you prove an install is really gone?

You prove it with a removal record per asset, written at the time, plus two rescans on a fixed schedule. Proof is a document, not a screenshot, and it has to be readable by someone who was not there.

The nine fields in a removal record

  1. Asset reference. The internal asset tag, so the row survives a hostname change.
  2. Population. Which of the six, because the evidence standard differs for each.
  3. What was there. Product, full version string, build number and install path.
  4. Evidence before. Detection method, timestamp, and the raw value you read, such as the implementor string or the package record.
  5. Action taken. Removed, replaced, image rebuilt, machine decommissioned, or excepted.
  6. Evidence after. Same detection method, later timestamp, showing the runtime is absent.
  7. Replacement. Distribution and version now installed, or none if Java is no longer needed.
  8. Change reference. The ticket, so the record ties into a system nobody suspects you of editing.
  9. Approver. A named person, not a team mailbox.

The rescan schedule that makes the register credible

Run the same detection method three times: at removal, at 30 days, and at 90 days. The first proves the action, the second catches an automated rebuild putting it back, and the third catches human drift.

Publish the delta each time. A register that shows three assets regressing at day 30 and being fixed is far more persuasive than one that shows a perfect result on day one and nothing afterwards.

The restricted use test, before you remove anything

Several Oracle products ship a Java runtime whose use is already licensed as part of that product. Where a runtime exists only to operate that product, it is usually covered rather than exposed.

Removing it gains nothing and loses the evidence that it was covered. Check the parent product's ordering document first, then mark the asset as covered rather than clean.

Cover of the Redress Compliance Oracle buyer side white paper

White Paper · Oracle

The Oracle Java Audit Defence Playbook

What the Universal Subscription really costs and how buyers push back. Read it free.

Read the white paper

What goes in the evidence pack?

Seven documents, assembled as you go rather than reconstructed at the end. The pack is the entire commercial value of the project, because it is the only thing that answers a claim without you having to argue about memory.

The seven documents

The evidence pack, and who has to be able to read it

DocumentWhat it containsWho signs it
Scope statementLegal entities, asset populations, cutoff dates, and anything deliberately excludedProgramme sponsor
Method noteExactly how each population was detected, in enough detail to be reproduced by a third partyAsset management lead
Removal registerOne row per asset with the nine fields, including the two rescan resultsAsset management lead
Exception listEvery retained Oracle runtime, its reason, its owner, its approval and its expiry dateProgramme sponsor and legal
Coverage fileAssets marked covered, with the parent product order that covers themCommercial or procurement lead
Guardrail evidenceConfiguration proof for each control that stops the runtime returningInfrastructure lead
AttestationA one page signed statement of what was done, by whom, over what periodAccountable executive

How long you keep it, and where

  • Keep it for the full audit look back window, which in practice means at least three years and preferably the life of your Oracle relationship.
  • Store it outside the tools that produced it. Detection platforms get replaced. A register in a document repository outlives them.
  • Version it, do not overwrite it. The value of the register lies in its dates. Overwriting a row destroys the date it was true.
  • Decide the privilege position early. If the honest answer is uncomfortable, build the pack under counsel from day one rather than trying to protect it later.

Where the common advice on Java cleanup is wrong

The common advice is straightforward: uninstall Oracle Java everywhere, and you are clean. We disagree, and the sequence matters more than the instruction. An uninstall with no contemporaneous record converts a defensible position into an undefendable one, because a vendor's download records outlive your removal by years while your proof of what was actually deployed disappears the moment the file does. When a claim arrives two years later, the only thing that answers it is a dated register showing what was present, under which terms it was obtained, and what happened to it. Removal is the cheap half of this project. Evidence is the half that pays for it.

A developer reviewing Java source code on a monitor
The register, not the uninstall, is the deliverable. A removal you cannot evidence is indistinguishable from a removal that never happened.
6
Populations a complete sweep covers
1 in 4
Estates with Oracle Java inside bought software
35 to 45
Java cleanups run since 2024

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

How do you stop Oracle Java drifting back in?

You put seven guardrails in place before the project closes, and you evidence each one. Without them the estate reverts within two quarters, usually through newly built developer machines and inherited container images.

The seven guardrails

  1. Rebuild the golden images. Server, desktop and container baselines carry the replacement distribution. This is the single highest value control.
  2. Fix the software catalogue. Remove Oracle Java as a requestable item and publish the approved replacement in its place, with the version line stated.
  3. Block the repository proxy. Stop your internal artifact repository from proxying or caching Oracle runtime archives, and purge what it already holds.
  4. Deny at the egress proxy. Block the vendor download domains and, more usefully, log and alert on the attempts. The alerts tell you which teams still need help.
  5. Fail the build. Add a pipeline check that fails any build whose toolchain declaration names an Oracle distribution.
  6. Change the purchasing question. Require every software supplier to state, in writing at contract stage, which Java runtime it ships and who licenses it.
  7. Fix onboarding. A new engineer's machine build should make the approved distribution the path of least resistance on day one.

The effort model, so you can budget it honestly

Indicative effort for a mid size estate, in person days

WorkstreamDiscoveryRemovalProof and pack
Servers and virtual machines5 to 1015 to 305
Developer endpoints3 to 55 to 103
Pipelines and containers3 to 68 to 153
Vendor packaged applications5 to 1010 to 405
Guardrails and closeout18 to 125

The vendor packaged row is the one that varies most. One uncooperative application supplier can consume more elapsed time than the entire server estate, which is why that conversation starts in week one and not in week ten.

What should a buyer do next?

  1. Agree who signs the attestation. The document at the end of this project needs an accountable executive, so settle that on day one.
  2. Write the scope statement before any scanning starts. Entities, populations, cutoff date, exclusions. One page.
  3. Sweep all six populations. Do not start removal on the two easy ones while the other four are still unmeasured.
  4. Write to every application supplier in week one. Ask which Java runtime they ship and who licenses it. The replies set your critical path.
  5. Run the covered and excepted tests before removing anything. Some installs are cheaper to document than to remove.
  6. Remove in waves with a rollback plan per wave, recording the nine fields as you go rather than afterwards.
  7. Install the seven guardrails before you close the project, and capture configuration evidence for each.
  8. Rescan at 30 and 90 days, publish the delta, then hand the pack to whoever owns the Oracle relationship.
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

How long does a Java cleanup take?

Eight to twelve weeks for a mid size estate that already has endpoint management and a configuration database. Discovery takes two to three weeks, removal runs in parallel waves over four to six, and the pack closes out in two. What stretches it is almost never technology, it is the supplier who certifies only an Oracle build.

Should we remove Oracle Java while an audit is open?

No. Once a formal notice exists you freeze the estate and document it, because removing binaries after a claim arises destroys the evidence you need to show what was actually deployed and under which terms. Resume the removal programme after the scope is agreed in writing, and record the freeze itself as part of the file.

What is the minimum evidence that an install was removed?

The same detection method run twice, before and after, with timestamps and the raw value read on each occasion. A screenshot of an empty folder is not evidence, because it does not identify the method, the machine or the moment. Add the change ticket reference and a named approver and the row becomes difficult to dispute.

Do we have to remove Java that ships inside another Oracle product?

Usually not, and removing it can cost you more than it saves. Where a runtime exists solely to operate an Oracle product you already license, the parent product's ordering document typically covers it. Record it as covered, keep the ordering document reference in the pack, and leave it alone.

How do we handle an application supplier that only certifies Oracle Java?

Put the request in writing and set a date. Ask for their certification statement, the runtime they ship, who licenses it, and their roadmap for supporting an alternative distribution. If the answer is unsatisfactory, the machine goes on the exception list with an expiry date and the question moves into your next contract renewal with that supplier.

What stops the runtime coming back?

Golden images, catalogue policy, repository controls, egress denial, a pipeline check, a purchasing question and a fixed onboarding build. Of those, rebuilding the golden images does the most work, because most reappearance comes from newly provisioned machines rather than from anyone deliberately reinstalling.

Does a cleanup reduce what we pay Oracle?

Only if it takes you to zero, or to a state where every remaining install is covered or excepted with evidence. Partial removal changes your risk profile and your negotiating position, but it does not by itself change a subscription priced on your headcount. Plan the project to reach a defined end state, not to reduce a count.

Who should own the evidence pack afterwards?

Whoever owns the Oracle commercial relationship, not the team that built it. Asset management produces the register, but the pack is a commercial asset that gets used in a renewal or a dispute. Hand it over formally, with a named owner and a review date in the calendar.

How does Redress Compliance run a Java cleanup?

As a fixed scope buyer side project with the evidence pack as the contracted deliverable. We run the six population sweep, write the method note, drive the supplier correspondence, and hand back a register that your own asset team maintains afterwards. We do not resell any distribution and we do not implement.

Related programmes and background: Vendor Shield, the Renewal Program, the Benchmark Program, the Software Spend Assessment, our benchmarking method, about us, the management team, our locations, and contact.

Score your Java cleanup readiness against the buyer side benchmark in under five minutes.
Open the Java Readiness Checklist →
White Paper · Oracle

Download the Oracle ULA Decision.

A buyer side framework that pairs Java cleanup, audit defense, and ULA decision making in a single negotiating play. Includes metric defense templates, retirement evidence checklist, and the renewal anchor table used across hundreds of Oracle engagements.

Independent. Buyer side. Built for CIOs and procurement leads carrying Oracle Java exposure or facing a universal subscription renewal. No vendor influence. No sales kickback.

Oracle ULA Decision Framework

Open the white paper in your browser. Corporate email only.

Open the Paper →
30 to 70%
Java cost reduction
8 to 12
Weeks to cleanup
3
Exit routes
500+
Enterprise clients
100%
Buyer side

We cut the Oracle Java quote from three point two million to seven hundred thousand inside ten weeks. The retirement evidence file made the renewal defensible and closed the universal subscription debate.

Group Head of IT Procurement
European industrial group
More Reading

More from this practice.

Oracle Hub →
Java Audit Defense Tactics
Oracle · Article
Java Audit Defense Tactics
The Universal Subscription audit.
16 min read
How to Fight an Oracle Audit Claim
Oracle · Article
How to Fight an Oracle Audit Claim
Disputing the LMS findings.
16 min read
Oracle Java Licensing Reference
Oracle · Pillar
Oracle Java Licensing Reference
The full Oracle Java licensing map.
22 min read
Oracle Cost Optimization
Oracle · Pillar
Oracle Cost Optimization
Cost takeout across the Oracle stack.
26 min read
Oracle Audit Response Playbook
Oracle · Pillar
Hit With an Oracle Audit? The 90 Day Response Map
The 12 step response.
24 min read
Editorial photograph of enterprise contract negotiation strategy

Java drift is a fixable problem.

We have run 500+ enterprise clients across 11 publishers. Every engagement starts with one conversation.

Oracle Java intelligence, monthly.

Universal subscription metric movement, third party JDK release news, audit script patterns, retirement evidence templates, and the wider Oracle Java commercial leverage signals across every engagement.

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