IcedTea

歴史

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

IcedTea-Web

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プラグインのコードベースを完全なプロプライエタリとし続けている。

アーキテクチャ

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から含まれる予定である。