Skip to content

Instantly share code, notes, and snippets.

@oxbowlakes
Last active September 18, 2018 09:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save oxbowlakes/cfeda4e2d3cf363a11dcad5a95238ed2 to your computer and use it in GitHub Desktop.
Save oxbowlakes/cfeda4e2d3cf363a11dcad5a95238ed2 to your computer and use it in GitHub Desktop.

WTF is going on?

Don't let anyone mislead you that there are no big changes. The big change is that fixes and security updates will no longer be provided to old versions of Java unless:

  1. You are a paying customer, in which case Oracle will be patching 8 years' worth of LTS versions, as well as the current version
  2. The community backports these fixes to OpenJDK and makes them available

Step back a bit. What is OpenJDK and what does LTS mean?

Historically OpenJDK was quite separate from OracleJDK. This is no longer the case. Oracle are basically providing two separate distributions of Java: OracleJDK and OpenJDK. They are meant to be technically equivalent, although it should be pretty obvious that OracleJDK is likely to ship with add-on features aimed at enterprises (e.g. management tooling or better GC).

The release cadence (why can't these people just use normal English?) is going to be 6 months. So the version cycle is going to be something like this

Apr 2014 - Java 8  (LTS)
Mar 2018 - Java 9 
Sep 2018 - Java 10
Mar 2019 - Java 11 (LTS)
Sep 2019 - Java 12 
Mar 2020 - Java 13
Sep 2020 - Java 14
Mar 2021 - Java 15
Sep 2021 - Java 16
Mar 2022 - Java 17 (LTS provisional)

OpenJDK and OracleJDK builds will be pushed out every 6 months but importantly, fixes and security updates will only be made available to the current version. If you are a paying customer, you will additionally get these backported to old LTS releases. Oracle have said that:

  • Java 8 is an LTS release
  • Java 11 will be an LTS release
  • One release will be designated as the LTS release every three years
  • Oh, LTS stands for Long Term Support. Sorry.

Oracle have also said that, as of Java 11, OracleJDK cannot be used for deployment unless you are a paying customer.

To pay or not to pay

The cost of a Java subscription is $2.50 per desktop per month and $25 per server-processor per month. There are discounts for large numbers of processors. A company with 5,000 processors and 200 employees is looking in the ballpark of $250,000 - $1,000,000.

You may decide to rely on the likes of AdoptOpenJDK, who aim to backport fixes to 4 years' worth of LTS releases.

There are other companies (e.g. Azul) who are positioning themselves as providing LTS backports for less than an Oracle subscription, but whether they are going to do anything more than supplying the AdoptOpenJDK binaries is unclear.

So I'll use OpenJDK then

Probably. But you still have a decision to make that you didn't used to:

How often am I going to upgrade Java?

Let's say it's Oct 2021. The "current" version of Java is 16. You upgraded in June 2021 to Java 15. A critical security vulnerability is discovered and Oracle release a patch. The patch is released to Java 16 and (for paying customers) to Java 8 and Java 11. You are not on any of these versions; what do you do?

You will either need to upgrade every six months to ensure you are on the latest version, or you should stick to LTS versions. This remains true regardless of whether you plan to use OracleJDK or OpenJDK. It is claimed that the releases will include a steady stream of features and the migration 9->10->11 is akin to 8->8u20->8u40 (also on a six-monthly cycle).

So OpenJDK and OracleJDK are the same?

No. Desktop OpenJDK does not ship with JVisualVM for example, although that (branded as VisualVM) is available as a standalone program. I'm currently trying to find out more about what happens in practice when we try and move from OracleJDK to OpenJDK on our development servers.

And this all happens when?

  • Sep 2018 (Java 11) is the first version of OracleJDK which is for paying customers only [1]
  • Jan 2019 will be the last time that Oracle backport fixes/updates to Java 8

Shiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiit

Quite! A sensible plan is to migrate in the latter half of 2018 to OpenJDK 8 (an LTS, remember), potentially migrating to OpenJDK 11 (also an LTS) after that is released, relying on AdoptOpenJDK for fixes/updates.

oxbow_lakes

References

Footnotes

[1] - there are caveats to this, but this is the thrust

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment