OpenJDK
プログラミング言語Javaのフリーかつオープンソースな実装
From Wikipedia, the free encyclopedia
OpenJDK (Open Java Development Kit) は、プログラミング言語Javaの自由かつオープンソースのJava Development Kitの実装である[2]。2006年、サン・マイクロシステムズが始めたもので、OpenJDKはJava SE 7以降の公式リファレンス実装とされている[3]。
|
OpenJDK の公式ロゴマーク | |
| 開発元 | オラクルなど |
|---|---|
| 初版 | 2007年5月8日 |
| 最終版 | 25.0.2 - 2026年1月20日 [±] |
| 最新評価版 | JDK 26 Build 32[1] - 2026年1月23日 [±] |
| リポジトリ | |
| プログラミング 言語 | Java、C++など |
| 対応OS | Linux、macOS、Windows、AIX |
| プラットフォーム | x86-64、ARM64、RISC-V、PowerPC、IBM z |
| サポート状況 | サポート中 |
| 種別 | ソフトウェア開発キット |
| ライセンス | GPL 2.0、GPLリンク例外、Universal Permissive License |
| 公式サイト |
openjdk |
GPLリンク例外つきの GNU General Public License (GNU GPL) でライセンスされている。リンク例外つきとしたのは、Javaクラスライブラリのライブラリとしての使用をGPLライセンスの適用外とするためである。
コンポーネント
OpenJDKプロジェクトは、いくつかのコンポーネントからなる。主なコンポーネントとして、HotSpot(Java仮想マシン)、Javaクラスライブラリ、javac(Javaコンパイラ)がある。
かつて Java 10 まで含まれていて、Java 11で廃止されたウェブブラウザ用プラグインと Java Web Start はOpenJDKには含まれない。サンはかつてそれらのコンポーネントもオープンソース化したいとしていたが、実際にはサンもオラクルもオープンソース化していない[4]。今のところ利用可能なフリーのWeb Start の実装は、IcedTeaが提供しているもの、およびOpenWebStartがある。
バージョン
OpenJDKは当初、Java SE 7のJavaプラットフォームのみをベースとしていた[5]。
しかし、JDK 10以来、Java SEプラットフォームに対するオープンソースのリファレンス実装を作成するプロジェクトがJDKプロジェクトに移譲された[6]。1つのフィーチャーリリースを公開してすぐに終了するという過去のJDKリリースのプロジェクトとは異なり、新しいプロジェクトでは、長期間活動するプロジェクトによって、将来のJDKのフィーチャーリリースのすべてを作成し、6ヶ月毎に新しいバージョンのフィーチャーリリースを公開するという厳格な時間ベースのリリースモデルを使用する方針に転換した[7]。
以下のように、複数の異なるバージョンのOpenJDKおよびJDKプロジェクトの開発ブランチが存在する。
- OpenJDK 6プロジェクト。これは、JDK 7をベースとしており、オープンソースバージョンのJava 6を提供するために修正されたもの[8][9][10]。Red HatはOpenJDK 6のリーダーを辞任し、2017年の初めにAzul Systemsにより取得された[11][12]。
- OpenJDK 7uプロジェクト。JDK 7をベースとしており、既存のJava 7リリースのアップデートを生成するもの[13]。
- OpenJDK 8プロジェクト。これは、JDK 8の基礎となっており、2014年3月18日にリリースされた[14]。
- OpenJDK 8uプロジェクト。これは、JDK 8をベースにしており、既存のJava 8リリースのアップデートを生成するもの[15]。
- OpenJDK 9プロジェクト。これは、JDK 9の基礎となっている[16]。
- JDKプロジェクト リリース10[17]。
- JDKプロジェクト リリース11[17]。
- JDKプロジェクト リリース12[17]。
- JDKプロジェクト リリース13[17]。
- JDKプロジェクト リリース14[17]。
- JDKプロジェクト リリース15[17]。
- JDKプロジェクト リリース16[17]。
- JDKプロジェクト リリース17[17]。
- JDKプロジェクト リリース18[17]。
- JDKプロジェクト リリース19[17]。
- JDKプロジェクト リリース20[17]。
- JDKプロジェクト リリース21[17]。
- JDKプロジェクト リリース22[17]。
- JDKプロジェクト リリース23[17]。
- JDKプロジェクト リリース24[17]。
- JDKプロジェクト リリース25[17]。
- JDKプロジェクト リリース26[17]。
ディストリビューション
OpenJDK を様々な組織が配布している。有償サポートを提供していたり、Eclipse Temurin のように独自のテスト(Eclipse AQAvit)を追加していたり、JetBrains Runtime のように独自の機能[18]を追加していたりする。
Oracle OpenJDKではなく、Oracle Java SE Development Kit (Oracle JDK) の方は、長期サポート(LTS)に対するアップデートをOracle JDK 8u211以降と11はパーミッシブ・ライセンスでリリースせず、開発用途などを除いた商用利用は有償となったため、他のグループらが無償利用可能なパーミッシブ・ライセンスのビルドを提供している[19][20]。Oracle JDK 17以降の LTS はリリース後3年間はパーミッシブ・ライセンスであるNo-Fee Terms and Conditions (NFTC)となり、無償で商用利用が可能である[21]。3年終了後の5年間は延長サポート期間となりOracle JDKは有償となる。なお、Java 11以降のOracle JDKとOracle OpenJDKの違いは有償サポートの有無であり、ソースコードは同一である。
全てが Technology Compatibility Kit (TCK) を通している。Eclipse Temurin や Ubuntu OpenJDK などは独自に追加のテストの Eclipse AQAvit もかけている[22]。
Java 11 にて Java Runtime Environment は廃止されたが[23]、下記のうちいくつかは JRE も配布している。
| ビルド | LTS | パーミッシブ ライセンス |
有償サポート |
|---|---|---|---|
| Alibaba Dragonwell | Yes | Yes | No |
| Amazon Corretto | Yes | Yes | Yes(AWS上) |
| Azul Zulu Builds of OpenJDK | Yes | Yes | Yes |
| BellSoft Liberica JDK | Yes | Yes | Yes |
| BiSheng JDK | Yes | Yes | No |
| Eclipse Temurin | Yes | Yes | No(ただしAzul,IBM,Red Hatなどが有償サポート) |
| JetBrains Runtime | Yes | Yes | No |
| Microsoft Build of OpenJDK | Yes | Yes | Yes(Azure上) |
| Oracle Java SE Development Kit | Yes | Yes(17以降) | Yes |
| Oracle OpenJDK | No | Yes | No |
| Red Hat (OpenJDK, Eclipse Temurin) |
Yes | Yes | Yes |
| SAP SapMachine | Yes | Yes | Yes(SAP製品上) |
| Tencent Kona | Yes | Yes | No |
| Ubuntu OpenJDK | Yes | Yes | Yes(Ubuntu上) |
JDK のディストリビューションのディストリビューションとして SDKMAN! があるが、Eclipse Temurin が最も広く使われているデファクトだとして、Eclipse Temurin をデフォルトのディストリビューションとしている。[24]
IcedTeaとの関係
OpenJDKをFedoraや他の自由なGNU/Linuxディストリビューションにバンドルするには、自由ソフトウェアのコンポーネントのみでビルド可能になっている必要がある。Javaクラスライブラリの一部にはそうでないコンポーネントがあり、ビルドに際してはデフォルトでサンの製品版JDKを使うようになっており、自由ソフトウェアのみでのビルドは不可能だった。これを解決するため2007年6月にレッドハットが開始したプロジェクトがIcedTeaである[25]。OpenJDKとGNU Classpathの混合によってOpenJDKのブートストラップ問題を解決し、プロプライエタリの部分をClasspathのコードで置換するというプロジェクトである[26][27]。
2007年11月5日、レッドハットは Sun Contributor Agreement と OpenJDK Community TCK License の両方に署名した[28]。この合意の第一の利点の1つはIcedTeaプロジェクトとの緊密な連携であり、Linux環境における技術をLinuxディストリビューションFedoraとアプリケーションサーバJBossから導入することであった。IcedTeaはOpenJDKプロジェクトに残っていた少数のプロプライエタリの部分の代替となる自由ソフトウェアを提供した。
2008年5月、Fedora 9[29][30]とUbuntu 8.04[31]というディストリビューションは完全に自由かつオープンソースのコードをベースとした IcedTea 6 を採用した[32]。IcedTea 6は、OpenJDK 7ではなくOpenJDK 6のソースに基づいたバージョンである。Fedoraでは、パッケージ名としてOpenJDKという名称を初めて使った[33][29]。Ubuntuでは当初IcedTea7パッケージを採用していたが[34]、後にIcedTea6に変更した。DebianでもIcedTea6パッケージが作成され、lenny (Debian 5.0) に含まれるようになった。2008年7月12日、DebianはOpenJDK 6を不安定版として受理し[35][36]、その後安定版とした[37]。OpenJDKは他にOpenSUSE[38]、Red Hat Enterprise Linux (RHEL)、RHELからの派生であるCentOSなどでも利用可能となっている[39]。
2008年6月、レッドハットは Fedora 9 上で IcedTea 6 を使ってビルドされたOpenJDKパッケージのバイナリが Technology Compatibility Kit のテストに合格し、Java 6 実装と完全互換であると主張できるようになったと発表した[40]。2009年7月、Ubuntu 9.04 でビルドされた IcedTea6 のバイナリが Java SE 6 のTCK互換性テストに全て合格した[41]。
歴史
サンの約束と最初のリリース
JavaOne 2006 にて、サンはJavaをオープンソースにする意志があると発表し[43][44]、2006年10月25日の Oracle OpenWorld にてジョナサン・シュワルツはJavaプラットフォーム中核部のオープンソース化を30から60日以内に発表するだろうと述べた[45]。
2006年11月13日、サンはJava仮想マシンであるHotSpotとJavaコンパイラを GNU General Public License の自由ソフトウェアとしてリリースし、JDKの残りの部分(Javaランタイム環境など)も2007年3月までにGPLでリリースする予定だが、「サン自身がGPLで公開する権利を有していない少数のコンポーネントは除く」とした[46]。自由ソフトウェアの唱道者リチャード・ストールマンはこれについて、彼がそれまでJavaとJavaで書かれてきたプログラムについて主張してきた「Javaトラップ」というベンダーロックインの終りだとした[47]。
クラスライブラリのリリース
Java Development Kit (JDK) のほとんどの部分をフリーかつオープンソースのものとして2007年前半にリリースするという約束に続き、サンは2007年5月8日、サードパーティが著作権を持っていてサンがGPLで公開できない部分を除いたJavaクラスライブラリのソースコードをGPLでリリースした[48]。除外された部分の一覧には、Javaのグラフィカルユーザインタフェース (GUI) の重要なコンポーネントもいくつか含まれていた。サンは残りのプロプライエタリのコンポーネントも代替実装で置換し、クラスライブラリを完全にフリーにする計画だとした。
2007年5月にリリースされた時点で、OpenJDKのクラスライブラリの4%がプロプライエタリだった[49]。2008年5月にOpenJDK 6が登場した時点では、それが1%未満になっていて(残ったのはSNMP実装[50]であり、Java仕様の一部ではない)[29]、OpenJDKをバイナリ部分なしにビルドできるようになった[50]。そして2009年4月、OpenJDK 7のb53の一部として問題の部分を除いてビルドできるようになった[51]。
これは、サン・マイクロシステムズとOpenJDKコミュニティの努力の成果である。残存部分[52]は、FOSSとしてリリースされたり、代替実装で置換されたりした。2010年12月、全ての残存部分がオープンソースで置換され、JDK全体が完全にオープンソースとなった[53]。
コミュニティによる改良
2007年11月5日、レッドハットはサンとの合意を発表し、Sun Contributor Agreement(サンによるフリーかつオープンソースのソフトウェアプロジェクトにレッドハットの全技術者が参加するという契約)と OpenJDK Community Technology Compatibility Kit (TCK) License Agreement(OpenJDKに基づいたプロジェクトが Java SE 6 仕様に準拠していることを確認するテストスイートへのアクセス権を与える契約)に署名した[54]。
また2007年11月、Porters Group が結成され[55]、OpenJDKを異なるプロセッサアーキテクチャやオペレーティングシステムに移植する作業を開始。BSD系への移植プロジェクト[56]は Kurt Miller と Greg Lewis が主導し、Mac OS X への移植プロジェクト SoyLatte は Landon Fuller が主導した[57]。2008年1月、彼らは Porters Group 経由でOpenJDKへの参加に関心を示し、メーリングリストで議論を開始した。他に Bryan Varner 率いるHaikuへのJava移植チームも結成された[58]。
2007年12月、サンはOpenJDKのバージョン管理をTeamWareからMercurialに移行させ、オープンソースコミュニティへのリリース工程を進めた[59][60]。
OpenJDKでは寄贈コードを受け入れる際にかなり厳密な手続きをとっていた。寄贈コードは必ず別のOpenJDKコミッターがレビューし、寄贈者は Sun/Oracle Contributor Agreement (SCA/OCA[61]) に合意しなければならない。さらにバグが修正されていることを示すためにjtreg[62]テストも行うのが好ましい。2008年9月まで、外部から提供されたパッチをコードベースにコミットするのはサンの技術者のみが行っていて[63]、かなり対応が遅かった[64]。その後改善され、単純なパッチやOpenJDK 7からOpenJDK 6へのバックポートは数時間でコミットされるようになった[65]。
IBM、アップル、SAPの参加
2010年10月11日、Apache Harmony プロジェクトを推進してきたIBMがオラクルのOpenJDKに参加表明し、事実上HarmonyからOpenJDKへ移行することを決めた[66][67]。IBMでLinuxおよびオープンソース関連を指揮する Bob Sutor はブログで「IBMは Apache Harmony からOpenJDKへと開発の重心をシフトさせるだろう」と記した[68]。
2010年11月12日、(3週間前に自身のJavaランタイム環境の移植版に問題があるとした[69])Appleはオラクルと共に Mac OS X 向けOpenJDKプロジェクトを発表した。アップルは主要コンポーネント、ツール、テクノロジーを Mac OS X 上の Java SE 7 実装向けに提供するとし、その中にはHotSpotベースのJava仮想マシン(32ビットと64ビット版)、クラスライブラリ、新たなグラフィカルクライアントのためのネットワークプロトコルスタックが含まれるとした[70]。
2011年1月11日、OpenJDKにて Mac OS X 向け移植プロジェクトが結成され、アップルから初のコード寄贈が行われた。Mac OS X 版は当初BSD移植版をベースにしていた[71]。