
2026/04/18 2:18
【HN】Smol Machines:サブ秒で起動可能な汎用仮想マシンです。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
smolvm の主な利点は、秒未満の冷起動(cold start)で完全に隔離された Linux 仮想マシンを起動できる点であり、従来のクラウド VM やコンテナに典型的な遅い起動時間を解消します。ホストカーネルを共有するコンテナや、Colima などのデーモンツールとは異なり、smolvm はハードウェアベースの分離(macOS/Linux では libkrun を介して)を使用して、ワークロードごとにインスタンスを作成し、優れたセキュリティと隔離性を提供します。本ツールの対象とする 2 つの使い分けは、ネットワークをデフォルトでオフとした強化された環境で不信任コードを実行するための**一時 VM(ephemeral VMs)と、状態のあるシステム全体を携行可能なアーティファクト(.smolmachine ファイルまたは実行可能ファイル)にパッケージ化する永続的な開発マシン(persistent development machines)**です。これらのアーティファクトにより、再起動後もインストールされたパッケージや秘密鍵が保持され、手動での再インストールなしで継続使用が可能です。
本ツールは軽量技術を利用します:macOS では Hypervisor.framework が、Linux では KVM が採用され、どちらも libkrun によるカスタムカーネルと連携します。環境は
Smolfile(TOML 形式)により宣言され、ここで画像、ネットワークルール、ボリューム、SSH エージェント設定が定義されます。ホストの SSH エージェントを --ssh-agent フラグを使用して VM 内に転送することで、ゲストに秘密鍵を暴露させずに安全なアクセスを実現します。デフォルト設定では vCPU 4、RAM 8 GiB を割り当て、メモリ使用量については弾力的に対応します。アーキテクチャは外部依存関係を排除することを設計しており、あらゆる対応プラットフォーム間で単一ファイルを転送するだけで 200ms 未満での展開が可能になっています。本文
隔離をデフォルトとした Ship and Run ソフトウェア
本 CLI ツールでは、以下のようなことが可能です。
- カスタム Linux バルチャの管理と実行
ローカル環境においてサブ秒単位の起動時間を実現し、クロスプラットフォーム(macOS、Linux)、および弾力的なメモリ使用量を特徴としています。 - ステートフルなバルチャを単一のファイル(
)にパッケージ化.smolmachine
任意の対応するプラットフォームで再hydration (再構成)して実行できます。
インストール
# macOS および Linux 向けインストール curl -sSL https://smolmachines.com/install.sh | bash
コーディングエージェントの場合——インストールおよびコマンドの一覧を確認するには:
curl -sSL https://smolmachines.com/install.sh | bash && smolvm --help
または、GitHub Releases からダウンロードすることも可能です。
クイックスタート
一時的な VM(終了時にクリーンアップされる)でコマンドを実行する場合:
smolvm machine run --net --image alpine -- sh -c "echo 'Hello world from a microVM' && uname -a"
インタラクティブシェルの場合:
smolvm machine run --net -it --image alpine -- /bin/sh
VM 内部からの操作例:
apk add sl && sl && exit
このツールを活用する場面
信頼できないコードのサンドボックス化
ハードウェア隔離された VM 内で非信頼のプログラムを実行します。ホストファイルシステム、ネットワーク、および認証情報はハイパーバイザー境界によって分離されます。
-
デフォルトではネットワークはオフ — 非信頼のコードが「ホームに電話する」ことができません:
smolvm machine run --image alpine -- ping -c 1 1.1.1.1 # エラー——ネットワークへのアクセスがありません -
エGRESS(外部通信)を制限 — 特定のホストのみを許可できます:
smolvm machine run --net --image alpine --allow-host registry.npmjs.org -- wget -q -O /dev/null https://registry.npmjs.org # 成功——許可されたホストsmolvm machine run --net --image alpine --allow-host registry.npmjs.org -- wget -q -O /dev/null https://google.com # エラー——許可リストに含まれていません
ポータブル実行可能ファイルへのパッケージ化
任意のワークロードを自己完結型の実行可能ファイルに変換します。すべての依存関係は事前にバインド済みであり、インストールステップやランタイムでのダウンロードも不要です。起動時間は<200ms です。
smolvm pack create --image python:3.12-alpine -o ./python312 ./python312 run -- python3 --version # Python 3.12.x — 隔離済み、pyenv/venv/conda 不要
デvelopment 向け永続型 VM の作成
作成、停止、再起動が可能です。インストールされたパッケージは再起動後も維持されます。
smolvm machine create --net myvm smolvm machine start --name myvm smolvm machine exec --name myvm -- apk add sl smolvm machine exec --name myvm -it -- /bin/sh # 内部で sl, ls, uname -a を確認できます。'exit' と入力して脱出してください smolvm machine stop --name myvm
Git および SSH の使用を、キーを公開せずに実行
ホスト側の SSH エージェントを VM に転送します。秘密鍵はゲスト環境に決して進入せず、ハイパーバイザーがこれを強制します。ホストで SSH エージェントが動作している必要があります(
ssh-add -l で確認可能)。
smolvm machine run --ssh-agent --net --image alpine -- sh -c "apk add -q openssh-client && ssh-add -l" # ホストのキー一覧を表示しますが、VM 内部からは抽出できません smolvm machine exec --name myvm -- git clone git@github.com:org/private-repo.git
Smolfile を用いた環境宣言
簡易な TOML ファイルで再構成可能な VM 設定を宣言できます。
image = "python:3.12-alpine" net = true [network] allow_hosts = ["api.stripe.com", "db.example.com"] [dev] init = ["pip install -r requirements.txt"] volumes = ["./src:/app"] [auth] ssh_agent = true
使用方法:
smolvm machine create myvm -s Smolfile smolvm machine start --name myvm
その他の例: Python · Node.js · Doom
動作原理
各ワークロードは実質的なハードウェア隔離を受けており、Hypervisor.framework(macOS)または KVM(Linux)上で独自のカーネルを起動します。libkrun VMM とカスタムカーネル(libkrunfw)を組み合わせて単一の
.smolmachine ファイルにパック化すると、ホストアーキテクチャが一致するあらゆる場所においてゼロ依存関係で動作します。
デフォルト設定:
- 4 コアのプロセッサ(vCPU)、8 GiB のメモリ。
- メモリは virtio balloon を介して弾力的です——ホストはゲストが実際に使用する分のみコミットし、余分なメモリは自動的に回収されます。
- vCPU スレッドはアイドル状態のときハイパーバイザーでスリープするため、過剰プロビジョニングのコストはほぼゼロです。
--cpus および --mem を用いて設定をオーバーライドすることも可能です。
比較
| 機能 | smolvm | コンテナ | Colima | QEMU | Firecracker | Kata |
|---|---|---|---|---|---|---|
| 隔離性 | ワークロードごとにVM | 名前空間(共有カーネル) | 名前空間(1 VM) | 別の VM | 別の VM | コンテナごとのVM |
| 起動時間 | <200ms | 〜100ms | 〜数秒 | 〜15-30s | <125ms | 〜500ms |
| アーキテクチャ | ライブラリ(libkrun) | デモン | デモン(VM 内) | プロセス | プロセス | ランタイムスタック |
| ワークロードごとのVM | はい | いいえ | いいえ(共有) | はい | はい | はい |
| macOS ネイティブ対応 | はい | Docker VM を経由 | はい(krunkit) | いいえ | いいえ | いいえ |
| 埋め込み可能なSDK | はい | いいえ | いいえ | いいえ | いいえ | いいえ |
| ポータブルアサート | | イメージ(デモンが必要) | いいえ | いいえ | いいえ | いいえ |
プラットフォームサポート
| ホスト | ゲスト | 要件 |
|---|---|---|
| macOS Apple Silicon | arm64 Linux | macOS 11+ |
| macOS Intel | x86_64 Linux | macOS 11+(未確認) |
| Linux x86_64 | x86_64 Linux | KVM() |
| Linux aarch64 | aarch64 Linux | KVM() |
既知の制限事項
- ネットワーク:オプトイン制(
でmachine create
を指定)。TCP/UDP のみ対応、ICMP は非対応。--net - ボリュームマウント:ディレクトリのみ対応(単一ファイルは不可)。
- macOS:バイナリには Hypervisor.framework エンタイトルメントによる署名が必要です。
- SSH エージェント:ホスト上で SSH エージェントが動作している必要があります(
を設定する必要があります)。SSH_AUTH_SOCK
開発者向け
を参照してください。docs/DEVELOPMENT.md
Apache License 2.0
@binsquare による制作
Twitter · GitHub