Home  /  OpenJDK Migration  /  Article
OpenJDK Migration

Container and Cloud Java Migration to OpenJDK

Containerized and cloud hosted Java is the fastest part of an estate to move off Oracle Java, because a single base image change can carry the new runtime everywhere the image runs. Prove the pattern once, bake it into the pipeline, and you remove a large block of the per employee exposure with very little hand work.

Why the cloud estate moves first

If your Java runs in containers or on managed cloud platforms, you are sitting on the easiest migration in the whole program. The runtime is no longer scattered across machines that people log into and patch by hand. It lives in an image, and that image is built by a pipeline you already own. Change the base image to one built on a free OpenJDK distribution, rebuild, and the new runtime flows to every place the image is deployed. That is the difference between a migration measured in months of manual work and one measured in a handful of pipeline changes that propagate on their own.

This matters commercially because the Universal Subscription does not care which workloads actually use Oracle Java. Since January 2023 the price is set by your total employee count, counting every full time and part time employee, every contractor, and every temporary worker. The only way to shrink that bill is to remove the dependence on Oracle Java entirely, and the cloud estate is where you can remove the most dependence for the least effort. That is why a buyer side migration almost always sequences the containerized and cloud workloads near the front.

The base image is the unit of change

In a containerized estate the runtime is part of the image, so the migration question becomes which base image you build on. Today many images are built on an Oracle Java base or pull an Oracle runtime during the build. The move is to switch to a base image built on a free OpenJDK distribution, rebuild your application image, and run your tests. Because OpenJDK and Oracle Java SE are built from the same source for the same release, applications run on the new image without code changes in the large majority of cases. The work is in proving the change once and then standardizing it, not in rewriting software.

  1. Pick the standard base.Choose one or two approved OpenJDK base images and the Java versions you will support. This becomes the standard the whole estate builds on.
  2. Migrate one image.Change a single low risk service to the new base image, rebuild, and run the full test suite. Confirm startup, memory behavior, and observability all hold.
  3. Bake it into the pipeline.Update your build templates and golden images so new builds default to the OpenJDK base. The change now propagates without per service effort.
  4. Roll across services.Rebuild and redeploy services in waves, watching operational signals through one business cycle before widening.
  5. Retire the Oracle base.Remove the Oracle Java base images from your registry so nothing can quietly pull the old runtime back in.

Managed runtimes and platform services

Cloud platforms add a wrinkle worth knowing. Many managed services let you pick the Java runtime, and several offer a free OpenJDK build as a first class option. Where the platform manages the runtime for you, the migration can be as small as selecting a different runtime in a configuration setting and redeploying. Where you bring your own runtime, you are back to the base image pattern above. Either way the cloud platform is usually working in your favor, because it standardizes the runtime and removes the manual patching that makes a sprawling on machine estate hard to move.

Be careful with one trap. A managed service that advertises a Java runtime is not necessarily shipping Oracle Java, and you should not assume it is. Confirm which distribution each managed runtime actually uses, because in many cases you are already running a free OpenJDK build and carry no Oracle Java dependence there at all. Knowing this prevents you from paying to defend exposure you do not have, and it sharpens the inventory that the rest of the program depends on.

A worked cloud rollout

Consider an anonymized software and services company running several hundred Java microservices, almost all containerized and deployed through a single pipeline. The team approves one OpenJDK base image, migrates an internal reporting service first, and runs the existing test suite and a representative load test. Everything passes. They update the shared build template so every new image build uses the OpenJDK base, then rebuild and redeploy services in waves grouped by owning team. Within two waves the bulk of the estate has moved, and the Oracle base images are pulled from the registry. A small number of services with a vendor constraint are parked for a later phase. The figures are indicative, but the shape of the program is the one that works again and again: change the base, prove it once, let the pipeline do the rest.

Performance, memory, and the things people worry about

Teams often expect a runtime change in the cloud to affect performance, and it rarely does in any way that matters. Because the distributions are built from the same source, throughput and latency are equivalent for the same release. Where a difference shows up it is almost always a garbage collector setting or a runtime flag rather than the distribution. The safe method is to carry your existing tuning across, run a representative load test, and adjust only where the data points you. Resist retuning everything at once, because mixing a migration with an optimization project makes any regression hard to attribute and slows the whole rollout.

Cloud and container migration checks
AreaWhat to confirm
Base imageApplication image builds and runs on the OpenJDK base
Functional parityThe existing test suite passes on the new image
PerformanceThroughput and latency hold under representative load
Image size and startContainer size and cold start are within expected bounds
Managed runtimesEach platform runtime is confirmed and standardized
Registry hygieneOracle Java base images are removed so they cannot return

Build pipelines and supply chain

The runtime your code is built and tested against should match the runtime it runs on in production. As you migrate, point your continuous integration on the chosen OpenJDK distribution so compatibility is proven automatically with every change rather than checked once. This also tidies your software supply chain, because you now pull runtimes from a known set of approved images rather than from whatever a given build script happened to fetch. A clean, standardized set of base images is easier to scan, easier to patch, and easier to prove during an audit.

Keeping the saving once you have it

A cloud migration removes a per employee charge without adding a runtime license cost, because free OpenJDK distributions carry no license fee to run. To keep that saving you have to keep the estate from drifting back. Govern the base images the same way you govern any platform standard: approve one or two distributions and a small set of releases, name an owner for the update pipeline, and make the OpenJDK base the default that new services inherit. The discipline that makes the migration succeed is the same discipline that keeps Oracle Java from creeping back into your registry six months later.

Cold start, image size, and serverless

Containerized teams sometimes worry that a runtime change will affect image size or cold start, which matter for autoscaling and serverless workloads. In practice the effect is small and is driven by which base image variant you choose rather than by the distribution being free or commercial. Slim base images keep container size down, and the cold start behavior of a given Java release is the same across distributions built from the same source. The sensible approach is to pick a lean approved base, measure image size and cold start on the pilot, and treat any tuning as a separate optimization rather than a migration blocker. For functions and short lived workloads, confirm startup on the new base under realistic conditions, but do not expect the distribution itself to be the variable that moves the numbers.

What to tell your platform teams

A cloud migration succeeds faster when the platform and application teams hear a clear, simple message. Tell them the runtime is changing to an approved free OpenJDK distribution, that applications are expected to run unchanged because the distributions share a source base, and that the change rides the existing pipeline rather than requiring per service work. Give them the approved base image, the supported Java versions, and the rollback path, then let them migrate their own services in waves on that standard. Clear guidance removes the uncertainty that otherwise turns a low risk change into a stalled debate, and it lets ownership stay with the teams who run the workloads.

Audit readiness in a cloud estate

A standardized cloud estate is far easier to defend in an audit than a sprawling one. When every image builds on a known base and your registry no longer serves an Oracle Java base image, you can show exactly which runtimes are in use and that the migrated workloads carry no Oracle dependence. This matters because LMS audits intensified in 2026 with a three year lookback, and the questions focus on where Oracle Java has run over time. A clean registry, a documented base image standard, and a migration record turn a stressful audit inquiry into a short, evidenced answer. The same hygiene that makes the cloud estate easy to operate makes it easy to defend.

Buyer takeaway

In a containerized or cloud hosted estate, the base image is the lever. Standardize on an approved OpenJDK base, prove it on one service, and let the pipeline carry the change across the fleet. That removes the largest block of avoidable Oracle Java exposure with the least manual work.

Where this fits in the program

Container and cloud workloads are usually the opening phase of a larger plan. Once they are moving, bring across the server side and desktop workloads, then negotiate the residual against a much smaller employee envelope. For the full method see the OpenJDK Migration Playbook. To size the prize before you start, read our guide to estimating the savings from an OpenJDK migration, and for the centrally managed workloads that pair naturally with the cloud estate, see migrating server side Java to OpenJDK.

Next step

We can help you choose the base image standard, prove the pattern on a first service, and sequence the waves so the cloud estate moves cleanly and the saving lands before your next renewal. Book a strategy call and we will scope it for your environment.

Plan the move before the next true up.

We map your estate, isolate what truly needs Oracle Java, and build the migration that shrinks your employee envelope. Fixed Fee from 18,000 dollars or Gainshare with no risk to you.

Book a Strategy Call Get a Quote

Tell us the real numbers.

Fixed fee or gainshare, both backed by our guarantee. We sit between you and Oracle and we never take vendor money.

Get a Quote

The Java Audit Brief

Weekly intelligence on Oracle Java licensing moves and the buyer side defenses that work.

Services · Pricing · Case Studies · White Papers · The Java Audit Brief · Licensing Guide
Get a Quote · Book a Strategy Call · New York · London Not affiliated with Oracle Corporation. Independent buyer side advisory only.