大家好,我是何三,独立开发者
近 1000 Star,冷启动不到 200ms,一个命令就能跑起一个完全隔离的虚拟机——而且还能打包成单个文件,丢到任何机器上直接跑。
Docker 没做到的事,它做了。
这个项目叫 smolvm,Rust 写的,昨天直接冲上 Hacker News 首页第一名,241 points。我昨晚看到的时候 Star 才 800 多,今天早上再一看,快破千了。
Docker 的老毛病
说句实话,Docker 我天天用。但有几个痛点一直膈应我:
一是冷启动慢(虽然比 VM 快多了,但跟原生跑还是差一截),二是它本质上还是共享内核的 namespace 隔离,安全敏感的场景不够硬,三是在 Mac 上还得套一层 Linux VM,更慢更重。
QEMU 倒是真正的硬件级隔离,但冷启动 15-30 秒?我等不了。Firecracker(AWS 那个 microVM)启动确实快,但它不支持 macOS,且面向的是云场景,本地开发用起来别扭。
smolvm 想解决的就是这个问题:要 VM 级的隔离,要容器级的速度,还要能跨平台打成一个文件带走。
它怎么做到的
原理其实不复杂(我是说大概的方向,深层的 libkrun 那块我没细看):
每个 workload 都会分配一个独立的 Linux 内核,跑在 macOS 的 Hypervisor.framework 上(Linux 上走 KVM)。VM 和宿主之间有硬件级别的隔离边界——文件系统、网络、凭证全部隔开。
翻译成人话就是:你在 smolvm 里跑的代码,即使是个恶意程序,它也碰不到你宿主机的任何东西。
关键在于它用了 libkrun 做 VMM,并且定制了一个极简内核 libkrunfw。内核够小,启动就够快——实测冷启动 <200ms,和 Docker 差不多,但隔离级别高了整整一个层级。
还有个细节挺有意思:默认 4 vCPU + 8GB 内存分配给 VM,但内存是弹性的(通过 virtio balloon),用了多少算多少,没用的自动还给宿主。vCPU 线程空闲的时候直接在 hypervisor 里 sleep,所以你同时跑 10 个 VM 也没什么负担。(我试了下,风扇确实没转。)

上手体验
安装一条命令:
curl -sSL https://smolmachines.com/install.sh | bash
装完了。没报错。神奇。
跑个试试:
smolvm machine run --net --image alpine -- sh -c "echo 'Hello from microVM' && uname -a"
输出 Hello from microVM,后面跟了一串 Linux 内核版本号。整个过程体感不到半秒。
更有意思的是它的沙箱模式——网络默认关闭:
smolvm machine run --image alpine -- ping -c 1 1.1.1.1
# 直接失败,没有网络
你要是不放心,可以只放行特定域名:
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
# 失败,不在白名单
这种细粒度的网络控制,Docker 原生做不到这么干净。
打包成单文件
这个功能我觉得最猛:
smolvm pack create --image python:3.12-alpine -o ./python312
./python312 run -- python3 --version
# Python 3.12.x,完全隔离,不需要 pyenv、venv、conda
一个 .smolmachine 文件,里面啥都有(内核、rootfs、你的代码),丢到任何支持的机器上直接跑,零依赖。这在分发工具和 CI/CD 场景下,比 Docker 镜像还方便——至少不需要装个 Docker daemon。
他们甚至跑了个 DOOM 的 demo。DOOM。在一个微虚拟机里。(话说现在什么项目都要跑一下 DOOM 才算合格是吧。)
Smolfile:声明式配置
跟 Dockerfile 类似,但用的是 TOML:
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 就能创建环境。SSH Agent 转发也支持——在 VM 里用你的私钥拉私有仓库,但密钥本身不会进入 guest。hypervisor 硬保证。
跟同类比比
| smolvm | Docker | QEMU | Firecracker | |
|---|---|---|---|---|
| 隔离级别 | 独立内核 | 共享内核 | 独立内核 | 独立内核 |
| 冷启动 | <200ms | ~100ms | 15-30s | <125ms |
| macOS 原生 | ✅ | 套 VM | ✅ | ❌ |
| 打包成单文件 | ✅ | 需 daemon | ❌ | ❌ |
| 嵌入式 SDK | ✅ | ❌ | ❌ | ❌ |
基本上它站在了 Docker(快)和 QEMU(隔离)的交叉点上。Firecracker 虽然更快一点(125ms),但不支持 macOS,且定位是 serverless 场景,不是给你本地开发用的。
话说回来,容器和 VM 这两个赛道打了这么多年,现在终于有人想把两者的优点揉在一起了。
谁适合用
- 跑不信任的代码——比如用户上传的脚本、第三方依赖的安装脚本,丢进 smolvm 里跑,放心。
- 需要强隔离的开发环境——多项目不同依赖,用 VM 隔离比 Docker 更干净。
- 分发工具——打包成单文件,接收方不需要装任何东西。
但也有局限:网络只支持 TCP/UDP(ICMP 不行),macOS 上二进制需要签名才有 Hypervisor 权限,Linux 上需要 KVM。如果你要的是完整的虚拟化能力,还是得老老实实用 QEMU。
延伸阅读
对 microVM 和轻量级虚拟化感兴趣的话,这几个项目值得看看:
- Firecracker(AWS 出品,serverless 场景的 microVM 标杆)
- libkrun(smolvm 底层用的 VMM 库,Red Hat 维护)
- Colima(macOS 上的轻量容器运行时,不过基于 Lima)
如果对这类工具有兴趣,我此前还整理过《2025 年 GitHub 高性能神器排行榜》,关注后回复「工具」获取。
smolvm 这个项目,简单说就是——用 Docker 的速度,给你 VM 级别的安全感。目前还比较早期(近 1000 Star,23 个 open issues),API 可能还会变。但方向是对的,Rust 写的,代码质量不错,值得 star 一下蹲个后续。
本文使用 MGO 编辑并发布
关注"何三笔记",回复"mgo" 免费下载使用