オラクルは2017年9月、JDKの提供サイクルとライセンス方式に関して、新たなリリース・モデルを発表しました。
これらはJDK 9より一部が適用され、2018年9月に公開されたJDK 11で完全移行しました。新リリース・モデルはJDKの過去のリリース・モデルの課題を解決したものであり、ユーザーにより多くのメリットをもたらします。本記事では、新たな提供サイクルとライセンス方式の概要、およびオラクルによるJDKの有償サポートについて説明します。
初めに、本記事で説明するJDKの新リリース・モデルに対応したオラクルのバイナリ・リリースの主なポイントを列挙します。
新機能が追加される6カ月に1回(毎年3月と9月)のフィーチャー・リリースに加え、脆弱性対策などを施したアップデート・リリースを各フィーチャー・リリースに対して2回提供します。
無償版の再配布を容易にするために、オラクルがビルドしたOpenJDKのバイナリをオープンソース・ライセンス「GNU General Public License(GPL) v2.0」で、公式バイナリとして配布します。ただし、ユーザーが開発したアプリケーションについては、GNUのClasspath ExceptionによってGPL v2.0の適用から除外されます。
これまで有償で提供していたOracle JDKの機能をOpenJDKで公開しました。これらの機能はJDK 11より無償で利用できます。
オラクルがビルドした公式OpenJDKバイナリは、新バージョンがリリースされたタイミングで旧バージョンのアップデートが終了します。無償版を利用するユーザーは、新バージョンに移行することでJDKのアップデートを引き続き無償で利用できます。無償のアップデートが終了した後、特定バージョンでJDKのアップデートを継続して利用したいユーザーには、JDK 8までと同じように有償で引き続きアップデートを提供します。ただしJDK 11からは3年ごとにLTS指定されるフィーチャー・リリースのみが長期サポートの対象になります。
以降、これらの詳細、および旧バージョンから新バージョンへの移行に際しての留意事項などについて説明します。
新たなリリース・モデルの導入は、JDKの従来の提供方法についての課題を解決したものです。そこで、まずこれまでの提供方法にどのような課題があったのかを説明します。
Javaコミュニティでは、JDK 6以降、次の3つの機能を導入するという目標を掲げてJDKの開発を進めてきました。
●Javaの文法をより使いやすいものに改善する「Project Coin」 ●Javaによるラムダ式の実装「Project Lambda」 ●Javaライブラリのモジュール化機構「Project Jigsaw」
当初は、これらの機能を全てJDK 7で導入することも検討されました。しかし、いずれも大きな機能であるため仕様策定、実装やテストに多くの時間がかかることから、JDK 7ではリリース・スケジュールを優先してProject Coinの一部が、JDK 8ではProject Coinの残りの機能とProject Lambdaが、そしてJDK 9でProject Jigsawが導入され完成しました。
こうして3つの大きな機能がJDK 7~9で導入されましたが、これらのリリースに関しては次のような課題が残りました。
●3つの新機能の完成に合わせてスケジュールが度々変更されたため、JDKの各バージョンのリリースが不定期となり、当初の計画から大幅に遅れてしまった ●すでに完成していた他の中小の機能をユーザーに提供するのが遅れてしまった
2つ目の「中小の機能をユーザーに提供するのが遅れた」という課題は、他の開発言語に対するJavaの競争力を維持/向上していくうえでも改善が必要だと考えられました。
また、オラクルが提供するJDK(およびJRE)の無償用バイナリのライセンス方式についても変更の必要性が高まっていました。
オラクルが提供するJDK(JREを含むOracle Java SE)の無償用のバイナリは「Oracle Binary Code License(BCL)」の下に公開されていますが、同ライセンスにはJREの再配布に関して「ユーザーが開発したソフトウェアとともに配布すること」という制限事項があります。コンテナ上に各種ミドルウェアをインストールし、実行環境としてアプリケーションを含めずに配布する方法が普及しつつある今日、BCLの制限事項はJavaの円滑な利用を阻害する恐れがあります。そのため、無償用のバイナリのライセンス方式についても変更の必要性が高まっていたのです。
2018年3月にリリースされたJDK 10より、上記の課題を解決した新たなリリース・サイクルが適用されました。
【JDKのバージョン番号の形式】 ●JDK 9のバージョン表記形式(JEP 223):JDK <メジャー・バージョン番号>.<マイナー・バージョン番号>.<セキュリティ・アップデート番号>.<パッチ番号> ($MAJOR.$MINOR.$SECURITY.$PATCH) 例 JDK 9.0.4 ●JDK 10以降のバージョン表記形式(JEP 322): <フィーチャー・リリース番号>.<中間リリース番号>.<アップデート・リリース番号>.<パッチ番号> ($FEATURE.$INTERIM.$UPDATE.$PATCH) 例 JDK 10.0.1 ●オラクルのベンダー・バージョン表記形式:JDK <リリース年の末尾2ケタ>.<リリース月> 例 2018年3月にリリースされたJDK 10のバージョン番号は「JDK 18.3」
6カ月ごとのフィーチャー・リリースの提供はJDKに定期的かつ段階的に機能を追加していくことを重視したサイクルであり、従来のように新バージョンで一挙に多数の機能が追加されるようなことはありません。
無償用に提供されるオラクルの公式OpenJDKバイナリはjdk.java.netで年2回のフィーチャー・リリースに加え、各フィーチャー・リリースに対して2回のアップデートリリースを提供します。提供時期は今までと同様、1月、4月、7月、10月になります。アップデート・リリースには脆弱性対策やバグ修正が含まれますが、従来とは異なり機能の追加は行われない予定です。
なお、早期アクセス版(Early Access Build)は今まで通りjdk.java.netで公開されます。早期アクセス版を利用することで新機能をいち早く確認し、次のバージョンアップに備えることができます。
ミドルウェアの脆弱性を突いたサイバー攻撃による被害が深刻化している現在、JDKを継続して安全にご利用いただくために引き続き年に4回提供されるアップデート・リリースを定期的に適用していくことを強く推奨します。現時点でどのアップデート・バージョンが有効であるかについては、リリースノートに明記されている Security Baseline のバージョンを確認してください。
オラクルが提供する公式OpenJDKバイナリのアップデート期間は、JDK 9以降後継バージョンがリリースされるまでの半年です。例えば、2018年3月に公開されたJDK 10は同年9月にアップデートが終了しました。
これはフィーチャー・リリースとアップデート・リリースの定期的な提供に開発リソースを集中するための措置であり、ユーザーはこれらのリリースを定期的に適用することで、引き続きJDKを無償で安全に利用することができます。OpenJDKのリリース・サイクルに合わせて自社のJava環境をアップグレードしていくのが難しいユーザーは、後に説明する有償サポートを利用することで、特定バージョンのJDKを安全に使い続けることができます(詳しくは『オラクルによる有償サポートの提供』をご参照ください)。
以上のようにリリース・サイクルが固定されることで、ユーザーは使用するJDKを計画的にアップデートしていくことが可能となりました。
【JDKの新リリース・サイクルに対応したオラクルの公式OpenJDKバイナリのポイント】 ●毎年3月と9月に、新機能の追加や機能の変更が行われるフィーチャー・リリースをjdk.java.netで無償提供 ●各フィーチャー・リリースに対して2回、計年4回(1月、4月、7月、10月)、脆弱性対策などを施したアップデート・リリースを無償提供 ●次期バージョンの早期アクセス版(Early Access Build)は今まで通りjdk.java.netで提供 ●オラクルが提供するJDKのバイナリを利用するユーザーは、年に4回のアップデート・リリースを継続的に適用していくことを推奨 ●アップデート・リリースは、後継バージョンがリリースされるまでの6カ月間行われる
リリース・サイクルの変更と合わせて、アプリケーションの実行に利用するJREの再配布を容易かつシンプルにするためにライセンス方式の変更も行われました。
前述のように、オラクルが提供するJDK(Oracle JDK)はBCL (Oracle Binary Code License) が適用されており、JDK/JREの配布方法に制限がかかるケースがありました。この制限をなくすために、ライセンス方式に「GNU General Public License(GPL) v2.0」を適用します。また、これまでオラクルが有償で提供してきた機能をOpenJDKで公開し、OpenJDKとの機能的な差異をなくします。
GPL v2.0を適用する目的は、JREの再配布を容易にし、アプリケーション配布方法の柔軟性を確保することにあります。JDKにはGNUのClasspath Exception(クラスパス例外)が適用されており、ユーザーが開発したアプリケーションに対してGPL v2.0は適用されません。アプリケーション・ベンダーなどの皆様も、これまでと同様、GPL v2.0の制限を受けずにJDK/JREを利用することができます。
オラクルの有償サービス(Oracle Java SE Advanced&Suite / Java SE Subscription)を利用するユーザーに対して提供してきた「Java Flight Recorder」や「Java Mission Control」などの機能がOpenJDKで公開されました。JDK 11以降、これらの機能はOpenJDKの一部として無償でご利用いただくことができます。
有償機能の公開により、Oracle JDKとOpenJDKの機能的な差異はなくなりました。また、これまでバージョンごとにマルチラインで進めていたOpenJDKの開発はシングルライン化されています。
なお、JDK 11がリリースされるまでを公開作業のための移行期間とし、JDK 9 およびJDK 10については無償版のJDKバイナリとしてOpenJDK(JREを含む。ライセンスはGPL v2.0)およびOracle JDK(JREを含む。ライセンスはBCL)の両方が提供されていましたが、JDK 11からは、OpenJDKに一本化されています。
【JDKの新ライセンス方式のポイント】 ●無償版JDKおよびJREの再配布を容易にするためにGPL v2.0を適用 ●Oracle JDKの有償機能をOpenJDKで公開し、JDK 11から両者の機能的な差異をなくした ●無償のアップデート終了後もバージョンを固定してアップデートの入手の継続を希望するユーザーに対しては今まで通り有償サポートにて提供
OpenJDKで公開されたOracle JDKの有償機能には大きく4つあり、それぞれ下記のスケジュールで公開されました。 ●Application Class Data Sharing(AppCDS):複数のアプリケーションで共有するクラスを共有アーカイブにプリロードし、個々のアプリケーションの起動時間を短縮する機能。JDK 10で統合済み ●Z Garbage Collector(ZGC):巨大なヒープ・メモリの扱いに最適化されたガーベジ・コレクタ。リアルタイムGCとしてソースコードのオープンソース化はすでに完了しており、JDK 11で統合済み ●Java Flight Recorder:Javaアプリケーションの詳細な実行ログの取得機能。ソースコードのオープンソース化はすでに完了しており、JDK 11で統合済み ●Java Mission Control:Java Flight Recorderで取得したログの可視化/分析ツール。ソースコードのオープンソース化はすでに完了。単独のツールとして提供開始
このように、JDKは今後、オラクルが有償で提供していた機能も含めて全てが無償化され、6カ月に1回のサイクルでバージョンアップされます。ただし、ユーザーの中には、「ベンダーのサポートを受けながらJavaを利用したい」といったニーズや、さまざまな事情から「利用しているJDKを特定バージョンで固定したい」といったニーズが存在します。これらのニーズに応えるために、JDK 8およびそれ以前のリリースと同じようにJDK 11よりLTS指定のフィーチャー・リリースに対して公式OpenJDKバイナリのアップデート終了後も有償サポートを提供します。
オラクルによる有償サポートの種類と対象期間は、それぞれ次のようになります。
【オラクルによるJDKの有償サポートの種類と対象期間】 ●Premiere Support:対象期間はLTS指定されたフィーチャー・リリースの提供開始から5年間 ●Extended Support:Premiere Support終了後から3年間を対象とする延長サポート ●Sustaining Support:Extended Support終了後を対象とする無期限サポート
また、オラクルの公式OpenJDKバイナリのアップデート・リリースと同様、1年間に4回、脆弱性対策やバグ修正のみを行ったアップデート・リリースがOracle JDKとして商用ライセンスの下に提供されます。
例えば、2018年9月にリリースされるJDK 11の公式OpenJDKバイナリは2019年3月に無償アップデートが終了しますが、Premiere SupportとExtended Supportを利用することで、最長2026年9月までオラクルのアップデート・リリースを入手することができます。
さらに、延長サポート終了後もオラクルによるサポートが必要な場合はSustaining Support(無期限サポート)によって終了期限なしのサポートを受け続けることができます。ただし、Sustaining Supportではアップデート・リリースの提供はありません。
なお、JDK 9、JDK 10についてはLTS指定ではないため、6カ月のPremier Support期間を経てSustaining Supportに移行します。
また、新リリース・モデルの適用以前にリリースされたOracle JDK 7およびOracle JDK 8については、各リリース時点で通知した有償サポート・スケジュールが適用されます。オラクルによるJava(Java SE)の各バージョンに対する有償サポート期間については次の表をご確認ください。
※ 各有償サポートの詳細については http://www.oracle.com/us/support/lifetime-support-068561.html をご確認ください
このほか、オラクルは「Oracle Java SE Subscription」として、主にデスクトップでJavaを利用する企業に対してクライアントJava環境の管理ツール「Advanced Management Console」やWindows向けのMSI互換エンタープライズJREインストーラなどを有償で提供しています。
これまでOracle JDKの中で提供してきた「JavaFX」、「32ビット版バイナリ」、「(Deployment Technologyとして開発されてきた)Java Web StartおよびJava Plug-in」については、JDK 11以降、Oracle JDKでは提供されません。したがって、有償サポートを利用する場合も、JDK 11以降のリリースにはこれらの機能は含まれません。
JavaFXについては、オープンソース・プロジェクト「OpenJFX」にソースコードが移管され、今後は同プロジェクトで開発が継続されます。OpenJFXでは、JavaFXの後継となるバージョンがJDK11向けに提供されました。また、OpenJDKのソースコードをビルドすることにより、32ビット版バイナリを生成することが可能です。つまり、これらについては引き続き無償で入手することができます。
一方、Deployment Technologyとして提供されてきたJava Web StartおよびJava Plug-inはOracle JDK 8で開発が停止しています。これらの機能を引き続き利用する場合は、Oracle JDK 8にバージョンを固定し、必要に応じてオラクルの有償サポートを利用します。
セキュリティ管理の強化などを目的にデスクトップ・アプリケーションの配布がOSベンダーなど第三者が運営するストアを介した方法に移行しつつある現在、Java Web StartやJava Plug-inを利用したアプリケーション配布方法の必要性は薄れています。Java Plug-inについてはWebブラウザ・ベンダー各社がサポートの停止を表明しており、オラクルが今後も同技術の提供を続けたとしても、ユーザーが開発したアプリケーションの実行環境が存在せず、実質的に利用できなくなります。
こうした事情を踏まえ、オラクルはOracle JDK 8においてJava Web Start、Java Plug-inの開発を停止し、代替テクノロジーへの移行を推奨してきました。Oracle JDK 8を利用するユーザーに対しては前表のスケジュールで引き続き有償サポートが提供されますが、速やかに代替テクノロジーに移行することをお勧めします。
2017年9月にリリースされたJDK 9は2018年3月に公式アップデートが終了しましたが、その前バージョンであるJDK 8はリリース時に2019年1月までの公式アップデートが通知されたため※1、結果としてJDK 9よりも長期間にわたり無償でアップデートを受けることが可能となりました。JDK 8を利用するユーザーは、2019年1月に公式アップデートが終了した時点の移行先として2018年9月にリリース予定のJDK 11が有力な候補となりますが、JDK 11への移行に際しては次のような留意事項があります。
※1 ただし、デスクトップ・アプリケーションなどで利用している個人ユーザー(Non Corporated Desktop Use)に対しては2020年12月まで公式アップデートが提供されます。
●Oracle JDK 8から後継バージョンへの自動アップデートは行われません:JDK 8の公式アップデート終了に伴う後継バージョンへの自動アップデートは行われないため、デスクトップ環境のJREなどは必要に応じて手作業で後継バージョンにアップデートしてください
●32ビット版バイナリは提供されません:JDK 9以降、32ビット版バイナリは提供されなくなりました。前述のように、必要に応じてOpenJDKのソースコードをビルドし、入手してください
●Java Web StartおよびJava Plug-inは提供されません:前述のように、Java Web StartおよびJava Plug-inは提供されません。これらを引き続き利用する場合は有償サポートを利用するか、または他のアプリケーション配布モデルへの移行をご検討ください
最後に、昨今のアプリケーション配布/管理方法の変化も踏まえ、Javaアプリケーションの新たな配布方法に関するオラクルからの提案について説明します。
Javaアプリケーションは現在、システムにインストールされたJREを使って実行されていますが、近年はこの実行モデルが多くの弊害を生んでいます。Javaの脆弱性問題から最新版のJREに移行する必要が生じた際、ユーザー側はアプリケーション・ベンダーが最新版を推奨していないために移行できず、一方でアプリケーション・ベンダー側は多くのユーザーが旧バージョンを利用しており、サポートの手間を考慮すると簡単には移行できないといったジレンマが生じるケースもあるでしょう。
このような問題が起きる原因の1つは、「Javaアプリケーションの実行環境としてJREをプリインストールし、開発元が異なる全てのアプリケーションを同じJREで実行する」という実行モデルにあると考えられます。オラクルは今後、この問題の解決策となる新たなアプリケーション配布方法についても具体策を提案/提供していきます。
例えば、今後は使用するJREをアプリケーション側でコントロールし、個別にバンドルするという方法が考えられます。オラクルは、これまでもこの方法を提案してきましたが、その実現には1つの課題がありました。それは「JREのサイズ」の問題です。
Java SE 8までのJava仕様ではJREのサブセットを作ることはできず、アプリケーションが使わないライブラリも含めたフルセットの巨大なJREをバンドルする必要がありました。この問題はJDK 9で導入されたProject Jigsawによって解決され、現在はアプリケーションが必要とするライブラリだけで構成したJREのサブセットを作り、バンドルすることが可能となっています。これにより、それぞれのアプリケーションにバンドルするJREのサイズを最小化することができます。Project Jigsawの導入に伴いライブラリ間の依存関係を整理した結果、JREの起動時間も短縮されています。
これらを踏まえ、今後はカスタマイズしたJREをアプリケーションにバンドルする方法を推奨していくとともに、JREのカスタマイズ・ツールとしてJDK 9よりバンドルを開始した「jlink」の機能拡充を進めていきます。
また、デスクトップ・アプリケーションに関しては、近年、アプリケーション・ストアなどを介した第三者による配布が主流となっています。今後は、これをサポートするツールも充実させていきたいと考えています。
一方、企業内で利用するアプリケーションについては、運用管理の効率化やセキュリティ強化などを目的に、多数のクライアントのデスクトップ環境を集中管理するソフトウェアを利用する企業が増えています。Javaアプリケーションについても、そうしたソフトウェア管理方法に適合させるための機能やツールを拡充していく予定です※2。
※2 オラクルによる有償サポートでは、デスクトップのJavaアプリケーションを集中管理するためのツールとしてAdvanced Management Consoleをすでに提供しています。
以上、JDKの新たなリリース・モデルとオラクルによる有償サポートについて説明しました。それぞれの詳細および最新情報については、下記の関連情報も併せてご確認ください。
【JDKの新ライセンス方式のポイント】 ●無償版JREの再配布を容易にするためにGPL v2.0を適用 ●Oracle JDKの有償機能をOpenJDKで公開し、JDK 11から両者の機能的な差異をなくしました ●公式アップデート終了後もバージョンを固定したいユーザーに対しては引き続き有償サポートを提供 ●開発用途には無償でOracle JDKのLTSバージョンを利用できるOTNライセンス for Oracle Java SEを新たに提供開始
Java Magazine日本版は、米国OTNで発行されているJava Magazineの抜粋翻訳版です。 Javaプログラミング言語、JavaベースのアプリケーションをはじめとするJava技術全般の最新トピックスを お届けします。
特集「Java 13の新機能 」 ~今月のJava Magazineは、Java 13の新機能をいくつかピックアップして詳しく解説します。 「Java 13のswitch式と再実装されたSocket APIの内側」では、switch式へのyield文の導入やSocket APIの再実装の理由などを掘り下げます。「Javaにテキスト・ブロックが登場」では、テキスト・ブロックとは何か、何が解決できるのか、使い方を解説します。さらに、「言語の内側:シールド型」では、Javaにとって新しい概念である、シールド型(Sealed types)がどのようなものかを詳しく紹介します。この他にも、TeaVM、クイズなど盛りだくさんです。ぜひご覧ください。~
特集「 テスト 」 ~アプリケーションの開発においてその品質に大きく関与する作業がテストです。意図された通りに動いているのか、バグはないか、十分に網羅されているかなど、テストを通じて確認が行われます。本号では、プロパティベース・テスト(PBT)、Arquillianフレームワークを使ったJakarta EEアプリケーションのテスト、ArchUnitによるアーキテクチャの単体テストの3つのテスト手法を取り上げます。この他、Java に関するクイズもあります。ぜひ挑戦してみてください。~