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

SmolBSD – 自分だけのミニマルBSDシステムを構築する

概要

smolBSD はNetBSDを基盤とした ミニマルBSD UNIXシステム 構築ツール。 必要なサービスだけを選択し、 数分で独自OSイメージ を生成可能。 再現性・移植性・即時起動性 が特長。 QEMUやFirecracker対応で どこでも動作。 コミュニティベースで 拡張・共有 も容易。

smolBSDとは

  • NetBSD を基盤とした メタOS 構築ツール
  • netbsd-MICROVMカーネル を採用、信頼性と移植性を確保
  • 必要最小限のコンポーネント のみ選択・組み合わせ可能
  • sshd, httpd, 独自サービス などを指定してビルド
  • 一貫性あるミニマルなブート可能イメージ を自動生成

特長

  • ソフトウェアのようにBSDシステムを構築
    • 高速・再現性・最小構成 でビルド
  • Composable(組み合わせ自由)
    • カーネルからサービスまで 必要なものだけ選択
  • Reproducible(再現性)
    • 決定論的なビルド、バージョン管理も容易
  • Instant Boot(即時起動)
    • netbsd-MICROVM により 数ミリ秒で起動
  • Universal(汎用性)
    • QEMUやFirecracker が動く環境ならどこでも利用可能

クイックスタート

  • リポジトリのクローン
    • git clone https://github.com/NetBSDfr/smolBSD
  • ディレクトリ移動
    • cd smolBSD
  • サービス指定でビルド
    • 例:bmake SERVICE=sshd build
      • ビルダーmicrovm起動
      • 必要セット取得
      • 512MBのrootファイルシステム作成
      • イメージ生成(例:sshd-amd64.img
  • 起動スクリプト実行
    • ./startnb.sh -f etc/sshd.conf
  • SSH接続例
    • ssh -p 2022 ssh@localhost

ダウンロード例

  • bozohttpd
    • 数MBの静的Webサーバー
    • bmake SERVICE=bozohttpd build
    • 起動で即Webサービス開始
  • nbakery
    • NetBSDツール群を備えた軽量ビルド・イメージ作成サービス
    • bmake SERVICE=nbakery build
    • 起動でNetBSD環境にログイン可能
      • doasでrootコマンド
      • pkginでパッケージ管理
      • exitでクリーンシャットダウン
      • tmux環境で作業
  • nitrosshd
    • 最小限・高速起動のSSHサーバー
    • bmake SERVICE=nitrosshd build
    • 起動で即SSH接続可能(SSHバウンサー用途に最適)

コミュニティと拡張性

  • NetBSD上に構築された独立プロジェクト
  • ユーザー/開発者が自由にマイクロシステムやサービスを共有・拡張可能
  • 新しいサービスやビルドレシピの追加も歓迎

Hackerたちの意見

今、BSDの分野でのイノベーションがすごく楽しんでる!

BSDの分野は、いつも何かと先を行ってるよね。もっと自由に前に進める感じ。

いいね!マスコットのアイコンが好き。

できるだけ小さいSSHサーバーについて考えてたんだけど、これ面白そうだね。後で試してみるよ。

TalosやFlatcar Linuxの代替として、薄いハイパーバイザーやコンテナホストが使えるものを考えてたんだ。

わあ、これ遊ぶのが楽しそう!dazzawazzaが言ってた通り、素晴らしいイノベーションが進んでるね。BSDにはもっと愛と注目が必要だよ!

これが気に入ったなら、「Rumpkernels」についても読んでみるといいよ。これもNetBSDをベースにしてるんだ。コアのアイデアは(簡略化すると)「カーネルAPIをユーザースペースで実装しよう」ってこと。これでカーネルレベルのコンポーネントをアプリの一部として動かせるんだ。Rumpkernelsを使うと、例えばカーネル内のすべてのファイルシステムドライバーをユーザースペースで動かせるようになって、ファイルシステムの複雑なロジックを全部書き直さなくても済むんだ。mtoolsを使ったことがあるなら、それを思い出してみて。既存のFATコードを再利用する感じ。特別なカーネルプリミティブやrootアクセスなしで、ユーザースペースからディスクイメージを簡単に作れるようにするんだ。そして、ユーザースペースのアプリケーションを「ベアメタル」で動かすために必要な最小限のドライバーと一緒にパッケージ化することもできる。これがsmolページのSSHの例を思い出させたんだ。詳しくはここを見てね:https://github.com/rumpkernel/wiki/wiki/Repo%3A-rumprun

これもあるよ:https://mirage.io 似たようなことをやってる。

FreeBSDってもう結構小さいんじゃない?Smol、NetBSD、FreeBSDの間でLoCの違いがどれくらいあるのか気になるな。編集:NetBSDは730万行、FreeBSDは900万行だよ。

技術的な詳細は全然わからないけど、君がしてる比較はあんまり関係ない気がする。私の理解では、これはNetBSDをベースにしたプロジェクトに過ぎないし、頑張ればFreeBSDでも同じことができると思うよ。

追記。NetBSDは同じソースコードから約40種類のCPUアーキテクチャをサポートしてるよ:)

小型のFreeBSDにはNanoBSDがあるよ: https://docs.freebsd.org/en/articles/nanobsd

2025年のFosdemでこの作業についてのプレゼンテーションがあったよ: https://archive.fosdem.org/2025/schedule/event/fosdem-2025-5...

これめっちゃ楽しそうだね。Firecrackerの使い方をみんなに教えようとしてるんだけど、何なのか、いつ使うのか、どうやっていろんな低レベルの部分をつなげるのかを説明してる。Dockerとは違って、マイクロVMはもっと実践的な知識が必要だよね。smolBSDを試してみたけど、ビルドとブートの速さには驚いたし、ブート時間が100msから10msに短縮されるっていうパッチのヒントも面白かった。これはすごいね。私の経験では、最新のLinuxカーネルにsystemdを追加するとFirecrackerの起動が1-2秒かかるから。smolBSDのアイデアはunikernelsやLinuxKitを思い出させる。smolBSDのドキュメントは素晴らしいスタートだけど、もっと良くなる余地があると思う。例えば、SSHの例では、認証されたSSHキーの設定方法やログイン方法が全然書かれてないし、オープンポートのホストへのポートマッピングも言及されてない。作者はこれらのことを知ってると思うけど、リポジトリを見てもはっきりしなかった。だから、もし聞いてるなら改善してくれるといいな。これに関するLinuxの同等のものに興味がある人は、コンテナからLinuxマイクロVMを構築する方法についての私のブログ記事[1]や、Weave Ignite/Flintlockの作業の多くをリードしたRichard CaseとのFirecracker/Linuxに関するビデオトーク[2]をチェックしてみてね。 [1] https://actuated.com/blog/firecracker-container-lab [2] https://www.youtube.com/watch?v=CYCsa5e2vqg

BSDが好きな人やOSを作りたい人にはめっちゃいいね。