GNU Classpathは、
Javaの標準クラス
ライブラリをフリーソフトウェアとして実装するプロジェクトであり、
フリーソフトウェア財団の
GNUプロジェクトの一部です。このプロジェクトは、
Javaの標準
ライブラリの代替となる自由な実装を提供することを目指しています。開発された
ライブラリは広範囲に及びますが、そのほとんどが完成しており、
SwingやCORBAなどの重要なコンポーネントも含まれています。
GNU Classpathは、
ライセンス条件の違いから、libgcjと並行して開発が進められました。しかし、現在ではGPL(
GNU General Public License)を採用することで合意がなされ、両プロジェクトは統合されています。GNU Classpathは、リンクに関する例外付きのGPLの条件下で
ライセンスされており、オープンソースの自由ソフトウェアとして利用できます。コードは形式上
フリーソフトウェア財団が所有しており、開発者との契約によってその権利が保護されています。
利用例
GNU Classpathは、
Kaffe、SableVM、JamVM、CACAO、Jikes RVMなどの多くのフリーな
Java実装で採用されています。これは、
Java仮想マシンを実装する際に標準クラス
ライブラリが必要不可欠であり、GPL
ライセンスの選択肢が少ないためです。また、以下のプロジェクトでも利用されています。
GNU Compiler for Java (GCJ):Javaコードをネイティブな実行ファイルにコンパイルします。
IKVM.NET:
Javaと
.NET Frameworkを連携させます。
JNode:Javaアプリケーションが動作するOSであり、Javaとアセンブリ言語だけで書かれています。
Jaos:Oberon-2言語と連携した特別な
Java VMです。
Jupiter Project:クラスタ環境向けの分散コンピューティング仮想マシンです。
開発と進化
GNU Classpathの開発は1998年に5人の開発者によって開始されました。その後、Kaffeやlibgcjなどの他のプロジェクトとの合併を経験しています。かつては独自の仮想マシンJapherを提供していましたが、Classpathが標準ライブラリとして充実するにつれて、Japherの開発は中止されました。公式のJava 1.4 APIのほとんどを実装した後、プロジェクトはバグ修正に注力するようになりました。2006年10月には、1.4で最後に残されていたHTMLWriterクラスの実装が完了しました。
名称の由来
GNU Classpathという名称は、Bradley M. Kuhnが初期の開発者Paul Fisherに提案したものです。当時、Javaのフリーな実装にサン・マイクロシステムズの商標を使用することに対して大きな懸念がありました。Kuhnは、Javaライブラリの場所を示す環境変数「$CLASSPATH」を名称に使うことを提案しました。これにより、具体的な「Java」という単語を使わずに、それを連想させることが可能になりました。Fisherらは「$」や全部大文字の名前を好まなかったため、最終的に「Classpath」という名称に落ち着きました。
開発チームとプロセス
GNU Classpathの開発チームは、約70名の開発者で構成されており、そのうち20名程度が常時活動しています。また、1名の管理者がおり、法的対応、定期的なリリース、品質管理などを担当しています。このプロジェクトは、他のプロジェクトとは異なり、正式な階層構造を持たず、技術的に可能な者が可能なことを行うという形で開発が進められています。コードの修正はまずディスカッションリストにパッチとして投稿され、問題があれば議論されます。毎日、5件から8件のパッチが投稿されています。
テストと品質
プロジェクトでは、独自のテストスイート「Mauve」を使用しています。毎日175,000項目ものテストが実行され、公式のAPIとの互換性が確保されています。
仮想マシンとの連携
GNU Classpathは、公式のJava APIネームスペースにあるクラス群を含んでいます。これらのクラス内でネイティブコードにアクセスする必要がある場合、「VM」クラス群(VMObject、VMStringなど)が使用されます。VMクラス群は他のコードとは分離され、private属性とfinal属性が付与されています。これらのクラスのメソッドには「native」キーワードが含まれており、サポートライブラリが必要であることを示しています。これらのライブラリは、Java仮想マシン側で用意されます。GNU Classpathが接続できるJava仮想マシンは、そのソースコードがアクセス可能で修正可能なものに限られます。
Java 1.5以降のサポート
バージョン0.95以前は、開発ブランチと実験ブランチの2つのtarballがリリースされていましたが、バージョン0.95からはJava 1.5の総称型などの新機能がメインブランチに統合されました。Eclipseのコンパイラ(ecj)でJava 1.5のソースコードをバイトコードにコンパイルし、それをGCJでネイティブコードに変換することが可能です。
サンのオープンソースコンパイラとのインタフェース
バージョン0.95からは、GPLのオープンソースjavacでGNU Classpathのランタイム(GIJ)とコンパイラ(GCJ)が利用可能となり、GNU Classpathのクラスライブラリやツール、例をjavac自身でコンパイルすることが可能です。
omg.orgドメインのクラス
GNU Classpathは、フリーでないライセンスのコードや自動生成されたコードを受け入れません。標準Java APIに含まれるomg.orgドメインのクラスは、Object Management GroupがリリースしたIDLファイルから生成されたもので、改変が許可されていないためフリーではありません。そのため、GNU Classpathでは、OMGの公式仕様書を参照して、対応するクラスを独自に手書きで実装し、自由ソフトウェアとして利用できるようにしています。
関連項目
Apache Harmony
GNU Compiler for Java
Kaffe
* IcedTea