Java 11正式版がリリース、本バージョンからOracle JDKのサポートは有償に。OpenJDKで無償の長期サポート提供は現時点で期待薄
Java 11正式版がリリースされました。
Java 11は2017年9月から始まった6カ月ごとのJavaバージョンアップサイクルからちょうど1年となるバージョンであり、また2014年3月に登場したJava 8以来、4年半ぶりに長期サポート(LTS:Long Term Support)対象となるバージョンでもあります。
JDK 11 General Available Release is Out! #OpenJDK #JDK11
— Java (@java) 2018年9月25日
Download: https://t.co/GxeXcyGUiv
Release Notes: https://t.co/h5tqx7d9U5 pic.twitter.com/XByIzINXCj
Java 11での主な新機能は、単一ファイルのJavaコードをそのまま実行できること(JEP 330: Launch Single-File Source-Code Programs)、数テラバイトのヒープを扱え、かつガベージコレクションによる停止時間が10ミリ秒以下となるような低レイテンシを実現した新しいガベージコレクタ「ZGC」の実験的実装(JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental))、フライトレコーダーの搭載(JEP 328: Flight Recorder)、Unicode 10対応(JEP 327: Unicode 10)などが挙げられます。
また、非推奨になっていたJavaScriptエンジンの「Nashorn」が廃止されました。
参考:JavaでJavaScriptを実行する「Nashorn」が非推奨に、ECMAScriptの速い進化に追いつけないと。代替案はGraalVM
Java 11からOracle JDKは有償サポートのみに
Java 11の登場でもっとも注目されているのは、Oracle JDKのサポートが有償になるという点でしょう。
Java 11からは、これまでオラクルから無償で提供されてきたOracle JDKへのバグフィクスやセキュリティパッチが有償サポートを結んだユーザーに対してのみ提供されるようになります。
そしてJava 11はJava 8以来のLTS対象のバージョンとなります。これに伴いこれまでLTS対象だったJava 8のサポートは2019年1月に終了し、Java 8に対するバグフィクスやセキュリティパッチなどの提供はこれ以降行われなくなります(ただし個人向けのサポートは2020年12月まで)。
業務システムなどでJava 8を利用してきたユーザーは、セキュリティパッチなどの提供が終了する2019年1月末までにJava 11へ移行するべきでしょう。
ちなみにJava 9とJava 10はLTS対象ではなかったため、Java 9のサポートはJava 10の登場とともに終了し、Java 10のサポートもJava 11の登場とともに終了しました。Java 9、Java 10のユーザーもJava 11へ移行すべきということになります。
Javaは今後も6カ月ごとに新バージョンが登場し、新機能の追加や変更などが行われていきます。つまり2019年3月にはJava 12が、2019年9月にはJava 13が登場するのです。
しかしLTS対象のバージョンは3年にわたってバグフィクスやセキュリティパッチが提供されることが約束されています。
利用するバージョンを固定し安定したJava環境で利用したいユーザーにとって、LTS対象のバージョンこそ利用すべきJavaのバージョンとなります。そして今日からそれはJava 11になるのです。ちなみにJava 11の次にLTS対象のJavaが登場するのは3年後の2021年9月に登場するJava 17になります。
そしてJava 11でオラクルが提供するOracle JDKを利用し、LTSの期間となる3年にわたってセキュリティパッチなどの提供を受けたいユーザーは、オラクルとの有償サポート契約を結ぶ必要があります。
参照:Javaの新しい商用ライセンス、米オラクルが発表。月額料金でデスクトップは2.5ドル、サーバは25ドル。LTS版を利用可能
無償のOpen JDKでのLTS提供は期待薄
これまでと同様、Java 11も無償で使うことができます。もっとも代表的なのはオラクルによるOpenJDKビルドを利用することでしょう。
Linuxがさまざまなベンダからディストリビューションが提供されるように、JavaもOpenJDKのソースコードをもとにさまざまなベンダがビルドしたバイナリを提供しています。オラクルがビルドして提供するOracle JDKとOpenJDKはそのもっとも代表的なものといえます。
オラクルによるOpenJDKのビルドはjdk.java.netで提供されます。
オラクルは、同社が提供するOpenJDKのビルドがOracle JDKと機能と品質の両面で同じであり、本番環境にも対応する品質を備えたものである(production -ready open-source builds)と説明しています。
これまでOracle JDKを利用してきて今後も無償でJavaを利用したいと考えているユーザーにとって、オラクルのOpenJDKビルドはもっとも有力な選択肢といえます。
ただしオラクルが提供するOpenJDKビルドでは、次のバージョンが登場するまでの6カ月間はアップデートが提供されますが、LTSに対応した3年間のバグフィックスやセキュリティパッチを提供する予定は現在のところ表明されていません。
米オラクルでJava Platform Groupチーフアーキテクトを務めるMark Reinhold氏は8月17日、jdk-devメーリングリストでの「What does LTS mean for OpenJDK?」(OpenJDKにとってLTSは何を意味する?)のスレッドでの問いかけに次のように答えています。
> What will Java 11 get from Oracle?
> - 6 months of public $free updates with binaries published at
> http://jdk.java.net
> - 3 years of public $free updates with binaries published at http://jdk.java.net
> - something else?>Java 11でオラクルが提供するのは?
> - 6カ月の無料アップデート用バイナリを
> http://jdk.java.net で公開すること
> - 3年の無料アップデートバイナリを http://jdk.java.net で公開すること
> ほかにある?
この問いかけにReinhold氏は次のように答えています。
At least six months of free, GPL-licensed updates with binaries at http://jdk.java.net.
(I say “at least” because that’s the current plan. The plan could change, to a longer time period, if the situation warrants.)
少なくとも6カ月のあいだ無料でGPLライセンスのアップデート用バイナリが http://jdk.java.net. で提供される。
(“少なくとも”と書いたのは、それが現在の計画であるからだ。計画は変わり得る、長期的には、もし状況が正当ならば)
Reinhold氏はJavaのどのバージョンでも提供される6カ月間のアップデートにのみ言及し、LTSで期待される3年間のアップデートについては言及しませんでした。
また8月23日付けの別のメッセージでも、Java 12がリリースされたあとは、オラクルはOpenJDKビルドに対するセキュリティパッチの提供をJava 12に対して行うと説明しています。つまりオラクルが同社がビルドしたOpenJDK 11ビルドのサポートを行うのはJava 12が登場するまでの6カ月だけ、ということです。
Reinhold氏は昨年の時点では下記のようにOpenJDKにおけるLTS対応を期待させる発表をしていました(あるいはこれはOpenJDKのソースコードのメンテナンス期間と理解すべきだったのかもしれません)。しかし上記の発言からすれば、Java 11においてオラクルが提供するOpenJDKビルドのLTS対応は期待できません。
New feature release every 6 months! OpenJDK Support - long term release and new version scheme #java #devoxx pic.twitter.com/HDkNRvXmdN
— Java (@java) 2017年11月8日
ただし「計画は変わり得る」と書いているように、Reinhold氏はまだあきらめてはいないのかもしれません。
何にせよ現時点では、オラクルが提供する無償のOpenJDKビルドを使う場合には6カ月ごとのJavaのバージョンアップに追随していく覚悟が必要です。
今後のJavaのバージョンアップにおいては過去のバージョンに対する互換性は保証されません。Javaの新バージョンが登場するたびに開発中や運用中のアプリケーションに対して互換性テストを行い、万が一互換性のない部分が発見された場合には修正を行う作業が発生することになります。
OpenJDKやOracle JDK以外にもJDKの選択肢はある
オラクルがビルドして提供するOpenJDK以外にも、JavaのJDKには複数の選択肢があります。
今後も無償でJava 11のLTSに対応した3年間のバグフィックスやセキュリティパッチを入手したいと考える利用者にとって、もっとも有力な候補となるのはAdoptOpenJDKを利用することでしょう。
AdoptOpenJDKはコミュニティによってビルドされ無料で配布されているJDKのディストリビューションです。コミュニティの主要なスポンサーにIBMやマイクロソフトの名前があります。
AdoptOpenJDKの現時点でのサポートポリシーによると、Java 8は少なくとも2023年9月までサポートを提供し、Java 11はリリースから少なくとも4年間、2022年9月までサポートを提供するとしています。
Java 8もJava 11もオラクルより長いサポート期間を設定することで、積極的なユーザーの取り込みをはかっているようです。
Red Hat Enterprise LinuxにバンドルされているOpenJDKは、Red Hatによってサポートされます。Red Hatが公開している「OpenJDK ライフサイクルおよびサポートポリシー」では、Red HatはOpenJDK 8のサポートを2020年10月まで行う(英語版のページではJava 8は2023年6月まで)とされていますし、OpenJDK 11についても独自のサポート期間を設定しています。
そのほかIBMもJDKを提供し独自のサポート期間を設けていますし、独自にJDKをビルドしサポートを提供するAzul Systemsのようなベンダも存在します。
オラクルも新しいJavaランタイムであるGraalをオープンソースで公開していますし、IBMがオープンソース化したEclipse OpenJ9もあります。
参考:オラクル、JavaやJavaScript、Ruby、Pythonなど多言語対応を単一ランタイムで実現する「GraalVM」をオープンソースで公開。Twitterが本番環境で採用
参考:JavaVM「Eclipse OpenJ9」公開。IBMが「Java 9と同時にオープンソース化する」との約束を果たす
あるいはJavaに対応したPaaS型クラウドサービスを利用することで、今後のJava環境のアップデートはクラウドに任せてしまうという選択肢もあるかもしれません。
JavaプログラマにとってJava 11以後の世界でどのようなJava環境を構築するのか、検討する際にはOracle JDKとOpen JDK以外にも視野を広く持って検討することになるのでしょう。そしてそれはもしかしたら、Javaのエコシステムにとって新しい変化を引き起こしていくことになるのではないでしょうか。
(2018/9/26 9:15修正:Oracle JDKは無償では入手可能できないように書いていましたが、入手可能でした。お詫びして訂正します。これに合わせてタイトルと本文を修正しました)
関連記事
あわせて読みたい
AIが音声メモからタスク設定やステータス更新などアシスタント機能を実行、「Einstein Voice」をセールスフォース・ドットコムが発表。Dreamforce '18
≪前の記事
SlackがメールクライアントのAstroを買収。メールのやりとりもSlackのチャンネルに統合へ