インフラ・DevOps
選択可能なカーネルを備えたQNX風オペレーティングシステム
A QNX-inspired operating system with selectable kernels (qsoe.net)
要約
QSOEは、QNXにインスパイアされた、選択可能なカーネルを持つオペレーティングシステムで、単一のユーザー空間とビルドシステムを共有する2つのバリアントで提供されます。QSOE/Nは独自に開発されたマイクロカーネルSkimmer上で動作し、QSOE/LはseL4をカーネルとして利用します。どちらのバリアントも64ビットRISC-Vをターゲットとし、SiFive HiFive Unmatchedボードで動作確認済みで、Apache-2.0ライセンスの下でリリースされています。
全文翻訳
QSOE 選択可能なカーネルを備えたQNX風オペレーティングシステム。ニュース: QSOE 0.1がリリースされました — 統合された2カーネルシステムの最初の公開リリースです(2026年6月)。発表を読む →
QSOEは、1つのユーザー空間と1つのビルドシステムを共有する2つのバリアントで提供されます。QSOE/Nは、このプロジェクトのためにゼロから書かれたマイクロカーネルであるSkimmer上で動作します(設計上SMP対応)。QSOE/LはseL4をカーネルとして動作します。どちらのバリアントも、コンパイルすると、U-Bootローダーなどで直接使用可能なカーネルとinitrdファイルを提供します。ユーザー空間は両バリアント間で100%同一であり、カーネルごとに生成される唯一の部分はタスクマネージャーであるtaskmanとCライブラリであるlibc.soです。これらはソースレベルで約85%が共有されており、カーネルとの薄いレイヤーでのみ分岐します。設計はQNX Neutrinoの伝統に従っており、小さなカーネルと、それ以外のすべてがユーザー空間に配置され、同期メッセージパッシングIPCと、サービスのためのリソースマネージャーモデルを採用しています。QSOEはSiFive HiFive Unmatched (FU740)上の64ビットRISC-V (RV64, Sv39)をターゲットとしており、QEMUが日常の開発に使用されています。両方のQSOEバリアントは現在、実ハードウェアで起動します。Apache-2.0ライセンスでリリースされています。gitlab.com/qsoe/os 開発ブログ
ダウンロード QSOEはソースからビルドすることも、プレビルドされたバイナリからインストールすることもできます。各リリース用の既製イメージはgithub.com/qsoe-dev/dlで公開されています(現在のリリース: 0.1)。ファイルは以下の通りです:
skimmer.bin — Skimmerマイクロカーネル: QSOE/Nバリアントのカーネル。ブートローダー(またはQEMU)によって上記のユーザー空間パッケージと一緒にロードされる生のバイナリイメージです。
modpkg.cpio — モジュールパッケージ: 共有QSOEユーザー空間(taskman、init、Cライブラリ、シェル、ドライバー、ユーティリティ)のCPIOアーカイブ。QSOE/Nはこれをskimmer.binと一緒にinitrdとして起動します。
qsoe-l-qemu.elf — QEMU virtマシン用の単一の自己完結型ELFとしてのQSOE/Lバリアント(seL4カーネル上)。elfloader、seL4カーネル、taskman、ユーザー空間をまとめてバンドルしており、他に何も起動する必要はありません。
qsoe-l-sifive.elf — 同じQSOE/Lイメージで、SiFive HiFive Unmatched (FU740)ボード用にビルドされています。
mrbml-riscv64.efi — mr-bml、QSOE独自のブートローダー(RISC-V用EFIアプリケーション)。どちらのバリアントもロードでき、実ハードウェア上のブートメニューを駆動します。
nvme.img.gz — すぐに実行できる自己起動型QEMUディスクイメージ(GPT)。そのEFIパーティションにはmr-bmlが含まれ、オンディスクルートには両方のカーネルが含まれているため、QEMUは-kernelなしで直接mr-bmlメニューに起動します。QSOEを実行する最速の方法です。以下の「QEMU下での実行」を参照してください。
virtio.img.gz — QEMU下でQSOE/Lを実行する場合にのみ使用されるコンパニオンルートディスク(標準のseL4はQEMUのNVMeが必要とする割り込みコントローラーよりも古いため、代わりにvirtioディスクからルートをマウントします)。QSOE/Nや実ハードウェアには必要ありません。
要するに、QEMUで実行するには、nvme.img.gz(QSOE/Lの場合はvirtio.img.gzも)を取得し、「QEMU下での実行」を参照してください。実ハードウェアにインストールするには、mrbml-riscv64.efiとカーネルが必要です。QSOE/Nはskimmer.bin + modpkg.cpioを使用し、QSOE/Lはqsoe-l-*.elfイメージのいずれかを使用します。そして「インストール」を参照してください。
QEMU下での実行 QSOEを実行する最も簡単な方法 — ハードウェアも-kernelのやりくりも不要です。nvme.imgのダウンロードは自己起動型UEFIディスクです。QEMUのファームウェアはそこからmr-bmlを実行し、mr-bmlのメニューはディスクから直接いずれかのバリアントを起動します。qemu-system-riscv64 — QSOE/Nにはバージョン11.0.1以降が必要です(そのNVMeにはAIA割り込みコントローラーが必要です)。edk2 RISC-V UEFIファームウェア — Debian/Ubuntuではqemu-efi-riscv64パッケージ。osリポジトリのランチャーrun-nvme.sh — 正しいQEMUマシン、ファームウェア、ディスクを各バリアントのためにラップしてくれるので、自分で設定する必要はありません。実行する
```bash
# イメージを解凍する — QSOE/Lが必要な場合のみvirtio.img.gzを追加する
gunzip nvme.img.gz virtio.img.gz
# ランチャーをそれらに向け、メニューからバリアントを選択する
NVME_IMG=./nvme.img VIRTIO_IMG=./virtio.img ./run-nvme.sh
```
nまたはlを渡してメニューをスキップすることもできます (./run-nvme.sh n)。スクリプトは自動的に一致するQEMUマシンを選択します — AIAマシン上のNVMeルートを持つQSOE/N、PLICマシン上のvirtioルートディスクを持つQSOE/L。mr-bmlメニューとシステムコンソールはどちらもターミナルに表示されます。バリアントを選択すると、ログインプロンプトに起動します。パスワードQSOEでrootとしてログインしてください。
インストール 実ハードウェア、実ディスク。QSOE 0.1はSiFive HiFive Unmatched (FU740)で起動します。SpaceMiT K3は将来のターゲットです。これは、すでにLinuxを実行しているボードを前提としています — 既存のEFIおよびブートパーティションにファイルを配置するため、ボードのファームウェアに精通していることが期待されます。ブートモデルはシンプルです: mr-bmlはEFIシステムパーティションに存在します。それはそのメニューとカーネルをext2/3/4パーティションから読み込みます。選択されたバリアントは、fs-qrvパーティションから自身のルートをマウントします。手順
mrbml-riscv64.efiをESPにEFI/BOOT/BOOTRISCV64.EFI(UEFIリムーバブルメディアパス)としてコピーするか、efibootmgrでブートエントリとして登録します。
ブート/ルートファイルシステムに/boot/qsoe/を作成し、そこにカーネルをコピーします: QSOE/Nにはskimmer.bin + modpkg.cpio、QSOE/Lにはqsoe-l-sifive.elf。
/boot/mr-bml/mr-bml.cfgを各バリアントにつき1つのエントリで作成します — 例:
```
# /boot/mr-bml/mr-bml.cfg — mainfs=パーティションをディスクに合わせて調整してください
menuentry 'QSOE/N (Skimmer)' {
kernel /boot/qsoe/skimmer.bin
mainfs=/dev/nvme0n1p8
modpkg /boot/qsoe/modpkg.cpio
}
menuentry 'QSOE/L (seL4)' {
kernel /boot/qsoe/qsoe-l-sifive.elf
mainfs=/dev/nvme0n1p8
}
```
mainfs=デバイスはQSOEルートファイルシステム(fs-qrv)を保持するパーティションの名前です — ボード上でQSOEに割り当てたパーティションに設定してください。実ハードウェアではQEMU virtio分割はありません: 両方のバリアントがNVMeディスクを直接駆動します。
ソースからのビルド QSOEはriscv64-linux-gnu-クロスツールチェーン(rv64gc)と標準のmakeでビルドされます。QEMUはテストに便利です。アンブレラリポジトリはビルドをオーケストレートし、そのリリースタグに一致するコンポーネントリポジトリを取り込みます。
```bash
git clone https://gitlab.com/qsoe/os
cd os
make prepare # このタグのコンポーネントをフェッチ(component.listを参照)
make # 両方のバリアントをビルド: QSOE/N、次にQSOE/L
make dist # オプション: QEMUディスクイメージ(nvme.img.gz、virtio.img.gz)
```
QSOE/Lはmake prepare中にseL4カーネルをシャロークローンします。ビルドはダウンロードリストにあるファイルを正確に生成します。ツリー全体はApache-2.0ライセンスです。ソースはgitlab.com/qsoeにあります。
ドキュメント リリースと同時にPDFとして公開されているQSOEマニュアル:
Design.pdf — アーキテクチャ: 2カーネルモデル、taskman、IPCおよびリソースマネージャー設計。
UserGuide.pdf — インストール、シェル、基本的なコマンド、テキストエディタとユーティリティ。
ProgrammingBook.pdf — QSOEプログラミング、リソースサーバーフレームワークの章を含む。
AppPortingGuide.pdf — Unix(およびQNX)ソフトウェアをQSOEに移植する: 考慮すべき点 — fork()なし、brk()なし、poll()経由のselect()、その他。
ロードマップ Linuxカーネルにはロードマップがないとよく言われます。QSOEにはあります — 今日の0.1から統合された1.0までの10のリリースが計画されています。作業計画であり、契約ではありません: 作業が次に何が本当に必要かを示すにつれて、マイルストーンは変更される可能性があります。
0.1 — 最初の公開リリース。2カーネル基盤、共有ユーザー空間、/usrに読み取り専用fs-qrv、インタラクティブなgetty + ログイン、ソース公開。(現在)
0.2 — GK208(「Kepler」)上のテキストモードコンソール: リアルタイムオーディオ作業がシリアル経由だけでなくハードウェア上でも見えるように、デバイス上の表示が可能になる。
0.3 — 最初の書き込み可能なファイルシステム: qrvfsがファイル作成/削除、O_CREAT/O_TRUNC、realpathおよびシンボリックリンク解決をサポート。
0.4 — 標準的なデュアルパネルファイルマネージャー: QSOEのフラッグシップアプリケーションで、書き込み可能なファイルシステムとユーザー空間をエンドツーエンドで利用する。
0.5 — 最初のdeva-hdmiオーディオデバイス、ハードリアルタイムパスに必要な優先順位/割り込み/スケジューリングの基礎作業。
0.6 — 包括的な適合性スイート、およびオーディオリアルタイムパッケージ(N-CPUシステム上でN個のハードリアルタイムタスクまで)。
0.7 — 時期が近づいたら定義される。
0.8 — 2番目のハードウェアターゲット(SpaceMiT K3、RVA23クラス)とAIA割り込みアーキテクチャ(IMSIC/APLIC)により、MSI/MSI-Xがボード全体で統一的に機能する。
0.9 — QNX-libc互換性強化: ターゲットとなるQNのセットを再コンパイルして実行