編集部より
本稿の一部に表現が不足している箇所がありました。お詫びして訂正いたします。(2018/07/13 13:30)
- Javaのメジャーアップデートサイクル、サポートサイクルについて、追記いたしました。
- Oracle版JDKのDockerイメージの取得について、修正いたしました。
短いスパンのバージョンアップとTLS、そして有償サポートへ
Java 9のリリースとともに新しいサポート・ロードマップが公開されました。そこでは6カ月ごとにメジャーアップデートが行われることが示され、そして、2018年3月にはJava 10がリリースされました。
Java 9がリリースされた当初は、今後について発表はされたものの実際にはどうなるのかと様子をうかがう風潮もありましたが、無事Java 10がリリースされ、現在次のJava 11リリースまであと少しという状況です。
一方でJava 8までのサポートとJava 9からのサポートでは違いがあるため、今後のJavaの利用について一部不安視する声もあがっており、エンジニアも利用するユーザーもこれらの違いについて理解することが大切です。
6カ月ごとのメジャーアップデート
Java 9からは下の図1の通り6カ月ごとにメジャーアップデートが行われます。そして、そのバージョンに対するアップデートも次のバージョンのリリースとともに終了します。したがって、Java 10がリリースされたらJava 9のアップデートがなくなってしまい、Java 11がリリースされたら同様にJava 10のアップデートはそこで終了となります。
これは、Java 8までのバージョンアップが長い時間を要し、その間のトレンドをキャッチアップできなかったことに対する改善策で、今後は、今回のJava 10のように比較的小さいバージョンアップになっていくと思います。ただし、アップデートがリリースされなくなり、すぐに新しいバージョンにアップデートしていかなくてはなくらないのでは運用面で大変です。そのため、次のJava 11ではLTS版(長期サポート)のリリースも用意されています。また、LTS版は3年ごとのリリースを予定しているので、次のOracle版JavaはJava 17になる予定です。
LTS版だけ利用していくのであれば、Java 9やJava 10は安定バージョン前のプレビューバージョンといった位置付けになるので、それほど短いサイクルでバージョンを上げなくてもよいのではと思うことでしょう。しかし、新しい技術分野においては1年半という時間は長すぎる場合があります。多様な用途を考慮しつつ継続したリリースをしていくためには、6カ月ごとのリリースと3年ごとのLTS版といった2種類の対応は、良い流れになっていると思います。
Java 11からOracle Java SEは有償に
6カ月ごとのメジャーバージョンアップがあっても、LTS版も用意されているのでそれほど気にならないかと思います。ただし、このJava 11のOracle JDKは有償になります。
つまり、Oracleからリリースされる無償版のOracle JDKはJava 10が最後になります。したがって、Java 10以降、無償のJDKを利用したい場合にはOpen JDKを使う必要があります。このように、Java10以降、6ヶ月毎にリリースされるJDKはOpenJDKが担っていき、長期有償サポートが必要な方に対してはOracle JDKが担っていくという流れになります。また、これらのサポート期間について示したものが図2です。
このサポートはJDKではなく、Java SEに関するものなので、開発だけではなく運用にも影響します。
ただし、Javaはバージョンアップしたら旧バージョンのバイナリが動かなくなるわけではないので、通常、一部の言語のようにコードを書き直したり、コンパイルをし直したりする必要はないでしょう。そのため、開発し続けているプロジェクトにとってはあまり影響はないと思われます。また、Open JDKについても、Oracle JDK の商用機能を OpenJDK へ提供した上でOracleがビルドした OpenJDK を無償でリリースするとのことですので、実用面に関しては大きな心配は必要ないことでしょう。
しかし、SIなどによって納品されたコードで、契約の都合により利用者がJavaの実行環境について変更できない場合などには非常に大きな影響が発生します。つまり、サポート面も考慮し、現行のポリシーのまま運用しようとすると、Java 8を利用し続ける選択がもっとも有効となります。
Java 8のサポート終了時期には2つあり、2019年1月に通常のサポートが終了し(図2の(1))、2020年12月に個人利用のサポートが終了します(図2の(2))。
つまり、一般コンシューマーがPCにインストールしてあるJavaの利用を前提としたアプリケーションを配布している場合には、2020年12月がデッドラインになります。これらの期間で対応するには短いといった場合には、有償サポートが必要になってきます。
また、新たにJava 11以降に稼働する場合、OpenJDK版 Java 11がLTSバージョンとして有償版と同様に長期メンテナンスアップデートをサポートできるかといった点が注目されます。OpenJDKのビルド版をリリースしていくベンダはOracleだけではないため、それらのOpenJDKはそれぞれのベンダ毎にサポートに対する考え方もかわるようです。
現在ではどのような状況になるのか未確定ではありますが、LTSバージョンとしてサポートできる方向に動いているようなので、今後目が離せません。
Oracleでの価格体系
これまで「Javaの利用は無償」というイメージを抱いていた方は、有償となるとどの程度コストがかかるのか興味があるのではないでしょうか。
そこで、値段表を見てみると、既存のJava SEと同様のサービスをそろえるには、以下の2つの商品が必要となることがわかります。
Java SE Advanced Desktop
デスクトップ環境での利用を前提とした、Java SEの利用。料金体系(1ユーザー当たり、4800円、年間サポート料金、1056円)
Java SE Advanced
一般的なJava SEの利用。料金体系(1ユーザー当たり、1万2000円、年間サポート料金、2640円。または1プロセッサあたり、60万円、年間サポート料金 13万2000円)
ただし、これらの製品にはJava SE以外に、他のツールも含まれています。詳細はOracle Java SE Advanced & Suite製品などをご覧ください。
これまでのJavaの利用にこういったコストをかけていた方は少ないでしょうから、今後のコストの考え方については悩ましいところです。