異なる複数のOS向けバイナリが実行可能なOS Scarlet


鬼頭 太郎 (petitstrawberry)
サイボウズ・ラボユース成果発表会2026

メンター: 光成さん

2026/03/25

Scarlet

A kernel in Rust designed to provide a universal, multi-ABI container runtime.と銘打ってますが
その実態は思いついたことを詰め込んだキメラ

img right

  • 複数OS向けバイナリの透過的な実行
    • ユーザやプログラムは何も意識せずに
      execやshellを使うだけで,
      色々なOS向けのバイナリが動く
      • 異なるOSバイナリ間のIPCなども可能
  • 分離と共有の両立
    • OSバイナリごとに前提とする環境は
      さまざま
    • fsなどのリソースの分離と共有を上手く
      やることで, 実現性と利便性の両立
    • バイナリごとに異なるコンテナで動きつつ,
      homeディレクトリなどをbind mountしてる
      イメージ
  • Rust製
    • 国内・個人だとそこそこ大規模な方かも

[1] Scarlet: https://github.com/petitstrawberry/Scarlet

Kernel Architecture

カーネルは異なるOS向けバイナリを実行するための共通の基盤を提供する

img right

  • Kernel Core

    • カーネルの基本的な機能を提供
    • Kernel Objectとして抽象化
      • FileObject, StreamOps, PipeObject,
        MemoryMappingObject, etc...
        トレイトを実装したオブジェクト群
  • ABI Module

    • OS/ABIごとに異なる環境を提供
    • バイナリの種別判定, 実行環境構築
    • Syscall, 特殊なファイルの実装など
    • Kernel Objectを利用して, 実装

簡単にいうと, Kernel CoreがOSに依存しない共通の基盤を提供して, ABI ModuleにOS固有の処理や環境構築を隠蔽するイメージ

Userland Architecture

実行するバイナリごとに異なるrootfsや標準ライブラリを使用する

  • Scarlet Native
    • rootfs
      • Scarlet独自のバイナリ群や設定ファイルなどを配置
    • 標準ライブラリ
      • rust製の標準ライブラリ, LinuxのRustの標準ライブラリと同じようなAPIを提供
  • Linux
    • rootfs
      • Linux向けに用意したrootfsをそのまま使用可能
      • デフォルトではbuildrootで生成したものを利用
    • 標準ライブラリ
      • musl推奨だが, glibcも使える?/使えるようになるはず (もちろんdynamic linking)
  • xv6
    • rootfs/標準ライブラリ: xv6向けに用意したものをそのまま使用可能
Scarlet Window System/Server (SWS) & Wayland Bridge

img right

もちろんGUIも使える

Scarlet Window System/Server (SWS)

  • Scarlet独自のウィンドウシステム/サーバ
  • Scarlet Nativeで動作
  • SWS Client
    • SWSと通信してウィンドウを管理するクライアント

Wayland Bridge

  • SWSとWaylandクライアントの橋渡しをする
  • WaylandクライアントがSWS上で動作できる
    • つまり... Linux向けのGUIアプリも動く
    • あとでデモ
Scarlet UI (おまけ)

ついでに宣言的UIフレームワークも作った (そこそこ形になったので紹介)

Scarlet UI

  • Swift UI / Flutterライクな宣言的UIフレームワーク
  • レイアウトはもちろん, 変数の監視やイベントの監視, 自動差分更新などもやる

img right

impl Application for DemoApp {
    fn body(&self) -> impl View {
        Window::new("ScarletUI Demo",
        vstack! {
            Text::new("Hello ScarletUI!")
                .font_size(40.0),
            Text::new("ScarletUIの世界からこんにちは!")
                .font_size(24.0),
            hstack! {
                Text::new(format!("Toggle State: {}", 
                  if self.toggle_state.get() { "ON" } else { "OFF" }))
                    .font_size(20.0),
                Spacer::new(),
                Toggle::new(self.toggle_state.clone()),
                Spacer::new(),
                Button::new("Click Me")
                    .on_click(|| {
                        println!("[ui_demo] Button clicked!");
                    }),
            }
そのほかの機能
  • Scarlet Build System / cargo-scarlet / Fully Modular Kernel (WIP)

    • ABI moduleやDriver, そのほかScarletの膨大な機能をRustのcrateで管理
    • 必要な機能だけ有効にしてビルドする仕組みを膨大なfeature管理ではなく, いい感じにのtomlで管理できるようにするビルドシステム
    • 例えば, Linuxのアプリを動かす軽量ランタイムとして使いたい (Unikernel的な)場合
      • Linux ABI moduleのみ有効で, そのバイナリで使わないドライバは除外など
        • Unikernelで良いじゃんという話だが, ここは突っ込まないで
  • Scarlet Hypervisor (SHV)

    • 仮想化機能を提供するType-2ハイパーバイザ, Scarlet on Scarletまでは確認した
    • KVMのような感じで, デバイスエミュエミュレーションはユーザランドで
    • ただし... これもあくまでABI moduleにkernel Coreが提供する機能の一つであり, 直接Syscallは提供しない
      • 近い将来, ゲストOS on QEMU (KVM有効) on Linux ABI (/dev/kvmをエミュレーション) on Scarletが可能になる
  • そのほか書ききれないもの

    • カーネル: TCP/IP, cgroupやnamespace的なもの, ユーザランドにバイナリ実行を委譲する機能(qemu, dosbox, wasmtime, etc...に投げる), etc...
    • ユーザランド: Stemd (systemd的な), sbud (dbud的な), Scarlet Package Manager (SPM), Webサーバ, etc...
    • ライブラリ: JIT-assembler (副産物だが, 割と良いものができたので普通に使ってる)
対応するアーキテクチャ / ボード / ABI module
  • 対応するアーキテクチャ
    • riscv64 / aarch64 (Tier 1, 比較的安定)
    • x86_64 (Tier 2, WIP)
      • これが実現次第, windows-x86_64-abi moduleも開発予定 (ScarletでWindowsバイナリが動くようになる)

img right

  • 動作確認済みボード

    • 現在は主にLimineを利用してUEFI環境でブートする形で開発中
    • QEMU Virt machine (riscv64, aarch64)
    • SiFive HiFive Premier P550 (riscv64) [WIP]
    • Apple M1 MacBook Pro (aarch64) [WIP]
      • 割込みコントローラ, UART, framebufferなどが利用可能
      • Asahi Linuxのリバースエンジニアリングの成果を活用しています
      • M1 Macは良いARM開発ボード(笑)なのでおすすめ
  • ABI module (実行可能なOSバイナリ)

    • Linux (riscv64, aarch64), xv6 (riscv64), Scarlet (riscv64, aarch64)

[2] Limine: https://codeberg.org/Limine/Limine
[3] Asahi Linux: https://asahilinux.org/

デモ, ギャラリー
icon
おわりに

異なる複数のOS向けバイナリが実行可能なOS Scarletの紹介でした

  • カーネルの互換だけでなく, ユーザランドも含めた高機能な互換環境を提供
  • Linuxやxv6, Scarlet独自のバイナリなど, 異なるOS向けのバイナリが協調して動くOSを目指して動く (GUIアプリも)
icon

発表など

  • セキュリティキャンプ2025 LT会 「実は簡単!?自作OSでDOOMを動かそう!」
  • セキュリティキャンプ2026フォーラム 展示
  • 予定(Kernel/VM探検隊@関西 12回目 ????? 関連内容を発表するかも ????)
icon

ScarletのGitHubリポジトリ
https://github.com/petitstrawberry/Scarlet

  • 簡単に試せます / コントリビュートお待ちしてます
  • 複数アーキテクチャやボード対応が一人では厳しくなってきたので...ぜひ
以降, 補足資料
Apple M1 MacBook Proでのブート

Apple M1 Boot Flow

+--------+    +--------+    +--------+    +--------+    +---------+
| iBoot  | -> | m1n1   | -> | U-Boot | -> | Limine | -> | Scarlet |
+--------+    +--------+    +--------+    +--------+    +---------+
Apple         SoC init      Runs after    EFI app        Scarlet
boot          hand-off      m1n1          loader         Kernel 
Scarlet Hypervisor (SHV) の詳細
+---------------------------------------------------------------------------+
| User space                                                                |
|                                                                           |
|  +------------------------+         +-------------------------------+     |
|  | U-SHV                  |         | QEMU on Linux ABI             |     |
|  | native userspace VMM   |         | uses /dev/kvm ioctls          |     |
|  +------------------------+         +-------------------------------+     |
|             |                                      |                      |
+-------------|--------------------------------------|----------------------+
              |                                      |
              v                                      v
+---------------------------------------------------------------------------+
| Kernel space                                                              |
|                                                                           |
|  +------------------------+         +-------------------------------+     |
|  | Scarlet Native         |         | Linux ABI module              |     |
|  | ABI module             |         | - /dev/kvm compatibility      |     |
|  +------------------------+         +-------------------------------+     |
|             |                                      |                      |
|             +------------------+  +----------------+                      |
|                                v  v                                       |
|                  +-----------------------------------+                    |
|                  | SHV                               |                    |
|                  | - VM entry / VM exit              |                    |
|                  | - Stage-2 page tables             |                    |
|                  | - guest memory / vCPU management  |                    |
|                  +-----------------------------------+                    |
+-------------------------------------|-------------------------------------+
                                      v
                        +-----------------------------------+
                        | RISC-V H-extension / AArch64 EL2  |
                        | (RISC-V impl, AArch64 WIP)        |
                        +-----------------------------------+

pagenate: off