来月にはJava 10が登場し、9月にはJava 11が登場予定。新しいリリースモデルを採用した今後のJava、入手方法やサポート期間はこう変わる(OpenJDKに関する追記あり)

2018年2月8日

2017年9月に「Java 9」が登場したばかりですが、いまから1カ月後の2018年3月には早くもJavaの新バージョン「Java 10」がリリースされます。そしてその6カ月後の9月にはさらに次の「Java 11」がリリース予定です。

Java 9以後のJavaは、毎年3月と9月の年2回メジャーバージョンアップを行う、タイムベースのリリースモデルを採用することになりました。今年はその最初の年となります。

オラクルによるJDKの提供方法やサポートポリシーも、これから大きく変更されることが明らかになっています。一般公開され無償でダウンロードできたOracle JDKの公開はJava 10が最後となり、サポートは3年ごとに登場する長期サポート(LTS)対応のメジャーバージョンに対して行われる、といったことが予定されているのです。

こうしたリリースモデル、提供形態、サポートポリシーの変更は、既存のJavaアプリケーションの保守や今後の開発体制にも影響を与えるはずです。

これらJavaのオフィシャルな情報は、日本オラクルのWebサイトの「Oracle Java SE サポート・ロードマップ」にまとめられています。また日本オラクルはJavaのユーザーコミュニティや顧客向けにも説明を行い、情報提供を行っています。

しかし、記事としてこうした情報をまとめたものはおそらく存在しなかったように思います。そこでJava 10の登場を約1カ月後に控えたいま(予定では3月20日に提供開始予定)、Webサイトに公開されている情報をベースにしつつ、そこではカバーされていない詳細についても日本オラクルに取材を行い、現時点での最新情報をまとめました。

Oracle Java SEサポート・ロードマップOracle Java SEサポート・ロードマップ

参考記事

昨年9月に登場したJava 9から、Javaは6カ月ごとのタイムベースによるアップデートサイクルが採用され、3月20日付けでJava 9の次のメジャーバージョンアップとなるJava 10が登場しました。

バージョン番号は今後もJava 10、Java 11、Java 12と連番に

Java 9以降のJavaのバージョン番号は、これまで通りJava 10、Java 11、Java 12と連番で増えていくことになりました。

Java 9のリリース後、Javaのバージョン番号がリリース年とリリース月を合わせた数字、例えば2018年3月にリリースされるJava 10は「Java 2018.3」になるという説明もありました。その名残として、公式サイトでもバージョン表記が「Java 10(18.3)」や「Java 11(18.9)」と、バージョン番号とリリース年月の並列表記になっています。

しかし現在の方針は、いままで通り連番でバージョン番号を表していくことだそうです。バージョン番号とリリース年月を併記した「Java 10(18.3)」は、いずれバージョン番号のみにあらためられていくことになるのでしょう。

バージョンアップサイクルは6カ月ごと

Javaのバージョンアップサイクルは前述の通り、2018年3月にリリースされるJava 10から、6カ月ごとにメジャーバージョンアップが行われます。つまり2018年3月にJava 10、2018年9月にJava 11、2019年3月にJava 12、2019年9月にJava 13と続いていくのです。

そしてその合間の1月、4月、7月、10月の年4回、バグフィクスやセキュリティ対策に対応したマイナーバージョンが提供される予定です。

バージョンアップの基本的なポリシーは、機能の追加変更についてはメジャーバージョンアップで行われ、マイナーバージョンアップでは機能に影響のないバグフィクスやセキュリティ対応変更だけが行われるとされています。

なぜ6カ月ごとのメジャーバージョンアップを行うのか?

なぜJavaは6カ月ごとのメジャーバージョンアップへとリリースモデルを変更するのでしょうか。

Javaはこれまで、大きな機能追加に合わせてメジャーバージョンアップを行ってきました。大きな新機能の開発には長い時間がかかり、ときとして開発スケジュールの遅れにも苦しんでもきました。

例えば、Java 6から7へのメジャーバージョンアップには4年8カ月、Java 7から8へは2年8カ月、Java 8から9へは3年6カ月かかっています。

これはつまり、Javaの進化は数年ごとにしか起きなかったということを示しています。

安定が重視されるエンタープライズのシステム開発分野で使われることが多いJavaにおいて、この数年ごとのゆっくりした進化のペースは好ましいものでもありました。しかし最近ではJavaはほかの言語や技術と比較すると、進化の遅い、やや古めかしいものと見られるようになってきてもいました。

従来のリリースモデルをあらため、6カ月ごとにメジャーバージョンアップを行うタイムベースのリリースモデルへとJavaが移行したのは、こうした反省に立ってJavaをこれまでより速いペースで前進させようとしているためです。

商用のOracle JDKとオープンソースのOpenJDKは同じものになる

商用ライセンスのOracle JDKには、無償版にはないJavaのプロファイラのFlight RecorderやMission Controlといったツールが提供されています。

オラクルは現在、こうしたツールをオープンソースのJava実装であるOpenJDKにも含めるように作業を進めています。

予定ではJava 11がリリースされる2018年9月にこの作業が完了し、商用ディストリビューションのOracle JDKとオープンソース実装のOpenJDKは機能、品質両面で同じものになる予定です。

Oracle JDKの無償配布は次のJDK 10が最後

現在、Javaの実装としてオラクルからOracle JDKが公開されており、無償でダウンロードして利用することができます。多くの開発者、ユーザーがOracle JDKを利用していることでしょう。

しかしOracle JDKの無償公開はJava 10までとされています。2018年9月にリリース予定のJava 11およびそれ以降のOracle JDKは、オラクルと有償サポート契約を結んだユーザーにのみ提供されるようになります。Oracle JDK 11は無償公開されません。

その代わり、前述の通りJava 11からはOracle JDKと同じ機能と品質を備えたオープンソース実装であるOpenJDKがリリースされ、バイナリが無償で提供されます。Java 11からはOpenJDKが、従来無償で提供されていたOracle JDKの代替となるのです。

日本オラクル株式会社 Cloud Platformビジネス推進本部 担当シニアマネージャ 伊藤敬氏は、「オラクルとしてはJDK 11からはOpenJDKが広く一般に利用いただくJDKであり、これまで維持してきたJDKの機能・品質を兼ね備えたJava開発キットと位置づけます」と説明しています。

無償のOpenJDKにオラクルのサポートは提供されずメンテナンス期間は6カ月

続いて、サポートポリシーについて。

当然ながら、無償で提供されるOracle JDK 10やOpenJDK 11などにオラクルのサポートは提供されません。

Java 9以降に無償で提供されるOracle JDKやOpen JDKのサポートポリシーにおいて重要な点は、メジャーバージョンごとのメンテナンス期間が、次のメジャーバージョンが出るまでのあいだである、ということです(Java 8については例外として別のルールが適用されます。これについては後述します)。

具体的には、2018年3月にリリースされるJava 10の実装であるOracle JDK 10は、リリース後の4月と7月にバグフィクスおよびセキュリティフィクスのためのマイナーバージョンアップが行われる予定です。そしてリリースから6カ月後の9月には次のメジャーバージョンであるJava 11とその実装であるOpenJDK 11がリリースされます。

メジャーバージョンアップの後は、それ以前のメジャーバージョンに対するマイナーバージョンアップが行われなくなります。

つまり、OpenJDK 11がリリースされると、Oracle JDK 10に対するパッチはリリースされなくなります。2018年10月と2019年1月にリリースされる予定のパッチは、OpenJDK 11に対するマイナーバージョンアップなのです。

そして2019年3月にJava 12が登場し、その実装であるOpenJDK 12がリリースされると、その後4月と7月にリリースされるマイナーバージョンアップはOpenJDK 12に対応したものになり、OpenJDK 11に対するバグフィクスなどは提供されなくなります。

(ここから追記 2018/2/8 14時25分)

ただしOpenJDKがオープンソースプロジェクトの判断としてLTSを設定し、LTSに対するメンテナンスバージョンを継続してリリースする動きがあるとの指摘をいただきました。

下記は、2017年11月のJavaの公式ツイート。米オラクルのJava Platform GroupチーフアーキテクトのMark Reinhold氏が、OpenJDKのLTSについて紹介しています。

これが実行されれば、Java 11、Java 17などLTSが設定されたバージョンのOpenJDKに対しては、数年間(スライドでは次のLTSのメジャーバージョンが登場するまでの3年間)、無償のOpenJDKでもメンテナンスパッチが提供されることになります。

OpenJDKはオラクルとは独立したオープンソースプロジェクトとしてソフトウェア提供のポリシーを策定実行していくこととなるため、本件についてはOpenJDK側の発表を待つことになります。

数日前にもOpenJDKの関係者からLTSに関する発言があったとのことですが、まだOpenJDKのコミュニティ内で議論が続いているそうです。

(追記ここまで)

有償のOracle JDKは長期サポート版ごとに3年かけてメジャーバージョンアップ

Java 11から有償サポートのユーザーだけに提供されるようになるOracle JDKは、無償のOpenJDKとは異なるバージョンアップおよびサポートのポリシーで提供されます。

2018年9月に登場するJava 11から、Javaは3年ごとに「LTS」(Long Term Support)と呼ばれる長期サポートに対応したメジャーバージョンが登場します。そのLTS版ごとにOracle JDKのメジャーバージョンアップが行われるのです。

最初のLTSとなるJavaは2018年9月に登場するJava 11で、その実装としてOracle JDK 11がリリースされます。次のLTSは3年後の2021年9月に登場するJava 17で、その実装としてOracle JDK 17がリリースされます。Oracle JDKのメジャーバージョンアップ版は3年ごとにリリースされるのです。

LTS版のサポート期間は、「Premier Support」としてリリースから5年、「Extended Support」としてさらに3年が追加され、「Sustaining Support」を契約するとさらにサポート期間を延長することができます。3年が経過し次のメジャーバージョンが登場したからといって、サポートが終わることはありません。

そしてサポート期間中はずっと、1月、4月、7月、10月の3カ月ごとにバグフィクスやセキュリティフィクスを対象としたマイナーバージョンアップの提供を受けることができるのです。

(追記 2018/2/8:マイナーバージョンアップでのパッチの提供はPremier SupportとExtended Supportまで。Sustaining Supportではパッチの提供はありません)

下記は、日本オラクルが無償版のJDKおよび有償版JDKのサポートポリシーについての説明に用いている図を許可を得て転載したものです。

Javaの新しいサポートポリシー

白いマーカーは無償版Oracle JDKのリリース時期とサポート期間を示し、青いマーカーは無償版OpenJDKのリリース時期とサポート期間を示し、赤いマーカーは有償版Oracle JDKのリリース時期とサポート期間を示しています。

無償のOpenJDKは6カ月ごとにメジャーバージョンアップが登場し、そのつどサポート期間が終了することが分かります。

有償のOracle JDKは3年ごとにLTS版が登場し、8年以上のサポート期間があることが分かるでしょう。

Java 8のサポート期間はJava 11の登場後まで続く

最後はJava 8のサポート期間についてです。

Java 9ではJavaのモジュール化を実現するProject Jigsawが実装されたため、Java 9以前と以後ではこれまでのメジャーバージョンアップと比較しても大きな違いがあります。

そのため、Java 8からJava 9かそれ以後のバージョンへの移行には時間がかかると考えられます。

Java 8のサポート期間はそれを考慮して設けられています。具体的には、最初のLTS版であるJava 11が2018年9月に出て4カ月後、2019年1月までは無償版Oracle JDKの公式アップデートが提供されます。さらに、個人でJava SEを利用する(non-corporate desktop use)場合、2020年12月末まで引き続きJava 8のアップデートを受け取ることができると説明されています。

追記:2018年5月に、日本オラクルが最新状況をあらためて説明しています。

日本オラクルが今後のJavaのリリースモデルと公式バイナリについてあらためてJava Day Tokyoで説明。オラクルによる公式バイナリの無償提供はOpenJDKベース

参考記事

オープンソースで開発されている統合開発環境Eclipseの最新版「Eclipse Photon」がリリースされました。Eclipse Photonでは、Java 9とJava 10のサポートに加え、Eclipse IDEにおいてLanguage Server経由でRustとC#もサポートされました。

関連記事

あわせて読みたい

Java プログラミング言語 Oracle




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本