IcedTea

IcedTeaとは2007年6月にレッドハットが開始したOpenJDK用のビルドおよびSystem integrationプロジェクトである。IcedTea-WebとはJava Web StartおよびJavaウェブブラウザプラグインの自由ソフトウェア実装である。IcedTea-SoundとはJavaサウンドサブシステム用プラグインのコレクションである。以前はIcedTeaに含まれていたPulseAudioプロバイダもこのコレクションの一部である。フリーソフトウェア財団は全てのJavaプログラマに開発環境としてIcedTeaを使うことを推奨している。
歴史的にIcedTeaプロジェクトの最初の目標は、2007年にサン・マイクロシステムズが自由ソフトウェアとしてリリースしたOpenJDKソフトウェアを一切プロプライエタリソフトウェアを必要とせずに利用可能とすることであった。それゆえに自由ソフトウェアを強いるFedoraなどのLinuxディストリビューションにOpenJDKの追加が可能となった。この目標は達成され、OpenJDKをベースとしたIcedTeaのバージョンは2007年11月にFedora 8にパッケージされた。2008年8月には新しい派生であるIcedTea6の最初のリリースが行われた。IcedTea6はOpenJDK6のサンのビルドドロップをベースとしており、既存のJDK6との互換性確保を目標としたOpenJDKのフォークである。OpenJDK6は2008年5月、UbuntuとFedoraにリリースされた。これらのディストリビューションのIcedTeaパッケージは、OpenJDK商標通知を利用してOpenJDKに改名されている。Fedoraのビルドはサンの厳しいlabel=TCKによる、x86とx86-64におけるテストをパスしている。OpenJDK 7をベースとした最初のバージョンであるIcedTea 2が2011年10月にリリースされた。OpenJDK 8をベースとした最初のバージョンであるIcedTea 3は2016年8月にリリースされた。IcedTea 1のサポートは2017年1月に打ち切られた。
現在はGitHubより最新版が入手可能である。
IcedTea-Web

**歴史**
サンは2006年11月にHotSpot仮想マシンとJavaコンパイラを、そして2007年5月にクラスライブラリのソースコードの大半をオープンソースライセンスの下でリリースしたが、本プロジェクトはその後に作られた。ただしフォントレンダリング、カラーマネジメントやサウンドサポートなどのクラスライブラリの一部は、プロプライエタリなバイナリプラグインしか提供されなかった。なぜならサンではなくサードパーティーがこれらのプラグインのソースコードの著作権を所有していたためである。 リリースされた部分は自由ソフトウェアライセンスであるGNU General Public Licenseの条項の下で発行された。
これらの欠落したコンポーネントのため、自由ソフトウェアコンポーネントのみを搭載するOpenJDKをビルドすることは不可能であった。サンはこのコードを自由ソフトウェアライセンスの下でリリースできるようにライセンス所有者と交渉し、もし失敗した場合はこれらのプロプライエタリな要素を代替実装へ置き換えることを目指した。プラグインを置き換えれば、クラスライブラリは完全にフリーとなる。サンはこれら公認バイナリリリースにプロプライエタリなコードを使い続けていた。
アナウンスの後にIcedTeaプロジェクトが開始され、GNU Classpathチームが提供したビルドリポジトリを伴い2007年6月7日に正式にアナウンスされた。GNU Classpathチームはこれらのソフトウェア製品を "OpenJDK" と呼ばなかった。なぜならOpenJDKはサンが所有する商標であったためである。GNU Classpathチームは代わりに仮の名前である "IcedTea" の使用を決定した。
2007年11月5日、レッドハットはSun Contributor Agreementとthe OpenJDK Community TCK Licenseの双方に署名した。プレスリリースには、これがIcedTeaプロジェクトの利益になることを示唆していた。Simon PhippsはIcedTeaがopenjdk.java.netにホストされる可能性を示唆し、Mark Reinholdは、レッドハットが著作権譲渡に署名したことで、IcedTeaの一部をサンに寄付してメインストリームであるJDKに含んでもらうことが可能となったことについて言及した。
それ以来、IcedTeaから多くのパッチがOpenJDKに譲渡された。
2008年6月、（Fedora 9上のOpenJDKのパッケージバージョンとしての）IcedTea6がTechnology Compatibility KitテストをパスしたためJava 6実装と完全な互換性があると主張できるようになった。このプロジェクトはOpenJDK 6、OpenJDK 7、そしてOpenJDK 8の開発をそれぞれ別々のリポジトリにトレースし続けており、さら可能であればパッチを上流へと逆移植することに貢献している。IcedTea wikiでは各IcedTeaパッチの現在の状態を保存している。

**目標**
IcedTeaプロジェクトは以下の2つを狙いとして開始された:
# GNU Compiler for JavaでOpenJDKのコードをコンパイル可能にするため。OpenJDKはそれ自体がJavaで書かれているため、「鶏が先か、卵が先か」という問題を引き起こしていた。このため、開発者はOpenJDKをビルドするため既に動作しているJavaコンパイラとランタイムを必要としていた。元々は既存のプロプライエタリなサンのJDKのみがその要求を満たしていた。Fedoraのようなフリーディストリビューションではパッケージのビルドをプロプライエタリなツールに依存できないため、IcedTeaプロジェクトは自由ソフトウェアを使ってコードをコンパイルできるようにする必要があった。これがなされた場合、得られたOpenJDKのIcedTeaバージョンは自分自身のコンパイルに使うことができるので、将来のコンパイルでフリーではないソフトウェアを使う必要がなくなる。
# サンが全てのソースコードをリリースできないので、OpenJDKに存在するバイナリプラグインとのフリーな同等物を提供するため。2008年3月の時点で既に、IcedTea6にフリーではないバイナリプラグインは必要なくなったが、これはフリーではないバイナリプラグインがなくともOpenJDK 6のビルドドロップをビルドできるようになったからである。プロプライエタリなサウンドのサポートを、Gervillプロジェクトからのサウンドのサポートに置き換えたb10のリリース により、フリーではないバイナリプラグインを使わずにJava 1.6の完全な実装をビルドできるようになった。残ったただ1つのフリーではないバイナリプラグはSNMP用である。これはオプションであるJMXアーキテクチャ用プロバイダであり、仕様の一部ではない。2009年4月におけるb53より、OpenJDK 7でもOpenJDK 6と同様になった。OpenJDKのコアの外で（前述されたコアプラグインとは異なる）ブラウザプラグインを使って動作するJava Web Startアプレットを利用するためには、依然としてフリーではないバイナリプラグインが必要である。2013年の時点で、この目標を達成できる可能性があるソースコードはIcedTea-Webプロジェクトのみである。

**他の利点**
IcedTeaはGNU Autotoolsを使ったOpenJDKのmakefileラッパーを提供することで、より身近なビルドシステムも提供する。これにより、ビルドを設定するための様々な環境変数を覚える必要がなくなる（現在のIcedTeaビルドは、基盤であるOpenJDKビルド用であるビルド設定環境変数を約40個セットする）。また、Gervillのように、最終的にメインのOpenJDKビルドにお目見えすることになる機能における、初期作業や他のプラットフォーム移植の場を提供する。

**IcedTea-Web**
Debian Iceweasel 6.0.2 (Knoppix 6.7.1) にリストされたIcedTea NPRプラグイン（IcedTea6ベースIcedTeaは、自由ソフトウェアであるJavaウェブブラウザプラグインを提供する。このプラグインは、後にサンのプロプライエタリなJREが提供することになったある機能を64ビットLinuxにおける64ビットブラウザで処理したものが最初であり、64ビット版Mozilla FirefoxでJavaアプレットのサポートを可能とするためにはふさわしいものである。IcedTeaはフリーなJava Network Launching Protocol実装も提供する。サンはOpenJDKの一部としてこれらのプラグインとJava Web Startの実装をリリースすることを約束したが、コミュニティからの圧力にもかかわらず、これまでのところ行われていない。IcedTeaプラグインの開発はFirefoxに加え、GoogleのChromiumをサポートしている次世代プラグインの最新バージョンで続けられている。2011年以来、開発はIcedTeaから分離されたIcedTea-Webプロジェクトで行われている。2013年4月の時点で、オラクルはOpenJDKのそれ以外の部分とは対照的に、Javaプラグインのコードベースを完全なプロプライエタリとし続けている。

**進化と有用性**
2007年6月から、IcedTeaは自分自身をビルドできるようになり、GNU ClasspathのテストスイートであるMauve (test suite)の重要な部分をパスしている。2008年5月、サンのlabel=jtregリグレッションテストを動作するためのサポートがIcedTeaに追加された。いくつかのWindowsエディションにおける利用では、未だに不安定で非公式である。
IcedTeaは、以下のようにLinuxディストリビューション用のパッケージメンテナの間で人気となっている。2012年4月現在の状況を示す:- Ark LinuxおよびArch Linuxでは、IcedTeaがデフォルトのJVMである。- DebianではIcedTeaのビルドおよび動作が可能である。パッケージは2008年6月12日に不安定版になった。- Fedora 8でIcedTea7が利用可能となり、Fedora 9から17までIcedTea6はjava-1.6.0-openjdkと表示されていた。Fedora 16で初めて、ビルドシステムを除いたIcedTea 2.x OpenJDK forestを使用するjava-1.7.0-openjdkパッケージが登場した。- Gentoo LinuxではIcedTea6とIcedTea 2.x用のバイナリおよびソースパッケージを公式リポジトリから利用可能である。デフォルトでJavaアプリケーションをインストールすると、sun-jdkの代わりにIcedTea6が選択されるが、これはユーザーが追加作業をせずにインストールが可能なためである。ユーザーがsun-jdkをダウンロードするためには、オラクルのEULAに手動で同意しなければならない。- Ubuntu 7.10 (Gutsy Gibbon) ではIcedTeaが "universe" リポジトリから利用可能であり、Ubuntu 8.04 (Hardy Heron) ではIcedTea6が利用可能である。Ubuntu 11.04以降ではIcedTeaのみが利用可能である。

**アーキテクチャ**
OpenJDKには（2007年5月のリリースで）単にバイナリプラグインとしてパッケージされるだけの邪魔なコードが約4%含まれている。これらのプラグインはJDKのビルドと使用のために必要であった。OpenJDK 6は邪魔なコードを1%のみ搭載してリリースされ、邪魔なサウンドサポートも置き換えられている。IcedTea6はOpenJDK 6リリースをベースとしている。IcedTeaは固有のウェブブラウザプラグインとWeb Startのサポートを未だに提供しているが、これらのサンの実装が未だにプロプライエタリなためである。
IcedTea 1.xおよび2.xは、GCJなどのGNU Classpathベースのソリューションを使ってOpenJDKをコンパイルでき、さらにそのソリューションでビルドしたHotSpot仮想マシンやjavacコンパイラを使ってブートストラップすることもできる。現状では、IcedTea 3.xのビルドにはIcedTea 2.xか3.x、または別のソースとしてOpenJDK 7か8のビルドを使う必要がある。

**プラットフォームサポート**
HotSpot（OpenJDKのJava仮想マシン）のクロスアーキテクチャ移植は、コードにC++のコアに加えてアセンブリ言語が含まれているため困難である。IcedTeaプロジェクトはzero-assembler Hotspot（またはzero）と呼ばれる、アセンブリ言語をほとんど含まないHotSpotインタプリタのジェネリック移植を開発している。この移植により、HotSpotのインタプリタ移植を任意のLinuxプロセッサアーキテクチャに適合させることがとても容易になる。zero-assembler Hotspotのコードは、IcedTea7のバージョン1.6よりHotSpotのx86以外の移植（PPC、IA-64、S390およびARM）の全てに使われていた。
IcedTeaプロジェクトはまたHotSpot用にSharkと呼ばれるプラットフォーム非依存な実行時コンパイラも開発している。これはLLVMを使いZeroを補完するものである。Sharkは2010年8月に上流であるOpenJDKに含まれた。ARM32用のJITは1.6.0と2.1.1に最初に含まれた。レッドハットによるAArch64へのネイティブ移植は2.4.6で登場し、SAP/IBMからのネイティブPPC64移植は2.5.0に含まれる予定である。PPC/AIX移植はバージョン8u20からOpenJDKの上流に含まれており、AArch64移植はバージョン9から含まれる予定である。

**関連項目**
Free Java implementations
*GNU Classpath
*Javaクラスライブラリ
*OpenJDK
*Apache Harmony

**脚注**

**外部リンク**
  IcedTea announcement-  Classpath mailing list announcement-  Thomas Fitzsimmons（レッドハットの開発者）のIcedTeaについてのブログエントリ-  Guide to porting IcedTea