Apache Harmony

Apache Harmony（アパッチ・ハーモニー）は、オープンソースかつフリーなJava実装である。Java SE 5, 6を元にしており、Apache License Version 2 にて提供されていた。開発は2005年5月に開始され、2006年10月にはApache財団のトップレベルプロジェクトとなった。しかし別のオープンソース実装であるOpenJDKに集約される形となり、2011年11月3日に開発終了した。
SDKやJREも配布されており、仮想機械にはDRLVMを、コンパイラにはEclipse Java Compilerを使用していた。

**歴史**

**立ち上げ**
HarmonyプロジェクトはフリーなJava実装の開発者たちを統括する動きと捉えられていた。多くの開発者はこの動きがApache, GNU等のプロジェクトとして纏まると期待していた。まずGNU開発者がプロジェクトの立ち上げ準備に関わったが、後にHarmonyではGNU Classpathのコードは利用しないと決定した。ライセンス互換上の問題で、Harmonyと他プロジェクト間でのコードの共有が難しくなるという問題があったためである。Apache開発者たちは必要なクラスをスクラッチから書き始め、またソフトウエア会社からコードの寄贈を募集した。

**スクラッチから書き直す意味**
GNU ClasspathとApacheプロジェクトが袂を分かったのは、GPLとApacheライセンスの違いにある。多くの組織や個人がこの相違点を取り上げ、派生物には公開義務が無いApacheライセンスの適用を望むとの意見が寄せられた。GNU Classpathは独占的ソフトウエアとのリンクは可能だが、GNU Classpath自身の非公開派生物を作成するのは法的に困難なためである。
しかし、いくらかのフリーソフトウエア開発者は、これらのライセンスやコミュニティ哲学の違いは別個に実装を行うまでは違わず、妥協点を探せなくはないと頻繁に否定的な意見を述べている。だが、時折現れるこういったプロジェクトへの反対的な提案は幅広い支持を得ていない。フリーソフトウエア支持者は以下の単純な言葉でこれを切って捨てている。"more free software is not a problem（フリーソフトウエアが多いことは問題ではない）".

**サンのTCKライセンスを巡る問題**
2007年4月10日、Apache財団 (ASF) はサン・マイクロシステムズ（サン）のCEO、ジョナサン・シュワルツ宛にJava SE 5 テクノロジ互換キット (TCK) についての公開書簡を送った。TCKのライセンスはHarmonyユーザに利用範囲の制限を課すものでJCPのルールに反しているから、ASFにとって承諾しがたいものであると主張している。- テクノロジ互換キット (Technology Compatibility Kit) は、Java SE5仕様に実装が準拠しているかを確認するためのテストキットで、SunがJavaの仕様ライセンス内で規定している。
サンは企業のブログ上で回答し、TCKを含めJavaのオープンソース実装プラットフォームをGPLで提供したいが、まずはGNU/Linuxコミュニティに対してJavaプラットフォームのGPL提供を優先するとした。
このやりとりは一部からオープンなやり方ではないとサンやASFは批評を受けたが、結果的にはクラスライブラリ開示のスケジュールを考えると、より多くの提供をサンから受けることを目的にASFは強気に振舞ったのだと考える人もいた。

**開発チーム**
立ち上がるとすぐに、プロジェクトは既に開発に着手していたいくつかの会社から大きなコード寄贈を受けて動き出した。しかしながらメーリングリスト上での全般的な議論は常に開かれていた。
その後、プロジェクトにはASF管理者によりアパッチ流の開発方式を取り入れたことにより、大きく成功したといえるだろう。2006年11月時点で、プロジェクトチームのコミッターは16人の開発者及び、IBMとインテルに属する16の開発チームで構成されていた。

**開発終了前の状況**
2006年10月、Apache HarmonyプロジェクトはApache財団の公式プロジェクト (Top level Projects) に昇格された。

**ライブラリ実装**
当初期待したソフトウエア会社からのコード寄贈は現実のものとなっていた。Apache Harmonyの作業コードにはIntelより寄贈された Swing, AWT, Java 2D のコードが加えられた。
クラスの実装については、2010年9月20日時点で (5.0M15, 6.0M3)、Java SE 5の99.00%、Java SE 6の97.54%が実装（クラス・メソッド・フィールドとして存在）されていた。
また、HarmonyのテストスィートはGNU Classpathと比べてより厳密なものとなっていた。（2006年10月の時点で、GNU Classpathは20000 tests 、Harmonyは 50000  である）
Harmonyプロジェクトの進捗は J2SE 1.4 と Java SE 5.0.を追っている状態であり、Harmony v6.0 は java SE 6.0 の別ブランチと見なす事ができるほどであった。

**文書化**
文書化については、Harmony は他のフリーの Java 実装より整備が進んでいない状態にあった。
たとえば、GNU Classpath では中心的な CORBA のクラス (ORB) の各メソッドに関して、
抽象 API クラス  と実装クラス  について説明のコメントが付いている。Harmony で使用されている 
Yoko プロジェクトでは、大半のメソッドについて
標準の宣言 および実装クラス  のドキュメント化がされていなかった（2006年10月時点）。また、GNU Classpath は、（Sunの実装同様）CORBA の機能について古いものと現在のものの両方をサポートしている。Harmony では、古い規格に基づく代表的なメソッド (ORB.connect(Object)) が全く実装されていないままであった。

**ツール**
Javaプラットフォームの完全な実装には、たとえば Java ソースコードをバイトコードに変換するコンパイラ、Jarファイルを管理するプログラム、デバッガ、アプレットビューアー、ウェブブラウザプラグインなどが必要である。Harmony ではコンパイラのみが実現されていた。

**仮想マシンのサポート**
Harmony は、いずれも外部からの寄付による4種類の Java VM 実装をサポートしていた。- JC Harmony Edition VM, "JCHEVM," JCVM's インタプリタ に基づいており、Archie Cobbs によって寄贈された。- BootJVM, シンプルなブートストラップ可能な仮想マシンで、Daniel Lydick によって寄贈された。- SableVM は先進的でポータブルなインタプリタで、Sable Research Group および Dynamic Runtime Layer Virtual Machine の作者達によって寄贈された。- BEA は Apache Harmony クラスライブラリが動作する JRockit VM の評価版が利用できることを発表していた。
2006 年 11 月の時点でこれらの仮想マシンによる言語のサポートは完全ではなかったため、クラスライブラリのテストを実行するためのビルドの手順として IBM の プロプライエタリ の VM である J9 を使うよう推奨されていたが、2007年7月時点では J9 は不要となっていた。
DRLVM 仮想マシンの開発が積極的に進んでおり（2006年7月時点）、進展が期待できる状態にあった。

**実行可能なアプリケーションの状況**
構想の時点から、Harmony は重要な Java アプリケーション（ リンク参照）を実行する能力を着実に向上させてきた。2007年7月の時でたとえば下記のアプリケーションがサポートされていた。- Eclipse : 36,000 件のリファレンス実装テストのうち 99.3% が Harmony の DRLVM とクラスライブラリで合格。- Apache Tomcat : リファレンス実装 テストが 100% 合格。- JUnit : リファレンス実装 テストが 100% 合格。- Apache Ant : リファレンス実装 テストが 97% 合格.- Apache Derby、Apache Axis、Log4j、Apache Velocity、Apache Cocoon、jEdit、Apache Commons などのアプリケーションも高い合格率を示す。
しかし、Harmony のライブラリ実装が不完全であるため、実行できないアプリケーションもあった。- ArgoUML: Harmony では利用できない Javaアプレット の実装を必要とする。- Apache Geronimo は、若干の修正により（問題もあるが）Apache Harmony 上で動作する。- Azureus セキュリティのクラスが未実装である。

**関連項目**
 GNU Classpath- OpenJDK- Javaクラスライブラリ- Dalvik仮想マシン

**参照**

**外部リンク**
  Apache Harmony Web Page