Nucleus: セキュリティ強化された Nix ネイティブ コンテナ ランタイム
Nucleus は、Linux および NixOS 向けに特別に設計された、軽量でセキュリティが強化されたコンテナ ランタイムです。従来のコンテナ ランタイムとは異なり、Nucleus は、Nix がルート ファイルシステムを構築し、NixOS モジュールがサービスを宣言する、完全な宣言的モデルに焦点を当てており、その結果、再現可能で監査可能な実行環境を実現します。
高パフォーマンスな分離とベンチマーク
Nucleus は、従来のランタイムよりも大幅に高速な起動時間を実現し、ベアメタルに近いパフォーマンスを提供します。コールドスタートのベンチマークでは、Docker が約 500 ms であるのに対し、Nucleus は 12 ms の起動時間を達成しています。
定常状態のデータベースワークロードのパフォーマンスは、高い水準を維持しています。PostgreSQL 18 のベンチマーク (pgbench) では、Nucleus の分離はベアメタルと比較して顕著なパフォーマンス低下を示さず、一部の結果では、読み取り中心および読み取り/書き込み混合ワークロードの両方において、平均 TPS (Transactions Per Second) とレイテンシの数値がベアメタルに近い、あるいはわずかに上回る結果を示しています。
宣言的アーキテクチャと Nix 統合
Nucleus は、再現性と安定性のために Nix エコシステムを活用する、Nix ネイティブとして構築されています。
NixOS モジュール サポート
Nucleus は、コンテナを systemd サービスとして管理できる、ファーストクラスの NixOS モジュールを提供します。各コンテナは nucleus-<name>.service ユニットとして定義され、以下を含みます:
- 自動再起動:
on-failureおよび 5s のバックオフで設定されています。 - Journald 統合: 標準出力と標準エラーは journald に直接キャプチャされます。
- ワークロードのアイデンティティ: ランタイムはセットアップのために root として起動しますが、ワークロードを実行する前に、設定されたユーザー/グループに権限を降格します。
- 強化 (Hardening):
ProtectSystem=strictやProtectHome=trueといった systemd レベルの保護が含まれます。
再現可能なルート ファイルシステム
nucleus.lib.mkRootfs ヘルパーを使用すると、開発者は、必要なパッケージのみを含む、最小限で再現可能なルート ファイルシステムを構築できます。これにより、本番環境での可変なホストの bind mount の必要性がなくなり、ルートfs のアテステーション (起動時に .nucleus-rootfs-sha256 マニフェストを検証) を通じて、ランタイムの状態が安定し、監査可能になります。
セキュリティ モデルと強化 (Hardening)
Nucleus は、特に本番環境および厳格なエージェントモードにおいて、「フェイルクローズ (fail-closed)」のセキュリティ姿勢を採用しています。
カーネル レベルの分離プリミティブ
Nucleus は、分離のために Linux カーネルの包括的なプリミティブのスイートを活用しています:
- Namespaces: PID, mount, network, UTS, IPC, user, cgroup, およびオプションの time 分離。
- cgroups v2: CPU, memory, PIDs, および I/O に対する厳格なリソース制限。
- pivot_root: ファイルシステム分離に使用されます。
chrootは、基本的なエージェントモードでのみフォールバックとして利用可能です。 - Landlock LSM: パスベースのファイルシステムアクセス制御 (Linux 5.13+)。
- seccomp: トレースベースのプロファイル生成による Syscall ホワイトリスト フィルタリング。
gVisor 統合
セキュリティを強化するため、Nucleus は、ワークロードとホスト カーネルの間の境界をより強固にするために syscall をインターセプトするアプリケーション カーネルである gVisor (runsc) とのファーストクラスの統合を提供します。
送信 (Egress) ポリシーの強制
本番環境のブリッジモードでは、Nucleus はデフォルトで「すべて拒否 (deny-all)」の送信ポリシーを採用しています。アクセスは、CIDR または特定の DNS ドメインに対する明示的な許可リスト (allow-lists) を通じてのみ許可され、これらは起動時に解決され、コンテナのネットワーク名前空間内で iptables ルールを通じて強制されます。
サービス モード
Nucleus は、柔軟性とセキュリティのバランスをとるために、3 つの異なるモードで動作します:
| 特徴 | Agent Mode | Strict Agent Mode | Production Mode |
|---|---|---|---|
| 主な用途 | 一時的な AI エージェント ワークロード | フェイルクローズな一時的ワークロード | 長期稼働する NixOS サービス |
| セキュリティ姿勢 | ベストエフォート | セキュリティの低下は禁止 | 厳格な不変条件; フェイルクローズ |
| Rootfs | ホストの bind mount | ホストの bind mount / Rootfs | 事前構築された Nix closure |
| ネットワーク | オプションの host/bridge | ネイティブ host は禁止 | ネイティブ host は禁止 |
| Cgroup 制限 | オプション | 必須 | 必須 |
| PID 1 Init | Direct exec | Direct exec | ゾンビプロセス回収のための Mini-init |
Docker との比較
Nucleus は、Docker のドロップイン・リプレースメントではありません。それは、runc や gVisor に近く、単一ホスト内でのオーケストレーション機能を持つ、強化されたサンドボックス ランタイムです。
- イメージ なし: Nucleus は OCI イメージ、レイヤー、またはレジストリを使用しません。Nix closure を使用します。
- デーモン なし: 直接 fork/exec を使用する単一バイナリです。切り離されたコンテナは systemd transient ユニットとして管理されます。
- 主権的なセキュリティ: Docker がバンドルされたデフォルトを提供する場合、Nucleus は外部化された、SHA-256 で固定された seccomp, capability, および Landlock ポリシーを使用します。
マルチ コンテナ トポロジー
Nucleus には、nucleus compose コマンドが含まれており、TOML 設定を使用してマルチ コンテナ スタックを管理できます。これにより、ネットワーク、ボリューム、ボリューム、およびサービスを依存関係 DAG (Directed Acyclic Graph) で定義することができ、ヘルスチェックに基づいてサービスが正しい順序で起動および停止されることが確保されます。
形式的検証
信頼性を確保するため、Nucleus は仕様駆動開発を採用しています。状態マシンは TLA+ と Apalache モデルチェッカーを使用して形式的に検証されており、Rust でのモデルベーステストによって、TLA+ の仕様が実際の実装に対して検証されます。