Java 環境のリリースとサポートに関する覚え書き

no extension
【2021-03-19 追記】Java のサポート期限ってどうなってるんだっけ?」にてサポート期間とリリースサイクルの情報を更新した。 以降,この記事はメンテしないので悪しからず。

先日 Java のリリースサイクルとサポートについて訊かれたのだが,1年半近く Java から離れていたこともあって,まったくノーチェックだった。 そこで,改めて Java 環境について調べてみることにした。

この記事はその時の覚え書きとして残しておく。 なお,特にこの記事では嘘や間違いがあればフィードバック等いただけると有り難い。 Oracle の料金体系とかイマイチよく分かっていないのだ。

Java 9 は後方互換性がない?

2017年9月にリリースされた Java 9 の最大の特徴は Project Jigsaw の成果が取り込まれモジュール化に対応したことだが,他にも

一方でJava 9は日付や通貨のデフォルトフォーマットが変更され、いくつかの構文や演算子の変更や廃止が行われるなど、Java 8以前との互換性は保証されていません。

ということで,これまで保証されていた後方互換性(backward compatibility)はなくなってしまった。 したがって Java 9 以降へのアップグレードについては十分な調査と場合によっては改修作業が必要になる。

Java 8 の無償サポートは2019年1月まで

一方, Java 8 の無償サポート期間が2019年1月までとなっていて期限が迫っている1。 有償サポートは Java SE Advanced の Named User Plus2 で2,460円/ユーザ, Processor License3 で132K円/コアとなる。

Java のリリースサイクル

Java 9 以降は6ヶ月毎に機能の追加・変更を含むメジャー・バージョンアップが行われる。 また1月,4月,7月,10月にバグや脆弱性の修正を含むマイナー・バージョンアップが行われる。

バージョンアップ・イベント
1月 マイナー・バージョンアップ
2月
3月 メジャー・バージョンアップ
4月 マイナー・バージョンアップ
5月
6月
7月 マイナー・バージョンアップ
8月
9月 メジャー・バージョンアップ
10月 マイナー・バージョンアップ
11月
12月

マイナー・バージョンアップは基本的に現行メジャー・バージョンに対してのみ行われ,過去のバージョンについてはサポート外となる。 ただし LTS (Long Term Support) 対象のバージョンについては新バージョン・リリース後もサポートが行われる。 (LTS については次節で解説)

Oracle Java と OpenJDK

Java および JDK (Java Development Kit) の実装としては Oracle Java と OpenJDK が双璧と言える。 また Oracle は JDK を GPL ライセンスでオープンソース化し OpenJDK との統合を行っている。

商用ライセンスのOracle JDKには、無償版にはないJavaのプロファイラのFlight RecorderやMission Controlといったツールが提供されています。
オラクルは現在、こうしたツールをオープンソースのJava実装であるOpenJDKにも含めるように作業を進めています。
予定ではJava 11がリリースされる2018年9月にこの作業が完了し、商用ディストリビューションのOracle JDKとオープンソース実装のOpenJDKは機能、品質両面で同じものになる予定です。

今のところ Oracle Java と OpenJDK は協力関係にあり Java 9 以降の各バージョンのリリースを同時期に行うことになっている4。 リリース時期とサポート期間は以下の通り。

Oracle Java OpenJDK
Java 9 2017年9月 - 2018年3月 2017年9月 - 2018年3月
Java 10 2018年3月 - 2018年9月 2018年3月 - 2018年9月
Java 11 2018年9月 - 2026年9月5 2018年9月 - 2019年3月
Java 12 - 2019年3月 - 2019年9月
Java 13 - 2019年9月 - 2020年3月
Java 14 - 2020年3月 - 2020年9月
Java 15 - 2020年9月 - 2021年3月
Java 16 - 2021年3月 - 2021年9月
Java 17 2021年9月 - 2029年9月5 2021年9月 - 2022年3月

Oracle Java は Java 11 以降は有償の LTS のみとなる。 LTS 対象のバージョンは3年毎にリリースされるが,サポートは(メジャー・バージョンアップしなくてもお金さえ払えば)継続可能である。

OpenJDK はオープンソース(GPLv2 + Classpath Exception)なのでそれ自体にサポート料金は発生しないが(ディストリビュータ等が有償でサポートを請け負う場合は別),サポート期間が(次のメジャー・バージョンがリリースされるまでの)半年のみとなる。

ただしOpenJDKがオープンソースプロジェクトの判断としてLTSを設定し、LTSに対するメンテナンスバージョンを継続してリリースする動きがあるとの指摘をいただきました。
[...]
これが実行されれば、Java 11、Java 17などLTSが設定されたバージョンのOpenJDKに対しては、数年間(スライドでは次のLTSのメジャーバージョンが登場するまでの3年間)、無償のOpenJDKでもメンテナンスパッチが提供されることになります。

Java 関連のサービスやアプリケーション

Java 関連のサービスやアプリケーションについて以下にメモ書きしておく。 随時加筆・修正する予定。

IDE (Integrated Development Environment)

もっとも有名な IDE である Eclipse については Oxygen.1a で正式に Java 9 をサポートしているようだ。

Eclipse のプラグインが Java 9 に追従しているかどうかは調査する必要がある。 現在 Eclipse のリリースサイクルは1年(毎年6月頃)であり,今後の Java のリリースサイクルに追従できない可能性もあるが,どうなっているのだろう。

もうひとつの有名な IDE として IntelliJ IDEA があるが,こちらも Java 9 への対応はできているようだ。

Java 9 Ready な FOSS

Quality Outreach より。 (自己申告らしいので他にもあるかもしれない)

  • Akka, Lightbend
  • Apache Derby
  • Apache Log4j
  • Apache Lucene/SOLR
  • Apache Maven
  • Apache Kafka
  • Apache PDFBox
  • Apache POI
  • BootstrapFX
  • bt
  • Byte Buddy
  • CruiseControl
  • Eclipse Collections
  • EqualsVerifier
  • GraphHopper
  • HeapStats
  • Hibernate
  • Ikonli
  • Jackson
  • JaCoCo
  • JITWatch
  • jOOQ
  • JOSM
  • JSilhouette
  • JUnit 5
  • Lillith
  • LWJGL
  • Mockito
  • Rapidoid
  • RedHat Wildfly
  • RxJava
  • Spotbugs
  • Spring Framework
  • Woodstox

Apache Tomcat は Java 9 Ready じゃない?

ブックマーク


  1. ただし「個人で Java SE を利用する(non-corporate desktop use)場合、2020年12月末まで引き続きアップデートを受け取ることができます」。 ↩︎

  2. Named User Plus は利用するユーザ数に応じて料金がかかる。サポート料金とは別に12K円/ユーザ必要。 ↩︎

  3. Processor License は Web サービスなど不特定多数のユーザが利用する場合のライセンス。なお MPU 単位ではなくコア単位になるため,コア4つの MPU なら料金は4倍になる。サポート料金とは別に600K円/コア必要。単一コア単一プロセッサのみの構成ならユーザ数が50人を超えれば Processor License のほうが割安になる。 ↩︎

  4. ただし開発の主導権は Oracle 側が握ってる印象。 OpenJDK では,メジャー・バージョンのアナウンスはあれど,不具合や脆弱性に関する周知プロセスが皆無なので,結局のところ Oracle の動向を見ないと何も分からない。これで Oracle が LTS に入ったらどうするつもりなのか… ↩︎

  5. 5年間の Premier Support および3年間の Extended Support を併せた期間。更に延長する場合は Sustaining Support の契約が必要。 ↩︎ ↩︎