CLOVER🍀

That was when it all began.

OpenJDKのソースコードリポジトリは、どれを見ればいい?

これは、なにをしたくて書いたもの?

自分の使い方というと、最新のJavaや開発中のJavaの情報を追うというよりも、リリースされてから(今のご時世だとLTS)
ちょっと間を空けて使い始めることが多いです。

で、以前はOpenJDKのソースリポジトリを見ることはそんなになかったのですが、勉強している時にたまに見たり、
エントリを書く時にソースコードへリンクをつけるようなこともたまにするようになりました。

OpenJDK

今までソースコードをまったく見ていなかったということはないのですが、JDKに含まれているsrc.zip
見ていた感じですね。

OpenJDKのソースリポジトリGitHubに移ったというのも、やりやすくなったなぁと。

OpenJDKのソースコード、GitHubへの移行を完了 - Publickey

GitHub - openjdk/jdk: JDK main-line development

ただ、自分のように「最新のJavaや開発中のJavaの情報を追うというよりも、リリースされてから(今のご時世だとLTS)
ちょっと間を空けて使い始めることが多い」という文脈でこのリポジトリを見ると、ちょっと違うかも?と思ったので
ちゃんと見てみることにしました。

※ AdoptOpenJDKとかは考えないことにします

環境

具体的なバージョンがあった方がよいだろうということで、まずは手元の環境で使っているJavaのバージョンを。

$ java --version
openjdk 11.0.9.1 2020-11-04
OpenJDK Runtime Environment (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04)
OpenJDK 64-Bit Server VM (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04, mixed mode, sharing)

Ubuntu Linux 20.04 LTSにインストールした、OpenJDK 11です。2020年11月4日と日付も出ています。

こちらのパッケージからインストールしたものですね。

openjdk-lts package : Ubuntu

11.0.9.1+1-0ubuntu1~20.10 : openjdk-lts package : Ubuntu

https://git.launchpad.net/ubuntu/+source/openjdk-lts?h=ubuntu%2Ffocal-devel

https://git.launchpad.net/ubuntu/+source/openjdk-lts/tree/?h=applied/11.0.9.1%2b1-0ubuntu1_20.04

OpenJDK 11のリポジトリを探す

ところで、OpenJDK 11をOpenJDKのサイトからダウンロードしようとすると、build 11+28が置かれています。

Java Platform, Standard Edition 11 Reference Implementations

最終リリースは2018年9月だとも書かれていますが、このサイトから配布されているOpenJDKのリリースモデルからすると、
そりゃあそうだという感じですね。

OpenJDKのソースリポジトリのOpenJDK 11のタグを確認してみると、最後に作られているものは
同じですね。

Release jdk-11+28 · openjdk/jdk · GitHub

OpenJDK 11のリリースは、2018年8月でした。

Java 11正式版がリリース、本バージョンからOracle JDKのサポートは有償に。OpenJDKで無償の長期サポート提供は現時点で期待薄 - Publickey

というわけで、jdk.java.netで配布されているものはさておき、今の自分が使っているOpenJDK 11は明らかにこれでは
ありません。

OpenJDK: JDK Updates Project

ところで、GitHubを見るとOpenJDK 11らしきリポジトリが3つ見つかります。いずれもリードオンリーなミラーだと書かれています。

Read-only mirror of https://hg.openjdk.java.net/jdk/jdk11/

GitHub - openjdk/jdk11: Read-only mirror of https://hg.openjdk.java.net/jdk/jdk11/

Read-only mirror of https://hg.openjdk.java.net/jdk-updates/jdk11u/

GitHub - openjdk/jdk11u: Read-only mirror of https://hg.openjdk.java.net/jdk-updates/jdk11u/

Read-only mirror of https://hg.openjdk.java.net/jdk-updates/jdk11u-dev/

GitHub - openjdk/jdk11u-dev: Read-only mirror of https://hg.openjdk.java.net/jdk-updates/jdk11u-dev/

これらは、Mercurialが本体なんですね。

ちなみに、ここで結論を書いておくと自分の用途では以下を見るのが良さそうです。

GitHub - openjdk/jdk11u: Read-only mirror of https://hg.openjdk.java.net/jdk-updates/jdk11u/

また、今の環境で見ているのは

$ java --version
openjdk 11.0.9.1 2020-11-04
OpenJDK Runtime Environment (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04)
OpenJDK 64-Bit Server VM (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04, mixed mode, sharing)

こちらのタグ相当だ、ということになりそうです。

Release jdk-11.0.9.1+1 · openjdk/jdk11u · GitHub

見たいOpenJDKのリリース直後なら、こちらでも良いかもです。

GitHub - openjdk/jdk: JDK main-line development

GitHub - openjdk/jdk11: Read-only mirror of https://hg.openjdk.java.net/jdk/jdk11/

OpenJDK 11の各リポジトリを見てみる

最初にこちら。

JDK

タグの一覧を見てみると、最後に出てくるのはjdk.java.netのOpenJDK 11の最終リリースと同じものです。

Releases · openjdk/jdk11 · GitHub

2018年8月ですね。まさにこの内容です。

JDK 11

Java Platform, Standard Edition 11 Reference Implementations

ここで、「JDK Update Releases」というページを見てみます。

OpenJDK: JDK Updates Project

こちらは、JDKのアップデートリリースに関する情報が書かれているようです。

OpenJDK 11のアップデートページに行くと、2018年8月以降の更新が書かれています。

JDK11u - JDK11u - OpenJDK Wiki

このページを見ると、jdk11ujdk11u-devの違いがわかります。

Development takes place in the jdk11u-dev Mercurial repository and should be the primary place for OpenJDK committers to submit their work.

Code from the development repository is regularly tagged and promoted to the master jdk11u repository, which is used to stabilize and deliver the quarterly releases. Distributors should use this as their primary source for creating OpenJDK builds.

JDK11u / General Information

つまり、開発はjdk11u-devで行われ、定期的にタグ付けされてjdk11uに反映されます、と。

リポジトリのセクションにも、同じような説明がありますね。

jdk11u-dev: Always open repository for development of upcoming JDK 11 Update releases. Pushes after jdk11u-fix-yes approval. Check here for clearance.

jdk11u: Repository used for Rampdown of JDK 11 Update releases. Pushes only during 4-weeks rampdown period after jdk11u-critical-yes approval. Check here for clearance.

JDK11u / Repositories

なので、自分のようにリリース済みのOpenJDKの特定のバージョンのソースコードを見る場合は、jdk11uの方を見るのが
正解のようです。

リリース直後なら、このあたりを見ていても良さそうですね。

GitHub - openjdk/jdk: JDK main-line development

GitHub - openjdk/jdk11: Read-only mirror of https://hg.openjdk.java.net/jdk/jdk11/