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マイクロカーネルやLinuxにとってのユーザーランドとして振る舞うことができる。 GenodeはしばしばC++で実装するという選択をしたことで批判されている(C++で実装されたオペレーティングシステムとしては、BeOSやFuchsia、Ghost、Haiku、IncludeOS（英語版）、OSv（英語版）、Palm OS、ReactOS、Syllableなどがあり、全ての主要なブラウザーエンジンもC++で実装されている)。 この批判は、C++の継承の複雑さと正しい動作をするかコードを分析するのが難しいという理由で、C++がシステムライブラリーとAPIを実装するのには向かない選択であると言うものである。 Genodeは、多重継承とテンプレートをシステムライブラリー中で利用しているが、標準C++ライブラリーは利用せず、暗黙のグローバルステートに依存する言語機能であるスレッドローカルストレージとグローバルアロケーターも利用しない。 C++の完全な静的解析は不可能だが、Genodeプロジェクトは経験論的な単体テストを提供している。 Genodeコンポーネントは、構造化されたデータをXMLにシリアライズし、状態の伝達に利用している。UNIX派生OSがプレインテキストを利用しているのと対照的である。 XMLは、複雑な機能と非効率的な表現、手作業で編集するのが比較的難しいために、広く批判されている。 Genodeフレームワークは、XMLはパーズとプログラムによる生成が容易で、手作業で読み書きすることも可能であるため、そのコンポーネント全体で効率的にXMLを利用している。 Genodeでは完全なXML言語の単純なサブセットを使っているが、新たにGenodeを使い始めたユーザーは、XML文書の編集は手間がかかり、間違いやすいと言うことが多い。 XMLの特別な機能に依存はしていないため、Genodeデータマークアップ言語は、JSONやS式といったより単純な何かに置き換え可能である。 しかし、そのような移行計画のアナウンスはされていない。 Genodeは、グローバルな名前空間を全く利用していない。 つまり、グローバルなファイルシステムやプロセス、IPCエンドポイントのレジストリーは存在しない。 これは、例えばUNIXのように、ファイルシステムがどこでも利用可能で、スーパーユーザーコンテキストをシステム内の任意のプロセスに許すシステムとは対照的である。 パーミッションとコンポーネントのルーティングを明示的に宣言することは、UNIXと比較して多くの負荷を発生させる。しかし管理者権限を区分けすることで、同じマシン上で、仮想化や一般的な分離手法を用いることなく、サブシステムが相互に信頼していない管理者により管理されることを許せる。 Genodeプロジェクトは、現代的な消費者向けノートPC をターゲットとした「Sculpt」と呼ばれるデスクトップオペレーティングシステムをリリースしている。 Sculptは、自動的にデバイスの検出と設定をし、GUIのコントロールインターフェイスを持ち、Genodeパッケージングマネージャーへのフロントエンドを持つ小さなベースシステムである。 Sculptは完全なデスクトップ環境ではなく、ユーザーが完全なデスクトップ環境を利用するには、伝統的なOSを仮想マシンとして展開する必要がある。 Sculptは、Genodeオペレーティングシステムフレームワークとは特定のシステムのために静的に構成するのではなく、 特権制御コンポーネントを使って動的に構成を変更することに大きく依存している点が異なる。 [脚注の使い方] ^ “Genode OS Framework latest release”. 2021年3月13日閲覧。 ^ “Genode OS adds RISC-V support”. 2019年6月4日閲覧。 ^ “Genode Is Developing A GPU Multiplexer For Intel Graphics Hardware”. Phoronix. 2019年6月4日閲覧。 ^ “Introduction of the Genode OS Framework”. archive.fosdem.org/2012. 2019年6月4日閲覧。 ^ a b “L4 Based Operating Systems”. L4hq.org. 2019年6月4日閲覧。 ^ “Redox OS, MINIX, Hurd & Genode Had Their Time At FOSDEM Too”. Phoronix. 2019年6月4日閲覧。 ^ “Genode 2018.2 mit Sculpt OS”. pro-linux.de. 2019年6月4日閲覧。 ^ “Sculpt Aims To Be A General-Purpose OS Built Atop Genode”. 2019年6月4日閲覧。 ^ Tarasikov, Alexander (2013年5月11日). “Porting Genode to commercial hardware”. allsoftwaresucks.blogspot.com. 2019年6月4日閲覧。 ^ “Muen - An x86/64 Separation Kernel for High Assurance”. 2019年6月4日閲覧。 ^ “Inspecting data from the safety of your trusted execution environment”. 2019年6月4日閲覧。 ^ “Embassies: Radically Refactoring the Web”. USENIX. 2019年6月4日閲覧。 ^ “Contract Specification and language”. ccc-project.org (2014年12月11日). 2019年6月4日閲覧。 ^ “The Secure Communication Module of CCC”. ccc-project.org (2016年1月6日). 2019年6月4日閲覧。 ^ Hamad, Mohammad. “A communication framework for distributed access control in microkernel-based systems”. 2019年6月4日閲覧。 ^ B.PRUTHIVIRAJ, G.S.MADHUSUTHUN, S.VIJAYASARATHY, K.CHAKRAPANI. “A MICROKERNEL BASED SECURE OPERATING SYSTEM USING GENODE FRAMEWORK”. jatit.org. 2019年6月4日閲覧。 ^ “Empirical Comparison of SCons and GNU Make”. 2019年6月4日閲覧。 ^ “Genode OS Framework, un framework para el desarrollo de sistemas embebidos”. ResearchGate. 2019年6月4日閲覧。 ^ “TU Dresden technical report TUD-FI06-07”. 2019年6月4日閲覧。 ^ “NOVA Microhypervisor”. 2019年6月4日閲覧。 ^ “SeL4 Community Projects”. sel4.systems. 2019年6月4日閲覧。 ^ “Release notes 18.02”. 2019年6月4日閲覧。 HelenOS: マイクロカーネルベースのデスクトップオペレーティングシステム QNX: マイクロカーネルにホストされたプロプライエタリーなUnix系オペレーティングシステム Qubes OS: 仮想化によってセキュリティーを提供するデスクトップオペレーティングシステム Subgraph (オペレーティングシステム)（英語版）: サンドボックスを使ってセキュリティーを提供するLinuxディストリビューション Capability-based security ウィキメディア・コモンズには、Genodeに関連するメディアがあります。 公式ウェブページ 公式ウェブサイト genode - GitHub 研究プロジェクト 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