

一台搭载最新英特尔独立显卡的电脑,刚刚开机,屏幕瞬间陷入一片死寂的漆黑。
普通用户大概率会咒骂一声驱动太烂,然后默默按下电源键重启;程序员可能会在社区提个 Issue,等待厂商推送更新。
但这台电脑的主人,是 Linus Torvalds,Linux 内核的缔造者、掌管着全球数十亿台设备底层灵魂的技术教皇。

▲ Mark Kretschmann 在社交平台爆料 Linus 借助 AI 调试地狱级 Bug 的全过程
他没有选择等待Linus 直接拉来大模型 AI 当作助手,一头扎进 Linux 内核图形驱动的深渊。
随之而来的,是一场被 Linus 本人定性为“来自地狱的调试(debug session from hell)”的技术拉锯战:整整 24 个调试补丁、18 次内核重启。
在这场漫长的肉搏中,AI 中途数次声称这个 Bug “不可能、无解”,建议写份报告放弃。
Linus 没有接受这个结论,继续推着 AI 排查。
最终,这位 56 岁的老牌黑客带着被他训得服服帖帖的 AI,在一堆密密麻麻的底层代码中,找到了那个致命的幽灵,将一行代码中的 round_up(向上取整),改成了 round_down(向下取整)。
仅仅替换了一处函数后缀,黑屏瞬间烟消云散,显卡满血复活!
一台价值数千元的显卡,为什么开机就变成“黑砖”?
这场史诗级 Debug 的案发现场,发生在 Linux 刚刚合并的 Intel Xe 显卡驱动中。测试硬件是一块拥有 16GB 显存的英特尔新一代 Battlemage G21 架构显卡。
在 Linux 世界里,图形界面的启动像是一场精密的交响乐:内核驱动初始化显存、Mesa 图形库构建页表、GNOME 显示管理器(gdm)拉起桌面。然而在这台机器上,只要遭遇冷启动(从彻底关机到开机),系统就会陷入死循环:显示管理器不断崩溃、重启、再崩溃,屏幕一片漆黑。
诡异的是,如果你在黑屏时盲打命令强行重启一次 gdm,桌面有时又能奇迹般地亮起来。
这种“薛定谔的黑屏”,往往是底层硬件驱动里最令人抓狂的恶性 Bug。可以把这个 Bug 想象成下面的情形:

▲ 官方补丁提交说明:记录了硬件地址计算与黑屏的致命因果链
想象一下,GPU 的显存是一座巨大的立体智能立体仓库。为了让图像数据读写得更快,英特尔在显卡硬件里设计了一套名为 Flat CCS(压缩控制表面) 的机制。
你可以把 Flat CCS 理解为仓库管理员随身携带的“压缩密码账本”。它专门记录哪一块数据被压缩了、该怎么解压。
因为这个账本极其机密且重要,硬件在出厂时就规定:这块区域由 GPU 硬件内部电路独占,软件驱动绝对不能把它当成普通货架租给客户放货物!
那么,账本应该放在哪?硬件给出了一个起始基准地址:0x3fafff800。
问题就出在“算账”的算法上
显存分配器是个讲究规矩的强迫症,每次划定边界都要对齐到特定大小(比如 128KB)。早在一年多前,英特尔工程师为了满足硬件规范,在驱动里写了一行 round_up()(向上取整)。
这一取整,直接把基址从 0x3fafff800 硬生生抬高到了 0x3fb000000!
灾难就此降临
在这两个数字之间,留下了整整 2KB 的缝隙。这 2KB 本质上依然是硬件的“机密账本”,但因为软件把边界往上移了,显存分配器误以为这 2KB 是“完全合法的空闲普通显存”!
随后,冷启动的 Linux 桌面开始加载。系统刚好把桌面最核心的“三级页表(显存的虚拟导航地图)”塞进了这 2KB 的空间里。
显卡硬件根本不知道软件犯了蠢,它照常在这片空间里疯狂写入压缩元数据(类似 0xcccc... 这样的固定硬件特征码)。
导航地图被硬件偷偷抹成了乱码,桌面合成器一发指令直接迷路撞墙,显示管理器当场暴毙,屏幕瞬间黑死。
“这题无解,放弃吧!”AI 助手数次劝退
找到上述这套严密的因果链,事后看恍然大悟;但在当时的代码迷雾中,无异于大海捞针。
原因在于:当时驱动里原本用来防御 Bug 的断言检查,自己也是错的! 断言代码同样用了错误的对齐逻辑,导致它在错误发生时不仅不报警,反而向系统汇报“一切正常”。
面对这种幽灵现象,Linus 开启了他的硬核排查模式。他让 AI 辅助生成各种在内核底层打印内存特征的调试探针(Debugging Patches),自己则一遍又一遍地编译内核、重启系统、抓取内存数据。

▲ It's FOSS 报道页:18 次启动后,问题收敛到一行修复
整个过程极其折磨:加补丁、编译、重启、抓 Log、黑屏、推倒重来……整整循环了 18 次!
在这个过程中,被寄予厚望的 AI 助手开始顶不住了。
大语言模型在面对逻辑死胡同和看似矛盾的硬件 Log 时,其内置的概率对齐机制让它做出了人类职场最常见的举动,打退堂鼓。
AI 多次在回复中向 Linus 泼冷水:
“从目前的逻辑来看,这个问题是不可解的,硬件表现与规范存在根本冲突。我建议您停止调试,写一份 Bug Report 提交给硬件团队处理。”
如果换成一般开发者,可能真的就顺坡下驴,把锅甩给英特尔硬件部门了。但坐在屏幕前的是 Linus Torvalds。
正如他在最终的 Git Commit 附言中那句充满讽刺与自豪的调侃:
“AI 极大地帮了忙……尽管它中途好几次宣称这事儿‘不可能且无解’并建议我放弃。我猜,训练这帮 AI 的工程师们,大概没有我这么固执。”

▲ 网友搬出《星际穿越》经典台词精准还原现场:AI 说这不可能,Linus 说这是必须的
Linus 坚信物理定律不会凭空失效:既然能读出 0xcccc 的硬件特征码,就说明硬件一定在某个确定的时刻踩了内存。他拒绝了 AI 的退缩建议,让它继续添加调试代码、分析结果,不断缩小内存监视的包围网。
终于,在第 18 次重启后,内存边界被彻底锁死,真相大白,一切的罪魁祸首,仅仅是取整方向反了。
既然这个数值代表的是“普通可用显存的终点”,为了绝对不侵占后面的账本区,就必须宁可少算,绝不多算!
把 round_up 换成 round_down,按 4KB 向下截断,那多出来的 2KB 幽灵空间被彻底关进禁区。
Bug,瞬间被秒杀
惩罚还是奖赏?让 AI 来写技术说明书
在彻底修复这行致命代码后,Linus 做出了一个充满极客浪漫色彩的举动:
他让那个中途无数次想逃跑的 AI,亲笔写下了这篇补丁的技术说明文档(Commit Message)。

▲ 网友热评:AI 往往低估自己的能力,当它退缩时,人类必须对它施压
在 Linux 内核的代码库里,这篇提交记录堪称奇观。
前半部分是 AI 用极度专业、严密的内核工程语言,详细推导了从 Flat CCS 基址、128K 边界、2KB 内存溢出到 Mesa 页表损坏的全部技术数学细节;
而在正文的最末尾,Linus 用方括号加上了自己那段毒舌而温情的个人独白:记录下自己是如何抓着一个想要放弃的 AI,在 18 次重启的地狱中杀出一条血路。
补丁被打上 Fixes: 37173392741c 的标记,同时抄送 stable@kernel.org 稳定版分支。修复进入 Linux 7.3 开发树,并计划回传稳定分支。
高手始终握着方向盘
这起戏剧性的 Debug 事件在 Hacker News、X(推特)等技术社区引发了滔天巨浪。很多开发者在看热闹的同时,敏锐地捕捉到了它背后深刻的行业隐喻。
在过去的一年里,整个技术圈都在狂热鼓吹所谓的 “Vibe Coding”,即开发者什么都不用懂,喝着咖啡把需求丢给 AI,全自动生成代码。
但 Linus 用这场 18 次重启的硬仗,给全世界上了一堂清醒的工程实践课:
1. AI 善于“做苦力”,但没有“胜负欲”
在这次排查中,AI 的价值毋庸置疑:它按 Linus 的要求持续添加调试代码、分析结果,承担了大量重复工作。前后 24 个调试补丁和 18 次内核启动,最终把范围缩到了那一行代码。
但大模型本质上是一个基于概率的补全机器,缺乏对物理世界确切因果的直觉与执念。当复杂的边缘条件超出其预训练认知时,它的第一反应是“礼貌性放弃”。
2. 人类必须握住方向盘
一位资深开发者在社交媒体上评价:这场胜利体现了人类意志对 AI 潜能的极限压榨。
在整个过程中,人类负责判断方向,并拒绝接受“不可能”的结论。 换成一个完全依赖 AI 答案的新手,这个 Bug 大概率在第三次重启、AI 说出“建议放弃”的时候,就已经胎死腹中。
从 1991 年在赫尔辛基大学的宿舍里写下第一行 Linux 代码,到 2026 年按着顶级大模型的头在显存微秒级深渊里肉搏,Linus Torvalds 用 35 年的硬核履历证明了一件事:
时代和工具都在变化,代码从手工敲击变成了模型生成。软件工程世界里最坚不可摧的护城河,依然落在人类顶尖工程师那种近乎偏执的固执与直觉上。
下次当你的 AI 助手向你两手一摊说“这事儿无解”时,不妨学学 Linus 的做法:
敲敲桌子,告诉它,把代码重新拉出来,再跑一遍!

夜雨聆风