Java 11 for FIRST Robotics Development

I’m not a professional Java developer, so correct me if I’m wrong…

With the Java 11 release of the JDK, Oracle is moving to offer their JDK only to paid customers for non-personal use. To my knowledge, this means that teams will instead have to use a variant of OpenJDK to write their robot code if they want to use Java 11. (Since WPILib is now being written with Java 11 in mind, this may be prudent.)

Oracle is currently offering OpenJDK builds, but they claim that they will cease doing so within six months. This means that teams will have to obtain the JDK from one of the many forks.

Notably, the Oracle OpenJDK builds lack a .exe Windows installer, which is also guaranteed to confuse many teams.

My question is this: What is the recommended OpenJDK fork to use? And what will FIRST / WPILib do to make the installlation process simple for teams that need it to be simple?

The WPILib folks will distribute their own builds of OpenJDK 11.

Will this be for development machines as well as the roboRIO?

Yes. We build our own GPL-licensed builds of OpenJDK 11 for 32-bit Windows and 64-bit Windows. They don’t have separate .exe installers; the new WPILib windows installer installs it in the right place for team use.

For Mac and Linux the Oracle-released GPL-licensed OpenJDK 11 works just fine, and on some Linux versions it is available as a package. JDK 11 Releases

What if you’re not using Visual Studio Code?

And if/when Oracle stops providing their GPL-licensed OpenJDK implementation, would another vendor’s work fine to replace it? Or is there an explicit recommendation to use the FRC/specified JDK?

I know it may be a bit earlier than you planned to answer some of these questions but I want to be prepared for 2019 :smiley:

It doesn’t matter whether you’re using Visual Studio Code or not. The installer installs the JDK separately from Visual Studio Code. We definitely recommend you use the installer to install our build of OpenJDK, as that’s what we will for sure support.

We’ve not tested another vendor’s, and can’t promise support for that reason, but as long as it’s version 11, it should work fine. Are you worried about non-Windows platforms or Windows? We’ll provide our Windows builds indefinitely. I would think people will mirror the Oracle-built OpenJDK binaries too in case Oracle stops hosting them, but I don’t think that’s a particular risk (see Archived OpenJDK GA Releases).

I am a professional Java developer and I’ve given conference talks on this topic. There’s a lot of confusion even amongst professionals about this topic.

The key points as they apply to FRC:
Oracle’s “paid” JDK is free to use if you aren’t using it on production (aka on your machine)

  • Open JDK is free forever. It is supported by Oracle from Sept 2018-March 2019.
  • After that, it is supported by the industry. Red Hat/IBM has already expressed a strong interest in doing so. Even without support, you can keep using the “old” version of JDK 11.
  • I’ve used the word “support” a few times. That means bug fixes and security patches. Realistically, people don’t patch their machines so “support” is a theoretical point anyway.
  • In March 2019, Java 12 comes out so Oracle will “supply” that version of Open JDK for 6 months. But the Open JDK they last “supplied” for Java 11 will continue to exist and be able to be downloaded.

Clear as mud?

One thing to add is even though 11 will become “unsupported” in the middle of the season, we will still continue using and supporting 11 and not 12, as a mid season update is way worse. Plus networking, which is the usual security issue, is not really an issue for teams on the Rio, or really even the desktop tools either. We will ensure our builds stay working for an extended period.

1 Like

Just want to note what “unsupported” means in this context.

Unsupported means no updates from Oracle itself to that line, but Oracle’s security updates to JDK 12 and beyond will continue to be back ported to OpenJDK 11. [1]

OpenJDK 11 is a LTS release, so it will be maintained for at least three years past its release date. [2]

(if anyone has a different understanding please let me know)

[1] : What does LTS mean for OpenJDK?
[2] :

It’ll be longer. They’ve already said Sept 2022 or longer (which is 4 years.) The “or longer” because it depends on how long the major vendors contribute patches. That’s likely to be longer than 4 years. Because in 2021 people will start switching to Java 17 and that takes time.

So definitely not something to worry about this build season :).