IcedTea
IcedTeaとは2007年6月にレッドハットが開始したOpenJDK用のビルドおよびプロジェクトである。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のビルドはサンの厳しいによる、x86とx86-64におけるテストをパスしている。OpenJDK 7をベースとした最初のバージョンであるIcedTea 2が2011年10月にリリースされた。OpenJDK 8をベースとした最初のバージョンであるIcedTea 3は2016年8月にリリースされた。IcedTea 1のサポートは2017年1月に打ち切られた。
サンは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プロジェクトの利益になることを示唆していた。は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つを狙いとして開始された:IcedTeaはGNU Autotoolsを使ったOpenJDKのmakefileラッパーを提供することで、より身近なビルドシステムも提供する。これにより、ビルドを設定するための様々な環境変数を覚える必要がなくなる（現在のIcedTeaビルドは、基盤であるOpenJDKビルド用であるビルド設定環境変数を約40個セットする）。また、Gervillのように、最終的にメインのOpenJDKビルドにお目見えすることになる機能における、初期作業や他のプラットフォーム移植の場を提供する。
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のテストスイートであるの重要な部分をパスしている。2008年5月、サンのリグレッションテストを動作するためのサポートがIcedTeaに追加された。いくつかのWindowsエディションにおける利用では、未だに不安定で非公式である。
IcedTeaは、以下のようにLinuxディストリビューション用のパッケージメンテナの間で人気となっている。2012年4月現在の状況を示す: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から含まれる予定である。