让 AI 帮你一行一行「验」操作系统的代码:arXiv 2609.04043 在 77 天里抓出 9 个真实内核 bug
- 关联论文:2609.04043
你有没有想过——你手机里、汽车里、银行服务器上跑的操作系统内核,几十万行 C 代码,到底有没有 bug?
传统答案是:「靠测试、靠 review、靠时间慢慢磨出来」。这是过去 50 年的现实:哪怕是 seL4 这样号称"经过形式化验证"的内核,也只能证明到「C 源码 → 中间汇编语义」这一层就停步了——再往下钻到 MMIO、TLB、cache 一致性、特权级切换、DMA 这种「硬件亚指令级」的细节,验证状态空间直接爆炸,靠人写证明是数人年级别的工作量。
2026 年 9 月这篇来自 arXiv 2609.04043(MachCSL) 的论文说:这件事现在可以由「AI agent 写证明 + 人类收口 invariant」一起做了——而且只花了 77 天。
一句话故事
他们让一个 LLM agent 沿着 Sail RISC-V 形式化语义逐行验证 xv6 操作系统的 6,593 行内核代码,77 天里抓出 9 个真实 bug——其中 1 个 bug 不在内核里,而在 RISC-V 的形式化硬件语义里。
这件事的意义不只是"找到一个 OS bug"——它证明了 "硬件级形式化验证 + LLM agent 协同" 这条工程路线是可行的,能把过去要 100 人年的工作压到 77 天。
为什么这件事值得大众关注
这件事离普通人并不远——你每天用的每一台手机、每一台服务器、每一辆智能汽车,底层都跑着一个操作系统内核。内核里任何一个内存安全 bug、并发 bug,都可能变成:
- 📱 手机:越狱 / 远程代码执行
- 🚗 汽车:自动驾驶系统被攻击、刹车失灵
- 🏦 金融:服务器被提权、内网横向移动
- 🛰️ 关键基础设施:电网、电信、轨道交通的连锁故障
过去 50 年,内核 bug 是「测试覆盖率的军备竞赛」,大家比的是谁 fuzz 得更狠、谁 review 得更细。MachCSL 的故事在说:这件事现在有了新打法——让 AI 一行一行「验」你的内核代码,把「证明这件事绝对不会出错」做到硬件亚指令级。
xv6 是什么?为什么挑它?
xv6 是 MIT 教学用的 Unix-like 操作系统内核,6,593 行 C + 汇编,麻雀虽小、五脏俱全:
- 进程调度
- 文件系统
- 文件描述符
- 抢占式调度
- 多核 + 细粒度锁
- 中断处理
- DMA + 共享内存
它不是「玩具」——它是真实的、可运行的、有教学历史 20 年的真实内核。它的「小」反而适合做这种端到端验证实验。
MachCSL 三层架构:一行一行「验」到底层硬件
MachCSL 不是"重写一套验证框架",而是把三个已有的东西叠在一起:
| 层 | 做什么 | 谁的工作 |
|---|---|---|
| Mach 层 | 把 Sail RISC-V 形式化硬件语义直接暴露成一阶逻辑断言(PC、寄存器、CSR、页表、TLB、特权级标记、待处理中断队列……) | 论文贡献 |
| CSL 层 | 基于 Iris 并发分离逻辑,把 RISC-V 低层硬件细节包成「机器断言 + 机器资源所有权」——「这块物理页属于设备」「这段 PTE 链当前由 SMode 进程 A 拥有」「这个中断向量归属核 0」 | 论文贡献(Iris 扩展) |
| AI agent 层 | 给 LLM agent 一组 Sail 状态查询 + 证明 tactic 库 + 反例回放,作为「子证明外包」工具——人在上面定 invariant,agent 在下面自动搜索 strategy | LLM + tactic 库 |
可信基(trusted computing base) 只到 3 项: 1. Sail 形式化语义本身 2. MachCSL 框架代码 3. 最终的 xv6 kernel 源码
不包括 agent 写的所有中间证明步骤——这些步骤要么被自动重证、要么可重放。
关键数据:77 天、9 + 1 个 bug
| 维度 | 数字 | 含义 |
|---|---|---|
| 验证对象 | xv6 kernel | 6,593 行 C + 汇编 |
| 验证覆盖 | 单核 + 多核 / 抢占 / 中断 / DMA / 共享内存 | 接近真实内核复杂度 |
| 总耗时 | 77 天 | 含 MachCSL 框架开发本身 |
| xv6 bug | 9 个真实 bug | 在已有 xv6 实现中 |
| Sail 语义 bug | 1 个 | 在 RISC-V 形式化语义里 |
9 + 1 这两个数字是这个故事最戏剧性的部分:
- 9 个 xv6 bug——说明即便是 MIT 教学用、被几代学生读过无数遍的代码,依然藏着 bug;这就是"用 AI 一行一行验"的价值。
- 1 个 Sail 语义 bug——说明 RISC-V 形式化硬件语义本身也第一次被压力测试,这件事在工程意义上是反向验证了「硬件规格不是真理,也有 bug」。
为什么 AI agent 写证明可行?关键设计
@machine_invariant("vmisolation")
def proof_kernel_line(line):
pre = mach_state(line.before) # 机器状态:regs, csr, tlb, ppn, mmu
act = sail_step(pre, line.code) # Sail 语义走一步
post = mach_state(line.after)
assert sep_logic_derive(pre, post, # Iris 派生的分离逻辑 step
invariants=[vm_iso, lock_free, irq_owner])
return agent_search(inv=invariants, # 用 LLM agent 找分情况证明
tactics=tactic_lib,
max_iters=200)
这里的设计哲学是「人设 invariant,agent 找 strategy」:
- 人类证明者负责关键 invariant——「虚拟内存隔离」「锁无死锁」「中断归属」
- AI agent 负责繁琐分情况证明——「这一行代码在 case A、case B、case C 下分别怎么证明」
- 错误有 Sail 语义兜底——agent 写错的中间步骤,Sail 会暴露反例
这种分工避免了「全自动验证」不切实际的期待,又比"全手工证明"快几个数量级。
这件事的工程边界(必须看清)
⚠️ 不神化,但要重视:
- 77 天包含框架开发——这不只是"验证 xv6",还包含"做出 MachCSL 框架"本身的时间。框架未开源,独立复现成本极高。
- 依赖栈门槛高——Sail RISC-V 语义 + Coq ≥8.17 + Iris ≥4.0 + 训练有素的 Coq proof engineer(年薪比普通 SDE 高 30-50%)。不是"装个包就能跑"。
- 适用性窄——主要适用 RISC-V(Sail 已有完整 ISA 语义);x86 / ARM 部分支持,覆盖度远不及 RISC-V。
- 9 个 bug 的具体严重度未披露——是死代码路径、性能问题、还是安全/内存安全 bug?这些都决定了「对真实安全关键系统的覆盖能力」。
- 77 天对比基准——seL4 公开数据是按行数算约 20 人年,但 MachCSL 没给"同类任务手工时间"精确对照。「77 天 vs 20 人年」是定性比较,不是定量结论。
这件事的方法学价值:远不止 OS 内核
MachCSL 的「Sail 语义作可信硬件模型 + 分离逻辑框架 + AI agent 写证明」三层模板,可以直接搬到:
- 🛡️ TEE(可信执行环境)——SGX / TrustZone / RISC-V Keystone 的形式化验证
- 🔌 设备驱动——DMA 控制器、网络卡、GPU 驱动的安全性证明
- 📡 Hypervisor——云原生虚拟化层的形式化验证
- 🤖 机器人控制内核——ROS 2 / 实时控制系统的内存安全证明
- 🪖 军事 / 航空嵌入式系统——DO-178C / MIL-STD 安全关键软件的硬件-软件联合验证
任何「软件 + 硬件联合形式化验证」 的场景,都能从这套范式里借鉴。
一句话总结
77 天,6,593 行 OS 内核,9 个真实 bug + 1 个 RISC-V 硬件语义 bug——这不是「AI 全自动验证内核」的童话,而是「人定 invariant、AI 写证明、Sail 兜底」的工程现实。它把过去要 100 人年的工作压到了几个月,并第一次让硬件亚指令级内核验证跑通了完整流水线。
如果你是形式化方法研究者、OS / hypervisor 工程师、RISC-V 软硬件协同设计者,这件事值得读 5 篇相关论文;如果你是关心 AI for Engineering 范式转移的从业者,这件事至少值得收藏——它证明了一件事:「AI 嵌入形式化工作」已经从论文里的设想变成了可量产的工程流程。
三个标题变体
- 数字钩子版:77 天 / 6,593 行 / 9 个真实 bug——arXiv 2609.04043 用 AI 验证了 xv6 内核
- 拟人化版:让 AI 一行一行「验」操作系统代码:arXiv 2609.04043 在 77 天里抓出 9 个真实内核 bug
- 类比版:相当于把操作系统内核的每一行代码送进「数学法庭」——这次 AI 当了 77 天法官
📱 小红书风格卡片文案(直接可用)
🛡️ 你手机里跑的那个操作系统内核,到底有没有 bug?
过去的答案是:靠测试、靠 review、靠时间慢慢磨。seL4 这样的"已验证内核"也只能证明到"源码 → 中间汇编"那一步就停下来了——再往下到 MMIO / TLB / DMA / 特权级,验证状态空间爆炸,靠人写证明是数人年工作量。
2026 年 9 月这篇论文(arXiv 2609.04043 · MachCSL)说:这件事现在可以让 AI 帮你做了。
📖 怎么做的?三层叠加:
1️⃣ Mach 层:把 Sail RISC-V 形式化硬件语义直接暴露成逻辑断言——这是"硬件级真理" 2️⃣ CSL 层:用 Iris 并发分离逻辑把 RISC-V 的页表、TLB、中断归属打包成"机器所有权断言" 3️⃣ AI agent 层:让 LLM 在「机器断言 + tactic 库 + 反例回放」里自动搜索证明 strategy
✅ 人类定 invariant,AI 写繁琐证明——这个分工比"全自动验证"现实得多
📊 实测数据: - 验证对象:xv6 内核(6,593 行 C + 汇编,单核 + 多核 / 抢占 / 中断 / DMA) - 总耗时:77 天(含 MachCSL 框架开发) - 发现 9 个真实 xv6 bug + 1 个 RISC-V 形式化硬件语义 bug 🤯
🤯 1 个 Sail 语义 bug 这个数字戏剧性最强——连 RISC-V 的"硬件规格"自己都被压力测试了一遍
⚠️ 但生产前必须看清的 5 个边界:
- 77 天含框架开发——不只验证,还包含造框架
- 依赖栈门槛高——Sail + Coq ≥8.17 + Iris ≥4.0 + 资深 Coq 工程师(年薪 +30~50%)
- 适用性窄——主要 RISC-V(Sail 已覆盖),x86 / ARM 覆盖远不及
- 9 个 bug 严重度未披露——死代码?性能?还是安全/内存安全?
- 框架未开源——独立复现成本极高
💡 方法学价值远超 OS 内核:这套「Sail 硬件语义 + 分离逻辑框架 + AI agent 写证明」模板,可以搬到: - 🛡️ TEE 可信执行环境(SGX / TrustZone / Keystone) - 🔌 设备驱动安全性证明 - 📡 Hypervisor 形式化验证 - 🤖 机器人实时控制系统 - 🪖 航空 / 军事安全关键软件
🎯 适合谁读: - 形式化方法研究者(Iris / Coq / Lean 用户尤其相关) - OS / hypervisor / 安全关键固件工程师 - RISC-V 软硬件协同设计者 - 关注 AI for Engineering 范式转移的研究者
📌 一句话:让 AI 一行一行「验」操作系统代码——不是 AI 全自动验证内核,而是「人定 invariant、AI 写繁琐证明、Sail 兜底」。这件事把过去要 100 人年的工作量压到几个月,并第一次让硬件亚指令级内核验证跑通了完整流水线。
🔔 评论区聊聊:你见过哪些「AI + 形式化方法」的真实工程案例?学界 vs 工业界,哪个跑得更远?