GNU Hurd

GNU Hurdは、GNU Mach上で動作し、オペレーティングシステム  の機能を提供するサーバ群。GNUプロジェクトによって開発されている。

Hurdはカーネルと説明されることが多いが、厳密にはマイクロカーネルであるMachと、その上で動くサーバ群であるHurdの組合せによって、一般的なカーネルのサービスを提供する。

Hurdは、「Hird of Unix Replacing Daemons.」の頭文字であり、さらにHirdは、「Hurd of Interfaces Representing Depth.」の頭文字である。また、「herd of gnus」とも掛けている。

1. 概要
-----

リチャード・ストールマンが提唱し、1990年から開発が始まった。UNIX代替品の開発を目標とするGNUプロジェクトにとって、カーネルに相当するHurdの開発は最重要課題とも言えるが、その開発スピードは遅く、2011年現在でも正式版のリリースには至っていない。また、Hurdを採用したディストリビューションとして、Debian GNU/Hurdによる開発版が存在するが、これについても公式版のリリース時期は未定である。

開発の遅れにより、UNIX互換のフリーなカーネルとしては、GNUプロジェクトによるものではないLinuxがデファクトスタンダードとなっている。Linuxとの開発スピードの違いについて、エリック・レイモンドは『伽藍とバザール』で、カテドラル方式とバザール方式の違いによると主張している。一方、ストールマンは、開発の遅れはマイクロカーネルのデバッグが予想以上に難しかったためであり、LinuxがHurdに比べ早く開発できたのは、Linuxがモノリシックカーネルであることによるとし、自分の戦略的なミスであったと述べている。

2. 歴史
-----

特に断らない限りGNUプロジェクト自身によるドキュメントを出典とする。

1986年2月、リチャード・ストールマンがGNUの公式カーネルとしてマサチューセッツ工科大学で開発されたTRIX を使用すると表明し、同年12月までにフリーソフトウェア財団はTRIXの改良を開始した。

1987年〜1988年ごろ、FSFは自分でTRIXを改良するよりも、別の人の手によるカーネルを使いたいと考え始める。当時の候補としてはTRIXを改良し続けることの他にカリフォルニア大学バークレー校で開発されたspriteを使うこと、そしてカーネギーメロン大学で開発され後に公式カーネルとなるMachを使うことがあった。

1990年、Machが4.3BSDに関する部分をカーネルからユーザランドへ除出することでGNUの再配布ライセンスに適合するようになると、FSFはMachの上で動くHurdの開発を開始した。ここにMachがGNUの公式カーネルとなった。

1994年4月にブートができ、ファイルシステム、認証サーバ、initなどを動かすことに成功する。同年7月にはemacsを、11月にはgccを動かすことにも成功した。

1996年4月に、バージョン0.0のソースコード及びi386アーキテクチャ上で動くバイナリが公開される。

1997年6月、他のGNUソフトウェアと組み合わせて完全なOSとして利用できるバージョン0.2がリリースされた。またDebianプロジェクトによるコンパイル済みバイナリDebian GNU/Hurdも配布されている。しかし、製品レベルのシステムと比べて期待されるようなパフォーマンスや安定性を達成できていない状態であり、現在も開発中で正規版をリリースするには至っていない。

3. アーキテクチャ
----------

多くのUNIX系カーネルと違って、Hurdはマイクロカーネルの上に構築された、サーバ-クライアントアーキテクチャを採用している。このマイクロカーネルは、もっとも基本的なカーネルのサービスを提供するのに用いられており、それはハードウェアへのアクセスを調整することである。これには、CPU、RAM、音声、グラフィックス、マスストレージなど、その他多様なインプット/アウトプットデバイスの調整が含まれる。マイクロカーネルの設計理論は、全てのデバイスドライバに、ユーザースペースで動くサーバーとしてビルトされることを許すが、今日多くのドライバーは依然としてGNU Machのカーネルスペースに含まれている。

Hurdの開発者によると、マイクロカーネルベースの設計の利点は、システムを拡張することができることである。これは、新しいモジュールを開発するとき、残りの部分のカーネルに関する深い知識を必要とせず、ひとつのモジュールにあるバグがシステム全体をクラッシュさせることもない。Hurdは//translators//という概念を提供しており、これは機能的にファイルシステムを拡張するモジュールのフレームワークである。

3.1. 他のマイクロカーネル
---------------

2004年以降、Hurdをさらにモダンなマイクロカーネルにポートする努力が行われている。これにはL4マイクロカーネルやCoyotosマイクロカーネルなどを含む。

3.2. サーバ群のアーキテクチャ
-----------------

Debianのドキュメンテーションによると、18のコアサーバと6のファイルシステムサーバからなる24のサーバが存在している。それは以下の通りである。

3.2.1. コアサーバ
------------

auth: プログラムからの要求とパスワードを受け取り、それらのプログラムにシステムの権限を変更するIDを与える。
crash: 致命的なエラーをハンドルする
eieio: TODO
exec: 実行可能なイメージをメモリ上の実行可能なイメージに変換する
fifo: 命名済みパイプを実装する
new-fifo: 命名済みパイプに対する異なるサーバ
firmlink: firmlinksの実装
fwd: 要求を他のサーバに伝える、fifoとsymlinkサーバによって利用される
hostmux
ifsock: UNIXドメインのソケットアドレスを補助する
init: 基本的なシステムのブートと設定
magic: プロセスの状態に結果が関係するときに、プロセスによって内部的に行われる必要のある名前解決をシグナルする
null: /dev/nullと/dev/zeroの実装
pfinet: PF_INETプロトコルファミリの実装
pflocal: UNIXドメインソケットの実装
proc: PIDを割り当て、プロセスレベルのアクションを管理する
symlink: ファイルシステムによってサポートされていない場合のシンボリックリンクの実装
term: POSIXのターミナル
usermux: ユーザ特有のトランスレータを発動する

3.2.2. ファイルシステムサーバ
------------------

ext2fsext2ファイルシステムのトランスレータ。ディスクブロックをマイクロカーネルから受け取り、ファイルとディレクトリをアプリケーションに与える。isofsISO 9660ファイルシステムのトランスレータ。CDやDVDのブロックを、アプリケーションのためのファイルやディレクトリに変換する。nfsNFSを参照のこと。ufsBSDにおける同名のファイルシステムのためのトランスレータ。ftpfsFTPプロトコルファイルシステムのトランスレータstoreioストレージトランスレータサーバは、集合的にPOSIX APIを実装しており、それぞれのサーバがインターフェースの一部の実装となっている。例として、様々なファイルシステムサーバは、ファイルシステムコールの実装となっている。ストレージサーバは、ラッピングレイヤーとして機能する。これはLinuxのブロックレイヤーのようなものである。LinuxのVFSと同様のものが、libdiskfsとlibpagerによって達成されている。

4. 脚注
-----

5. 関連項目
-------

GNU Mach
Linuxカーネル

6. 外部リンク
--------

[1]
[2]