GNU Hurd

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(日本語)

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。