GNU Hurdとは
GNU Hurdは、
[GNUプロジェクト]]によって開発されているオペレーティングシステム]の中核部分を担うサーバ群です。一般的に[[カーネルと見なされることが多いですが、厳密にはマイクロ
カーネルであるGNU Mach上で動作する、複数のサーバの集合体として機能します。これらのサーバが連携することで、従来のモノリシック
カーネルと同様のサービスを提供しています。
Hurdという名前は、「Hird of Unix Replacing Daemons.」の頭文字であり、さらにHirdは、「Hurd of Interfaces Representing Depth.」の頭文字でもあります。また、「herd of gnus」(
ヌーの群れ)という語呂合わせの意味も込められています。
開発の経緯
GNU Hurdの開発は、リチャード・ストールマンの提唱により
1990年に始まりました。
UNIXの代替となるOSを開発するという
GNUプロジェクトの目標において、
カーネルに相当するHurd(とMach)の開発は最も重要な課題の一つでした。しかし、開発は難航し、2011年現在でも正式版のリリースには至っていません。Hurdを採用したディストリビューションとしては、Debian GNU/Hurdの開発版が存在しますが、こちらも公式版のリリース時期は未定です。
開発の遅れから、
UNIX互換の自由な
カーネルとしては、
GNUプロジェクトではない
Linuxが事実上の標準となっています。この開発スピードの違いについて、エリック・レイモンドは著書『伽藍とバザール』で、カテドラル方式(伽藍方式)とバザール方式の違いによるものと主張しました。一方、ストールマンは、マイクロ
カーネルのデバッグが予想以上に困難であったことが開発の遅れの原因であり、
LinuxがHurdより早く開発できたのは、モノリシック
カーネルを採用したことが要因であると述べています。
歴史
GNUプロジェクトのドキュメントによると、1986年2月にリチャード・ストールマンはGNUの公式
カーネルとして
マサチューセッツ工科大学で開発されたTRIXを使用すると表明しました。同年12月までにフリー
ソフトウェア財団(FSF)が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も配布されています。しかしながら、製品レベルのシステムと比較して、パフォーマンスや安定性は期待される水準には達しておらず、現在も開発が続けられています。
アーキテクチャ
Hurdは、多くの
UNIX系
カーネルとは異なり、マイクロ
カーネル上に構築されたサーバ-クライアントアーキテクチャを採用しています。マイクロ
カーネルであるGNU Machは、
ハードウェアアクセスを調整する役割を担い、
CPU(
プロセスマネジメントとスケジューリング)、RAM(メモリ管理)、音声、グラフィックス、マスストレージなどのI/Oデバイスを管理します。
マイクロ
カーネルの設計理論では、すべてのデバイスドライバはユーザースペースで動作するサーバとして構築されることが理想ですが、現状では多くのドライバがGNU Machの
カーネルスペースに含まれています。
Hurdの開発者によると、マイクロ
カーネルベースの設計の利点は、システムの拡張性にあるとされています。新しいモジュールを開発する際、
カーネル全体の詳細な知識は必要なく、モジュール内のバグがシステム全体をクラッシュさせるリスクも低いとされています。また、Hurdにはtranslatorsという概念があり、
ファイルシステムの機能を拡張するためのフレームワークとして機能しています。
他のマイクロカーネルへの移植
2004年以降、Hurdをよりモダンなマイクロ
カーネルに移植する試みが進められており、L4マイクロ
カーネルやCoyotosマイクロ
カーネルなどが検討されています。
サーバ群の構成
Debianのドキュメントによると、Hurdは18のコアサーバと6つの
ファイルシステムサーバで構成される、合計24のサーバで構成されています。
コアサーバ
auth: プログラムからの要求とパスワードを受け取り、システム権限の変更を許可するIDを付与する。
crash: 致命的なエラーを処理する。
eieio: (未定義)
exec: 実行可能イメージ(ELFおよびa.out)をメモリ上の実行可能な形式に変換する。
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: ユーザー固有のトランスレータを起動する。
ext2fs: ext2
ファイルシステムのトランスレータ。ディスクブロックをマイクロ
カーネルから受け取り、ファイルとディレクトリをアプリケーションに提供する。
isofs: ISO 9660ファイルシステムのトランスレータ。CDやDVDのブロックを、アプリケーションのためのファイルとディレクトリに変換する。
nfs: NFSを参照のこと。
ufs: BSDにおける同名の[ファイルシステム]のためのトランスレータ。
ftpfs: FTPプロトコル
ファイルシステムのトランスレータ。
storeio: ストレージトランスレータ。
これらのサーバは、POSIX APIを実装しており、各サーバがインターフェースの一部を実装しています。例えば、様々なファイルシステムサーバは、ファイルシステムコールの実装を提供しています。ストレージサーバは、Linuxのブロックレイヤーのようにラッピングレイヤーとして機能します。LinuxのVFSと同様の機能は、libdiskfsとlibpagerによって実現されています。
関連項目
GNU Mach
Linuxカーネル
外部リンク
公式ウェブサイト - GNU Hurd (英語)
Hurd-JP プロジェクト(日本語)
Debian -- Debian GNU/Hurd(日本語)