从零构建VMM:BoxLite为何取代libkrun

BoxLite:一个以可控性与极致轻量为目标、从零替代libkrun的开源microVM项目
BoxLite 是一个正在开发中的轻量级虚拟机监控器(VMM),作者以系列博客「从零构建VMM」记录其取代既有方案 libkrun 的全过程。libkrun 将 VMM 能力封装为可嵌入应用的动态库,曾被用于容器安全隔离等场景,但自研项目往往意味着对代码库更彻底的掌控、更激进的轻量化裁剪以及不受上游 API 约束的自由度。BoxLite 的出现契合了云原生时代 microVM 的整体趋势——在 Serverless、容器安全加固、边缘计算等场景中,业界普遍需要启动更快、内存占用更小、攻击面更窄的虚拟化方案。该系列博客同时具备教学价值,为希望深入理解 CPU 虚拟化扩展、virtio 设备模拟等底层机制的开发者提供了系统性的参考路径。
引言:一个新VMM项目的诞生
虚拟机监控器(VMM,Virtual Machine Monitor)是现代轻量级虚拟化技术的核心组件。近期开发者社区出现了一篇颇受关注的技术博客——《Building a VMM from scratch, #0: Why BoxLite is replacing libkrun》,作为「从零构建VMM」系列的开篇,它阐述了一个新项目 BoxLite 为何要替代既有的 libkrun 方案。

需要说明的是,本文基于该项目的公开介绍信息进行梳理与解读。由于原始素材主要为标题与社区讨论入口,以下内容聚焦于 VMM、libkrun 与轻量级虚拟化这一技术背景的解析,帮助读者理解此类项目的价值所在。
什么是VMM与libkrun
VMM:轻量虚拟化的底座
VMM 负责在宿主机与客户机操作系统之间进行资源的调度与隔离。与传统重量级虚拟机(如完整的 QEMU/KVM 栈)不同,近年来兴起的微型 VMM(microVM)更强调启动速度快、内存占用小、攻击面窄。AWS 的 Firecracker、Google 的 crosvm 等都是这一思路的代表作。
VMM 的实现依赖于硬件虚拟化扩展。Intel VT-x 引入了 VMX(Virtual Machine Extensions)指令集,将 CPU 运行模式分为 root mode(宿主机)和 non-root mode(客户机),使客户机可以直接执行大多数指令而无需 VMM 介入,仅在触发 VM-exit 事件(如 I/O 操作、特权指令)时才陷入 VMM 处理。AMD 的对应技术称为 AMD-V(SVM)。正是这一硬件机制让 microVM 得以在极低的性能损耗下提供接近原生的运行效率。Linux 内核中的 KVM(Kernel-based Virtual Machine)模块将这些硬件扩展暴露为 /dev/kvm 设备文件,用户态的 VMM(如 Firecracker、crosvm、libkrun)通过 ioctl 调用与 KVM 交互,从而在不编写内核驱动的情况下完成虚拟机的创建与管理。
libkrun 的定位
libkrun 是一个将 VMM 能力封装为动态库的项目,开发者可以将其嵌入自己的应用程序,从而以极低的开销运行隔离的工作负载。它常被用于容器安全隔离、沙箱执行等场景,Podman 等工具的部分安全特性便受益于类似思路。libkrun 的核心价值在于「以库的形式提供虚拟化」,让隔离能力可以像调用普通函数一样被集成。
libkrun 在架构上基于 Rust 编写,底层复用了来自 crosvm 的部分设备模拟代码,并通过 virtio 协议实现宿主机与客户机之间的高效 I/O 通信。virtio 是一套半虚拟化设备规范,客户机操作系统需要安装对应的 virtio 驱动,以换取比纯模拟设备高得多的网络和磁盘吞吐量。libkrun 的「以库形式嵌入」设计意味着调用方进程本身就是 VMM 宿主,这与将 QEMU 作为独立子进程启动的传统方式形成对比,进一步减少了进程间通信开销。然而,这种深度耦合也意味着上游 libkrun 的 API 变动或架构决策会直接影响嵌入它的应用,这正是某些团队选择自研替代方案的现实原因之一。
BoxLite为何要替代libkrun
从「Building a VMM from scratch」这一标题可以推断,BoxLite 的作者选择了「从零自研」而非继续基于 libkrun 构建。这类技术决策通常源于几个方面的考量:
- 可控性:自研 VMM 意味着对代码库拥有完全掌控,便于按需裁剪功能、优化性能,不受上游依赖的制约。
- 轻量化:如项目名「BoxLite」所暗示,追求更小的体积与更低的运行开销可能是核心目标之一。
- 可维护性与学习价值:从零构建的过程本身也是对虚拟化底层机制的深度梳理,系列化的博客(从 #0 编号开始)表明作者有意将其作为一个教学与实践并重的长期项目。
在轻量虚拟化领域,「替代既有方案」往往不是因为旧方案不好,而是新项目希望在特定维度(如启动延迟、内存足迹、API 设计)上做出更契合自身需求的取舍。
自研VMM的技术意义
对开发者社区的价值
一个公开、系列化、从零讲解 VMM 构建过程的项目,对想要理解虚拟化底层原理的开发者极具参考价值。虚拟化涉及 CPU 虚拟化扩展(如 Intel VT-x、AMD-V)、内存管理、设备模拟(virtio)、中断处理等诸多复杂环节,市面上成体系的「手把手」教程并不多见。
轻量VMM的趋势
microVM 的流行反映了云原生时代对「安全隔离」与「启动性能」双重诉求的平衡。Serverless 函数计算、容器安全加固、边缘计算等场景都在推动更轻、更快、更安全的 VMM 方案不断涌现。BoxLite 的出现正是这一趋势的延续。
衡量 microVM 性能的关键指标通常包括:冷启动时间(从调用创建接口到客户机内核准备就绪)、内存开销(VMM 自身占用的宿主机内存)以及 TCB(Trusted Computing Base,可信计算基)大小。Firecracker 官方数据显示其冷启动时间可低至 125 毫秒,内存开销约为每虚拟机 5 MB。精简 TCB 意味着减少攻击面——相比完整 QEMU 动辄数百万行代码,microVM 通常只实现少数几种 virtio 设备(net、block、vsock),拒绝支持 USB、PCI 热插拔等复杂特性,以换取更高的安全可审计性。这一设计哲学直接影响着 BoxLite 此类新项目的功能边界选择。
结语
BoxLite 替代 libkrun 的决定,体现了开发者在轻量虚拟化领域对「自主可控」与「极致轻量」的追求。对于关注系统底层与虚拟化技术的读者,持续跟踪这一「从零构建 VMM」系列将是了解现代 microVM 实现细节的良好窗口。建议感兴趣的读者查阅项目原文及其后续更新,以获取完整的技术实现细节。
相关推荐

ChatGPT Space 发布:团队协作与 Pages 新功能解析
ChatGPT Space 是 OpenAI 推出的团队协作新功能,核心包含 Pages 页面、实时协作和 Slack/Google Drive 数据同步。本文解析其隐私设计、多平台集成与从对话到文档的完整工作流,帮助团队理解如何用 AI 统一项目管理与内容创作。

用AI Agent将Apache Spark UDF迁移到GPU加速
NVIDIA 开发者博客介绍如何用 AI Agent 将 Apache Spark UDF 重写为 GPU 加速版本,涵盖可迁移算子的判断标准、Agent 改写与验证流程,以及结果一致性、CPU-GPU 传输开销等落地陷阱。

Zed 编辑器 v0.40.4-rc2 发布:无需升级即可使用启动额度
Zed 编辑器发布 v0.40.4-rc2 候选版本,核心改动是允许用户在不升级付费计划的情况下使用启动额度(usage credits)调用 AI 功能,降低试用门槛。