JREが単体で配布されなくなった理由わ け
  Java, プログラミング

2018年9月、Java 11がリリースされました。Java 10までは開発用のJDKと実行環境のJRE、2つのパッケージが提供されていたのですが、Java 11からJDKのみとなりJava実行環境(JRE)は単体配布されなくなりました。

オラクルが配布している Oracle JDKOracle OpenJDK だけでなく、ほかの OpenJDK ビルド AdoptOpenJDKZulu OpenJDK でもJREは配布されていません。

どうして、JREが配布されなくなってしまったのでしょうか?

新たなアプリケーション配布方法の提案

オラクルが “JDKの新しいリリース・モデルおよび提供ライセンスについて” 発表しています。

前半はリリース・サイクルの変更や商用利用の有償化などJDKに関する内容が記載されています。後半に “軽量化したJREをバンドルする配布方式の提案” という見出しがあり、JREに関して記述されています。少し長いですが引用します。

軽量化したJREをバンドルする配布方式の提案
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」の機能拡充を進めていきます。

ふむふむ、なるほど。単体配布のJREをシステムにインストールして複数のJavaアプリケーション実行でJREを共有する構成だと、一部のJavaアプリケーションの都合でJREのバージョンアップができなかったりといった弊害があったわけですね。分かります。(既にJava 6が入っているからJava 6で動くように作って、なんて言われこともあります。)

そして、Java 9で導入されたモジュール機構(Project Jigsaw)によって、アプリケーションが必要とする小さなJREを構成できるようになったのでアプリケーションにJREを同梱してしまえばいいよ、という提案です。

共有されるJREをシステムにインストールする構成には多くの弊害がある、ということでJREが単体配布されなくなったようです。これからは、JDKを使ってアプリケーションごとのJREを出力してバンドルしていきましょう。


アプリケーションごとにカスタマイズしたJREを作る方法について書かれた以下の記事もご一読ください。