Using Java 11 In Production: Important Things To Know

If you stay up to date on news from the Java community, you may have heard that Oracle have changed their support model for Java.  Some news is even suggesting that we now have to pay to use Java – this is not true!

This topic is quite a complex one since there are a number of overlapping changes that have come together since the release of Java 8. The new six-monthly release cadence and Oracle’s changes in licensing and support model mean that any organization that deploys a Java application should take this opportunity to look at:

  • Where they get their JDK from (e.g. Azul, IBM, Oracle, Red Hat, or other OpenJDK build)
  • Which versions of Java they use in production
  • Whether or not they expect to get updates (e.g. patches and security fixes) for these versions of Java
  • Which versions they want to use in the future
  • How frequently they want to update their version of Java (i.e. to the next major version)
  • What sort of support (i.e. triage and bug reports) they expect for their version
oracle-license-change

This warning is on the download page for Oracle’s commercial JDK – don’t ignore it!

Changes to the Oracle JDK

In the past, many of us simply downloaded Oracle’s JDK and used this in development, in testing, and in production.  From Java 11, Oracle has changed the license of their JDK, so instead of having a single JDK build which can be used either commercially (i.e. with paid support) or for free (which many of us were doing), they now have two different JDK builds:

  • Oracle’s JDK (commercial) – you can use this in development and testing for free, but if you use it in production you have to pay for it
  • Oracle’s OpenJDK (open source) – you can use this for free in any environment, like any open source library

Note that since Java 11, Oracle’s commercial JDK and Oracle’s OpenJDK builds are functionally the same, so we should be able to run our applications on either without having to make any changes or losing any features.

Support and Updates

There’s an important difference between these two builds though – if you’re using Oracle’s commercial JDK, you’ll get updates and support.  If you’re using Oracle’s OpenJDK build, Oracle won’t be providing updates to past versions. What this means is now Java 11 is out Oracle will no longer be updating their OpenJDK builds for 10 or 9. So, if you’re using Oracle’s OpenJDK build, you should be prepared to update to each new version of Java as it comes out (or run an older version that won’t get updates).

Having said that, Oracle is not the only vendor in this game.  For years, we’ve been used to using their JDK for free and so it has generally been our default, but there are other vendors who provide JDKs, and they have different support models (free and paid for), and different attitudes towards providing updates for different versions of Java.  Some of these other vendors, for example, may continue to provide updates and/or support for Java 9 (which Oracle will not).

Stephen Colebourne has written a post summarizing the different JDK builds from the different vendors, and explaining how (and why) all these vendors provide different builds based off the same code (i.e. OpenJDK).

If you don’t want to use either of the Oracle JDK builds (for example if their support or updates policies doesn’t suit you), investigate what Azul, IBM, Red Hat, and the community-led AdoptOpenJDK have to offer instead.

Conclusion

This summary is something I wrote in September’s Annotated Monthly, updated to reflect the release of Java 11:

  • You can still download the commerical Oracle JDK for free and use it for free in development/test environments.
  • Oracle’s JDK 8 will no longer receive public updates after January 2019. If you want to receive updates to Java 8, you may need to pay Oracle or to find another JDK build.
  • As of Java 11, OpenJDK has feature parity with Oracle’s JDK, so if you want to use a free JDK, use OpenJDK. You can download Oracle’s OpenJDK 11 build, or builds from the community led AdoptOpenJDK.
  • The ongoing support and updates for “older” versions of Java (including 9 & 10) has changed since the introduction of the six-monthly release cycle.
    • For Oracle’s commercially-licensed JDK, Java 9 and Java 10 are no longer updated or supported.  If you’re currently using Oracle’s JDK, you need to look at which version(s) you’re using and which versions you want to use going forward, and you need to understand Oracle’s support model (and prices) if you want to use it in production.
    • If using OpenJDK, you may need to upgrade to the latest version as soon as it’s available, depending upon which vendor’s build you’re using. This advice applies to pretty much any free open source library or framework.
    • Other vendors may offer support for Java 9 or other versions.
  • If you want full support or updates for the version of Java you’re running in production, you should compare and contrast the support models and prices of Azul, IBM, Oracle and Red Hat. Note that these companies always had free and paid for services and support, so none of this is really new.

Further Information

This entry was posted in News & Events and tagged , , . Bookmark the permalink.

23 Responses to Using Java 11 In Production: Important Things To Know

  1. Pingback: Java SE 11: The Great Removal – Kynosarges Weblog

  2. Łukasz Matuszewski says:

    Main question is: can i use jlinked binary of my app (with all jre based modules from Oracle JDK) and sell it as my product?

  3. Varuna says:

    The latest post from Stephen Colebourne’s blog is Do not fall into Oracle’s Java 11 trap, which is posted at https://blog.joda.org/2018/09/do-not-fall-into-oracles-java-11-trap.html?m=1. What is your comment about this last post from Stephen

    • Trisha Gee says:

      The reason I wrote this post is pretty much the same reason Stephen wrote his – to make people aware that we should no longer be downloading the Oracle (commercial) JDK build as the license states that you have to pay to use it in production. So, from that point of view I believe Stephen and I are in agreement.

      I do think, however, that Oracle has made a bigger effort than one would expect from such a big (and money-incentivized) company to make people aware of these changes and to help people to not fall into the “trap”. They’ve been active on Twitter and mailing lists publicizing the changes, they’ve posted numerous blog posts trying to clarify the situation, and they were actively involved in the “Java is still free” document from the Java Champions. They’ve also posted a big notice on the download page of the commercial JDK warning those about to download it that the license has significantly changed, and providing a link to the open source version as well. Granted, the download page doesn’t specifically state “if you want to use it for free in production don’t download this”, but Oracle has gone out of their way to help developers understand the situation.

      • Trisha Gee says:

        In fact I’ve just updated this blog post to include the warning from Oracle’s download page, to not only show it exists but to help people understand that this article is explaining some of what that warning means.

  4. Franz says:

    Thanks for that great post. It makes a lot things more clear to me.
    But I still wonder how it works for the JRE. You wrote, the JDK is free for development and testing, but not for production. Actually, you would use the JDK for development and the JRE for production.
    How does it work here? Is there also an open JRE? Or is OpenJDK meant to be used as productive JRE as well?

    • Trisha Gee says:

      I actually don’t know the answer to that. I know there’s no free JRE from Oracle, and last I heard you could build an OpenJDK JRE but they weren’t distributed, but I’m not sure if that’s the case any more. I will find out and post on the blog when I know more.

    • JTW says:

      There is no separate JRE any longer. So there is no JRE you can download from Oracle or anywhere that doesn’t make their own non-compatible distributions, only a JDK (which, to be fair, is about the same size that just the JRE used to be).

      Your ONLY option if you don’t want to pay someone big money for a support contract is Oracle’s OpenJDK, which comes with no support whatsoever and only 6 months of even security updates.
      AND it ties you to the GPL which may have disastrous results for your code ownership.
      While the CE is there I’m not so sure it covers all scenarios when running against it, rather than just compiling against it as it only covers the old standard class library.

  5. Elhanan Maayan says:

    “Java is still free” document is a joke in my opinion, giving us a document stored somewhere on a google drive(!) which was written by a bunch of people that most of them don’t work for oracle, claiming that it’s still free ,is something that nobody can really use.

    Our lawyers don’t even permits us to use openJDK with it’s CPE licence, so unless this document isn’t promptly presented in both oracle’s and openJDK site, as a proper webpage i’m not sure how it’s use to anyone..

    • Jeff says:

      The OpenJDK 11 download page on java.net states: “This page provides production-ready open-source builds of the Java Development Kit, version 11, an implementation of the Java SE 11 Platform under the GNU General Public License, version 2, with the Classpath Exception.”, and links directly to the full license text, also stored on java.net. I’m not a lawyer but to me that seems like a fairly clear and straightforward statement of the OpenJDK’s freeness. I imagine the license text is also contained within the download archives themselves.

      • Elhanan Maayan says:

        there’s only one tiny tiny difference, and that’s the word documents says it’s “free for commercial use” the offical page does not.
        our own lawyers do not allow us to use anything that has a CPE in it, and that includes any jar with official java api, so if i wanted to use websockets api in java se, i had to resort to netty’s implementation.

  6. Jeff says:

    I am the solo developer of a niche desktop Swing application with a fairly non-technical user base. For me the most serious concern about these developments is that they seem to signal the death of “compile once, deploy everywhere”. At present, I can build a jar on my Linux development machine and distribute it to my users, mostly on Windows and Mac machines. Even my most non-technical users can manage to download a JRE from java.com and install it with the graphical installer, but the majority of them would not be capable of downloading a zipped OpenJDK build and installing it correctly.

    What I’m supposed to do from now on is to use jlink et al. to produce a binary for each platform with the necessary JDK bits bundled. Except that those packaging tools don’t support cross-compilation, so now I need to maintain three build environments instead of one. I also need to buy a Windows license, and I need to buy an entire Apple computer because the license for OS X forbids running it on anything but Apple hardware.

    I realize that my use case is probably not a common one, but for me personally it’s a worrying development. For now, I’m planning to stick with Java 8 until the end of public Oracle support for the JRE ends (recently extended to 2020), then evaluate my options. Perhaps by then there will be a third party offering user-friendly OpenJDK installers, or even a cross-compiling build tool for Java…

    • Elhanan Maayan says:

      you may have a bigger problem as i’ve heard that swing in openJDK doesn’t work as well, personally i think this will signify the end of java, but no one believes me.

      not sure i follow, why would it be complicated to unzip something? the jre should work as it is, it may not have a path, but it should work…

      you bigger problem is users downloading the RIGHT version, for you app..

    • Trisha Gee says:

      You’re not the only one I’ve heard from in this situation, and the new changes make it very challenging for people like you. I believe that the health of the Java community depends upon making things as easy as possible for you, and I believe that a solution will be available. I’m keeping an eye on the situation myself and will share solutions on this blog as and when they become available.

  7. David says:

    If using the Open Source GPLv2+CE license Oracle Open JDK build for Java 11 is it true that you’d need a licence if you want support beyond 6 months?

    The story I heard was that you can use Oracle Open JDK for “free” commercially from here: https://jdk.java.net/. However, when it comes to the new cadence of 6 month releases I was told that if you want support past the 6 months you’d need to pay (so LTS indicates it’ll get support/patches, but as soon as 12 is available those on 11 would need to upgrade to 12 unless they have a paid commercial license for 11).

    Is this true?

    • Trisha Gee says:

      Oracle don’t provide “support” for the Oracle OpenJDK build, but they never provided support for non-paying users of the Oracle JDK either. What they did provide was updates & security patches up until some end-of-life point. From Java 9 onwards this end of life for Oracle’s OpenJDK builds 6 months, as you’ve mentioned.

      If what you mean by “support” is updates and patches, then yes, what you say is true: either use Oracle’s OpenJDK build and update every 6 months, or get a commercial license for 11.

      Alternatively:
      – stick with Oracle’s OpenJDK 11 indefinitely, knowing that there won’t be any updates / patches after 12 comes out
      – use an OpenJDK build from https://adoptopenjdk.net/. Adopt OpenJDK aims to provide updates for the LTS release (in this case, Java 11) for at least three years. So you don’t need to upgrade to 12 when it comes out
      – choose another vendor. Azul, IBM and Red Hat also have free versions of Java and different support/updates models.

      • Elhanan Maayan says:

        IBM doesn’t really provide a JVM, unless you purchase one of their products, their distributions is even murkier then oracle’s

        • Trisha Gee says:

          IBM have downloadable JDKs which “provided you adhere to those license terms you can use it in a personal or enterprise setting.”. Granted, I haven’t checked the terms of their license specifically. But it’s also worth noting IBM in the context of this post anyway since many people are using the IBM JVM in IBM Application Servers etc.

          However your comment talks specifically about a JVM, and IBM actually do provide a free JVM, called Open J9, which they contributed to the Eclipse Foundation. You can download JDKs with the J9 JVM from AdoptOpenJDK.

          • Elhanan Maayan says:

            the IBM licensce agreement talks that you can only use the JDK in what’s specified in the “invoice”. which complicates matters, plus there’s no windows distro.

            openJ9 is VM implementation, it does not include the compiled binaries, and cannot be considered as a comparable replacement like zulu JDK, or adoptOpenJDK which we cannot use because they a CPE license.

Leave a Reply

Your email address will not be published. Required fields are marked *