GNU Hurd
![]() GNU Hurd logo | |
![]() Software running on Hurd. | |
開発者 | GNUプロジェクト (トーマス・ブッシュネル ローランド・マクグラス Marcus Brinkmann 他) |
---|---|
プログラミング言語 | C、Makefile、Shell、C++、Assembly、Yacc |
OSの系統 | Unix系 |
開発状況 | 開発中 |
ソースモデル | フリーソフトウェア |
最新安定版 | 0.9 / 2016年12月18日 |
リポジトリ | git |
プラットフォーム | x86-64、IA-32、i686、Power ISA[1] |
カーネル種別 | マイクロカーネル |
ライセンス | GNU General Public License |
ウェブサイト | gnu |
サポート状況 | |
有 |
GNU Hurd(グヌー ハード)は、GNU Mach上で動作し、オペレーティングシステム (OS) の機能を提供するサーバ[2]群。GNUプロジェクトによって開発されている。
Hurdはカーネルと説明されることが多いが、厳密にはマイクロカーネルであるMachと、その上で動くサーバ群であるHurdの組合せによって、一般的なカーネルのサービスを提供する。
Hurdは、「Hird of Unix Replacing Daemons.」の頭文字であり、さらにHirdは、「Hurd of Interfaces Representing Depth.」の頭文字である。また、「herd of gnus」(ヌーの群れ)とも掛けている。
概要
[編集]リチャード・ストールマンが提唱し、1990年から開発が始まった[3]。UNIX代替品の開発を目標とするGNUプロジェクトにとって、カーネルに相当するHurd(及びMach)の開発は最重要課題とも言えるが、その開発スピードは遅く、2011年現在でも正式版のリリースには至っていない。また、Hurdを採用したディストリビューションとして、Debian GNU/Hurdによる開発版が存在するが、これについても公式版のリリース時期は未定である。
開発の遅れにより、UNIX互換のフリーなカーネルとしては、GNUプロジェクトによるものではないLinuxがデファクトスタンダードとなっている。Linuxとの開発スピードの違いについて、エリック・レイモンドは『伽藍とバザール』で、カテドラル方式(伽藍方式)とバザール方式の違いによると主張している。一方、ストールマンは、開発の遅れはマイクロカーネルのデバッグが予想以上に難しかったためであり、LinuxがHurdに比べ早く開発できたのは、Linuxがモノリシックカーネルであることによるとし、自分の戦略的なミスであったと述べている[4]。
歴史
[編集]特に断らない限りGNUプロジェクト自身によるドキュメント[5]を出典とする。
1986年2月、リチャード・ストールマンがGNUの公式カーネルとしてマサチューセッツ工科大学で開発されたTRIXを使用すると表明し、同年12月までにフリーソフトウェア財団(以下FSF)はTRIXの改良を開始した。
1987年〜1988年ごろ、FSFは自分でTRIXを改良するよりも、別の人の手によるカーネルを使いたいと考え始める。当時の候補としてはTRIXを改良し続けることの他にカリフォルニア大学バークレー校で開発されたspriteを使うこと、そしてカーネギーメロン大学で開発され後に公式カーネルとなるMachを使うことがあった。
1990年、Machが4.3BSDに関する部分をカーネルからユーザランドへ除出することでGNUの再配布ライセンスに適合するようになる[6]と、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も配布されている。しかし、製品レベルのシステムと比べて期待されるようなパフォーマンスや安定性を達成できていない状態[7]であり、現在も開発中で正規版をリリースするには至っていない。
アーキテクチャ
[編集]多くのUNIX系カーネルと違って、Hurdはマイクロカーネルの上に構築された、サーバ-クライアントアーキテクチャを採用している。このマイクロカーネルは、もっとも基本的なカーネルのサービスを提供するのに用いられており、それはハードウェアへのアクセスを調整することである。これには、CPU(プロセスマネジメントとスケジューリングを通じて)、RAM(メモリ管理を通じて)、音声、グラフィックス、マスストレージなど、その他多様なインプット/アウトプットデバイス(I/Oスケジューリングを通して)の調整が含まれる。マイクロカーネルの設計理論は、全てのデバイスドライバに、ユーザースペースで動くサーバーとしてビルトされることを許すが、今日多くのドライバーは依然としてGNU Machのカーネルスペースに含まれている[8]。
Hurdの開発者によると、マイクロカーネルベースの設計の利点は、システムを拡張することができることである。これは、新しいモジュールを開発するとき、残りの部分のカーネルに関する深い知識を必要とせず、ひとつのモジュールにあるバグがシステム全体をクラッシュさせることもない。Hurdはtranslatorsという概念を提供しており、これは機能的にファイルシステムを拡張するモジュールのフレームワークである[9]。
他のマイクロカーネル
[編集]2004年以降、Hurdをさらにモダンなマイクロカーネルにポートする努力が行われている。これにはL4マイクロカーネルやCoyotosマイクロカーネルなどを含む[10]。
サーバ群のアーキテクチャ
[編集]Debianのドキュメンテーションによると、18のコアサーバと6のファイルシステムサーバからなる24のサーバが存在している。それは以下の通りである[11]。
コアサーバ
[編集]- auth(authentication sever): プログラムからの要求とパスワードを受け取り、それらのプログラムにシステムの権限を変更するIDを与える。
- crash(crash server): 致命的なエラーをハンドルする
- eieio(translation server): TODO
- exec(execution server): 実行可能(executable)なイメージ(現在はELFとa.outがサポートされている)をメモリ上の実行可能なイメージ(runnable)に変換する
- fifo(FIFO translator): 命名済みパイプを実装する
- new-fifo(new FIFO server): 命名済みパイプに対する異なるサーバ
- firmlink(the firmlink translator): firmlinksの実装
- fwd(forward server): 要求を他のサーバに伝える、fifoとsymlinkサーバによって利用される
- hostmux(host multiplexer sever)
- ifsock(server for sockets interface): UNIXドメインのソケットアドレスを補助する
- init(init server): 基本的なシステムのブートと設定
- magic(magic server): プロセスの状態に結果が関係するときに、プロセスによって内部的に行われる必要のある名前解決をシグナルする
- null(null server): /dev/nullと/dev/zeroの実装
- pfinet(pifnet server): PF_INETプロトコルファミリの実装
- pflocal(pflocal server): UNIXドメインソケットの実装
- proc(process server): PIDを割り当て、プロセスレベルのアクションを管理する
- symlink(symbolic link translator): ファイルシステムによってサポートされていない場合のシンボリックリンクの実装
- term(terminal server): POSIXのターミナル
- usermux(user multiplexer server): ユーザ特有のトランスレータを発動する
ファイルシステムサーバ
[編集]- ext2fs
- ext2ファイルシステムのトランスレータ。ディスクブロックをマイクロカーネルから受け取り、ファイルとディレクトリをアプリケーションに与える。
- isofs
- ISO 9660ファイルシステムのトランスレータ。CDやDVDのブロックを、アプリケーションのためのファイルやディレクトリに変換する。
- nfs
- NFSを参照のこと。
- ufs
- BSDにおける同名のファイルシステム(UFS)のためのトランスレータ。
- ftpfs
- FTPプロトコルファイルシステムのトランスレータ
- storeio
- ストレージトランスレータ
サーバは、集合的にPOSIX APIを実装しており、それぞれのサーバがインターフェースの一部の実装となっている。例として、様々なファイルシステムサーバは、ファイルシステムコールの実装となっている。ストレージサーバは、ラッピングレイヤーとして機能する。これはLinuxのブロックレイヤーのようなものである。LinuxのVFSと同様のものが、libdiskfsとlibpagerによって達成されている。
脚注
[編集]- ^ “GNU Hurd’s 64bit port progress, porting started to Aarch64, POWER9 – OSnews” (英語). 2024年8月27日閲覧。
- ^ UNIXで言うデーモン
- ^ 現在ストールマン自身は開発に加わっていない
- ^ ed. Joshua Gay, Free Software, Free Society: Selected Essays of Richard Stallman, Boston: GNU Press, 2002.
- ^ “GNU Hurd/ history”. Free Software Foundation, Inc.. 2015年11月29日閲覧。
- ^ 4.3BSDのライセンス問題についてはBerkeley Software Distribution (BSD) を参照のこと。
- ^ “Debian GNU/Hurd”. Software in the Public Interest, Inc. and others. 2015年11月29日閲覧。
- ^ Kousoulos, Constantine (21 March 2007). "Re: Device drivers in Mach?". bug-hurd (Mailing list).
- ^ Doeppner, Thomas W. (20 December 2010). Operating Systems In Depth: Design and Programming. John Wiley & Sons. p. 160. ISBN 978-0-471-68723-8 29 November 2012閲覧。
- ^ Bachmann, Tom (7 July 2006). "Re: seL4, L4.sec and coyotos mess". l4-hurd (Mailing list).
- ^ “Preliminary GNU/Hurd User Interface Description”. Debian (1996年10月10日). 2010年3月4日閲覧。
関連項目
[編集]外部リンク
[編集]- 公式ウェブサイト - GNU Hurd
- Hurd-JP プロジェクト
- Debian -- Debian GNU/Hurd