No Free Java LTS Version?

CodeFX Weekly #56 — 16th of February 2018

Nicolai Parlog
nipafx news
Published in
5 min readFeb 21, 2018

--

Update: I wrote a Java 11 migration guide that covers the final result of the release cadence / licensing / long-term support kerfuffle. If you prefer video, I also made one of those.

Hi everyone,

I’m incredibly sorry for not writing last week. I had to hand in a complete draft of The Java Module System on Monday, 12th, so all I did from Friday to Monday was work, eat, and sleep. I simply forgot to write something and only remembered Tuesday. So here’s what I planned for last week’s newsletter on how often you’re gonna have to update your JDK.

Oracle is clearly shaking things up. Not only is it moving Java to a six-months release train, it is now likely that users will have to make each jump immediately if they want to keep getting free updates. That’s right, Oracle will no longer be providing free long-term support.

I send this newsletter out every Friday. Yes, as an actual email. Subscribe!

State of the Java

There are a few different pieces of information that I finally put together last week. Let’s go through them one by one.

Release cycle

The six-months release cycle is not only settled, it is already put into action and everything’s on target for a Java 10 release on March 20th (yes, 2018).

Every major release $X will see two public updates $X.0.1 one month after release (e.g. Java 10.0.1 in April) and $X.0.2 three more months down the road (e.g. Java 10.0.2 in July). Then it's just two more months to the next feature release.

Oracle JDK vs OpenJDK

The next piece of the puzzle is that Oracle will stop releasing its JDK for free: Java 10.0.2 (July 2018) will be the last free Oracle JDK. (Ignoring Java 8, which is supported until January 2019, but who cares about 8, right?) From then on, users either need to pay Oracle (or somebody else) for use of their JDK or rely on OpenJDK.

Update 2018–09: Oracle JDK 11+ will be free to use in development and testing, but not in production.

©Oracle (I assume)

(The best source I have for that is a slide from Sharat Chander, director of Java SE Product Management at Oracle. If you have a better one, let me know. Update 2018–02: A helpful reader showed me the release map on the left, which Oracle sent out via email. You can see that 11 is marked for customers.)

This might sound rather shocking. Many projects made the experience that Oracle’s JDK provides better performance, a more stable experience, or a richer feature set than its open counterpart. Oracle has been working on this, though:

[The] intent is that within a few releases there should be no technical differences between OpenJDK builds and Oracle JDK binaries.

Consequently, Oracle has been and still is working on eliminating its JDK’s reliance on proprietary implementations and tools. One example for that is the Marlin Graphics Renderer, which replaced the closed-source Ductus and the open-source Pisces as JDK 9’s default graphics rasterizer.

Oracle will also open source commercial features such as Java Flight Recorder previously only available in the Oracle JDK.

(By the way, Marlin is developed by Laurent Bourgès, an independent FOSS developer. As I understand it, he’s not supported by Oracle — you can help him maintain Marlin by chipping in for his gofundme campaign.)

When those steps were announced in September 2017, the target date was set to “late 2018”, which, surely not coincidentally, aligns perfectly with the release of Java 11.

Talking about releases, the release cycle mentioned above applies to Oracle and OpenJDK alike, but only OpenJDK builds will be freely accessible. They will be built and distributed by Oracle on jdk.java.net and available under GPL 2 with class path exception.

Backporting patches

Patches that fix security holes or bugs will by default go into the main development line. From there, Oracle will port them back to the branch for the currently supported OpenJDK release, but no further. That means once Java $X has been released, the branch for $(X-1) sees no more patches by Oracle.

(This was mostly conjecture, but I asked Mark Reinhold about it during an Ask the Architect session at Jfokus and he confirmed it. Unfortunately, the session is not available online.)

That means if the community wants to use any major version for more than six months, it has to merge fixes and build releases itself. I’m currently not sure whether that will happen, although one contender seems to put their hat into the ring: AdoptOpenJDK.

AdoptOpenJDK provides prebuilt OpenJDK binaries from a fully open source set of build scripts and infrastructure.

Just a few hours before sending out this newsletter I learned that AdoptOpenJDK might plan to backport changes to LTS versions:

That would be great!

Correction/Update 2018-09: AdoptOpenJDK “only” builds the OpenJDK repository for various Java versions and platforms — as an entity, they are not merging fixes. Some individual members want to do that, though, and it looks like they will get prominent support. Chances are, some Java-affine organization like Red Hat will adopt the OpenJDK 11 update project and merge fixes into it for a couple of years. Red Hat’s Andrew Hayley writes:

[L]et me assure you of one thing: whether by Oracle or Red Hat or someone else, JDK LTS releases will continue to be supported. We all have a lot invested in Java, and we won’t let it fall.

Update 2018–09: For a more recent presentation of what are essentially the same facts, read Stephen Colebourne’s articles or my Java 11 migration guide:

PS: Don’t forget to subscribe or recommend! :)

Published by Erich Ferdinand under CC-BY 2.0 — I transformed the perspective

--

--

Nicolai Parlog
nipafx news

Nicolai is a #Java enthusiast with a passion for learning and sharing — in posts & books; in videos & streams; at conferences & in courses. https://nipafx.dev