the KodeLab

OpenJDK ディストリビューションの選び方|Temurin・Corretto・Zulu・GraalVM ほか主要 9 種の比較

9,030 文字 23 分で読めます
OpenJDK ディストリビューションの選び方|Temurin・Corretto・Zulu・GraalVM ほか主要 9 種の比較

Java をダウンロードしようとすると、かつては Oracle のサイトへのリンク 1 本で済みました。今は OracleJDK、OpenJDK、Eclipse Temurin、Amazon Corretto、Azul Zulu…と、どれも「JDK」と書かれているのに微妙に違うものが並びます。Oracle のライセンスもここ数年で何度も変わっていて、企業内の法務部門ですら追いきれないことがあります。本記事では Java 8 から Java 25 までの Oracle ライセンスの変遷を整理し、主要な OpenJDK ディストリビューションをそれぞれの向き不向きとあわせて紹介します。

前提の整理

本記事で扱う内容:

  • JDK / JRE / JVM の関係と、なぜ区別する必要があるのか
  • OracleJDK と OpenJDK の違い
  • Oracle ライセンスの変遷(2023 年の従業員数ベース課金への切り替えを含む)
  • LTS / GA / EA の意味と、現在利用可能な LTS バージョン
  • 主要 9 種の OpenJDK ディストリビューション紹介と向き不向き(Eclipse Temurin、Amazon Corretto、Azul Zulu、Microsoft Build of OpenJDK、IBM Semeru Runtime、Oracle GraalVM、BellSoft Liberica、Red Hat build of OpenJDK)

なぜ JDK が必要か

JDK は Java Development Kit の略で、Java のコードを開発・コンパイル・実行するために必要なソフトウェアパッケージです。内部に JRE(Java Runtime Environment)と JVM(Java Virtual Machine)を含みます。JVM は 20 年以上の歴史を経て優秀なエンジニアリングが積み上がっているため、Java 以外の言語も JVM 上で動かすようになりました。Kotlin、Groovy、Scala、Ruby 由来の JRuby、Python 由来の Jython などです。

OracleJDK と OpenJDK

OracleJDK は Oracle の Web サイトからダウンロードする Java 開発・実行環境で、商用利用には有料ライセンスが必要です。OpenJDK は Oracle が別途リリースしているオープンソース版で、GPLv2 with Classpath Exception ライセンス。GPL 系なので商用利用も問題ありません。

Oracle と Google の Java 訴訟や、「Java が有料化する」と繰り返し報じられてきた件で身構えた人も多いと思います。Google との訴訟は置いておくと、Java はもともと有料部分と無料部分が混在していて、初期はその境目が曖昧でした。公式 JDK の中に無料で使える機能と有料機能が入り混じっていて、Oracle の営業担当ですら正確には切り分けられなかったのでは、という状況です。加えて OracleJDK が無料のままだと、同じく公式リリースである OpenJDK の立ち位置が微妙になります。その後「OracleJDK は有料、OpenJDK は無料」とはっきり役割分担されました。Red Hat Enterprise Linux が有料で AlmaLinux と Rocky Linux が無料なのと似た構図です(CentOS、ありがとう…)。

Java 11 から Java 16 あたりまで、OracleJDK は商用利用禁止(有料サブスクリプション契約が必要)という時期が続きました。Java 17 から Oracle は新しい No-Fee Terms and Conditions(NFTC) ライセンスを導入し、OracleJDK 17 / 21 / 25 の LTS 版は再び本番環境で無料利用できるようになりました。ただし「該当 LTS リリースから次の LTS 登場後 1 年まで」という期限つきで、それを過ぎるとアップデートを続けるには有料サブスクリプションが必要です。こうした変更の積み重ねが、多くの企業を「サードパーティの OpenJDK ディストリビューションに移行しておくほうが楽」と判断させた理由です。

OpenJDK(builds by Oracle)は Oracle 自身が提供するオープンソース版ですが、各リリースへのセキュリティ更新ウィンドウは短めで、Oracle は最新版を進めることに注力しています。この点を補うように、Oracle 以外の企業・団体からも OpenJDK ビルドが多数提供されています。本記事で紹介するのはこれらです。

ライセンス変遷の時系列

Oracle の Java ライセンスはここ数年で何度も変わっています。タイムラインで整理すると以下のとおりです。

  • Java 8(2014)以前:OracleJDK を本番で無料利用できました。OpenJDK は予備扱いで、多くの人は OracleJDK を直接ダウンロードしていました。
  • Java 11(2018):OracleJDK が「OTN License」に切り替わり、本番の商用利用には有料サブスクリプションが必要に。同時に Oracle は OpenJDK 8 の公式バイナリのメンテを停止したため、AdoptOpenJDK などのコミュニティビルドが主流に躍り出ました。
  • Java 17(2021-09):NFTC ライセンス登場。OracleJDK 17 は本番でも再び無料利用可能に。ただし「次の LTS 登場後 1 年間は無料アップデート継続、それ以降は有料サブスク必須」という期限つき。
  • 2023-01:Oracle が Java SE サブスクリプションを 会社全体の従業員数ベース課金 に変更。「実際に Java を使う人数」ではなく「契約社員や外部委託を含む全従業員」でカウントされるため、中規模〜大企業ではコストが数倍に跳ね上がりました。ここ数年の Java エコシステムで最大のニュースで、多くの企業がサードパーティの OpenJDK ディストリビューションへの移行を決断するきっかけになりました。
  • Java 21(2023-09)、Java 25(2025-09):NFTC ライセンスを継続。ただし 2023 年の従業員課金の影響で、サードパーティディストリビューションのシェアが大きく伸び、Eclipse Temurin、Amazon Corretto、Microsoft Build of OpenJDK はいずれもユーザーの伸びが目立ちます。

実務上の結論としては 「なるべく OracleJDK は触らない」 が現在のトレンドです。ライセンス条件の変動が会社全体のコストに直結するため、サードパーティの OpenJDK のほうが安定します。本記事で紹介するディストリビューションはどれもコアは同一の OpenJDK ソースなので、機能面はほぼ同じです。違いはサポートするバージョン範囲、対応プラットフォーム、長期メンテナンスのコミット、追加ツールといった部分に現れます。

なぜこれほど多くの JDK があるのか

Java 言語には共通の仕様と標準があります。たとえば JEP 286: Local-Variable Type Inference では、Java 10 から使えるようになった var キーワード(ローカル変数でコンパイラに型推論させる)が提案されています。OpenJDK の組織は新機能の提案を広く受け付け、議論・修正を経て投票で正式機能として採用するかを決めます。仕様として interface のみを定義し、実装までは規定しないケースもあります。そのため各企業・団体が仕様に準拠した独自の OpenJDK 実装を構築できる構造になっています。Unix の規約に準拠した Unix 系 OS がたくさんあるのと、あるいは Linux kernel をベースに多くの Linux ディストリビューションが生まれているのと同じで、選択肢の多さは結果的にオープンな仕様の副産物です。

このプロセスの具体例として、以前書いた Java switch の進化史|Java 7 から Java 26 まで を参照してください。Java 7 の String サポート、Java 14 の switch expressions と yield、Java 21 の pattern matching for switch、Java 26 プレビューの primitive types in patterns と、それぞれ JEP 提案 → 議論 → 投票 → 正式機能化というプロセスを経てきた実例が並んでいます。

より詳しい背景:Java Community Process(Wikipedia)

Java と JDK のバージョン表記

  • EA:Early Access(早期アクセス版)。不安定なプレビュー。例:26EA は Java 26 が正式版ではないことを示す。
  • GA:General Availability(一般提供版)。本番利用可能。通常は明示されず、たとえば単に「25」と表記される。
  • LTS:Long-Term Support(長期サポート)。次のバージョンが出たあとも継続してセキュリティ更新が提供される。現在の LTS は 8、11、17、21、25。特別な理由がなければ、その時点で最新の LTS(2026 年なら Java 25)を使うのがおすすめ。

ディストリビューション紹介

Eclipse Temurin

Eclipse Foundation のトップレベルプロジェクトで、IBM、Red Hat、Microsoft など多くの大手企業がメンテナンスに参加しています。OS と CPU アーキテクチャのサポート範囲が最も広く、上記以外にもダウンロードページに多数並んでいます。Spring の公式ドキュメント、公式 Docker イメージの多くも Temurin を採用しており、現在の OpenJDK 界隈の主流選択肢のひとつです。

Amazon Corretto

Amazon が提供する OpenJDK 実装。紹介ページには “Amazon Corretto 17 is a no-cost, multiplatform, production-ready distribution of the Open Java Development Kit (OpenJDK).” とあり、無料でマルチプラットフォーム、本番利用可能な OpenJDK という位置づけです。主要 OS / Docker に加え、AWS 自身のクラウドサービスでも Corretto が採用されています。

Azul Zulu

Azul が提供する無料版の OpenJDK 実装。対応 Java バージョンが最も豊富で、古くは Java 6(旧称 Java 1.6)までカバーしています。主要 3 OS と各 CPU アーキテクチャの対応も十分。Java 6 / 7 の古いシステムをまだ保守しているなら、Zulu はビルドを提供している数少ないディストリビューションの 1 つです。Azul は Oracle と似て無料版と有料版を持ちます。Zulu は無料版で商用利用に制限なし、Core と Prime は有料版ですが評価・開発用途なら無料利用可能(この点も現在の Oracle と似た構造)。

AdoptOpenJDK

AdoptOpenJDK プロジェクトは開発終了しており、最新は 16 まで。開発チームは Eclipse Foundation へプロジェクトを移管し、現在の Eclipse Temurin がその後継にあたります。本番で AdoptOpenJDK を使っているなら Eclipse Temurin(あるいはここで紹介した他のディストリビューション)への移行をおすすめします。Java は後方互換性が強いので JDK ベンダーの切り替えはトラブルになりにくく、Amazon / Azul / Eclipse もいずれも 8 / 11 など古い LTS を引き続きメンテしています。

Microsoft Build of OpenJDK

Microsoft が 2021 年にリリースした OpenJDK 実装。主に Azure クラウドと Microsoft 社内の Java アプリケーション(Minecraft Java 版もこれで動いています)向け。元 OpenJDK のコアコントリビューターを多数採用しており、メンテナンス品質は安定しています。アプリケーションが Azure 上にあるか、社内が Microsoft エコシステム中心なら、この選択が最もスムーズです。

IBM Semeru Runtime

Semeru と他のディストリビューションの最大の違いは、JVM に OpenJ9 を採用している点(一般的な HotSpot ではない)。OpenJ9 はメモリ使用量が少なく、起動が速いという特徴があり、コンテナ・マイクロサービス・サーバーレスのように、メモリコストとコールドスタート時間が効いてくる場面に向いています。一方で長時間動作する処理のスループットは HotSpot のほうが有利なことが多いので、自分のアプリがどちらのタイプかは選定前に計測しておくのが無難です。IBM メインフレーム(z シリーズ、Power シリーズ)を使っている場合、Semeru はこれらのアーキテクチャをサポートする数少ないディストリビューションでもあります。

Oracle GraalVM

GraalVM も Oracle が提供していますが、OracleJDK とは別プロダクトラインです。最大の特徴は Native Image で、Java アプリケーションを単一のネイティブ実行可能ファイルにコンパイルでき、起動時間が秒単位から数十ミリ秒に短縮され、メモリ使用量も大きく下がります。サーバーレスや CLI ツール向けにうってつけです。Spring Boot 3、Quarkus、Micronaut はいずれも GraalVM Native Image を手厚くサポートしています。GraalVM 21 からは GFTC ライセンスが導入されて本番環境での無料利用が可能になり、以前の Community Edition + Enterprise Edition の 2 本立てよりずっとシンプルになりました。ただし Native Image ではリフレクションや動的ロードをすべてビルド時に決定する必要があるため、従来の Java 開発スタイルとのずれがあります。プロジェクトが互換かどうかは導入前に確認してください。

BellSoft Liberica

Spring が公式に推奨する JDK のひとつ。JavaFX を同梱した「Liberica Full」版を提供している数少ないディストリビューションでもあります(他は JavaFX を別途インストールする必要がある)。CPU アーキテクチャのサポートが非常に広く、RISC-V のような珍しいアーキテクチャも含まれるので、組み込みデバイスやエッジコンピューティング用途にも向きます。BellSoft は GraalVM を拡張した自社の Native Image 製品 Liberica NIK も提供しています。

Red Hat build of OpenJDK

Red Hat が提供する OpenJDK ディストリビューション。主に RHEL(Red Hat Enterprise Linux)ユーザー向けで、RHEL サブスクリプションを購入すれば対応する Java サポートが含まれます。環境が元から RHEL なら、これが最も自然な選択で、ライセンスまわりを別途考える必要がありません。Red Hat は OpenJDK 8 / 11 の長期メンテナーでもあり、OpenJDK コミュニティ全体に対してセキュリティ更新を多く貢献しています。

その他

ここで紹介しなかった OpenJDK 実装はほかにも多数あります。Alibaba の Dragonwell、Tencent の Kona、SapMachine(SAP 製)など。より網羅的な比較を見たい場合は、詳細にまとめられた Which Version of JDK Should I Use? というサイトが参考になります。

参考リンク