Show HN: Smolマシン – サブ秒コールドスタート、ポータブル仮想マシン
8時間前原文(github.com)
概要
smolvmは、ソフトウェアをデフォルトで分離して実行できるCLIツール。
超高速なLinux仮想マシン(VM)をローカルで管理・実行可能。
クロスプラットフォーム対応で、単一ファイルに状態をパックして持ち運びも容易。
サンドボックスやポータブル実行ファイルの作成、開発環境の永続化に最適。
シンプルなTOMLファイルで環境構成も宣言的に管理。
smolvmとは
- 独立した仮想マシンをローカルで管理・実行できるCLIツール
- サブ秒(<200ms)での高速起動、macOS/Linux両対応
- メモリ消費の弾力的最適化、必要分だけホストから確保
- 単一ファイル(.smolmachine)へのパッキング、どこでも再現可能
- 状態を持つVMの作成・停止・再起動、パッケージの永続化
インストール方法
- macOS/Linux両対応のインストールスクリプト
curl -sSL https://smolmachines.com/install.sh | bash
- GitHub Releasesからのダウンロードも可能
- コマンド一覧の確認
smolvm --helpで利用可能な全コマンドを表示
基本的な使い方
- 一時的な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
主なユースケース
- サンドボックス:未検証コードの安全実行
- ホストのファイルシステム・ネットワーク・認証情報をハイパーバイザーで隔離
- デフォルトでネットワーク無効、許可ホストのみ通信可
- 例:
--allow-host registry.npmjs.org
- 例:
- ポータブル実行ファイル化:依存関係込みの自己完結型バイナリ生成
- 例:
smolvm pack create --image python:3.12-alpine -o ./python312
- 例:
- 開発用永続VM:パッケージや設定の永続化
- VM作成、起動、コマンド実行、停止を個別に管理
- SSHエージェント転送:ホストのSSH鍵をVM内で安全に利用
- 鍵がゲストに渡らず、ハイパーバイザーで厳格管理
- Smolfileによる宣言的環境構築:TOML形式でVM設定を記述
- 例: イメージ、ネットワーク、ボリューム、SSHエージェント等を一括管理
仕組み・特徴
- 各ワークロードごとに独立カーネル・VMを割り当て
- macOS: Hypervisor.framework、Linux: KVMを利用
- libkrun + カスタムカーネル(libkrunfw)による高速VMM
- .smolmachineファイルでアーキテクチャ一致ホスト間の完全移植
- デフォルト: 4 vCPU、8 GiB RAM(--cpus, --memで変更可)
- virtio balloonによる動的メモリ割当・自動回収
- アイドル時はvCPUスリープ、オーバープロビジョニングも低コスト
他ソリューションとの比較
| 項目 | smolvm | Containers | Colima | QEMU | Firecracker | Kata | |---------------------|------------|------------|------------|------------|-------------|-------------| | 隔離方式 | ワークロード毎VM | 名前空間 | 名前空間+1VM | 独立VM | 独立VM | コンテナ毎VM | | 起動時間 | <200ms | ~100ms | ~秒 | ~15-30s | <125ms | ~500ms | | macOSネイティブ | 対応 | Docker VM経由 | krunkit経由 | 対応 | 非対応 | 非対応 | | ポータブル成果物 | .smolmachine | イメージ | 非対応 | 非対応 | 非対応 | 非対応 |
対応プラットフォーム・要件
- macOS: Apple Silicon (arm64), Intel (x86_64), macOS 11+(未検証含む)
- Linux: x86_64, aarch64(KVM必須)
- ゲストアーキテクチャはホストと一致必須
既知の制限事項
- ネットワークは明示的に有効化(--net指定)
- TCP/UDPのみ対応、ICMP非対応
- ボリュームマウントはディレクトリ単位のみ
- macOSではバイナリ署名とHypervisor.framework権限が必要
- --ssh-agentはホストでSSHエージェント稼働必須(SSH_AUTH_SOCK設定)
開発・ライセンス
- Apache-2.0ライセンス、作者: @binsquare
- 詳細・開発ドキュメント:
docs/DEVELOPMENT.md参照 - Twitter・GitHubで最新情報発信