乐于分享
好东西不私藏

AI绝望喊停“这题根本无解”!Linus硬刚18次内核重启,逼它改出一行神级代码

AI绝望喊停“这题根本无解”!Linus硬刚18次内核重启,逼它改出一行神级代码

谁也没想到,2026年的开源世界里,最富戏剧性的一场人机博弈,竟然发生在Linux内核创始人Linus Torvalds自己的电脑桌前。

一台搭载英特尔最新独立显卡的电脑,在开机后陷入了无休止的黑屏与死循环。为了揪出这个藏在驱动最深处的幽灵Bug,已经多年极少亲自给驱动写补丁的Linus,拉上AI开启了一场排错马拉松。

然而,在经历了24个调试补丁、18次内核重启后,连见多识广的顶级大语言模型都彻底“崩溃”了。AI数次直接打退堂鼓,甚至苦口婆心地劝这位开源暴君:“放弃吧,这个问题在技术上根本无解,我们还是老老实实写一份故障报告交差算了。”

换作普通人,可能真就关机睡觉了但它面对的是Linus Torvalds。

Linus不仅没有收手,反而逼着AI继续吐代码、搭脚手架、分析日志。最终,Linus仅凭修改了一行代码,就彻底终结了黑屏噩梦,并把整整一段极具嘲讽又充满温情的自白,永远刻进了Linux内核的Git提交记录里。

▲ Linus在Linux内核主线提交中写下的传奇注记:AI多次断言无解,但我比它更固执

致命黑屏:桌面管理器为何在黑暗中“无限自杀”?

故事始于一块Intel代号为Battlemage(战斗法师)G21的显卡。

当时,这台机器在冷启动进入桌面时,图形界面彻底瘫痪。屏幕一片漆黑,负责拉起登录界面的GDM(GNOME显示管理器)陷入了疯狂的死循环:崩溃、拉起、再崩溃、再拉起。

最诡异的是,整台电脑其实并没有死机。底层的SSH能连上,CPU还在正常工作,甚至后台系统也在运转,但只要图形会话试图把画面呈现给屏幕,系统就像踩中了无形的地雷一样瞬间炸毁。

想要理解这个Bug有多阴险,可以先打一个极简单的比方:

显卡上的内存(VRAM)就像一块巨大的开发用地为了提升图形性能,现代显卡都会对图像数据进行硬件压缩,压缩过程还要配套一块元数据存储区在Intel这套架构里,这部分专属领地被称为flat CCS

你可以把flat CCS理解为显卡硬件自带的“高压变电站”这块地皮是硬件专属的,绝对不能分给普通软件使用。

然而,内核驱动在计算这块领地的边界时,犯了一个极其隐蔽的算术错误。驱动程序里的函数 get_flat_ccs_offset() 误以为可用显存的截止边界应该“向上取整”(round up)。

这一向上取整,彻底大祸临头

它等于把本属于变电站的地皮,画进了普通商品房的公摊面积里。在Linus那台16GB显存的机器上,硬件给出的真实变电站基址是 0x3fafff800,取整后硬生生被推到了 0x3fb000000

结果,整整一页(4KiB)显存的尾部2KiB空间,明明已经被硬件压缩单元占领,却被操作系统内存分配器当成了“无主的可用空地”,随意分发了出去。

▲ Linux内核提交记录:直指flat CCS存储区被错误分发为可用VRAM

悄悄改写的命运:2KiB内存引发的雪崩

如果分给普通程序,可能只是屏幕上多几个花点。但偏偏在系统冷启动时,图形栈的Mesa虚拟机三级页表,每次都极其精准地落在了这片被污染的土地上。

什么是页表?页表就是显卡的“导航地图”显卡要想把画面渲染出来,必须按照页表的指引,去读取图形合成器的指令缓冲(batch-buffer)。

由于硬件压缩单元在底层运作时根本不需要走任何页表、也不需要通知操作系统,它直接以硬件节奏往这片内存里写入压缩元数据(比如反复交替的 0xcccc... 标记)。

于是,戏剧性的一幕发生了:

  1. 操作系统的图形合成器刚准备开工,它的“导航地图”尾部就已经被硬件悄悄覆盖成了一堆垃圾数据;
  2. 合成器第一次尝试读取指令,立刻发生致命寻址错误(Fault);
  3. 桌面环境瞬间暴毙,GDM检测到崩溃后尝试重启,下一轮又踩中同一个坑,进入死循环黑屏。

偶尔重启几次能亮屏?那仅仅是因为下一轮虚拟机的页表碰巧运气好,没分到这块被诅咒的内存而已。

面对这种硬件层与驱动层无声交织的恶性故障,常规的断点调试毫无作用。

Linus决定拉上AI助手,直接杀入驱动最深处。

AI的极限:多次劝退人类,高呼“这题无解,写报告吧!”

在软件工程领域,定位问题的难度往往是修复问题的一万倍。

Linus与AI展开了高强度的极限拉扯。AI扮演了一个不知疲倦的“外包初级工程师”,快速根据Linus的思路编写测试代码、插入各种内核调试脚手架,并在每次系统重启后疯狂解析那一串串晦涩的十六进制内存转储日志。

24个不断加码的调试内核,18次硬着头皮的系统冷重启。

▲ 社区长帖生动复述:AI多次说不可能,但Linus不接受任何放弃

但随着调试深入,面对毫无规律的页表损坏和复杂的硬件规格手册,大语言模型的“幻觉”与“疲软期”开始暴露。当多条分析路径全部碰壁、逻辑死锁时,AI的大脑“过载”了。

AI在对话框里多次直截了当地告诉Linus:

“这个问题在当前架构下逻辑自相矛盾,是不可能被解决的(impossible and unsolvable)。我们不应该再浪费时间了,直接写一份故障报告提交给硬件团队吧。”

这句话几乎戳中了所有深度使用过AI编程的开发者的共同笑点。

在Slashdot与X(原Twitter)上,无数程序员感同身受地吐槽:大模型在面对超出其上下文经验的极端疑难杂症时,最擅长的就是“体面地放弃”,它会用最礼貌、最专业的语调劝你收工,甚至主动提出帮你写一份格式完美的退堂鼓报告。

▲ 开发者热议:这就是“氛围编码(Vibecoding)”与“顶尖高手把AI当外骨骼”的本质区别

然而,AI面对的是整个开源界脾气最硬的硬汉。

Linus在之后的提交记录里写下了一句充满讽刺意味的神级吐槽:

“我严重怀疑,训练这些AI模型的人,骨子里根本就没有我这么固执。”

Linus直接无视了AI的劝退建议,用冷酷的逻辑继续向AI施压,强行把AI拽回工作流,逼它继续修改补丁、继续分析被保留内存页里那些诡异的十六进制特征码(如 0xcc7700...)。

终于,当排除了固件、排除了Mesa、排除了所有上层干扰后,真相在第18次重启后大白天下:

硬件并没有坏问题出在当年为修复另一个断言Bug而加入的一行取整代码:方向完全反了。

一行代码的救赎:把 round_up 改成 round_down

在搞清楚硬件压缩单元占用的边界后,最终的修复方案简洁到了令人窒息的地步:

驱动和调度器都不用重写源码里的 round_up()(向上取整),改成 round_down()(向下取整)即可。

▲ 震撼的代码Diff:红色删除的一行 round_up,绿色替换为 round_down 与正确的安全检查

在数学语义上,如果这行代码代表的是“可用内存到此为止”,那么宁可向下取整少给用户一页显存,也绝对不能向上取整侵占硬件变电站的一寸领土。

在本机上,这一行向下取整,恰好排除了惹祸的那一页,黑屏死循环瞬间烟消云散。

Linus遵守了工程师的契约精神。在问题彻底解决后,他让立下汗马功劳的AI亲自起草了最终合并进Linux主线的正式提交说明(Commit Message),详细记录了函数逻辑、硬件读数和导致黑屏的页表链条。

而在提交说明的最末尾,Linus留下了那段被后人津津乐道的括号自白:

“(这是一场来自地狱的调试(debug session from hell),极大地得益于AI承担了大量的苦力活。我很想称它为不知疲倦的助手,但它中途好几次斩钉截铁地断言这不可能、无解,建议干脆写报告放弃……尽管它三番五次想撂挑子,但在我的持续逼迫下,它每次都忠实地添加了调试代码并分析了结果。所以,我把上面技术说明的起草功劳记在它头上。)”

这段补丁随后正式合入Linux 7.3开发分支,并带上 Cc: stable@kernel.org 标签,申请向稳定版分支回传。

洞察:从“氛围编码”到“人机外骨骼”的残酷真相

这起看似充满戏剧性的调试风波,实际上给当前狂热的全球AI编程浪潮,浇下了一盆极其清醒、极其深刻的冷水。

今天,行业里流行一个新词叫 Vibe-coding(氛围编程/凭感觉编程),人们幻想着即使不懂底层原理,只要喝着咖啡、向AI许愿,AI就能替人类凭空建构起软件大厦。

甚至连Linus自己,在业余捣鼓吉他音频效果器项目(AudioNoise)时,也曾公开自嘲自己用Google Antigravity搞过Vibe-coding,让AI帮忙写Python可视化脚本。

▲ Linus在业余项目中坦言自己也玩过“Vibe-coding”,让AI编写他不熟悉的Python脚本

就在不久前,面对内核社区关于是否抵制AI代码审查工具的争论,Linus还曾强硬地表态:“Linux不排斥AI。AI已经成为不可逆转的工具,觉得不爽的人可以走开源路线去Fork,或者直接走开(Fork it. Or just walk away)。”

但这场“地狱级Debug”,也给出了分水岭的位置:

在玩具项目里,你可以靠Vibe-coding蒙混过关;进入严肃、底层的硬核工程深水区后,AI只是一具力大无穷却毫无定见的外骨骼。

试想一下:如果当时坐在屏幕前的是一个完全依赖AI的“氛围开发者”,当AI第一次给出“此题无解,请写故障报告”的权威结论时,这个Bug大概率就会被永远搁置,变成Issue列表里一个无人问津的“硬件神秘故障”。

AI没有人类那种建立在底层直觉上的“常识性怀疑”它拥有超强的文本吞吐能力、惊人的代码生成速度,却缺乏对现实物理世界的韧性。当推理路径陷入死胡同,大语言模型的概率机制会自然滑向“最体面的放弃策略”。

打破僵局靠的是人类专家的领域直觉,以及永不妥协的执拗。

人类负责把稳方向盘、制定检验假设、判定停止条件;AI负责提供高吞吐的脚手架、不知疲倦地搬运砖块。

正如海外开发者在评论区所总结的那样:“这里是人类在给AI做辅助(Human-assisted AI)。在Linus Torvalds的身边,连人工智能都没有资格轻言放弃。”