OpenJDKとOracle JDKの関係を整理する
第1回では、Java 9からJavaのリリースサイクルや、OracleによるOracle JDKのサポート方針が変更されたことを紹介した。現在は、Javaの開発ツールキットであるJDKがOpenJDKプロジェクトによって開発されている。
もう少し詳しく説明すると、OpenJDKプロジェクトは、もともと(Oracleに買収される以前の)Sun MicrosystemsがJDKのソースコードをオープンソース化したことから始まった。Oracle JDK 7とOracle JDK 8については、いずれもOpenJDKによる成果物をベースとして、Oracleが独自の機能やインストーラなどを追加する形で製品化されたものになる。この追加機能には、Java Web StartやJavaFX、Flight Recorder、Mission Controlといった、商用アプリケーション開発にとって極めて重要なものも含まれていた。
その後、OracleはJava 9でリリースサイクルおよびサポート方針の変更を発表したが、それと同時にOracle JDKで独自提供してきたFlight RecorderやMission Controlなどの商用機能もOpenJDKプロジェクトに寄贈し、OpenJDKとOracle JDKの機能を同一にすることも発表している。これらの機能はオープンソースになった上で正式にOpenJDKに統合され、OpenJDK 11以降から正式に利用できるようになっている。
ただし、一部でOpenJDKには寄贈されなかった機能もある。Java Web StartやJavaプラグインはJava 9で非推奨になり、Java 11で正式に廃止された。これらはオープンソース化もされなかったため、Java 11以降ではどのJDKでも使うことができない。JavaFXもJDKにはバンドルしない方針となったためOpenJDKには含まれていないが、https://openjfx.io/ からオープンソース版を入手することができる。
さて、Java 7やJava 8の頃は、ほとんどのJava開発者が開発環境としてOracle JDKを利用しており、JDKと言えば、実質としてOracle JDKを指していたといってもいい。Oracle JDKには無償版と有償版が提供されているが、無償版でも十分な長さのサポート期間(原則として、次のJavaが出てから最低1年)が設けられていた。
それに対し、Java 9以降の無償版Oracle JDKのサポート期間はOpenJDKに準ずるため6カ月と短く、新たなバージョンがリリースされたら前のバージョンのサポートが即座に終了するため、移行期間にも余裕がない。ただし、前述のように以前までは有償でしか提供されていなかったOracle JDKの独自機能はすでにOpenJDKに統合されている。したがって、機能面だけを見れば、OpenJDK自体もOracle JDKの代わりに使うことができるようになっているというわけだ。
主要なOpenJDKディストリビューション
注意しなければならないのは、OpenJDKプロジェクトで提供されるのはソースコードの形での成果物だけであり、バイナリの提供は行われていないということである。したがって、Oracle JDKではなくOpenJDKを直接使いたい場合は、OpenJDKのソースコードを自前でビルドしなければならない。これは一般の開発者には敷居が高いことから、Oracle以外のさまざまなベンダーやグループが、OpenJDKをベースとしたバイナリビルドを独自に提供するようになった。
これらの独自ビルド版(本稿ではこれをOpenJDKディストリビューションと呼ぶ)は、基本的な機能はOracle JDKと同等だが、それぞれでサポート方針が若干違ったり、独自の拡張機能が提供されていたりするケースもある。
以下では、そのようなJDKディストリビューションのうち、主要なものをいくつか紹介する。サポート期間の詳細や有償サポートの料金体系などについては、各ベンダーのサイトを参照していただきたい。
Oracle OpenJDK
ダウンロードサイト: https://jdk.java.net/
OracleによるOpenJDKビルド。有償版のOracle JDKと同じものだが、サポート期間は6カ月(次のバージョンのリリースまで)のみであり、専用のインストーラも付属しない。有償版と区別するために便宜上Oracle OpenJDKと呼ばれる。
AdoptOpenJDK
ダウンロードサイト: https://adoptopenjdk.net/
コミュニティ主導でスタートしたプロジェクトで、IBMやAzul Systemsなどの主要なベンダーにもサポートされているビルドファーム。JDK 8および11をLTS(Long Term Support)版と位置付け、独自に2023年9月までのサポートを提供する。また、IBMによる有償サポートも提供される。
JVMとしてOpenJDKのHotSpotと、Eclipse OpenJ9のどちらかを選ぶことができる。OpenJ9は、IBMによって開発され、オープンソース化されてEclipse Foundationに寄贈されたJVMである。なお、AdoptOpenJDKはOracle公式のTCK(互換性ツールキット)を通過していないが、代わりに独自のテストスイートで互換性テストを行っている(これは主に予算的な事情によるものとのこと)。
Azul Zulu
ダウンロードサイト: https://www.azul.com/downloads/zulu/
Azul Systemsによって提供されているJDK。無償のCommunity版と有償のEnterprise版があり、Enterprise版では長期サポートを受けることができる。Oracleと同様にJDK 8および11、17がLTS版として位置付けられていることに加え、JDK 13や15がMTS(Middle Term Support)版として2.5〜3.5年の少し長いサポート期間が設けられている。
なお、AzulとMicrosoftはJDKの提供において提携を結んでおり、Microsoft AzureではZulu Enterprise相当のJDKを追加料金なしで利用することができる。
Amazon Corretto
ダウンロードサイト: https://aws.amazon.com/jp/corretto/
Amazon Web Servicesによって提供されているJDK。リリースされているのはJDK 8およびJDK 11のみだが、同社によって独自に無償の長期サポートが行われる。AWS環境だけでなく、WindowsやmacOSなどの通常のOSでも利用することが可能。
Red Hat OpenJDK
ダウンロードサイト: https://developers.redhat.com/products/openjdk/download (Windows版。Linux版は同社のカスタマーポータルなどから入手可能)
Red Hatによって提供されているJDK。Red Hat Enterprise Linux(RHEL)上で使う場合、およびWindowsであってもRed Hat製のミドルウェアで使う場合に限って、独自に長期サポートが提供される。この長期サポートはRHELのサポートサブスクリプションに含まれるため、すでにRHELサブスクリプションに加入済みの場合は追加料金は不要。またWindows版については、開発用途に限ってサブスクリプション無しで利用することができる。
Liberica JDK
ダウンロードサイト: https://bell-sw.com/java.html
BellSoftによって提供されているJDK。Oralce JDKと同様にJDK 8、11、17をLTS版としており、有償で長期サポートを受けることができる。非LTS版および無償利用の場合のサポート期間は6カ月。JavaFXのオープンソース版であるOpenJFXがバンドル提供されているという特徴がある。
SDKMANおよびShogunのススメ
このように、一言でJDKと言っても、現在は多くの選択肢が存在する。利用するプラットフォームや必要となるサポートの内容などによって、適切なJDKディストリビューションを選択することが重要だ。
もし、手元のPCにいろいろなJDKをインストールして動作を比較してみたい場合は、SDKMANやShogunを使うのが便利だ。SDKMANは、JDKをはじめとする開発ツールを簡単にインストールできるようにしてくれるコマンドラインツールである。ShogunはSDKMANにGUIを付けて使いやすくしてくれるmacOS用のツールになっている。これらを利用すれば、1台のPCに複数のJDKを同居させ、簡単に切り替えて使うことが可能になる。複数のJDKを比較検討する際は利用することををお勧めしたい。