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の作業コードにはインテルより寄贈された 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 http://wiki.apache.org/harmony/Unit_Tests_Pass_on_DRLVM、Harmonyは 50000 http://www.object-refinery.com/classpath/mauve/report/ である）。

Harmonyプロジェクトの進捗はJ2SE 1.4とJava SE 5.0を追っている状態であり、Harmony v6.0はJava SE 6.0http://harmony.apache.org/downloads.html#Harmony6_Snapshotの別ブランチと見なす事ができるほどであった。

### 文書化
文書化については、Harmonyは他のフリーのJava実装より整備が進んでいない状態にあった。
たとえば、GNU Classpathでは中心的なCORBAのクラス (ORB) の各メソッドに関して、
抽象APIクラスhttp://cvs.savannah.gnu.org/viewcvs/*checkout*/classpath/org/omg/CORBA/ORB.java?rev=1.2.2.12&root=classpathと実装クラスhttp://cvs.savannah.gnu.org/viewcvs/*checkout*/classpath/gnu/CORBA/OrbFunctional.java?rev=1.6&root=classpathについて説明のコメントが付いている。Harmonyで使用されているhttps://www.mail-archive.com/yoko-dev@incubator.apache.org/msg01428.htmlYokoプロジェクトでは、大半のメソッドについて
標準の宣言http://svn.apache.org/repos/asf/incubator/yoko/trunk/yoko-spec-corba/src/main/java/org/omg/CORBA/ORB.javaおよび実装クラスhttp://svn.apache.org/repos/asf/incubator/yoko/trunk/core/src/main/java/org/apache/yoko/orb/OBCORBA/ORB_impl.javaのドキュメント化がされていなかった（2006年10月時点）。また、GNU Classpathは、（Sunの実装同様）CORBAの機能について古いものと現在のものの両方をサポートしている。Harmonyでは、古い規格に基づく代表的なメソッド (ORB.connect(Object)) が全く実装されていないままであった。

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

### 仮想マシンのサポート
Harmonyは、いずれも外部からの寄付による4種類のJava仮想マシン実装をサポートしていた。
* 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月の時点でこれらの仮想マシンによる言語のサポートは完全ではなかったため、クラスライブラリのテストhttp://incubator.apache.org/harmony/quickhelp_contributors.htmlを実行するためのビルドの手順として IBMのプロプライエタリなVMであるJ9を使うよう推奨されていたが、2007年7月時点ではJ9は不要となっていた。

DRLVM仮想マシンの開発が積極的に進んでおり（2006年7月時点）、進展が期待できる状態にあった。

## 実行可能なアプリケーションの状況
構想の時点から、Harmonyは重要なJavaアプリケーション（リンク参照）を実行する能力を着実に向上させてきた。2007年7月の時でたとえば下記のアプリケーションがサポートされていた。

* Eclipse : 36,000件のリファレンス実装テストのうち99.3%がHarmonyのDRLVMとクラスライブラリで合格http://wiki.apache.org/harmony/Eclipse_Unit_Tests_Pass_on_DRLVM#PassRate_2007。
* Apache Tomcat : リファレンス実装テストが100%合格http://wiki.apache.org/harmony/Apache_Tomcat。
* JUnit : リファレンス実装テストが 100% 合格http://wiki.apache.org/harmony/JUnit。
* Apache Ant : リファレンス実装テストが 97% 合格http://wiki.apache.org/harmony/Apache_Ant.
* 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