让 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 会暴露反例

这种分工避免了「全自动验证」不切实际的期待,又比"全手工证明"快几个数量级。

这件事的工程边界(必须看清)

⚠️ 不神化,但要重视

  1. 77 天包含框架开发——这不只是"验证 xv6",还包含"做出 MachCSL 框架"本身的时间。框架未开源,独立复现成本极高。
  2. 依赖栈门槛高——Sail RISC-V 语义 + Coq ≥8.17 + Iris ≥4.0 + 训练有素的 Coq proof engineer(年薪比普通 SDE 高 30-50%)。不是"装个包就能跑"。
  3. 适用性窄——主要适用 RISC-V(Sail 已有完整 ISA 语义);x86 / ARM 部分支持,覆盖度远不及 RISC-V。
  4. 9 个 bug 的具体严重度未披露——是死代码路径、性能问题、还是安全/内存安全 bug?这些都决定了「对真实安全关键系统的覆盖能力」。
  5. 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 嵌入形式化工作」已经从论文里的设想变成了可量产的工程流程


三个标题变体

  1. 数字钩子版:77 天 / 6,593 行 / 9 个真实 bug——arXiv 2609.04043 用 AI 验证了 xv6 内核
  2. 拟人化版:让 AI 一行一行「验」操作系统代码:arXiv 2609.04043 在 77 天里抓出 9 个真实内核 bug
  3. 类比版:相当于把操作系统内核的每一行代码送进「数学法庭」——这次 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 个边界

  1. 77 天含框架开发——不只验证,还包含造框架
  2. 依赖栈门槛高——Sail + Coq ≥8.17 + Iris ≥4.0 + 资深 Coq 工程师(年薪 +30~50%)
  3. 适用性窄——主要 RISC-V(Sail 已覆盖),x86 / ARM 覆盖远不及
  4. 9 个 bug 严重度未披露——死代码?性能?还是安全/内存安全?
  5. 框架未开源——独立复现成本极高

💡 方法学价值远超 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 工业界,哪个跑得更远?

操作系统 #内核 #形式化验证 #AI工程 #RISC-V #Sail语义 #并发分离逻辑 #Iris #Coq #xv6 #AI编程 #AI论文 #形式化方法 #LLM #硬件软件协同 #arXiv2609.04043