

你能想象这个画面吗?
一台顶配的Linux工作站,屏幕漆黑一片。坐在屏幕前的,正是整个开源世界的“暴君”、Linux之父,Linus Torvalds。
在他身边,一个AI大模型正在快速输出分析日志。然而,几轮高强度排查下来,AI直接“道心破碎”,多次断定问题不可能发生、无法解决,建议停止排查并撰写故障报告。
如果是一般程序员,大概率就顺坡下驴,关机睡觉了。
但站在它面前的是Linus他坚持让AI继续写调试补丁,还调侃训练这些AI的人大概没他这么倔。
▲ Linus在内核Commit中直言:AI多次断言问题“无解并劝退”,但他凭借极致的固执最终破案
整整24个调试补丁,前后重启内核18次。
在经历了一场被Linus称为“来自地狱的调试(debug session from hell)”之后,真相大白。他亲手敲下最终的修复方案,代码仅仅改动了一行:把一个向上取整函数 round_up(),改成了向下取整 round_down()。
随后,这位掌管全球数十亿台设备底层基础的神级极客,让刚才几度劝他放弃的AI写完了修复补丁的说明文档(Commit Message)。
消息传出,整个全球开发者圈子瞬间炸开了锅。

▲ 开发者Mark Kretschmann在社交平台复盘这起神级人机协作事件
幽灵黑屏:当神级程序员的电脑也开不了机
事情发生在刚刚过去的Linux内核合并窗口期。
熟悉开源社区的人都知道,Linus Torvalds如今已经极少亲自给内核写驱动补丁了。作为Linux帝国的最高掌舵人,他的日常工作是代码审查、合并各子系统维护者的分支,以及在邮件列表里用犀利的言辞痛批不合格的代码。
能让他亲自撸起袖子下场修Bug的唯一原因只有一个:这个Bug,不长眼地砸在了他自己的主力机上。
Linus当时正在测试Intel最新的锐炫独立显卡(Battlemage G21架构,16GB显存)。然而,当他开机进入系统时,诡异的事情发生了,电脑明明开着,电源灯亮着,但屏幕就是一片死黑。

▲ Linus向Linux图形开发邮件列表(dri-devel)发送的长文分析
系统的登录管理器(GDM)在后台像疯了一样反复崩溃、重启、再崩溃。Linus被迫进入了最原始的调试状态。
麻烦还在于,这是一个典型的“薛定谔幽灵Bug”:有时候机器冷启动必定黑屏;有时候多重启几次,桌面又奇迹般地亮了起来;偶尔进入系统后,屏幕某些区域还会出现随机的花屏。
在计算机底层开发中,不怕必现的崩溃,就怕这种“时好时坏”的灵异现象。因为这往往意味着,某个底层的内存区域,正在被不为人知的神秘力量随机践踏。
谁偷吃了2KB内存?一行代码引发的“灭顶之灾”
为了让即使完全不懂编程的读者也能看明白,我们不妨用一个极简的比喻来拆解这个Bug的致命本质。
显卡上有大量的显存(VRAM),就像一个巨大的公共储物仓库。
仓库的大部分柜子,是租给普通租客(操作系统、图形桌面、各类应用)放行李用的; 但仓库最深处有一块特殊区域,叫 flat CCS(压缩控制状态区),这是显卡硬件自己用来存放“压缩元数据”的绝对私密领地。
显卡驱动的作用,就是在公共区和私密区之间画一条警戒线,告诉操作系统:“线左边的柜子你们随便用,线右边的私密区域千万别碰!”

▲ 历经18次重启与24个补丁,最终的改动只是把错误的round_up改成了round_down
那么两年前,Intel的工程师是怎么画这条线的呢?
当时的代码逻辑写着:读取硬件私密区的起始地址,然后执行了一句 round_up(..., 128K),向上取整到128KB。
工程师的初衷是好的:硬件规范要求按128KB对齐,向上取整听起来“更大气、更安全”。但他犯了一个致命的数学方向错误
在Linus这台机器上,私密区的真实物理起点是 0x3fafff800。代码执行“向上取整”后,警戒线被硬生生推到了 0x3fb000000。
结果是:本该属于显卡硬件私密领地的最后2KB内存空间,被当成“公共可用显存”,拱手送给了操作系统!
灾难就此爆发:
桌面图形系统开机时,正好把核心页表(可以理解为图形界面的地图总索引)存进了这倒霉的2KB内存里; 显卡硬件在后台根本不需要打招呼,直接按照物理机制把压缩数据强行写进了这块私密地盘; - 硬件直接把操作系统的“地图索引”踩得稀巴烂!
图形合成器一启动,拿着被踩烂的地图找不到路,当场暴毙;显示管理器只能无限次重启,用户看到的,就是永无止境的黑屏。
修复方法极其简单粗暴:把 round_up 改成 round_down(向下取整)。既然有争议,宁可少给操作系统划一页内存,也绝不能多侵占硬件私密区半个字节!
“来自地狱的调试”:当AI决定放弃,人类决定死磕
原理听起来不过寥寥数语,但要知道,在幽灵出没的黑盒里,找到这2KB内存的错位,无异于在撒哈拉沙漠里找一粒特定的沙子。
显卡硬件向那块内存写数据时,不走常规流程、不报任何错误、不触发任何中断,只是静默地把数据改成形如 0xcccc... 的特征码。
在这个过程中,AI扮演了什么角色?
Linus在Commit说明里毫无保留地还原了全过程:AI承担了极其繁重的“苦力活”。在24个调试补丁的迭代中,AI飞速编写探针代码、在内核里各处插桩、解析庞杂晦涩的十六进制内存转储(Hex Dump),帮Linus极大地压缩了敲样板代码的时间。

▲ 技术评论员Rupert Davies指出:AI负责干苦力并宣称不可能,人类找到了单行修复
但大语言模型(LLM)的致命短板也暴露无遗:当多轮插桩得出的数据出现矛盾、当常规逻辑无法解释为什么硬件会在没有任何指令下改写内存时,AI陷入了典型的中位数思维陷阱。
它根据海量训练数据里的概率分布判断:这种情况在软件规范里根本不可能存在。于是它开始扮演“劝退大师”,一遍又一遍地建议Linus:“这是硬件无法解决的死局,放弃排查吧,写份故障报告丢给硬件团队。”
这恰恰印证了Linus那句毒辣的嘲讽:AI是被那些容易妥协的大多数人训练出来的。
面对未知领域的深水区,AI的逻辑推理是有边界的,它只能在已有的知识图谱里计算概率。但顶尖人类专家的直觉在于:如果现实和理论冲突,那一定是某个最底层的先验假设错了。
Linus顶住了AI的数次放弃劝告,逼着AI继续按他的直觉写探针,最终在内核冷启动的第18次,抓住了硬件私密区被越界踩踏的铁证。
终极启示:别被“Vibe Coding”带偏了
这起事件在全球技术界引发的震动,远远超出了一个Bug本身。它给当今甚嚣尘上的“AI万能论”,上了一堂最生动、最深刻的公开课。
就在几个月前,Linus还在邮件列表里痛批那些“用AI批量生成垃圾漏洞报告、疯狂刷屏安全列表”的无脑投机者。他甚至愤怒地表示,那些不经思考、直接把AI幻觉当报告丢给维护者的行为,让开源社区的维护成本呈指数级上升。
但与此同时,Linus又公开声明:“Linux并不反AI。觉得AI没用的人可以自己去Fork分支。”
从他自己的业余吉他效果器项目(AudioNoise)尝试用AI快速生成Python可视化代码,到这次在内核底层与AI并肩作战手撕GPU驱动,Linus向全世界展示了AI时代的顶尖工程师到底该如何工作:
- AI能充当外骨骼:
AI能帮你以百倍的速度搬砖、写脚手架、翻看海量日志,但它没有物理世界的痛感,它不知道那块屏幕为什么黑着。 - 拒绝平庸的“放弃倾向”:
大模型天生带有“取悦用户”和“规避死局”的妥协算法。在攻坚科学硬核难题时,只有人类的固执、直觉与经验,才能穿透大模型的概率幻觉。 - 理解代码,依然是程序员唯一的护城河:
那行最终拯救整个系统的 round_down(),改动只需一秒钟。但知道往哪一行填入这几个字符的人,在这个星球上依然屈指可数。
正如一位开发者在推特上的精辟总结:
“AI干完了所有的苦活,然后宣布这道题无解;最后,一个倔强的人类找出了那一行代码。这场协作由人类驾驭AI,共同征服那些曾经看似无法解决的深渊。”
这场发生在Linux内核深处的地狱级调试,最终以一个充满极客浪漫色彩的结局收场:
Linus保留了AI写下的所有分析文档,提交进Linux 7.3主线内核,并在括号里留下了那段注定载入开源史册的致谢,致他自己不可理喻的固执,以及那个差点被他逼疯的人工智能。

夜雨聆风