世界を動かす技術を、日本語で。

Asterinas: 新しいLinux互換カーネルプロジェクト

2025年6月20日原文(lwn.net)

概要

AsterinasはRustで開発されたLinux互換カーネルプロジェクトで、「フレームカーネルアーキテクチャ」を採用。 安全性と性能を両立する新しいカーネル設計思想を提案。 unsafeコードを最小限に封じ込め、他は安全な抽象化で開発可能。 クラウドやコンテナ用途を主なターゲットとし、形式的検証も目指す。 プロジェクトは初期段階で、今後の発展とコミュニティの反応が注目点。

Asterinasとフレームカーネルとは

  • Asterinas :Rust製のLinux-ABI互換カーネルプロジェクト
  • フレームカーネルアーキテクチャ :unsafeを使う部分をライブラリに封じ込め、他は安全なRustで開発
  • 従来のカーネル設計 :モノリシックカーネルは全てを単一空間で処理、マイクロカーネルは最小限のTCBとユーザ空間サービスで分離
  • フレームカーネルの特徴
    • unsafeコードのカプセル化
    • サービスはカーネル空間内だが、リソースアクセスは制限
    • シンプルかつ高性能な共有メモリ方式維持
    • 安全性と性能の両立
  • 命名の由来 :unsafe部分をフレームワークで包み、メモリ安全APIで公開する設計思想

関連プロジェクト・先行研究との比較

  • RedLeaf :Rust製マイクロカーネル、ハードウェア分離は使わず異なる設計思想
  • Tock :組込み向け、信頼できるコアとunsafe禁止のカプセルで分離
  • Rust for Linux :LinuxカーネルにRustを導入し、安全なドライバ開発を目指す
  • Asterinasの独自性
    • ハードウェア分離を活用し、汎用性とLinux互換性を重視
    • TCBの最小化と形式的検証を志向

形式的検証への取り組み

  • TCBの小型化 :形式的検証を現実的にするための重要要素
  • seL4 :有名な形式的検証済みマイクロカーネル
  • Asterinasの目標
    • 小型で検証可能なTCBとLinux互換の共有メモリアーキテクチャを両立
    • CertiK社と連携し、Verusを用いた形式的検証を推進
    • 監査レポートも公開

ライブラリ・開発ツール

  • OSTD :Rust製OS開発フレームワーク
    • OS開発の参入障壁低減
    • メモリ安全性の向上
    • コード再利用促進
    • ユーザーモードでのテストによる生産性向上
    • Linux互換やUNIXライクである必要はなし
  • OSDK :OSTDベースのカーネル開発支援Cargoアドオン
  • Intelのサポート :TDX(Trust Domain Extensions)などの信頼性強化機能に関心
  • 実装例 :ネットワークカーネルコンポーネントはDMAやロック等をOSTD経由で安全に利用

現状と今後の展望

  • 開発状況
    • 2024年初頭にMozilla Public Licenseで初公開
    • 主に中国の大学院生とAnt Groupが開発
    • x86とRISC-Vをサポート
    • Linuxシステムコール206種(x86)に対応(Linux 6.7は368種)
    • リリースやドキュメントは限定的
    • OSTDは他プロジェクトでの利用実績なし
    • アプリケーション実行は未対応
  • 初期ディストリビューション計画
    • 独自initramfsと簡易ユーザ空間アプリを用意
    • Docker対応を目指す
    • Nixベースのディストリ構想
    • Linuxカーネルモジュール非対応
  • 短期目標
    • 対応CPUアーキテクチャとハードウェアの拡充
    • クラウド用途(特に中国Aliyun/Alibaba Cloud)での実用性強化
    • コンテナホストOSとしての展開
    • Intelの信頼性機能(TDX等)への対応
    • X11やXfce対応の動きもあり
  • Rust for Linuxとの違い
    • Rust for Linux:既存カーネルのドライバ領域のみRust化
    • Asterinas:カーネル全体をRustで再設計、安全・検証可能なコアに集約
    • Asterinasはクラウド・コンテナ用途が主眼、Rust for LinuxはLinux全体の進化を志向

まとめ・今後の注目点

  • 新しいOS設計思想の実験場 :Rustの安全性と健全性を最大限活用
  • 中国主導の意欲的研究開発 :実用化はこれから
  • コミュニティの反応や普及の行方に注目 :Rust for LinuxチームやLinux界隈の評価も今後の焦点

Hackerたちの意見

このIPCはパフォーマンスに影響を与えることが多くて、マイクロカーネルがあまり人気がない大きな理由の一つだね。技術的な人たちが、なぜアプローチやプロジェクトが採用されないのかを誤解しているのを見ると、ちょっと安心する。

みんなのためにも、実際にどのようにやっているのか教えてくれたら助かるよ。

このIPCはパフォーマンスに影響を与えることが多くて、マイクロカーネルがあまり人気がない大きな理由の一つだと思う。新しいマイクロカーネルは…それを改善したのかな?忘れちゃったけど、実際にはそんなに悪くない印象があった。ただ、業界がMachにトラウマを抱えているのは確かだね。プロジェクトのウェブサイトから: > 特権のあるフレームワークだけがRustの安全でない機能を使用でき、特権のないサービスは安全なRustでのみ書かれなければならない。これ、逆な気がする。特権のないタスクが安全でないなら、やっぱり特権がないままだよね。その一方で、追加の検証が必要な安全でないコードは…何も守れない部分でしか許可されてないの?

特権のないタスクが安全でないなら、やっぱり特権がないままだよね。その一方で、追加の検証が必要な安全でないコードは…申し訳ないけど、ドキュメントがちょっと誤解を招く感じだね。あれは…フレームカーネルの文脈で解釈する必要がある。Rustベースのフレームカーネル全体はカーネル空間で動作するけど、論理的には二つの部分に分かれているんだ。特権のあるOSフレームワークと、特権のないOSサービスね。ここで「特権」とは、安全でないRustカーネルコードを含む安全なコードを指していて、「特権なし」はすべて安全なRustカーネルコードを指す。これはすべてカーネルコードの話で、フレームカーネルはユーザースペースプログラムの言語に制限をかけないよ。

これ、逆な気がする。特権のないタスクが安全でないなら、やっぱり特権がないままだよね。その一方で、追加の検証が必要な安全でないコードは…何も守れない部分でしか許可されてないの?特権のないタスクはコアカーネルと同じメモリ空間で動いているから、許可されていないことをしないようにするためのランタイムチェックがないんだ。ランタイムでそれを強制する唯一の方法は、マイクロカーネルアーキテクチャを採用することだよ。ここで提案されている代替アーキテクチャは、コードが安全でない機能を使わないように静的に特権を強制することなんだ。

私の理解では、彼らはカーネル空間/ユーザ空間の意味で特権/特権なしを言っているわけじゃないんだ。すべてがカーネルの特権レベルで動いている。ただ、彼らは論理的にRustの安全でない機能を使うことが許可された(小さい)コアライブラリのようなコードのセットを定義していて、それ以外のカーネルの実装コード(ドライバも含む?)はそのライブラリを使って、直接Rustの安全でない機能を使うことが禁止されている(おそらくリンタールールによって)。これは、あなたが一般的な使い方に基づいて合理的に解釈した用語の過剰な重複なんだ。

新しいマイクロカーネルは…それを改善したのかな?忘れちゃったけど、実際にはそんなに悪くない印象があった。SeL4はこんな感じのマイクロカーネルだね。彼らはIPCをLinuxよりもずっと積極的に最適化したらしい。sel4 ipcを使ってメッセージを送るのは、Linuxのsyscallよりも1桁か2桁速いらしいよ。ほとんどのプログラムがLinuxよりもsel4の方がパフォーマンスが良いって言われても驚かないけど、実際にどうなのか知りたいな。

問題なのは、多くのマイクロカーネル嫌いが、30年前に真実だったことを繰り返している一方で、基本的なタスクのためにたくさんのコンテナを動かしていることだね。

安全でないRustで書かれた部分が、他の部分が安全なRustを使えるようにするためのメモリとアクセス管理を実装しているんだ。

新しいマイクロカーネルが…それを減らしたと思ってた?直したの?実際、問題の本質は現代のハードウェアで、これがモノリシックカーネルへのシステムコールを高くしてるんだよ。だからio_uringやvirtioがうまく機能するんだ。OSとアプリケーション(またはvirtioのためのハイパーバイザーとゲスト)の間でリクエストと返信をキューイングして、アドレス空間間の遷移を避けてる。将来のどんなOSも、うまく機能するためには何らかのキューイングシステムコールメカニズムが必要になるだろうし、一度それを手に入れれば、OSのコンポーネントをモノリスやマイクロカーネル、あるいは他の何かとして構成することはあまり重要じゃなくなるよ。

これは素晴らしい取り組みだね、ありがとう!スレッドに著者の一人がいるって知って嬉しい。これ、実用性からどれくらい遠いのかな?少なくとも何らかの簡略化されたコンテキストで。これを基にしたサーバーイメージを作って遊んでみたいな。

Asterinasは比較的新しいカーネルだから、一般的な用途にはまだまだ粗いところが多い。でも、ターゲットを絞った実世界のサービスを効率的かつ信頼性高く動かすことが目的なら、そのギャップはそんなに大きくないと思う。1年以内にそのマイルストーンに到達できると信じてるよ。Linuxの名前空間やcgroupsのような重要な機能を積極的に実装中だし、Asterinasベースの最初のディストリビューションにも取り組んでる。最初の焦点は、Confidential VMの中でAsterinasをゲストOSとして使うこと。このユースケースはセキュリティを優先していて、Asterinasはメモリ安全性の保証と小さなTCBのおかげでLinuxよりも明らかに優位性があるんだ。

Hacker Newsで議論の続きを見る