Genode

Genode
は、フリーでオープンソースなオペレーティングシステムフレームワークであり、マイクロカーネル抽象化レイヤー
とユーザースペースコンポーネントのコレクションで構成されている。
Genodeは、例えばUnixのようなプロプライエタリーなオペレーティングシステムから派生したのではない数少ないオペレーティングシステムの一つとして知られている。
特徴的な設計思想として、小さなトラステッド・コンピューティング・ベース（TCB）により、セキュリティーを指向したオペレーティングシステムであることを目指している。
Genodeは、デスクトップ
やタブレット
のOSとして使われるか、ゲストオペレーティングシステムのための仮想マシンモニターとして使われる。
Genodeは、x86
とARM
の両方で、安全な仮想化システムの信頼されたコンポーネントとして使われている。
Genodeは、小規模なコードベースだが、より複雑であるUnixに由来するオペレーティングシステムの代替として利用できる。
このため、Genodeは仮想化

やプロセス間通信、
IPスタック分離、
モニタリング、
ソフトウェア開発
の分野の研究のベースのシステムとして利用されている。

**歴史**
Genodeは、初めはドレスデン工科大学におけるBastei OSアーキテクチャー
の研究リポートとして考案された。
このリポートの目的は、ケーパビリティーベースのセキュリティーを使ったコンポーネントベースのオペレーティングシステムが実用的かどうかを見極めることであった。
このリポートは、同時期に行われていたL4マイクロハイパーバイザー
の研究の一部として行われた。
最初期のプロトタイプが成功すると、このリポートの著者たちはBasteiをGenode OS Frameworkとして開発するため、Genode Labs社を立ち上げた。

**リリース**
プロジェクトは、GNU Affero General Public Licenseの元で、オープンソースで公開して開発されており、商業目的で他のライセンスでも提供されている。
3カ月おきにリリースされ、OSのABIとAPIの変更、文書の更新が行われる。
Genodeはソースコードとして入手可能であり、18.02リリース以降は、Sculptと呼ばれる汎用の派生物がターゲットを定めたバイナリーの開発用に作られている。

**アーキテクチャーの特徴**
Genodeは、より小さくシンプルなコードであれば、信頼性と正しさを検証するのはより容易になるというマイクロカーネルに一般的な哲学に基づいて構築されている。
Genodeは、この哲学をユーザースペースへも拡張しており、小さなコンポーネントによって複雑なアプリケーションを構成している。
それぞれのコンポーネントは、親子関係を持つ厳格な階層構造を持っている。
親となっているコンポーネントは、リソースとプロセス間通信（UPC）を子に適用する
階層構造は、直観的なパーティショニングの実現と特権の昇格を防ぐ仕組みを提供する。
つまり、特定のサブシステムはより一般的なサブシステムの内側に配置され、中央集権的であったり、
スーパーユーザーの存在するシステムポリシーに特有なconfused deputy problemを減少させる。
Genodeはマイクロカーネルによってホストされるように設計されている一定の機能セットを定め、モノリシックカーネルであってもこれらの機能以上を実装すれば良い。
このように機能を抽象化することで、GenodeはL4マイクロカーネル"l4hq"やLinuxにとってのユーザーランドとして振る舞うことができる。

**批判**

**C++**
GenodeはしばしばC++で実装するという選択をしたことで批判されている(C++で実装されたオペレーティングシステムとしては、BeOSやFuchsia、Ghost、Haiku、IncludeOS、OSv、Palm OS、ReactOS、Syllableなどがあり、全ての主要なブラウザーエンジンもC++で実装されている)。
この批判は、C++の継承の複雑さと正しい動作をするかコードを分析するのが難しいという理由で、C++がシステムライブラリーとAPIを実装するのには向かない選択であると言うものである。
Genodeは、多重継承とテンプレートをシステムライブラリー中で利用しているが、標準C++ライブラリーは利用せず、暗黙のグローバルステートに依存する言語機能であるスレッドローカルストレージとグローバルアロケーターも利用しない。
C++の完全な静的解析は不可能だが、Genodeプロジェクトは経験論的な単体テストを提供している。

**XML**
Genodeコンポーネントは、構造化されたデータをXMLにシリアライズし、状態の伝達に利用している。UNIX派生OSがプレインテキストを利用しているのと対照的である。
XMLは、複雑な機能と非効率的な表現、手作業で編集するのが比較的難しいために、広く批判されている。
Genodeフレームワークは、XMLはパーズとプログラムによる生成が容易で、手作業で読み書きすることも可能であるため、そのコンポーネント全体で効率的にXMLを利用している。
Genodeでは完全なXML言語の単純なサブセットを使っているが、新たにGenodeを使い始めたユーザーは、XML文書の編集は手間がかかり、間違いやすいと言うことが多い。
XMLの特別な機能に依存はしていないため、Genodeデータマークアップ言語は、JSONやS式といったより単純な何かに置き換え可能である。
しかし、そのような移行計画のアナウンスはされていない。

**ローカル名前空間**
Genodeは、グローバルな名前空間を全く利用していない。
つまり、グローバルなファイルシステムやプロセス、IPCエンドポイントのレジストリーは存在しない。
これは、例えばUNIXのように、ファイルシステムがどこでも利用可能で、スーパーユーザーコンテキストをシステム内の任意のプロセスに許すシステムとは対照的である。
パーミッションとコンポーネントのルーティングを明示的に宣言することは、UNIXと比較して多くの負荷を発生させる。しかし管理者権限を区分けすることで、同じマシン上で、仮想化や一般的な分離手法を用いることなく、サブシステムが相互に信頼していない管理者により管理されることを許せる。

**Sculpt**
Genodeプロジェクトは、現代的な消費者向けノートPC
をターゲットとした「Sculpt」と呼ばれるデスクトップオペレーティングシステムをリリースしている。
Sculptは、自動的にデバイスの検出と設定をし、GUIのコントロールインターフェイスを持ち、Genodeパッケージングマネージャーへのフロントエンドを持つ小さなベースシステムである。
Sculptは完全なデスクトップ環境ではなく、ユーザーが完全なデスクトップ環境を利用するには、伝統的なOSを仮想マシンとして展開する必要がある。
Sculptは、Genodeオペレーティングシステムフレームワークとは特定のシステムのために静的に構成するのではなく、
特権制御コンポーネントを使って動的に構成を変更することに大きく依存している点が異なる。

**脚注**

**関連項目**
 HelenOS: マイクロカーネルベースのデスクトップオペレーティングシステム- QNX: マイクロカーネルにホストされたプロプライエタリーなUnix系オペレーティングシステム- Qubes OS: 仮想化によってセキュリティーを提供するデスクトップオペレーティングシステム- Subgraph (operating system): サンドボックスを使ってセキュリティーを提供するLinuxディストリビューション- Capability-based security

**外部リンク**
 公式ウェブページ
*genode
 研究プロジェクト -  KV-Cache: A Scalable High-Performance Web-Object Cache for Manycore-  TrApps: Secure Compartments in the Evil Cloud-  Development of an Embedded Platform for Secure CPS Services-  Secure-OS project of IIT Madras-  Kernel isolation of a Capability-based security Operating System-  Mobile Device Security with ARM TrustZone