Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

OK, Java Is Still Free, But Which Version Do I Use and Recommend to My Clients?

DZone 's Guide to

OK, Java Is Still Free, But Which Version Do I Use and Recommend to My Clients?

Whether you are just starting to use Java, or have been using Java for years, switch over to the most recent version — it's as simple as that.

· Java Zone ·
Free Resource

There remains significant confusion over the licensing and distribution of Java. I know this because I have contributed to this confusion. There is a debate in my college department over which version to use and how updates will be handled. Donald Smith, Sr. Director of Product Management at Oracle in Ottawa, has been kind enough to clear up these issues, probably for the 100th time. The purpose of this brief article is to summarize what I have learned. Before I begin, you should first read the following posts:

https://www.oracle.com/technetwork/java/java-se-support-roadmap.html
https://blogs.oracle.com/java-platform-group/oracle-java-se-releases-faq
https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11-and-later

Finished? Then, let’s begin.

Which Java Distribution Should I Use?

The distribution from https://jdk.java.net always has the latest JDK release including quarterly security updates. This is a tck-verified, quality-tested, production-ready and open-source licensed JDK built by Oracle. As of Java 11, this code base is effectively identical to the non-open-source licensed Oracle JDK. See the links above for the cosmetic, non-functional differences. You can still download Oracle Java from the Oracle Technology Network (OTN) and use it freely for personal use or training. Still, if you have any concerns or plan to distribute a product based on Java, get it from https://jdk.java.net. Have your clients use this as well.

There are many other channels for JDK releases as well from various Linux distributions, hardware vendors, software ISVs, and other support providers. Depending on your needs, those may be options as well. More on this later in this document.

What Does Long Term Support Mean?

Oracle will provide paid support for LTS versions; currently, this includes Java 7, 8, and 11, for a significant length of time. Java 11 will have extended paid support until at least 2026. Oracle also provides commercial support for non-LTS releases, such as Java 12, with the understanding that those releases are superseded by the subsequent release. For more information, see https://www.oracle.com/technetwork/java/java-se-support-roadmap.html

What Does the 6-Month Cadence of Java Releases Mean?

Every September and every March, a new feature release of Java will be available. These new versions replace the similarly timed updates as experienced in the legacy cadence model such as in Java 8. The last version of 8 is 212, though that number is not the number of distributed versions. Still, there were a lot of versions of 8 some even including new features. The six-month release will now be how patches, fixes, and updates will be delivered.

In a brief back and forth on Twitter with Brian Goetz, Java Language Architect at Oracle, he confirmed Java’s commitment to backward compatibility. If you have code you developed in Java 8, then you can rest easy that it will run in Java 13. If you are looking for a new developer for a Java 11 project and they tell you they trained on Java 13, then hire them; they also know Java 12, 11, 10, 9, 8, etc. Java will evolve and will change and that is how it should be.

Isn’t the Industry Reluctant to Use Anything Other Than an LTS Version?

Initially, yes, but only because of misunderstandings and simply wrong statements from people like myself. Just as you used to update your Java 8 when you heard that there was an update, you will update to the next version. The difference is that there is now a regular predictable schedule. This aligns with modern application development practices and other platforms that expect more frequent but manageable updates rather than tectonic shifts every 3-4 years. This will help Java as it continues to be the number one development platform for the cloud.

I Write Web Code Against an Application Server, Don’t They All Need Java 8?

Currently, the latest versions of IBM’s Open Liberty and RedHat’s Wildfly run on Java 12, as do others. My informal tests running servlet and JSF applications compiled with Java 12, but with the Maven settings for the compiler source and target to 1.8, it showed no problems even when the server, Payara, was running on the Java 8 JVM.

What About All Those Other Distributions of Java?

Amazon, SAP, Azul, RedHat, Bellsoft, and AdoptOpenJDK, just to name a few, are making distributions of Java available now. The only significant difference between them and what is available from https://jdk.java.net is that these come with installers while https://jdk.java.net only supplies zip/gz files. They are built almost completely from the same source code. Java does not need to be installed on any platform. Just unzip the distribution and configure your application, IDE, or OS to know where it is. All an installer does is unzip and write the optional system configuration to the OS for you. These companies simply provide an alternative to Oracle for paid support or provide a JDK for platforms other than Intel/AMD such as for ARM. There have been alternative distributions of Java for some years now, for example, with Red Hat providing an OpenJDK release since 2008 on Java 6.

Conclusion

If you are just starting to code in Java, then use the most recent version. If you are using Java, then update to the most recent version. If you are worried about possibly running afoul of Oracle licensing or prefer to favour open source then download Java from https://jdk.java.net otherwise download from the OTN.

Written with the assistance of Donald Smith

Topics:
java ,free ,openjdk ,version ,opinion ,lts ,JDK ,release cycle

Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}