新しいリリースモデルはJavaを使う人 全員要注目だった

9月の頭くらいに、Javaのリリースモデルが6ヶ月ごとの短期リリースになるということが発表されてました。
で、「へぇ〜」みたいな感じで見てたのですけど、JavaOneでの話を聞くと、これ結構大変なのかも、ということになってそうなので、ちょっとまとめてみます。

追記:2018年05月の状況をQiitaでまとめています。
[Javaのサポートについてのまとめ2018 - Qiita](https://qiita.com/nowokay/items/edb5c5df4dbfc4a99ffb)

Javaの新しいリリースモデル

公式情報はこちらにまとめられています。(10/4にアップデートされてます)
http://www.oracle.com/technetwork/jp/java/eol-135779-ja.html


ざっくり言えば、6ヶ月ごとに機能リリースを行い、3ヶ月ごとにメンテナンス/セキュリティリリースを行い、基本的にはサポートは次の機能リリースが出るまでだけど、3年ごとに長期サポート付きのLTSリリースを行う、という話で、いままでも話されてました。


けど、これだけだと大事なことが抜けています。
LTSはOracle JDKのみで、オラクルと契約した人だけがダウンロードできるようになる、ということです。

つまり、6ヶ月ごとにOpenJDKがリリースされ、その1ヶ月後と4ヶ月後にメンテナンスアップデートが出て、6ヶ月後に新しい機能を持ったOpenJDKがリリースされて、前のバージョンのOpenJDKはサポート終了。そして3年ごとにLTS付きのOracle JDKがOrackeと契約してる人に提供され、こちらはサポート期間中メンテナンスアップデートが提供される、ということになります。


よく見ると、Oracle JDKが顧客向けになることはOracle Blogsで触れられてますね。

Oracle JDKは、OpenJDKのバイナリがOracle JDKと置き換え可能になると(2018年後半ごろ予定)、主に商用およびサポートの顧客向けになります。

https://orablogs-jp.blogspot.com/2017/09/faster-and-easier-use-and.html

Java 8の公式アップデートは2018/9まで

Java 8は2018/9までで、そしてそこまではJava 9もJava 18.3も短期サポートなので、アップデートするぞーって言ってもなかなか難しそう。
※ 3/10追記 2019/1までサポートが延長されました。
オラクルがJava 8の無償サポート期限を延長

無償で安全に使うなら半年ごとに機能アップデートのOpenJDKを入れていく必要がある

ということになりますね。
ただ、これ結構つらそうで、例えば18.3ではvarが入ると発表されたように、言語仕様がかわるリリースも6ヶ月リリースの中で出てくることになります。
Java VMの仕様が変わるプロジェクトにも、SpecializationやValueTypeが入る「Valhalla」、配列の仕様変更やSIMD命令対応などが入る「Panama」、JITのような実行時ネイティブコンパイルではなく事前ネイティブコンパイルができる「AoT」、コンパイラの再設計でVMにも変更がある「Graal」など、それぞれのプロジェクトが出来た機能を逐次リリースするということになります。
ScalaとかGroovyみたいなJVM言語を作る人たちも対応が大変そう。LTSをターゲットにする、みたいな感じになるのかなという気はするけど。

Java 10は出ない

Java9が最後のメジャーバージョンになる、という話をしていました。
ただ、例えば書籍に「Java 19.3対応!」みたいなことが書いてあっても、いまいちよくわかんないって感じになりそう。OCJとかもどうするんだろう?って思ったけど、これそもそもいまだにSE 6までしかないのか。
まあでも、Java EEのバージョンが、複数独立してバージョンアップされるプロダクトのタグという意味合いであったように、なんらかタグとしてのわかりやすいバージョンは欲しいところです。
ValhallaとAmberが全部入ったらJava10って言って欲しい。

けど、実際どうなるかわからない

これ、実際に世の中がまわっていくモデルじゃない気がするので、今後どうなるかわかんないですね。
冒頭の公式情報も、18.9の公式アップデートがどうなるか書いてないし、Open JDKにLTSがないというのもSafe harbor statement(今から話すのは確定情報じゃないよ、というやつ)付きのJavaOneセッションでの情報だし。


※ 11/13 追記
DEVOXXで、OpenJDKでも3年ごとに3年間のサポートがあるLTSが設定されることや、バージョンは10,11,12となることが発表されています。
https://www.youtube.com/watch?v=x7pkWlost64