【前へ】

3.4.5 GCC(GNUコンパイラコレクション)とフリー(自由)ソフトウェア


新部 裕委員

1.GCC(GNUコンパイラコレクション)
 GCCは、GNUプロジェクト[1]の開発環境の一つであり、プログラミング言語C, C++, Fortranを始めとするコンパイラのコレクションである。多くの言語、プラットフォーム、およびターゲットをサポートする優秀なコンパイラであるだけでなく、ソースコードが自由に利用可能であり、開放型の開発体制を持つという特徴を持つ。GCCは、GNU/Linuxを始めとするUnix系のOSの開発環境として用いられるだけでなく、組み込み用途など広く用いられている。
 1999年より、GCCはGNUコンパイラコレクション(GNU CompilerCollection)の略となったが、以前はプログラミング言語Cのコンパイラとして、GNU Cコンパイラ(GNU C Compiler)の略という位置付けであった。1999年に行なわれた開発の統合により、略称の名前はそのままで、その意味が変更された。
以下では、GNUコンパイラコレクションの開発の歴史を概観し、最近の技術的な進展について述べ、開発の体制について説明する。

1.1 GNUコンパイラコレクションの開発の歴史
 GCCの開発はGNUプロジェクトの最初の段階の1986年に始まった。1986年のリリースが目標とされていたが、実際の最初のリリースはベータバージョンの0.9で、1987年3月である。1.0のリリースは1987年5月である。その後、1.xシリーズは1.42
 (1992年9月)まで開発が続けられた。1.xシリーズの保守はRichard M. Stallmanによって行なわれた。この間、プログラミング言語C++のサポートがMichael Tiemannにより加えられている。
 その後、RISCプロセッサのサポートなどが加えられ、2.0が1992年2月にリリースされた。2.xシリーズは2.8.1(1998年3月)まで開発が続けられた。2.xシリーズの保守は、ニューヨーク大学ウルトラコンピュータ研究所のRichard Kennerによって行なわれた。
 2.xシリーズの開発の途中の1997年、その開発の方式をめぐって、開発者間で合意がとれず、GCCの正式開発から分化する形で、3.0への実験的試みとしてEGCSと呼ばれる活動がはじまった。EGCSは、Experimental/Enhanced GNU Compiler Systemの略である。
 EGCSでは、それまで別々に開発されてきたGNU Fortran, C++ランタイムライブラリ、テストスイートを統合したものである。この統合に加えて、新たにIBM Haifa命令スケジューラが導入され、エイリアス解析、例外処理、レジスタ割り当てなどに改善が行なわれた。また、UltraSPARC, M32R, H8/Sなどのプロセッサのポートが加えられた。
 EGCSは1.0(1997年12月)から1.1.2(1999年3月)までリリースされた。この開発は、EGCS Steering Committeeを方向性の意志決定機関とし、各開発者がそれぞれの責任で進めるネットワークを利用した分散開発体制により行なわれた。リリースに関する責任者はEGCS Steering Committeeから指名されたJeffery Lawであった。
 1999年4月にEGCSの成功を受けて、Free Software Foundationは、当時のEGCSのSteering CommitteeをGCC Steering Committeeとし、GCCのオフィシャルメンテナーとした。これによって、その後のGCCのリリースは、GCC Steering Committeeに任されることとなった。この時点で、GNU Cコンパイラ(GNU C Compiler)という名前を、GNUコンパイラコレクション(GNU Compiler Collection)とした。
 GCC Steering Committeeは、それまでのGCC 2.xシリーズとEGCSを統合したものを、バージョン2.95としてリリースすることとし、引続きJeffery Lawをリリースに関する責任者とした。2.95は、1999年7月にリリースされた。Jeffery Lawは2.95.2
 (1999年10月)までのリリースを担当した。2.95.3のリリース(2001年3月)は、Bernd Schmidtが担当した。2.95では、VMのバイトコードではなくネイティブの機械語を出力するJavaコンパイラが加えられるとともに、新たにChillという言語のサポートが加えられた。オプティマイズの改善としては、大域共通部分式削除が加えられた。また、SH-4, StrongARMなどのポートが加えられた。
 GCC Steering Committeeは、GCC 3.0シリーズのリリースの担当者として、Mark Mitchellを指名した。3.0では、Cプリプロセッサが統合され、C++のランタイムライブラリ、Javaのランタイムライブラリが統合される。また、GCCのサポートライブラリであるlibgccがシェアードライブラリをサポートするターゲットではシェアードライブラリとして提供される。言語としては、Chillのサポートが却下された。また、IA-64, M*Core, AVR, picoJavaなどのポートが加えられる。3.0のリリースは2001年半ばに予定されている。

1.2 最近の技術的な進展
 本節では、1997年のEGCS移行に加えられた技術的な進展について述べる。
C言語, C++言語のサポートは、言語の規格化の進展にともない進められている。言語の変化はそれほど大きくないため、C++については進んでいるといえるが、全体から見るとこの部分は比較的大きな進展ではないといえる。
 近年のGCCの開発におけるもっとも大きな進展は、プロジェクトの名前の変更を及ぼすに至った統合であろう。この統合には、言語のフロントエンドの統合、言語のランタイムライブラリの統合、およびテストスイートの統合がある。
 また、オプティマイズについても、いくつもの機能が導入され、改善が続けられている。ターゲットアーキテクチャについては20を越える新しいアーキテクチャがサポートされた。ターゲットOSのサポートも新しく追加されている。
以下では、それぞれについて詳しく述べる。

1.2.1 これまでの言語サポートの強化
 C言語のサポートとしては、ISO C99サポートがあげられる。プログラミング言語Cは1999年の規格ISO/IEC 9899:1999 (E) でいくつかの拡張が行なわれたが、GCCのC言語サポートはこれを追随している。サポートが行なわれた主なものには、以下の3つがある。

  * forループ内での宣言のサポート
   for (int i = 0; i < 10; i++) /* ... */という形が有効になった。
  * ブーリアン_Boolタイプと<stdbool.h>のサポート
   ブーリアンのタイプが正式にサポートされた。
  * _Pragma演算子のサポート
   プリプロセッサの#pragmaではマクロ展開と組み合わすことができないという欠点があったが、
   これを補う_Pragma演算子が導入された。

 C++言語のサポートとしては、ISO/ANSI C++のサポートが大幅に改善された。ランタイムライブラリのlibstdc++と併せて、C++テンプレートの実装の改善、例外処理の改善が行なわれ、新C++ ABIが導入された。
 C, C++共通のサポートとして、新しいDwarf2と呼ばれるデバッグフォーマットがサポートされた。
 また、実装として、Cプリプロセッサが統合され、一つのプロセスで、プリプロセッサの処理とコンパイルが行なわれるようになった。これにより、カラム単位のエラーメッセージのサポートが可能となった。将来的には、マクロのデバッガサポートなども考えられる。(スタンドアローンのCPPはこれまで通り提供される。)
 その他、GCCサポートライブラリのlibgccががシェアードライブラリをサポートするターゲットではシェアードライブラリとして提供される予定である。これは、例外処理のサポートの際、単一のエントリが必要なためである。

1.2.2 言語システムの統合
 EGCS以前では、GCCの開発はGNUプロジェクトの最も重要な部分であることから、安定した実装が求められ、開発としての機能の追加や拡張が難しいという傾向があった。これが、EGCS以降、取り込まれていった。
 EGCS以前は、プログラミング言語CとC++およびObjCがサポートされていた。これに加える形で、追加された言語(フロントエンド、ランタイムライブラリ)には、以下のものがある。

* Fortran
  以前、g77としてGCCとは別に開発されていたものである。コンパイラドライバg77,フロントエンドf771と、
  ランタイムライブラリlibf2cからなる。
* Chill
  CCITT (ITUの前身)で定義された, Modula 2ファミリの言語である。コンパイラドライバchill,フロントエンドcc1chillと、
  ランタイムライブラリlibchillからなる。CCITT High-Level Languageの略。ITUのZ.200として規格がある。
  http://www.itu.int/itudoc/itu-t/rec/z.html
  GCC 2.95までサポートされたが, GCC 3.0ではサポートがなくなる予定。
* Java
  Sun Microsystemsで開発されたプログラミング言語Javaである。バーチャルマシン(VM)ではなく、
  ネイティブの機械語を出力するコンパイラである。コンパイラドライバgcj,フロントエンドjc1と、
  ランタイムライブラリlibgcjからなる。
* C++ランタイムライブラリ
  以前はGCCとは別に開発されていたものである。ランタイムライブラリはlibstdc++という名前で、
  ISO/ANSI C++で定義される機能をサポートする。STLも含まれる。
  ここで、ランタイムライブラリが統合されたことが重要である。この統合によって、
  GCCは単なるコンパイラだけでなく、言語のインフラストラクチャを提供するものとなった。
  ただし、GCCにはプログラミング言語Cのランタイムライブラリは、含まれていないことに注意すること。
  (Cのランタイムライブラリはシステムに大きく依存し、一般にシステムで提供されるものである。
  GNU/Linuxで用いられるGNU Cライブラリ、組み込み用途に用いられるNewlibは別のソフトウェアとして開発、
  配布されている。)

 言語サポートについては、以上の言語の他に、以下のものが開発されている。これらは、将来GCCに取り込まれていくものと考えられる。

* ADA
  プログラミング言語ADAのサポートを行なうGNU Ada Translator (GNAT) という名前のプロジェクトとして実施されている。
  http://www.gnat.com/
* Mercury
  プログラミング言語Mercuryは論理型/関数型言語であり、メルボルン大学で開発されている。
  http://www.cs.mu.oz.au/mercury/download/gcc-backend.html
* Pascal
  プログラミング言語PascalのサポートとしてGNU Pascal Compiler (GPC) がある。
  http://agnes.dida.physik.uni-essen.de/~gnu-pascal/
* Modula-2
  プログラミング言語Modula-2のサポートしてGNU Modula-2がある。
  http://floppsie.comp.glam.ac.uk/Glamorgan/gaius/web/GNUModula2.html
* Cobol
  まだ全くの開発の端緒であるが、Cobol For GCCというプロジェクトがある。http://CobolForGCC.sourceforge.net/

1.2.3 テストスイートの統合
 テストスイートは基本的には、過去のバグに関するテストケースを集積したものである。例えば、プログラミング言語Cの場合、15000以上のテストケースが含まれる。
 ここで、テストスイートを動かすシステムはGNUプロジェクトのDejaGNUと呼ばれるソフトウェアが用いられる。DejaGNUはPOSIX 1003.3で定義されるテストのフレームワークを実現するソフトウェアである。
 改善/拡張を行なった開発者は、テストスイートを実施し、後退(リグレッション)がないことを確認することが推奨されており、リグレッションがないことがパッチの提出の一つの条件となっている。
 GCCシステムの統合として、テストスイートがGCCに含まれたことは大きな意義を持つ。GCCは時とともにシステムとして大きくなってきたが、大きなシステムの安定性を保つ一つの方策としてテストスイートが有効に働いている。
 2000年7月には開発体制が強化され、毎日、自動的にGCCのシステムの構築とテストスイートの実施が行なわれるようになった。そして、テストスイートの実施においてリグレッションが発見されると、該当する可能性がある開発者に対して、注意を換気するメールが自動的に送信される仕組みまで実装された。メールの送信は、ChangeLogのエントリによって行なわれるため、メールの送信はバグを導入してしまった開発者以外の人(同日に変更を行なった開発者)にも送られる。

1.2.4 オプティマイズの改善および拡張
 オプティマイズの改善は、さまざまな拡張が行なわれている。以下に、新たに加えられたオプティマイズを列挙する。

* SSA表現(Static Single Assignment)の導入
  SSA表現では、それぞれのレジスタは一度しか代入されないという形式のため、
  レジスタへの代入とその使用の関係が明確になり、ある種のオプティマイズが可能、あるいは簡単になる。
* 大域共通部分式の除去(GCSE), 部分冗長除去(Fred Chow's PRE)パスの導入
* IBM Haifa命令スケジューラの導入
* ソフトウェアパイプラインおよびブランチ最適化の導入
* 基本ブロック順序変換パスの導入
* RTLベースの末尾再帰呼出の除去(将来はTreeベースに)の導入
* if文の変換パスの導入
* 遅延コード移動(Steven Muchnick's LCM: Lazy Code Motion)の導入
* 大域コード上昇(Global Code Hoisting/Unification)パスの導入
* インライン展開の改善
  RTLベースのインライン展開であったが、Treeベースのものとなった。
  コンパイル時間の改善(特にテンプレートを多用するC++のプログラム)、セマンティックスの明確化。
* 大域定数伝搬の改善
* エイリアス解析の改善
* 局所デッドストア除去の改善
* ループの外にロード/ストアを出す改善
* 大域Nullポインタテスト除去の改善

1.2.5 ターゲットアーキテクチャの拡張
 通常の32-bitアーキテクチャのターゲット他に、IA-64を始めとする64-bitアーキテクチャのサポートも増えてきている。AVRというワンチップマイクロコントローラのサポートもなされている。以下に新たに加えられたターゲットアーキテクチャを列挙する。

* Alpha EV6
* Intel Itanium (IA-64)
* Intel XScale
* StrongARM 110, ARM9 (Arm & Thumb)
* NEC V850
* Mitsubishi D30V
* Mitsubishi M32R
* Motorola M*Core
* picoJava
* Matsushita AM33
* Matsushita MN102 & MN103
* Fujitsu FR30
* PowerPC 750
* Sparclite86x
* Hypersparc
* UltraSPARC
* TMS320C[34]x
* Hitachi H8/S
* Hitachi SH-4
* Atmel AVR

1.2.6 ターゲットOSのサポート
 以下に新たに加えられたターゲットOSを列挙する。FreeBSDやOpenBSDが追加されたのは、以前の開発体制ではGCCの側での正式のサポートがなかったが、EGCSの統合とともに開発が広がったことを示すものであると言える。

* i386-elf
  ELFフォーマットの実行形式のジェネリックなターゲット
* FreeBSD
* HP/UX 11
* Interix
* Irix6.2 & Irix6.3
* OpenBSD
* RTEMS
  組み込み向けリアルタイムOS
* SCO Openserver 5

1.2.7 その他の改善および拡張
 その他の改善および拡張について以下に列挙する。

* CPP Makefileの依存関係ルール生成(-MD)の改良
* CFGの計算におけるLengauer&Tarjanアルゴリズムの実装
* コントロールフロー解析の書き直し
* SPARCバックエンドの書き直し
* i386バックエンドの書き直し
* SuperHバックエンドにおけるPICのサポート

 まだ取り込まれていないが、今後取り込まれるであろう機能に、Boundedポインタの導入およびレジスタアロケーションの改善がある。
 Boundedポインタは、ポインタに対し、上限、下限のチェックを行なうものである。コンパイラだけでなく利用するライブラリも変更する必要があるが、細粒度のチェックが可能で、この確認により、多くのバグが見つかっている。
レジスタアロケーションの改善に関しては、ソフトウェアの特許の問題が関係すると言われており、まだ調査段階である。

1.3 開発体制

 GCCは当初、Stallman一人が開発し、保守を行なっていた[2]。その開発体制は、Eric S. Raymondがその論文[3]でLinuxと対比して批判したように、中央集権的で必ずしも効率が良いとは言えないものであった。が、EGCSの活動からその開発体制は大きく変わり、現在の体制はかえってLinuxよりも整った開放型の開発体制となったと言える。
 GCCの現在の開発体制は、GNUプロジェクトの元、Steering Commiteeによる(方向性の)意志決定、複数のメンテナーによる共同保守、開放型の開発という構成を取っている。
以下では、ミッション、Steering Commitee, メンテナー、および開放型の開発の仕組みについて述べる。

1.3.1 GCCのミッション

 GCCはFree Software Foundationが進めているGNUプロジェクトの一つのプロジェクトであり、GNUシステムで用いられるコンパイラの開発を行なうプロジェクトである。GCCの開発の統合の際に、下記のようなミッションと方策が明確に定義された(1999-04-22)。

* GNUシステムのコンパイラを改善する。
* GNUシステム以外のプラットフォームをサポートする。
* 複数のアーキテクチャ、さまざまな環境をサポートする。
* フリーソフトウェアのプロジェクトとして、コンパイラのコピーライトはFSFでGNU GPLの配布条件に従う。その他のライブラリなどは、GNUGPL以外でも良く、コピーライトの帰属はFSFでなくとも良い。
* 開放型の開発環境とし、協調とコミュニケーションをエンカレッジする。利用者とより緊密に仕事をする。
* コードが誰にでもいつでも利用可能。誰でも開発に参加できる。
* 開放型のメーリングリスト。
* CVSによる開発しやすい環境、複数のメンテナーによる査読。

1.3.2 GCC Steering Committee
 GCCの開発の方向性は1998年に設置されたGCC(当時はEGCS)Steering Committeeによって決定される。このCommitteeは、特定の一個人、グループ、あるいは組織がGCC開発のコントロールを取ってしまうことを阻止する意図の元に設置された。その役割は、ミッションステートメントに掲げられた原則を元にしてGCCの開発の意志決定をすることにある。例えば、ブランチ作成、リリース担当の指名などがSteering Committeeにより決定されている。
現在のメンバを以下に示す。

* Per Bothner (independent consultant)
* Joe Buck (Synopsys)
* David Edelsohn (IBM)
* Kaveh R. Ghazi
* Torbjorn Granlund (Swox AB)
* Jeffrey A. Law (Red Hat)
* Marc Lehmann (Technische Universitedt Karlsruhe)
* Jason Merrill (Red Hat)
* David Miller (Red Hat)
* Mark Mitchell (CodeSourcery)
* Toon Moene (Koninklijk Nederlands Meteorologisch Instituut)
* Gerald Pfeifer (Vienna University of Technology)
* Joel Sherrill (OAR Corporation)
* Jim Wilson (Red Hat)

1.3.3 メンテナー
 メンテナーと呼ばれる保守の担当が決まっている。その担当者の名と連絡先は、gcc/MAINTAINERSというファイルに記述されており、総括的メンテナー13人、各部分のメンテナー49人、承認の後書き込みが認められるメンテナー63人という構成である。
総括的メンテナー13人の名前を以下に示す。このうち、8人がRed Hatの所属である。

* Craig Burley
* John Carr
* Richard Earnshaw
* Richard Henderson
* Geoffrey Keating
* Richard Kenner
* Jeff Law
* Jason Merrill
* Michael Meissner
* David S. Miller
* Mark Mitchell
* Bernd Schmidt
* Jim Wilson

 総括的メンテナーは、GCCの開発のすべてについて変更する権限を持つ。各部分のメンテナーは担当部分について変更する権限を持つ。承認の後書き込みが認められるメンテナーは、独自の変更の権限はなく、上位のメンテナーの承認の後、変更することができる。

1.3.4 開放型の開発

 GCCの開発は広く一般に開放されているものであり、メンテナーだけが開発を行なうのではない。1.4節で述べるように、開発段階のソースコードも広く一般に開放されており、誰もがアクセスすることができる。改善あるいは拡張を行なう開発者は、自分自身で拡張を行ない、GCCの開発チームに差分(パッチ)を提出することが可能である。
 提出されたパッチはグラウンドルール(コピーライトの帰属、コーディングスタイルの遵守など)に従う限り、メンテナーによって査読され、技術的メリットを元にしてその採否が判断される。

1.4 開放型の開発とそれを支えるサービス
 GCCは、開発環境として非常に重要な位置を占めるソフトウェアであり、そのユーザと緊密な情報交換があることが望まれる。ソースコードは、開発段階のものが誰でも利用可能となっており、一般からの改善や拡張を受け入れやすくするために、ネットワークを利用した種々のサービスが提供される。
 ネットワークを利用したサービスには以下のものがある。

* FTPによるリリースの配布
* FTPによる開発段階のスナップショットの提供(毎週)
* CVSによる開発段階のソースコードの提供(cvsweb, rsync, CVSupを含む)
* メーリングリストによる情報交換(パッチの提出とその査読を含む)
* 毎日の構築による構築実験とそのバイナリの提供
* テストスイートの実施と該当範囲への連絡
* ベンチマークスイートの実施
* GNATSによるPR(Problem Report)の管理

 ここで注目すべきは、これらのサービスは主にボランタリベースで行なわれているということである。
 以下、CVSのアクセスとメーリングリストについてその詳細を説明する。

1.4.1 CVSによる開発段階のソースコードの提供
 CVSはネットワークを利用した分散開発を可能とするツールで、特にフリーソフトウェアの開発に広く用いられている[4]。
GCCのCVSはgcc.gnu.orgというホストで提供され、使い方は以下の通りである。
----------------------------------------------------------------------
$ cvs login -d :pserver:anoncvs@gcc.gnu.org:/cvs/gcc
パスワードが聞かれるので、"anoncvs"と打つ。

GCCのソースコードは:
$ cvs -z 9 -d :pserver:anoncvs@gcc.gnu.org:/cvs/gcc co gcc

GCCのドキュメントは:
$ cvs -z 9 -d :pserver:anoncvs@gcc.gnu.org:/cvs/gcc co wwwdocs
----------------------------------------------------------------------

 WWWでブラウズするインタフェースも提供されており、以下のURLで利用可能である。
     
     http://gcc.gnu.org/cgi-bin/cvsweb.cgi/

ここで、現在、利用可能のブランチは以下の通り:

* 最新のスナップショット: gcc_latest_snapshot
* 特定の日付の版: gcc_ss_yyyymmdd
* 3.0ブランチ: gcc-3_0-branch
* 2.95.3リリース: gcc-2_95_3-release
* 2.95.2リリース: gcc-2_95_2-release
* 2.95ブランチ: gcc-2_95-branch

1.4.2 メーリングリスト
 GCCの関連メーリングリストは、ホストgcc.gnu.orgで運営され、以下のものがある。

  * gcc-announce
   アナウンス用(Read Only)
  * gcc
   GCCの開発あるいはテストに関する議論
   http://gcc.gnu.org/ml/gcc/ 
  * gcc-help
   GCCの構築あるいは使い方に関するヘルプ
  * gcc-bugs
   GCCのbugに関する提出用および議論
   http://gcc.gnu.org/ml/gcc-help/
  * gcc-patches
   GCCのパッチの提出および議論
  * gcc-testresults
   GCCのテスト結果のレポート
  * libstdc++
   standard C++ライブラリの開発に関する議論
   libstdc++に関するパッチはこことgcc-patchesの両方に。
  * java-announce
   アナウンス(Read Only)
  * java
   GCCのJavaフロントエンドおよび実行時ライブラリに開発に関する議論
  * java-patches
   Javaの実行時ライブラリのパッチの提出用
   Javaフロントエンドはこことgcc-patchesの両方に。
  * gcc-prs
   GNATS databaseのProblem Report
  * gcc-cvs
   GCC CVS repositoryのcheckinの情報
  * gcc-cvs-wwwdocs
   GCC webpages CVS repositoryのcheckinの情報
  * gcc-regression
   GCC compilersのregression結果
  * java-prs
   GNATS databaseのProblem Reports
  * java-cvs
   Javaコンパイラおよびruntimeのcheckin
   gcc-cvsにもメッセージは行く。

2.フリー(自由)ソフトウェアとGNUプロジェクト
 フリー(自由)ソフトウェアの運動は、文献[1]に述べられているように、15年以上の歴史を持っている。今では、さまざまなフリー(自由)ソフトウェアの開発プロジェクトがあるが、その最初はGNUプロジェクトである。GNUプロジェクトは、1984年に始まった。Unixコンパチのフリー(自由)のOSを作るプロジェクトであり、GCCもその一部である。GNUとはメGNU's NotUnixモの略である。その考え方は、ソフトウェアは、自由に利用可能、改変可能、再配布可能であるべきであり、その自由に制限を加えることは良くないことであるとする。
 GNUプロジェクトは、エディタのGNU Emacs,デバッガのGDB,開発環境のGCCと開発を進めてきたが、OSとしては、カーネルが欠けていた。1991年にカーネルのLinuxが出現し、LinuxをカーネルとするUnixコンパチの自由のOS,すなわちGNUシステムが実現されることとなった。
 Linux出現以後のフリー(自由)ソフトウェアの利用とその開発は大きく広がり、これまでの閉鎖的で独占市場をモデルとするソフトウェアを凌駕するものとなりつつある。
 特に、1997年、Eric S. Raymondが提唱したオープンソースの運動は、Netscapeにブラウザソフトウェアの公開を惹起させ、フリー(自由)ソフトウェアの可能性を大きく広げたと言える。ここでRaymondは、フリー(自由)ソフトウェアの運動があまりにも野心的で、ビジネスと相容れない部分があるとし、独自の用語"Open Source"を用いた。フリー(自由)ソフトウェアが、ソフトウェアの自由を第一とするのに対し(しばしばその経済性を無視することもある)、オープンソースはその開放型の開発を重視し、その優秀な機能と性能を誇る。
 その後、フリー(自由)ソフトウェアの考え方、オープンソースの開発体制は、大きな発展を遂げている。フリー(自由)ソフトウェア開発に関連したサイトであるSourceForge, Freshmeat, GNOMEプロジェクト、およびGNUプロジェクトのSavannahを見てみると、現在では、表1に示すようにネットワークを利用した大規模の開発が行なわれている。
 ここで、SourceForgeは開放型の開発をサポートするサイトであり、フリー(自由)ソフトウェアの開発に対して、ネットワークサービスを提供する。Freshmeatはフリー(自由)ソフトウェアのカタログのデータベースを保持するサイトであり、フリー(自由)ソフトウェアの利用者にその利用と開発の情報を提供する。GNOMEはGNUプロジェクトの一部で、デスクトップ環境の開発のプロジェクトであり、GNU SavannahはGNUプロジェクトのソフトウェアに対して、開放型の開発をサポートするサービスである。

表1 フリー(自由)ソフトウェア開発のサイト
サイト名 プロジェクトの数 開発者の数 URL
SourceForge 17,572 138,109 http://sourceforge.net/
Freshmeat 13,229 74,400 http://freshmeat.net/
GNOME 665 不明 http://www.gnome.org/applist/
GNU Savannah 87 378 http://savannah.gnu.org/

 特に注目すべきは、その元となったGNUプロジェクトよりと比較にならない程、多くのフリー(自由)ソフトウェアのプロジェクトが実施されていると言うことであり、その開発者の数が膨大になってきていると言うことである。
今後、これらのプロジェクトからGCCを越えるような素晴らしいソフトウェアが生まれることを期待したい。

参考文献
[1] Richard M. Stallman, "The GNU Project", Open Sources, O'Reilly, 1999.
http://www.gnu.org/gnu/the-gnu-project.html)で利用可能
[2] Richard M. Stallman, "GNU Manifesto", Dr. Dobb's Journal, 1985.
http://www.gnu.org/gnu/manifesto.html)で利用可能
[3] Eric S. Raymond, "The Cathedral and the Bazaar", O'Reilly, 1999, 2001.
http://www.tuxedo.org/~esr/writings/cathedral-bazaar/)で利用可能
[4 Karl Franz Fogel, "Open Source Development with CVS", Coriolis, 2000.
[5] Gary V. Vaughan, Ben Elliston, Tom Tromey and Ian Lance Taylor,
"GNU Autoconf, Automake and Libtool", New Riders, 2000.
[6] Richard M. Stallman, "Using and Porting the GNU Compiler Collection
for GCC 2.95", Free Software Foundation, 1999.
[7] Hans-Peter Nilsson, "Porting GCC for Dunces", 1998.
ftp://ftp.axis.se/pub/users/hp/pgccfd/

【次へ】