Fable 5仅用38分钟编写Windows内核
速览
Fable 5在短短38分钟内成功编写了Windows内核代码,这一速度远超传统开发周期。该成果展示了当前AI在复杂系统编程领域的巨大潜力。它标志着AI辅助开发工具在底层系统构建方面取得了突破性进展。
AI 深度解读
Fable 5 在 38 分钟内编写 Windows 内核:AI 代码生成的里程碑
背景
近期,一项名为 ntoskrnl-rs 的项目在 Hacker News 上引发了广泛关注。该项目旨在用 Rust 语言重写 Windows NT 内核(ntoskrnl)。经过数周的开发,该项目从一个空目录起步,最终成功在 QEMU 模拟器中启动,并通过了所有自测用例。
在这个过程中,开发者中途切换了 AI 模型。其中,Claude 的 Fable 5 模型展现了惊人的效率,仅用 38 分钟便完成了从空白目录到成功启动内核的核心工作。这一成果不仅让开发者实现了“氛围编程(vibe coding)”Windows 内核的愿望,更标志着 AI 在生成复杂基础设施软件方面迈出了实质性的一步。
核心内容
38 分钟的核心突破
Fable 5 的工作是一次连续的、不间断的运行。虽然整个过程的墙钟时间(wall-clock time)约为 4.5 小时,但大部分时间是开发者离开键盘的时间。模型实际执行代码生成和调试的时间仅为 38 分钟。Fable 模型专为处理此类长时、高难度的单次请求而设计。
执行流程:
- 任务规划:Fable 首先根据依赖关系创建了自己的任务列表,其子系统布局完全复制了
ntoskrnl的结构。 - 执行计划:模型按顺序执行计划。在 14:07,它设置了 QEMU 中的首次启动,称之为“关键时刻”。
- 成功启动:几分钟后,内核成功启动。串行端口打印出 14 个
[ OK ]自测结果,最终以退出代码 33 结束,表示所有自测通过。
自测结果示例:
[ OK ] Mm: pool allocations succeed[ OK ] Ke: KeDelayExecutionThread sleeps >= requested[ OK ] Io: null.sys DriverEntry + IoCreateDeviceALL SELF TESTS PASSED
自主修复 Bug: 在生成过程中,Fable 5 无需人工监督便修复了多个关键 Bug,展现了系统级的推理能力而非简单的模式匹配:
- 中断处理:发现必须在潜在上下文切换之前发出中断结束(EOI)信号,否则会导致本地中断控制器死锁。
- IRQL 模拟:初始测试 11/12 通过,发现中断请求级别(IRQL)模拟使用了跨测试线程的全局原子变量。模型推理出应像真实 CPU 任务优先级寄存器一样使用线程局部变量(
thread_local),修复后达到 12/12 通过。 - 未定义行为:验证了发布版本也能启动,并指出链接时优化(LTO)可能暴露底层代码中的潜在未定义行为。
- 代码清理:清除了函数转换警告和
main.rs中遗留的 stray attribute。
最终,Fable 总结道:ntoskrnl-rs 是一个工作正常的 NT 兼容内核,用 Rust 编写,共 27 个文件约 5,100 行代码,在调试和发布版本中均能通过自测。
超越启动:从内核到系统
这 38 分钟生成的内核是刻意最小化的,仅包含驱动自测所需的线程、调度和分发器,没有用户模式,无法加载或运行外部程序。但这仅仅是开始。
在接下来的几天里,该项目在受限步骤中逐步扩展,最终具备了更强大的能力:
- 加载真实驱动:能够加载未经修改的 Windows 内核驱动程序(PE 二进制文件),这些文件使用 Microsoft 工具链构建,并与真实的
ntoskrnl.exe导出表面绑定。这测试了定时器、DPC、事件和 I/O 请求路径。 - 进入用户模式:项目跨入用户模式,现在可以运行未经修改的 Microsoft 二进制文件,如
sort.exe、choice.exe和where.exe均能完整运行。cmd.exe也能加载并运行命令循环。 - 技术栈构建:这一过程涉及 PE 加载器、用户模式边界、动态链接层(将二进制文件的导入绑定到手写的
kernel32和msvcrt垫片)、SMEP/SMAP 保护、RAM 文件系统、注册表、进程原语以及一个内核级调试器。
值得注意的是,核心的 38 分钟工作由 Fable 5 完成,而后续为期八天的复杂调试和扩展工作则由另一个模型完成。
关键要点
- 可信计算基(TCB)的生成:AI 模型生成了真实 x86_64 内核的可信计算基,包括调度器、内存管理器、陷阱和中断机制、对象管理器和 I/O 管理器。TCB 是系统必须绝对信任的组件集合,任何错误都会导致上层安全失效。
- 推理而非匹配:模型在生成过程中进行的修正(如中断处理逻辑、IRQL 线程局部化)表明,它是在对系统进行推理,而不仅仅是进行代码模式匹配。
- 内核与驱动的区别:编写驱动程序与编写内核是截然不同的问题。驱动程序是叶子组件,依赖于受信任的内核;而内核本身是 TCB,没有任何受信任的底层支撑,任何错误都是 Ring-0 级别的严重错误。
- 沙箱潜力:一个完全由 AI 编写且可控的内核,结合真实的 Windows 驱动程序,构成了一个“墙壁掌握在手中”的沙箱。由于驱动程序的所有调用都穿过开发者编写的边界,因此可以对其进行追踪、故障注入、快照或拒绝。
- 基础设施软件的未来:这一事件提出了一个开放性问题:AI 生成内核的能力说明了基础设施软件的未来走向是什么?在信任任何 AI 生成的基础设施之前,必须满足哪些条件?
意义与影响
1. 动态分析与安全研究的范式转变
传统上,分析 Windows 内核驱动程序是在真实、不透明且受信任的 Windows 内核上进行的。而 ntoskrnl-rs 提供了一个全新的视角:一个完全由 AI 编写、完全可仪器化(instrumented)的内核。
- 透明性:由于内核代码是 AI 生成的,其内部逻辑完全透明。
- 可控沙箱:开发者可以精确控制驱动程序与内核交互的每一个边界,实现动态分析、追踪和故障注入。
- 内核级调试器:项目中内置的内核级调试器能够追踪每个二进制文件向内核请求的内容及其返回值,这为内核模式代码的安全研究提供了强大的新工具。
2. Rust 在系统编程中的成熟
该项目证明了 Rust 语言在编写操作系统内核方面的可行性。通过 ntoskrnl-rs,开发者展示了 Rust 在处理内存安全、并发(如调度器和 DPC 路径)以及硬件 ABI(如 IA32_STAR 选择器布局和 CR8 到任务优先级寄存器的映射)方面的能力。这为 Linux 和 Windows 平台上用 Rust 编写内核驱动及内核本身提供了重要的实践参考。
3. AI 代码生成能力的边界拓展
Fable 5 在 38 分钟内从空白生成可启动内核,展示了大型语言模型(LLM)在处理长上下文、复杂依赖关系和底层硬件逻辑方面的巨大潜力。尽管后续扩展使用了其他模型,但核心突破表明,AI 已经能够处理传统上被认为需要深厚领域知识和长期人工维护的基础设施软件。
4. 信任与挑战
尽管成果令人印象深刻,但“信任”问题依然存在。AI 生成的内核虽然通过了自测,但在实际生产环境中,其安全性、稳定性和对边缘情况的处理能力仍需严格验证。这一项目更多是一个概念验证(Proof of Concept),展示了 AI 辅助系统编程的可能性,而非立即替代人类工程师构建生产级操作系统的方案。
