OpenJDK

OpenJDK (Open Java Development Kit) は、プログラミング言語Javaのフリーかつオープンソースの実装である。2006年、サン・マイクロシステムズが始めたもので、GPLリンク例外つきの GNU General Public License (GNU GPL) でライセンスされている。リンク例外つきとしたのは、Javaクラスライブラリのライブラリとしての使用をGPLライセンスの適用外とするためである。OpenJDKはJava SE 7以降の公式リファレンス実装とされている。

コンポーネント 
OpenJDKプロジェクトは、いくつかのコンポーネントからなる。主なコンポーネントとして、HotSpot（Java仮想マシン）、Javaクラスライブラリ、javac（Javaコンパイラ）がある。

オラクルのJavaの一部であるウェブブラウザ用プラグインと Web Start はOpenJDKには含まれない。サンはかつてそれらのコンポーネントもオープンソース化したいとしていたが、実際にはサンもオラクルもオープンソース化していない。今のところ利用可能なフリーのWeb Start の実装は、IcedTeaが提供しているもの、およびOpenWebStartがある。

バージョン 
OpenJDKは当初、のJavaプラットフォームのみをベースとしていた。

しかし、JDK 10以来、Java SEプラットフォームに対するオープンソースのリファレンス実装を作成するプロジェクトがJDKプロジェクトに移譲された。1つのフィーチャーリリースを公開してすぐに終了するという過去のJDKリリースのプロジェクトとは異なり、新しいプロジェクトでは、長期間活動するプロジェクトによって、将来のJDKのフィーチャーリリースのすべてを作成し、6ヶ月毎に新しいバージョンのフィーチャーリリースを公開するという厳格な時間ベースのリリースモデルを使用する方針に転換した。

以下のように、複数の異なるバージョンのOpenJDKおよびJDKプロジェクトの開発ブランチが存在する。

 JDKプロジェクト リリース22。
 JDKプロジェクト リリース21。
 JDKプロジェクト リリース20。
 JDKプロジェクト リリース19。
 JDKプロジェクト リリース18。
 JDKプロジェクト リリース17。
 JDKプロジェクト リリース16。
 JDKプロジェクト リリース15。
 JDKプロジェクト リリース14。
 JDKプロジェクト リリース13。
 JDKプロジェクト リリース12。
 JDKプロジェクト リリース11。
 JDKプロジェクト リリース10。
 OpenJDK 9プロジェクト。これは、JDK 9の基礎となっている。
 OpenJDK 8uプロジェクト。これは、JDK 8をベースにしており、既存のJava 8リリースのアップデートを生成するもの。
 OpenJDK 8プロジェクト。これは、JDK 8の基礎となっており、2014年3月18日にリリースされた。
 OpenJDK 7uプロジェクト。JDK 7をベースとしており、既存のJava 7リリースのアップデートを生成するもの。
 OpenJDK 6プロジェクト。これは、JDK 7をベースとしており、オープンソースバージョンのを提供するために修正されたもの。Red HatはOpenJDK 6のリーダーを辞任し、2017年の初めにAzul Systemsにより取得された。

ビルド 
Oracleが、（LTS）に対するアップデートをJDK 11や8u211以降はパーミッシブ・ライセンスでリリースするのを中止したため、他のグループらがパーミッシブなライセンスのビルドを提供し始めている。
しかし、Oracle JDK 17からは次のLTSがリリースされてから最低1年はパーミッシブ・ライセンスであるNo-Fee Terms and Conditions (NFTC)とすることが発表されている。
また、下記の内、Amazon、Microsoft、Oracle以外はOpenJREも配布している

IcedTeaとの関係 

OpenJDKをFedoraや他のフリーのGNU/Linuxディストリビューションにバンドルするには、フリーソフトウェアのコンポーネントのみでビルド可能になっている必要がある。Javaクラスライブラリの一部にはそうでないコンポーネントがあり、ビルドに際してはデフォルトでサンの製品版JDKを使うようになっており、フリーソフトウェアのみでのビルドは不可能だった。これを解決するため2007年6月にレッドハットが開始したプロジェクトがIcedTeaである。OpenJDKとGNU Classpathの混合によってOpenJDKのブートストラップ問題を解決し、プロプライエタリの部分をClasspathのコードで置換するというプロジェクトである。

2007年11月5日、レッドハットは Sun Contributor Agreement と OpenJDK Community TCK License の両方に署名した。この合意の第一の利点の1つはIcedTeaプロジェクトとの緊密な連携であり、Linux環境における技術をLinuxディストリビューションFedoraとアプリケーションサーバJBossから導入することであった。IcedTeaはOpenJDKプロジェクトに残っていた少数のプロプライエタリの部分の代替となるフリーソフトウェアを提供した。

2008年5月、Fedora 9とUbuntu 8.04というディストリビューションは完全にフリーかつオープンソースのコードをベースとした IcedTea 6 を採用した。IcedTea 6は、OpenJDK 7ではなくOpenJDK 6のソースに基づいたバージョンである。Fedoraでは、パッケージ名としてOpenJDKという名称を初めて使った。Ubuntuでは当初IcedTea7パッケージを採用していたが、後にIcedTea6に変更した。DebianでもIcedTea6パッケージが作成され、lenny (Debian 5.0) に含まれるようになった。2008年7月12日、DebianはOpenJDK 6を不安定版として受理し、その後安定版とした。OpenJDKは他にOpenSUSE、Red Hat Enterprise Linux (RHEL)、RHELからの派生であるCentOSなどでも利用可能となっている。

2008年6月、レッドハットは Fedora 9 上で IcedTea 6 を使ってビルドされたOpenJDKパッケージのバイナリが Technology Compatibility Kit のテストに合格し、Java 6 実装と完全互換であると主張できるようになったと発表した。2009年7月、Ubuntu 9.04 でビルドされた IcedTea6 のバイナリが Java SE 6 のTCK互換性テストに全て合格した。

2008年8月以降、OpenJDK 7は Mac OS XやBSD系OSでも動作可能となった。

歴史

サンの約束と最初のリリース 
JavaOne 2006 にて、サンはJavaをオープンソースにする意志があると発表し、2006年10月25日の Oracle OpenWorld にてジョナサン・シュワルツはJavaプラットフォーム中核部のオープンソース化を30から60日以内に発表するだろうと述べた。

2006年11月13日、サンはJava仮想マシンであるHotSpotとJavaコンパイラを GNU General Public License のフリーソフトウェアとしてリリースし、JDKの残りの部分（Javaランタイム環境など）も2007年3月までにGPLでリリースする予定だが、「サン自身がGPLで公開する権利を有していない少数のコンポーネントは除く」とした。フリーソフトウェアの唱道者リチャード・ストールマンはこれについて、彼がそれまでJavaとJavaで書かれてきたプログラムについて主張してきた「Javaトラップ」というベンダーロックインの終りだとした。

クラスライブラリのリリース 
Java Development Kit (JDK) のほとんどの部分をフリーかつオープンソースのものとして2007年前半にリリースするという約束に続き、サンは2007年5月8日、サードパーティが著作権を持っていてサンがGPLで公開できない部分を除いたJavaクラスライブラリのソースコードをGPLでリリースした。除外された部分の一覧には、Javaのグラフィカルユーザインタフェース (GUI) の重要なコンポーネントもいくつか含まれていた。サンは残りのプロプライエタリのコンポーネントも代替実装で置換し、クラスライブラリを完全にフリーにする計画だとした。

2007年5月にリリースされた時点で、OpenJDKのクラスライブラリの4%がプロプライエタリだった。2008年5月にOpenJDK 6が登場した時点では、それが1%未満になっていて（残ったのはSNMP実装であり、Java仕様の一部ではない）、OpenJDKをバイナリ部分なしにビルドできるようになった。そして2009年4月、OpenJDK 7のb53の一部として問題の部分を除いてビルドできるようになった。

これは、サン・マイクロシステムズとOpenJDKコミュニティの努力の成果である。残存部分は、FLOSSとしてリリースされたり、代替実装で置換されたりした。2010年12月、全ての残存部分がオープンソースで置換され、JDK全体が完全にオープンソースとなった。

コミュニティによる改良 
2007年11月5日、レッドハットはサンとの合意を発表し、Sun Contributor Agreement（サンによるフリーかつオープンソースのソフトウェアプロジェクトにレッドハットの全技術者が参加するという契約）と OpenJDK Community Technology Compatibility Kit (TCK) License Agreement（OpenJDKに基づいたプロジェクトが Java SE 6 仕様に準拠していることを確認するテストスイートへのアクセス権を与える契約）に署名した。

また2007年11月、Porters Group が結成され、OpenJDKを異なるプロセッサアーキテクチャやオペレーティングシステムに移植する作業を開始。BSD系への移植プロジェクトは Kurt Miller と Greg Lewis が主導し、Mac OS X への移植プロジェクト SoyLatte は Landon Fuller が主導した。2008年1月、彼らは Porters Group 経由でOpenJDKへの参加に関心を示し、メーリングリストで議論を開始した。他に Bryan Varner 率いるHaikuへのJava移植チームも結成された。

2007年12月、サンはOpenJDKのバージョン管理をTeamWareからMercurialに移行させ、オープンソースコミュニティへのリリース工程を進めた。

OpenJDKでは寄贈コードを受け入れる際にかなり厳密な手続きをとっていた。寄贈コードは必ず別のOpenJDKコミッターがレビューし、寄贈者は Sun/Oracle Contributor Agreement (SCA/OCA) に合意しなければならない。さらにバグが修正されていることを示すためにテストも行うのが好ましい。2008年9月まで、外部から提供されたパッチをコードベースにコミットするのはサンの技術者のみが行っていて、かなり対応が遅かった。その後改善され、単純なパッチやOpenJDK 7からOpenJDK 6へのバックポートは数時間でコミットされるようになった。

IBM、アップル、SAPの参加 
2010年10月11日、Apache Harmony プロジェクトを推進してきたIBMがオラクルのOpenJDKに参加表明し、事実上HarmonyからOpenJDKへ移行することを決めた。IBMでLinuxおよびオープンソース関連を指揮する Bob Sutor はブログで「IBMは Apache Harmony からOpenJDKへと開発の重心をシフトさせるだろう」と記した。

2010年11月12日、（3週間前に自身のJavaランタイム環境の移植版に問題があるとした）Appleはオラクルと共に Mac OS X 向けOpenJDKプロジェクトを発表した。アップルは主要コンポーネント、ツール、テクノロジーを Mac OS X 上の Java SE 7 実装向けに提供するとし、その中にはHotSpotベースのJava仮想マシン（32ビットと64ビット版）、クラスライブラリ、新たなグラフィカルクライアントのためのネットワークプロトコルスタックが含まれるとした。

2011年1月11日、OpenJDKにて Mac OS X 向け移植プロジェクトが結成され、アップルから初のコード寄贈が行われた。Mac OS X 版は当初BSD移植版をベースにしていた。

2011年7月、SAP AG がOpenJDKプロジェクトへの公式参加を発表した。

脚注

関連項目 
 HotSpot
 Java Platform, Standard Edition
 Apache Harmony
 IcedTea

外部リンク 
 
 OpenJDK - The First Year by Mark Reinhold
 Zero and Shark: a Zero-Assembly Port of OpenJDK

Javaプラットフォーム
Java
Java仮想マシン
オープンソースソフトウェア