GNU HurdGNU Hurd logo
Software running on Hurd.
開発者GNUプロジェクト
(トーマス・ブッシュネル
GNU Hurd(グヌー ハード)は、GNU Mach上で動作し、オペレーティングシステム (OS) の機能を提供するサーバ[1]群。GNUプロジェクトによって開発されている。
Hurdはカーネルと説明されることが多いが、厳密にはマイクロカーネルであるMachと、その上で動くサーバ群であるHurdの組合せによって、一般的なカーネルのサービスを提供する。
Hurdは、「Hird of Unix Replacing Daemons.」の頭文字であり、さらにHirdは、「Hurd of Interfaces Representing Depth.」の頭文字である。また、「herd of gnus」(ヌーの群れ)とも掛けている。 リチャード・ストールマンが提唱し、1990年から開発が始まった[2]。UNIX代替品の開発を目標とするGNUプロジェクトにとって、カーネルに相当するHurd(及びMach)の開発は最重要課題とも言えるが、その開発スピードは遅く、2011年現在でも正式版のリリースには至っていない。また、Hurdを採用したディストリビューションとして、Debian GNU/Hurdによる開発版が存在するが、これについても公式版のリリース時期は未定である。 開発の遅れにより、UNIX互換のフリーなカーネルとしては、GNUプロジェクトによるものではないLinuxがデファクトスタンダードとなっている。Linuxとの開発スピードの違いについて、エリック・レイモンドは『伽藍とバザール』で、カテドラル方式(伽藍方式)とバザール方式の違いによると主張している。一方、ストールマンは、開発の遅れはマイクロカーネルのデバッグが予想以上に難しかったためであり、LinuxがHurdに比べ早く開発できたのは、Linuxがモノリシックカーネルであることによるとし、自分の戦略的なミスであったと述べている[3]。 特に断らない限りGNUプロジェクト自身によるドキュメント[4]を出典とする。 1986年2月、リチャード・ストールマンがGNUの公式カーネルとしてマサチューセッツ工科大学で開発されたTRIX
概要
歴史
1987年?1988年ごろ、FSFは自分でTRIXを改良するよりも、別の人の手によるカーネルを使いたいと考え始める。当時の候補としてはTRIXを改良し続けることの他にカリフォルニア大学バークレー校で開発されたspriteを使うこと、そしてカーネギーメロン大学で開発され後に公式カーネルとなるMachを使うことがあった。
1990年、Machが4.3BSDに関する部分をカーネルからユーザランドへ除出することでGNUの再配布ライセンスに適合するようになる[5]と、FSFはMachの上で動くHurdの開発を開始した。ここにMachがGNUの公式カーネルとなった。「en:Mach_(kernel)#Development」も参照
1994年4月にブートができ、ファイルシステム、認証サーバ、initなどを動かすことに成功する。同年7月にはemacsを、11月にはgccを動かすことにも成功した。
1996年4月に、バージョン0.0(テスト版)のソースコード及びi386アーキテクチャ上で動くバイナリが公開される。
1997年6月、他のGNUソフトウェアと組み合わせて完全なOSとして利用できるバージョン0.2がリリースされた。またDebianプロジェクトによるコンパイル済みバイナリDebian GNU/Hurdも配布されている。しかし、製品レベルのシステムと比べて期待されるようなパフォーマンスや安定性を達成できていない状態[6]であり、現在も開発中で正規版をリリースするには至っていない。 多くのUNIX系カーネルと違って、Hurdはマイクロカーネルの上に構築された、サーバ-クライアントアーキテクチャを採用している。このマイクロカーネルは、もっとも基本的なカーネルのサービスを提供するのに用いられており、それはハードウェアへのアクセスを調整することである。これには、CPU(プロセスマネジメントとスケジューリングを通じて)、RAM(メモリ管理を通じて)、音声、グラフィックス、マスストレージなど、その他多様なインプット/アウトプットデバイス(I/Oスケジューリングを通して)の調整が含まれる。マイクロカーネルの設計理論は、全てのデバイスドライバに、ユーザースペースで動くサーバーとしてビルトされることを許すが、今日多くのドライバーは依然としてGNU Machのカーネルスペースに含まれている[7]。 Hurdの開発者によると、マイクロカーネルベースの設計の利点は、システムを拡張することができることである。これは、新しいモジュールを開発するとき、残りの部分のカーネルに関する深い知識を必要とせず、ひとつのモジュールにあるバグがシステム全体をクラッシュさせることもない。
アーキテクチャ