広告

Java : OpenJDK と OracleJDK の違い

本記事では、Java の開発キットである OpenJDK と OracleJDK の違いについて解説します。


はじめに

この記事は、OpenJDK バージョン 21 を対象として解説しています。

また、この記事の内容が古くなっている、もしくは間違っている可能性もあります。
よって、特に ライセンス については 必ずご自身でもよく確認してから JDK をご利用ください。

OpenJDK と OracleJDK の違い

簡単に違いをまとめると…

  • OpenJDK : フリーで使える。長期サポート(LTS) なし。
  • OracleJDK : フリーで使えるのは限定的。長期サポート(LTS) あり。

という感じです。

長期サポート(LTS) とは

ロングタームサポート、長期サポート (英: long-term support、LTS) は、コンピュータソフトウェアの安定リリースが標準版よりも長期間保守される製品ライフサイクルポリシーである。

LTS とは長期サポートのことです。
Long-Term Support の頭文字ですね。

OracleJDK は LTS に対応しています。
ただし、すべての JDK バージョンで対応しているわけではありません。

【JDK バージョンと LTS 対応表】

バージョン リリース日 OpenJDK OracleJDK
JDK 17 2021年9月 - LTS
JDK 18 2022年3月 - -
JDK 19 2022年9月 - -
JDK 20 2023年3月 - -
JDK 21 2023年9月 - LTS
JDK 22 2024年3月 - -

(2024/9/2 現在、最新の LTS 対応のバージョンは JDK 21 です)

例えば、JDK 21 で開発しているとしましょう。
JDK に不具合(A) が発生したら、通常、パッチがリリースされます。

  • JDK 21.0.1 (パッチ)

さらに不具合(B) が発生したら、またパッチがリリースされます。

  • JDK 21.0.2 (パッチ)

さて、しばらくして JDK 22 がリリースされました。
そして、またまた不具合(C) が発生しました。この不具合は JDK 21 でも JDK 22 でも発生します。

ここで LTS かどうかの違いがあります。

【 OracleJDK (LTSあり) 】

JDK 21 と JDK 22 にパッチがあたります。
(JDK 21 は LTS 対応バージョンなので、長期間パッチが提供されます)

イメージ図4

【 OpenJDK (LTSなし) 】

JDK 22 にだけパッチがあたります。

不具合(C) の修正された JDK を使いたいときは、メジャーバージョン (JDK 21 → JDK 22) を更新するしかありません。
もし運用中のシステムに対して、JDK のメジャーバージョンを上げるとなると、それなりに大がかかりなテストが必要となるでしょう。

イメージ図3

OpenJDK とビルドの関係

OpenJDK (Open Java Development Kit) は、プログラミング言語Javaのフリーかつオープンソースの実装である[2]。2006年、サン・マイクロシステムズが始めたもので、GPLリンク例外つきの GNU General Public License (GNU GPL) でライセンスされている。

OpenJDK を説明するにあたり、わかりやすさのため用語を3つ定義します。

  • OpenJDK (ソースコード)
    • 公式HP : https://openjdk.org/
    • すべての JDK のベースとなるものです。オープンソース として公開されています。
      このソースコードをもとに、いろいろなバージョンの JDK (バイナリ) がビルドされています。

  • OracleJDK (バイナリ)

OpenJDK と OracleJDK どちらも、Oracle がビルドしているのがややこしいですよね …

イメージ図1


ちなみに、Oracle 以外にも、例えば Microsoft や Amazon などがビルドしている JDK もあります。

イメージ図2

ビルドされた各JDK (バイナリ) は、それぞれ違う ライセンス でリリースされています。
使うときにはよくご自身で各ライセンスをご確認ください。

OpenJDK (ソースコード)

What is this? The place to collaborate on an open-source implementation of the Java Platform, Standard Edition, and related projects.

OpenJDK (ソースコード) は Java SE の オープンソース としての実装です。

Java SE とは、

  • Java 言語仕様
  • 標準 API 仕様
  • 仮想マシンの仕様

などの仕様の集まりのことです。
これらの仕様を OpenJDK は実際にソースコードで実装しているわけですね。

ライセンスは、

です。
GPL にクラスパス例外がついているのが特徴です。

OpenJDK (バイナリ)

Production and Early-Access OpenJDK Builds, from Oracle

OpenJDK (バイナリ) は、Oracle によってビルドされた JDK です。
OpenJDK (ソースコード) を、特に改変はせずにそのままビルドしている … はず。

もっとも標準的な JDK のビルドといえるでしょう。
個人でちょっと使うくらいであれば、この OpenJDK (バイナリ) をおすすめします。

ただし、長期サポート(LTS) には対応していません。

ライセンスは OpenJDK と同じですね。


OracleJDK (バイナリ)

JDK 21 binaries are free to use in production and free to redistribute, at no cost, under the Oracle No-Fee Terms and Conditions (NFTC).

OracleJDK (バイナリ) は、Oracle によってビルドされた JDK です。
OpenJDK (バイナリ) と違い、長期サポート(LTS) に対応しています。

ただし、ライセンスは OpenJDK (バイナリ) と異なるのでご注意ください。


JDK 21 will receive updates under the NFTC, until September 2026, a year after the release of the next LTS. Subsequent JDK 21 updates will be licensed under the Java SE OTN License (OTN) and production use beyond the limited free grants of the OTN license will require a fee.

翻訳すると …

  • JDK 21は、次のLTSリリースの1年後である2026年9月まで、NFTCの下でアップデートを受けることができます。それ以降のJDK 21のアップデートは、Java SE OTNライセンス(OTN)の下でライセンスされ、OTNライセンスの限定的な無償供与を超える実稼働での使用には料金が必要となります。

という感じですね。

ライセンスについて補足

Oracleが、長期サポートリリース(英語版)(LTS)に対するアップデートをJDK 11や8u211以降はパーミッシブ・ライセンスでリリースするのを中止したため、他のグループらがパーミッシブなライセンスのビルドを提供し始めている[18][19]。 しかし、Oracle JDK 17からは次のLTSがリリースされてから最低1年はパーミッシブ・ライセンスであるNo-Fee Terms and Conditions (NFTC)とすることが発表されている[20]

OracleJDK (バイナリ) は、JDK 11 以降 フリー でリリースするのを中止しました。
しかし、JDK 17 以降では、期限付きで フリー でリリースするように変更となりました。

… という感じで、少し迷走しています。

JDK のラインセスは、

  • ビルドの違い
  • バージョンの違い

で異なることがあります。

実は違うバージョンのライセンスを確認していた … なんてことがないように注意しましょう。

まとめ

OpenJDK (バイナリ) は最も基本的な JDK で フリー で使えます。
個人で開発する場合や、小規模な開発などでは、おすすめの JDK です。

もし長期サポート(LTS) が必要であれば OracleJDK (バイナリ) を検討してみましょう。


関連記事

ページの先頭へ