一、概述
molvm 是一个 CLI 工具,跨平台运行微 VM。基于 libkrun VMM,冷启动 <200ms,兼容 OCI 容器镜像,支持 macOS/Linux/Windows,产出 .smolmachine 便携包。面向沙箱执行、开发隔离和可移植工作负载

smolmachines 的微虚拟机 smolvm(基于 libkrun,与 Podman 共用底层)、podlet(compose 转 quadlet 的工具)、hetzner-podman-bunjs-deploy 模板项目等
molvm 比 Docker 容器隔离更强(独立内核),比 QEMU 虚拟机启动更快(<200ms),比 Firecracker 支持更多平台(macOS/Windows)。
二、技术架构
smolvm 的工作方式:
- 硬件虚拟化层------使用平台原生虚拟化后端:macOS 的 Hypervisor.framework、Linux 的 KVM、Windows 的 Windows Hypervisor Platform(WHP)
- VMM (Virtual Machine Monitor)------基于 libkrun,一个库形式的轻量 VMM,无需 QEMU 那样的独立守护进程
- 自定义内核 ------使用 libkrunfw 提供微 VM 专用内核,只包含运行容器化工作负载所需的最小内核模块
- 镜像格式------OCI 兼容,可以直接使用 Docker Hub / ghcr.io 上的任何容器镜像,无需额外转换
- 弹性内存------通过 virtio balloon 实现内存弹性分配,宿主机只提交 VM 实际使用的内存量,空闲时自动回收
三、解决问题
容器不够隔离
容器共享宿主内核,虽然轻量,但内核漏洞(如 Dirty Pipe、Dirty COW)可以突破 namespace 隔离。smolvm 给每个工作负载一个独立内核,硬件隔离由 Hypervisor.framework(macOS)、KVM(Linux)或 Windows Hypervisor Platform(Windows)保证
QEMU 太重了
QEMU 启动 15-30 秒,镜像管理复杂,不适合"临时跑一个命令就跑完"的场景。smolvm 冷启动 <200ms,用完即焚,体验像运行本地命令行一样自然。
跨平台便携难
你开发时在 macOS,CI 在 Linux,部署在 Windows------每个平台的虚拟化方案都不一样。smolvm 统一抽象为 smolvm machine run,而且可以把一台完整 VM 打包成 .smolmachine 在任意支持的平台上恢复。
四、与其他方案的对比
smolvm 的 README 自带了一张对比表,非常清晰
| 维度 | smolvm | Docker 容器 | Colima | QEMU | Firecracker | Kata |
|---|---|---|---|---|---|---|
| 隔离性 | 每工作负载独立 VM | namespace(共享内核) | namespace(1 个 VM) | 独立 VM | 独立 VM | 每容器 VM |
| 冷启动 | <200ms | ~100ms | ~秒级 | ~15-30s | <125ms | ~500ms |
| 架构 | 库(libkrun) | 守护进程 | 守护进程(在 VM 中) | 进程 | 进程 | 运行时栈 |
| 每工作负载 VM | ✔ | ✗ | ✗(共享) | ✔ | ✔ | ✔ |
| macOS native | ✔ | 需 Docker VM | ✔(krunkit) | ✔ | ✗ | ✗ |
| 可嵌入 SDK | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ |
| 便携制品 | .smolmachine |
镜像(需守护进程) | ✗ | ✗ | ✗ | ✗ |
核心差异:
-
Docker------启动最快,但隔离最弱(共享内核)
-
QEMU------功能最全,但启动最慢(15-30 秒)
-
Firecracker------启动最快(<125ms),但只支持 Linux,不适合 macOS 开发机
-
smolvm------在启动速度(200ms)和平台覆盖(三大桌面系统)之间取了最实用的平衡点
smolvm/
├── src/ # 主 CLI 入口
├── crates/
│ ├── smolvm-agent # VM 内部代理
│ ├── smolvm-network # 网络层
│ ├── smolvm-pack # 打包子系统
│ ├── smolvm-protocol # 宿主机-客户机协议
│ ├── smolvm-registry # OCI 镜像注册表交互
│ └── smolvm-smolfile # Smolfile 解析器
└── docs/
五、适用场景
| 场景 | 为什么用 smolvm |
|---|---|
| 临时运行不可信代码 | 硬件隔离 + 默认无网络 + 细粒度出站控制 |
| 构建便携开发环境 | .smolmachine 文件跨平台运行,无依赖 |
| CI/CD 任务隔离 | 次秒启动,用完即焚,不污染 CI 宿主机 |
| 本地开发与 CI 保持环境一致 | 同一 Smolfile 声明即可复现 |
| 短时容器化工作负载 | 比 Docker 隔离更强,比 QEMU 轻,代价适中 |
| 无 root 权限的场景 | OCI 镜像拉取 + libkrun VMM,无需 Docker 守护进程 |
参考资料
- smolvm README:完整文档和示例。→ https://github.com/smol-machines/smolvm
- libkrun:smolvm 使用的轻量 VMM。→ https://github.com/containers/libkrun
- libkrunfw:微 VM 自定义内核。→ https://github.com/smol-machines/libkrunfw