在开源软件的世界里,如果说有什么事情能让整个技术圈瞬间屏住呼吸,那一定是,Linus Torvalds 亲自下场写内核驱动补丁了。
作为 Linux 之父,Linus 日常主要负责审阅代码、合并补丁,偶尔在邮件列表里对烂代码开火。能让他亲自打开编辑器、敲代码、甚至写下内核驱动修复的场景,近年来几乎屈指可数。
然而,2026 年 8 月下旬,一条由 Linus 本人署名的补丁突然空降 Linux 内核主线仓库。
▲ Linus Torvalds 提交的修复补丁全文归档,附言记录了他与 AI 的“地狱级调试”
整个过程耗费了 24 个调试补丁、经历 18 次内核重启,也成了人类顶级工程师与现代大语言模型(AI)之间充满火药味的硬核拉锯战。
在排查这个极其诡异的显卡黑屏 Bug 时,被抓来当助手的 AI 多次表示无法继续,甚至劝 Linus:“这个问题根本不可能解决,它是无解的,我们放弃吧,写份故障报告算了。”
Linus 没有放弃他顶着 AI 的疯狂劝退,硬生生带着 AI 杀穿了底层显存管理机制,最终定位出真凶,仅仅是一行代码里,把一个向下的取整函数误写成了向上取整!
随后,这位开源教皇不仅反手修复了这行代码,还把写最终技术总结的苦力活甩回给了 AI,并在提交记录里留下了一句足以载入史册的辛辣嘲讽:
“我怀疑,训练这帮 AI 的人,根本没有我这么固执。”
幽灵黑屏:一台 16G 显卡引发的惨案
这场灾难始于一台搭载 Intel Xe 架构 Battlemage G21 独立显卡(16 GiB 显存)的测试机。
现象极其折磨人:只要电脑冷启动,GNOME 桌面管理器(gdm)就会陷入疯狂的崩溃与重启死循环,屏幕漆黑一片。
▲ 科技媒体 It's FOSS 报道:Linus 罕见亲自写补丁,并用 AI 协助完成了繁重的调试工作
诡异的是,这台电脑并未彻底死机只要你不断强行重启 gdm,有时候它又会突然“碰巧”点亮进入桌面。这让整起故障看起来像极了某种随机的硬件体质玄学,或者偶发性的桌面软件冲突。
但作为底层操作系统的缔造者,Linus Torvalds 从来不相信“玄学”。
为了搞清楚为什么桌面合成器一启动就会暴毙,Linus 开启了这场调试长征。他找来 AI 当辅助工具,让它充当自己的“数字小工”,负责自动生成内核插桩代码、打印日志、分析内存状态。
然而,内核图形驱动(drm/xe)的复杂度远超普通应用开发。整个 Linux 桌面显示链路极其漫长:从底层的硬件固件、显存分配器、内核驱动,到用户态的 Mesa 驱动、窗口合成器,环环相扣。
随着调试深入,AI 被海量底层寄存器状态和混乱的内存表现搞得晕头转向。在连续排查碰壁后,AI 的大模型逻辑彻底陷入死胡同,数次对 Linus “举白旗投降”:“这在逻辑上是不可能的,这个 Bug 无法修复,我们应该写份报告放弃。”
▲ 社交平台热议:在 Linus Torvalds 面前,就算是 AI 也不准轻言放弃
如果换成一个普通开发者,面对 AI 如此笃定的“无法解决”,很可能就此罢手把锅甩给硬件厂商。
但站在屏幕前的是 Linus他毫不留情地驳回了 AI 的退堂鼓,按着 AI 的头继续给内核插桩、打印内存。在经历了足足 24 轮补丁迭代和 18 次重启之后,显卡底层那场隐秘的“幽灵谋杀案”终于浮出水面。
致命两千字节:把“仓库账本”当成“货架”出租
理解这个 Bug 无须钻进复杂的编译原理,一个生活化的比喻就足够了。
现代高性能显卡为了极致的图形性能,内部都自带一种叫做 CCS(Color/Compression Control Surface,颜色压缩控制表面) 的硬件技术。
你可以把显卡上 16 GiB 的超大显存想象成一个巨大的现代化物流仓库:
- 普通显存(VRAM):就是仓库里用来堆放货物的标准货架(存放画面像素、着色器指令、3D模型);
- CCS 压缩元数据:则是仓库管理员手里的防伪账本。为了加速货物周转,显卡硬件压缩引擎会专门在显存里划出一块极小的专属私密领地,用两三个字节的“账本标记”,来记录后面一大串货物是否被压缩。
划重点:这个“账本区”是 GPU 硬件引擎直接掌控的特权领地,绝对不能当成普通货架租给应用程序!
▲ 技术大 V 整理事件脉络:一行取整错误导致页表被硬件静默覆盖,进而引发桌面黑屏
在 Intel 的 Xe 驱动代码中,有一个函数叫 get_flat_ccs_offset(),它的核心任务就是给仓库“画边界”:算清楚账本区从哪里开始,前面剩下的普通货架才能交由操作系统分配。
当时的代码计算出的账本物理基地址是:0x3fafff800。
为了让内存地址对齐硬件要求的 128KB 边界,驱动调用了一个向上取整函数 round_up(),把基地址硬生生抬高到了 0x3fb000000。
几何灾难就在这一刻发生了!
向上取整这一抬,导致物理地址在 0x3fafff000 这一页最后的 2 KB 内存空间,明明实际上属于硬件账本区,却被操作系统误以为是“还没用完的可用显存”,大大方方地塞进了操作系统的可用内存池里!
这等于仓库主管大手一挥,把账本的最后一页撕下来当成了普通空货架,租给了租户。
接下来的连锁反应堪称灾难级:
- 电脑冷启动,GNOME 桌面合成器兴冲冲地向显卡申请显存,用来存放极其核心的三级页表(GPU 访问虚拟内存的“地图导航”);
- 分配器恰好就把这片包含“撕下来的账本”的内存,分配给了页表;
- 桌面刚要渲染第一帧画面,底层的显卡压缩引擎突然自动激活,硬件不管三七二十一,直接霸道地往自己的“账本区”里强行刷入压缩元数据;
- 合成器的页表瞬间被硬件篡改!Linus 后来在内存 Dump 里抓到了那一串串幽灵般的
0xcccc... 和 0xcc77... 元数据指纹; - GPU 拿着被撕碎篡改的地图去寻址,瞬间迷失方向,合成器当场暴毙,gdm 显示管理器彻底崩溃黑屏!
驱动里原本写了一道防御性检查(断言)来防止越界,但因为断言本身也是基于 128KB 对齐后的数字去比较,这道安全锁被完美绕过,形同虚设!
终极一刀:一行代码的翻转与 AI 的“认罪书”
搞清了所有来龙去脉后,整个看似毁天灭地的 Bug,修复方案居然简单得令人发指。
Linus 在 xe_vram.c 文件中,仅仅把原本向上抬高边界的 round_up(),改成了向内收敛边界的 round_down(),并把对齐粒度精准收拢到操作系统的 4KB 分配页。
// 曾经的致命错误:向上取整,把账本越界暴露给了分配器- offset = round_up(offset, SZ_128K);// Linus 的神来之笔:向下取整,宁可少给 2KB,也绝不侵占账本+ offset = round_down(offset, PAGE_SIZE);
就这一行代码的修改,困扰整个 Intel 新一代显卡的冷启动幽灵黑屏,瞬间烟消云散。
在打完补丁后,Linus 展现了他极其幽默且富有哲理的一面。他没有自己动手写那篇冗长严谨的技术解释,而是直接把键盘推给那个中途多次想当逃兵的 AI:
“之前还说搞不定,现在问题查清楚了来,把这篇 Commit Message(提交说明)的技术细节给我工工整整写出来。”
AI 老老实实地完成了长篇大论的技术分析,把 CCS 地址错位、页表被篡改、断言失效的逻辑阐述得滴水不漏。而 Linus 则在正文的最下方,加上了一段充满个性色彩的括号附言:
“[注:这是一场来自地狱的调试会话,但 AI 在做重复性苦活方面提供了巨大的帮助。中间有好几次,AI 都斩钉截铁地告诉我这事‘绝对不可能、根本无解’,劝我直接写份报告放弃。我怀疑,训练这帮 AI 的人,根本没有我这么固执。但在我的坚持下,它依然尽职尽责地帮我加调试代码并分析数据。因此,上面的技术提交说明,我就全权交给它来写了。]”
深度洞察:为什么 AI 会在终点线前“劝退人类”?
这起轰动全球开源界的事件,不仅仅是一则极具戏剧性的极客趣闻,更给狂热的“AI 编程替代论”上了一堂极其生动的公开课。
▲ 科技评论员 Rupert Davies 认为:AI 做了大量重复工作并一度宣布放弃,最后由人类找到那一行修复
1. 大模型的“谄媚弃权”机制与复杂系统的断层
在长链路、高混沌度的系统级调试中,为什么 AI 会反复得出“无解”的荒谬结论?
长时间、多轮次的调试会让上下文不断膨胀,模型也可能过早收敛到“无法解决”的判断。它无法直接感知那块黑屏,也无法替代工程师根据硬件现象持续修正假设;一旦已有推断走进死胡同,后续回答便容易围着错误结论打转。
2. Vibe Coding 的幻觉 vs 专家主导的“主驾驶模式”
2026 年初,Linus 曾在自己的业余开源项目 AudioNoise 中公开表示,自己是用 Google 的 AI 工具“Vibe Coding”(氛围编程,指完全不看细节全丢给 AI 写)搞定了一个 Python 音频可视化工具。许多人误以为连 Linux 之父都要全面向 AI 缴械投降。
但这次内核事件划出了一条无比清晰的分水岭:
- 在低风险、容错率高的玩具项目上:你可以把方向盘扔给 AI,享受端茶喝咖啡的 Vibe;
- 到了深水区、高对抗的工业级硬核系统:AI 更适合做干脏活累活的“牛马副驾”。它能快速生成调试补丁的样板代码,也能在多次重启后协助整理内存 Dump;挖掘方向和识破“断言本身也在撒谎”,仍仰赖顶级工程师沉淀数十年的领域直觉与架构审美。
3. 人类最后的护城河:比算力更顽强的“偏执”
正如 Linus 那句看似玩笑的讽刺:AI 的上限,受限于训练它的人类的意志力上限。
面对一个被层层封装掩盖的 Bug,算力可以穷举代码,大模型可以匹配出成千上万种排列组合;但当所有的已知路径都被堵死时,唯有属于人类的“偏执”(Stubbornness),那种不把最后 2KB 物理内存翻个底朝天就绝不罢休的死磕精神,才是推翻一切既定假设、在绝境中找到那唯一一行 round_down() 的终极动力。
这场 18 次重启换来的胜利证明了一件事:
AI 不会淘汰程序员,但懂得如何狠狠驱动 AI、并且比 AI 更加固执的程序员,将永远主宰代码的世界。