このエントリは以下のエントリをベースにしています。
This entry is based on the following one written by Simon Ritter (Deputy CTO at Azul Systems, Java Champion).
https://www.azul.com/dont-fear-the-java/
どのバージョンのJavaを使うべきかを評価していた大学教員に関する内容で始まった”Fear of Java”(Javaの恐怖)というタイトルの興味深い議論が、先頃Java Championsのメーリングリストでありました。この議論についてSimon Ritterがエントリとしてまとめています。
この議論の端緒となったコメントは以下の通りです。
“Oracle JDK / Oracle OpenJDK builds and OpenJDK builds from other providers will be built from the same source for the first six months of updates and should be interchangeable for that period. After six months Oracle JDK / Oracle OpenJDK builds will be built from Oracle’s own fork. Other OpenJDK providers will continue to create binaries from the OpenJDK updates project. Oracle JDK / Oracle OpenJDK and OpenJDK build from the other providers may, therefore, differ in small ways. Binaries from various parties may, of course, vary over time.”
「Oracle JDK/Oracle OpenJDKビルドと他のプロバイダからのOpenJDKビルドは、最初の6か月のアップデートの間、同じソースからビルドされ、その期間は交換可能であるはずです。6か月経過後、Oracle JDK/Oracle OpenJDKビルドはOracleのフォークからビルドされますが、他のOpenJDKプロバイダは、引き続きOpenJDK updatesプロジェクトからバイナリを作成します。そのため、Oracle JDK/Oracle OpenJDKとOpenJDKのビルドは、他のプロバイダのOpenJDKビルドとは多少異なる場合があります。もちろん、さまざまなディストリビュータからのバイナリは、時間の経過とともに変化し、多様化する可能性があります。」
この問題の核心は、OpenJDKバイナリの様々なディストリビュータがOracle JDKとはわずかに異なる実装を提供しているため、今後Javaプラットフォームが多様化するのではないか、というものです。実際にはこれは当てはまらず、その理由も数多くありますが、具体的にセキュリティパッチと、バグ修正ならびにその他の変更という2つの観点から説明されています。
Vulnerability Groupというクローズド・グループをOpenJDK内にOracleが先日立ち上げました。グループが担う作業の性質上、議論は公開されておらず、関わっている企業や団体メンバーは公表されてはいませんが、OpenJDK Censusのページでメンバー個々人は確認できます。メンバー全員、JDKセキュリティーの分野に関心を持っていると思われる人々です。
OpenJDK Vulnerability Group
https://openjdk.java.net/groups/vulnerability/
OpenJDK Census
https://openjdk.java.net/census#vulnerability
このグループの役割は以下の通りです。
“…receive reports of vulnerabilities in OpenJDK code bases, review them, collaborate on fixing them, and coordinate the release of such fixes.”
「…OpenJDKコードベースでの脆弱性のレポートを受け取り、レビューして、共同して修正し、修正のリリースを調整する」
このミッション・ステートメントの重要な言葉は、コラボレーション(collaborate)です。このグループのメンバーは全員、セキュリティ問題の詳細を確認し、共同でパッチを開発します。その結果、OpenJDKバイナリのすべての主要ディストリビューションが、セキュリティパッチのために同じコードベースにアクセスできるようになります。これにより、こうした変更の初期段階での相違の問題が解消されます。
OpenJDKのアップデートはセキュリティパッチだけでなく、バグフィックスやその他のマイナーな改善も含まれています。新しいリリースサイクルでは、Oracleは現在のOpenJDKリポジトリに対するすべての変更のみをアップストリームします。最新のアップデート(4月)の変更は、OpenJDK 12のリポジトリに入っています。Oracle以外のOpenJDKバイナリ・ディストリビューションにこれらの変更を含めるには、サポートされている古いバージョンのソースコードにバックポートする必要があります。誰がこのバックポート作業を行うかは、バイナリ・ディストリビューションを誰が提供するか次第です。
OpenJDKリポジトリ
https://hg.openjdk.java.net/jdk
Red HatのAndrew Haley氏が先頃、OpenJDK8と11のアップデートプロジェクトのリードメンテナとして就任しました。
Main – JDK 8u – OpenJDK Wiki
https://wiki.openjdk.java.net/display/jdk8u/Main
JDK11u – JDK Updates – OpenJDK Wiki
https://wiki.openjdk.java.net/display/JDKUpdates/JDK11u
Andrewが自身のブログで指摘したように、これはRed HatがOpenJDKの更新プロジェクトを「引き継いだ」という意味ではありません (その前に出たRed Hatのプレスリリースを読むと、引き継いだと思われる方がいらっしゃるかもしれませんが) 。
OpenJDK 8 and 11: Still in safe hands
https://developers.redhat.com/blog/2019/05/22/openjdk-8-and-11-still-in-safe-hands/
Leadership of OpenJDK 8 and OpenJDK 11 Transitions to Red Hat (Press Release)
https://www.redhat.com/en/about/press-releases/leadership-openjdk-8-and-openjdk-11-transitions-red-hat
Red HatはOpenJDKプロジェクトに多大な貢献をしており、古いリリース(AndrewはOpenJDK 7アップデートプロジェクトのプロジェクトリーダーでもある)と新しいリリース(JDK 11ではRed Hatが提示したJEP (JDK Enhancement Proposals) が2個ありました)の両方に貢献しています。
Main – JDK 7u – OpenJDK Wiki
https://wiki.openjdk.java.net/display/jdk7u/Main
4月のJDKアップデートは過去のものとは異なります。というのも、長期サポートバージョン(LTS)に対するパブリックアップデートをOracleがリリースしなかった、初めてのケースだからです(Oracleからの無償のパブリックアップデートはJDK 12に対するもの)。
Red Hatのエンジニアたちは、AmazonやIBMなどの他のエンジニアたちと協力して、この変更をバックポートしてただちにOpenJDK 8とOpenJDK 11のアップデートリポジトリに入れました。Azulのエンジニアたちも同じことを独立して行いました。
Azulが同じことを独立して実施した理由は、Azulが提供するディストリビューションのうち、Zulu Enterpriseがお客様との契約にて定めている「Oracleがアップデートをリリースした後どれだけ速やかにアップデートを利用可能にするか」という観点でのSLAに対応するためです。
Azulには2種類のOpenJDKディストリビューションがあります( 多くの点でOracleに類似しています)。一つはZulu Enterpriseで、フルサポートかつTCK通過済みのOpenJDKディストリビューションです(サポートはJDK 7、8、11を対象とし、長期にわたってアップデートを提供します)。これは先述のSLAを契約に含んでいます(最高レベルのSLAは48時間以内)。これを保証するには、他組織のエンジニアによる善意に依拠できないため、自社エンジニアが実施しています。
Zulu Enterprise
https://www.azul.com/products/zulu-enterprise/
もう一つのディストリビューションはZulu Community Editionで、これは現在のOpenJDKリポジトリの内容を単純にビルドしたものです。これにはコードがアップストリームされた後のアップデートのみが含まれるため、SLAはありません。
Zulu Community Edition
https://www.azul.com/downloads/zulu/
Zulu EnterpriseとOracle JDKを除き、すべてのOpenJDKバイナリ・ディストリビューションは同じOpenJDKリポジトリのコードに由来するため、各バイナリ間で相違は発生しません。対してZulu EnterpriseとOracle JDKのユーザーは、有償(商用)ユーザーであり、SLAが定める所定時間以内にアップデートへのアクセスを必要とするユーザーです。
このプロセスは、OpenJDK 6がパブリックアップデートの取得を停止してから問題なく動作してきており、Andrew Haleyがプロジェクトのリーダーを引き継いで、以後アップデートをバックポートし、アップストリームしてきました。先頃Andrewはプロジェクトのリーダーを降り、AzulのAndrew Bryginがリーダーを引き継ぎました。OpenJDK 6の変更のアップストリームは継続しています。
New lead for the JDK 6 Project: Andrew Brygin
https://mail.openjdk.java.net/pipermail/jdk6-dev/2017-January/003625.html
使用するOpenJDKバイナリー・ディストリビューションを選択する際には、以下の数点を考慮しておく必要があります。
- 謎肉JDKビルド(mystery meat JDK build)の問題
- Linuxディストリビューションの中には、特定のビルドに含まれるものを正確に反映しないバージョン文字列を使用しているものがあります。
Mystery meat OpenJDK builds strike again
https://mail.openjdk.java.net/pipermail/jdk8u-dev/2019-May/009330.html
- Linuxディストリビューションの中には、特定のビルドに含まれるものを正確に反映しないバージョン文字列を使用しているものがあります。
- OpenJDKバイナリの出発点はOpenJDKリポジトリのコードではあるものの、そのコードをそのまま(変更せずに)使用する必要はない
- 一部のOpenJDKバイナリ・ディストリビュータは新しいバージョンからのアップデートに含まれていない別の拡張(Enhancement)をバックポートする可能性があります。
ユーザーは選択したバイナリ・ディストリビューションから所望のものが入手できることを慎重に確認する必要があります。