Windows 工程奇迹:一个替全世界擦了四十年屁股的操作系统
引子:一个”卖软件的”,怎么就成了院士
这两天又看到有人在转一条旧闻。
2017 年 11 月 27 日,中国工程院公布当年院士增选结果:67 位新院士,外加 18 位外籍院士。
名单里有一个美国人的名字特别扎眼:比尔·盖茨。
(对,是 2017 年,不是今年。互联网的记忆力跟 Windows 的兼容性正好相反,时好时坏。)

当年评论区的画风,虾神还记得清清楚楚:一个大学都没毕业的卖软件的,凭什么?操作系统又不是他一行一行敲出来的。
顺便还得背一口”640K 内存对任何人都足够了”的黑锅:虽然盖茨本人辟了三十年谣,但这句子实在太顺口,辟谣跑不过段子。
说实话,那会儿虾神也年轻,也觉得院士这玩意儿,应该发给那种论文能铺满一面墙、PPT 里全是希腊字母的人。
直到后来自己在底层摸爬滚打了十几年,再回头去看工程院给盖茨写的那段评语,才发现人家一个字都没夸张:
比尔·盖茨是享誉世界的计算机操作系统领导者、人类信息化发展的先驱者。
注意这个措辞:”操作系统领导者“。
不是”算法科学家”,不是”编程语言发明人”,是领导者。
工程类的最高荣誉,从来不是发给某一行代码的,是发给”这件事居然被干成了”的。
而 Windows,是人类历史上被干成的最脏、最累、最不体面的工程之一。
一、先把”难”这个字,定义清楚
如果现在给你一个任务:写一个操作系统。
你的第一反应可能是:这有什么难的?MIT 的 xv6 你大学一个学期就撸完了,内核调度、页表、文件系统,样样都有,跑得还挺稳。
对,跑得稳。
在你的开发板上,跑你自己的测试用例,当然稳。
我们见过太多这样的系统:代码干净、文档漂亮、架构图能上教科书,GitHub 上一千多 star,作者在 README 里写着”遵循 Unix 哲学,一切皆文件”。
然后你把它装到一台二手笔记本上,第一分钟就卡在开机画面。
(别问虾神怎么知道的。问就是那台笔记本现在还供在柜子里,逢年过节上柱香。)
这就是问题的全部所在。
实验室里写一个漂亮的系统,考的是才华。让一个系统在陌生、劣质、充满了历史遗留问题的真实硬件上稳定开机,考的是工程。
这两件事之间,隔着的不是技术水平,是一整个现实世界。
| 维度 | 实验室里的系统 | Windows 每天面对的世界 |
|---|---|---|
| 硬件 | 你自己精心挑选的三块带售后的开发板 | 几千家主板厂,固件质量从”能用”到”能炸” |
| 软件 | 你自己写的 hello world | 几百万开发者写的、互相打架的、几十年没人维护的二进制 |
| 用户 | 你导师 | 你奶奶、网吧里面的无敌小学生、银行柜员、机场塔台、数控机床 |
| 时间 | 这学期 | 四十年,而且一次都不能断 |
表格里前三行,是工程难度。
最后一行,是工程地狱。
因为前三个维度你还能靠”设计”去收敛,唯独时间不行。时间会把所有当初的权宜之计,腌成必须继续供养的祖宗之法不可变……
所以业界一直有个暴论:
能把全世界写得最烂的第三方代码、偷工减料的硬件驱动,稳稳当当跑上四十年,还不耽误普通人插上电打两把游戏:这要不是工业神学,那什么才是?
二、第一层地狱:硬件从来不按标准来
先讲个最基础的。
现代 PC 开机,操作系统怎么知道主板上有什么设备、怎么休眠、怎么调频、怎么读取温度?
靠一张表。这张表由主板固件提供,格式由一份叫 ACPI 的国际规范定义。
规范写得明明白白:哪个命名空间、哪个方法返回什么结构、字节序怎么排、长度字段怎么算。
理论上,全世界的厂商照着做,天下太平。
现实是,主板厂为了省几毛钱、抢两周上市时间,固件里的这段代码往往是外包给某个临时团队写的,或者干脆从上一代板子上复制粘贴,改个型号就发版。
于是你会看到各种匪夷所思的东西:
某个批次的板子,处理器电源状态表里声明的档位比实际多一个。操作系统老老实实按表去读,读到的是一片没初始化的内存。
某台笔记本,固件在回答”你支持哪个版本的操作系统”这个问题时,字符串表只写到 2009 年。系统一升级,它就翻脸不认人,把新系统当成怪物,然后拒绝进入省电模式。
还有更绝的:关机流程里少写了一个等待,导致系统刚断电,硬盘还在转,数据就那么悬在半空中。
这些事,一桩桩一件件,都是被真机教育出来的。写驱动的时候,最怕的不是规范复杂,是规范跟你眼前这块板子根本不是一回事。
那 Windows 怎么办?
学院派的做法很优雅:检测到不符合规范,panic,打印一段措辞严谨的错误信息,然后把锅甩给硬件厂商。
Windows 的做法很不优雅:在内核里写满了补丁。
举个最典型的栗子:ACPI 里的 _OSI 机制。
固件会问操作系统:”你是 Windows 2009 吗?”操作系统回答”是”或者”不是”,固件再根据答案决定走哪条代码路径。
Windows 的回答方式是:你问哪个,我就是哪个。
Windows 2000?是。XP?是。2006?是。2009?是。2012、2013、2015、2016、2017、2018、2019、2020?通通是。
一套系统,批发一沓身份。目的只有一个:让那些只认老版本的固件,安安稳稳地走它自己测试过的那条路。
这还不算完。内核代码里还有成堆的 quirk 表:按厂商 ID、设备 ID、BIOS 日期去匹配。命中某块板子,就跳过标准检查,执行一段专门给它擦屁股的补救逻辑。
寄存器溢出导致的供电逻辑错误,兜回来。时序不对导致的休眠失败,绕过去。固件少写的一个等待,系统替它补上。
这些代码,在任何一本操作系统教材里都找不到,在任何一篇论文里都不会被引用。它们只有一个作用:让那台机器能开机。
有同学要说了:这不是把系统搞脏了吗?
是脏。但虾神问你一句:用户按开机键的时候,关心的是谁对谁错,还是屏幕亮不亮?
责任这东西,在工业界不是用来划分的,是用来承担的。
教材教你分清责任,工程教你接住后果。
三、第二层地狱:应用层是一座四十年的考古现场
硬件这一层,好歹还有个”厂商”可以找。
应用层就更离谱了,全世界几百万个开发者,水平参差不齐,写完了就消失,源码找不着,作者联系不上。
这里面最著名的案子,是模拟城市。
1995 年,Windows 95 发布前,兼容性测试团队发现了一个问题:某款非常火的模拟城市游戏,在释放内存之后,又跑去读那块内存里的数据。
用 C 语言的话说,这叫释放后使用(use-after-free)。在标准里,这是未定义行为。在任何一本教材里,这都是典型到不能再典型的野指针错误。
按学院派的逻辑,这锅该游戏开发者背。系统让它当场闪退,天经地义,还能顺便教育一下程序员。
微软没有这么干。
Windows 95 的工程师在堆管理器里做了一个决定:程序调用 free 之后,那块内存不马上回收,也不马上复用。
系统假装它还给你留着,直到你的进程退出。
等于说,操作系统替一个写错了的程序,把脏内存供了起来。
这不是个例,后来这套思路被做成了系统级的基础设施,叫 Shim 引擎,配套的数据库叫 SDB。
Shim 是什么?你可以理解成夹在程序和系统之间的一层伪装网。
程序启动的瞬间,系统先查表:这个可执行文件,这个版本号,这个校验和,命中哪一条?
命中之后,加载对应的补丁模块,然后开始变戏法:
- 给它伪造一个操作系统版本号,让它以为自己还在 Windows XP 上;
- 给它伪造一套过期的 DirectX 能力,让它别去调用它驾驭不了的新接口;
- 拦掉它那个错误的堆栈调用,返回一个假装的”成功”;
- 把它的非法内存访问,平滑地转到一块安全区域;
- 有些老游戏一遇到多核就崩,那就骗它,你只看见一个核;
- 有些加壳程序跟数据执行保护八字不合,那就单独给它开个口子。
这里头最有名的一招,叫”版本号撒谎”。
从 Windows 8.1 开始,一个程序只要没在自己的清单文件里声明”我支持新系统”,系统就永远告诉它:现在是 6.2 版,Windows 8。
哪怕你跑在 Windows 11 上,哪怕内核版本早就飞到天上去了。
为什么要骗?
因为太多老程序的判断逻辑是硬编码的,if (version >= 6.0) 走新路,else 走老路。你真把 10.0 报给它,它反而懵了,一头扎进自己从没测过的分支,然后崩给你看。
所以系统选择说谎。说一个它能听得懂的谎。
到今天的 Windows 11,SDB 里躺着几千上万条这样的规则。
你在 2026 年的电脑上,双击一个 2003 年写的报税工具,或者某工厂里那套再也没人维护的管家婆软件。
那一瞬间,系统在背后给它做了几十道手脚。
然后软件正常跳了出来。
用户觉得理所当然。
没人知道,为了这一下”理所当然”,内核替他挡掉了多少个本该致命的异常。
四、兼容性不是写出来的,是养出来的
说到这儿,得插一句很多技术文章不愿意讲的事。
大家总以为兼容性是”设计”出来的,只要 API 定得好,契约守得住,自然就兼容了。
扯淡。
兼容性是测出来的,是养出来的。
Windows 背后有一整套外人看不见的流水线:一个庞大的应用兼容性测试库,几万个不同年代、不同来源、不同奇怪写法的软件,每天在虚拟机里自动跑;全球几十亿台设备上的崩溃遥测,把异常堆栈像雪花一样传回来;工程师把这些崩溃聚类、定位、复现、写 shim、跑回归,确认没把别人搞坏,才敢发出去。
这事儿的技术含量其实不高,高的是组织能力。
你让一家公司连续四十年,每天重复干这种又脏又不出成绩的活儿,还得保证每一代工程师都愿意接这个班,这比写内核难多了。
写内核是跟机器较劲,做兼容是跟人性较劲。
机器不会累,人会。
所以虾神说,盖茨那个”领导者”的评价,其实精准得可怕。Windows 的奇迹,一半在代码里,另一半在组织里。
五、第三层地狱:允许别人往你心脏里插刀,就得装个保险丝
再说驱动。
很多老用户对 Windows 的印象,还停留在 XP 时代的蓝屏。
那时候确实蓝。因为显卡、声卡、网卡驱动,全都直接跑在 Ring 0,处理器的最高特权级,跟内核平起平坐。
翻译成人话:任何一个显卡驱动写错一个指针,整个系统立刻躺下,蓝底白字,一个都跑不掉。
你在写文档?没了。你在下载?断了。你在跑一个跑了六个小时的计算?从头再来。
这不是 Windows 独有的问题,那个年代的操作系统都这样。但 Windows 用户多,所以骂声也最大。
虾神大学那会儿打 CS 1.6,最怕的不是被人爆头,是屏幕突然一蓝,那一瞬间你就知道,输的不是枪法,是命。
现在的年轻人管这叫”心态崩了”,我们那会儿叫”驱动又炸了”。
然后微软在 Vista 时代干了一件极其壮烈的事:WDDM,Windows Display Driver Model。
它把显示驱动硬生生拆成了两半:
一半叫用户态驱动,跑在普通进程里,负责绝大部分 3D 计算、着色器编译、命令构建;
另一半叫内核态驱动,只保留最核心的调度、显存管理、命令提交。
复杂的、容易出错的、涉及大量第三方代码的部分,全被赶出了内核。
这背后的逻辑特别朴素:不可信的东西,就别让它待在心脏里。
配套的还有一项技术,叫 TDR,超时检测与恢复。
GPU 要是卡住超过两秒(默认阈值),系统不会傻等,直接判定这块显卡驱动失联:重置 GPU,重启驱动,恢复桌面。
于是你就看到了那个熟悉的画面:屏幕黑一下,闪两下,右下角弹出提示:”显示驱动已停止响应,并且已恢复”。
游戏可能闪退了。但你写的文档还在,后台下载还在,会议还在。
一台电脑上同时跑着几十个进程、几百个线程、上千个句柄,其中一个能把整机拖死的模块,被单独关进了笼子。
虾神一直觉得,TDR 是 Windows 历史上最被低估的设计之一。
它的代价是什么?是 Vista 那一代人的口碑崩盘。新驱动模型不成熟、兼容性倒退、性能拉胯,骂声铺天盖地。
微软硬扛了整整一代系统的骂名,换来了从 Windows 7 开始,图形子系统的稳定性质变。
工程上的很多正确决定,在当时看起来都像是错误决定。因为你付代价在前,收利息在后,而用户只看得见你付代价的那一段。
六、第四层地狱:Win32 是一份签到 2050 年的合同
现在说最狠的一层:时间。
你去找一张 1997 年的光盘,用 Visual C++ 5.0 编译出来的一个程序,只要它是规规矩矩走 Win32 子系统的,中间不做任何修改,双击,它就能在 2026 年的 64 位 Windows 11 上跑起来。
三十二位的程序,跑在六十四位的系统上,中间隔着一层叫 WoW64 的东西,用户毫无感知。
这事儿听起来好像也没什么。
但你要知道,为了做到这一点,微软放弃了很多”变干净”的机会。
HANDLE 到今天还是个不透明指针。DWORD 到今天还是 32 位。LRESULT 的宽度跟着指针走,long 在 64 位下依然是 32 位,当年选 LLP64 而不是 LP64,被 Unix 阵营嘲笑了很多年。
为什么不改?
因为改一个字段的顺序,全世界就有几万个程序读错结构体。改一个回调的调用约定,几万个程序当场栈失衡。改一个句柄的位宽,几万个程序的内存布局全部错位。
API 不是代码,API 是合同。
而且是一份签了四十年、还在继续续期的合同。
虾神见过太多”重构主义者”,张口就是”这套 API 太丑了,应该推倒重写”。
(虾神年轻的时候也是其中一员。现在不说了,头发要紧。)
推倒重写的成本谁付?
银行的核心系统,医院的彩超机,工厂的数控机床,机场的航班显示看板,这些设备里跑着的软件,很多是十几年前写完就再也没人维护的。你让它们重写?预算几百万起步,停机一小时损失几千万,谁来签字?
商业社会运转的根基是成本和可靠性,不是代码的美感。
这句话不好听,但它是真的。
微软给 Win32 许下的这个承诺,本质上替全世界的商业系统省下了几十年的重写费用。这笔账,从来不出现在任何一篇技术文章里,但它比任何一次架构升级都值钱。
——题外话:现在AI来了,很多重写变成了可以接受,这个话题后面说。
七、第五层地狱:NT 的底子,比很多人想象的厚
说到这儿,很多人会有一个误解:Windows 能活下来,全靠兼容性苟着。
不对。兼容性是它的护城河,但它的地基,是 NT 内核。
1988 年,Dave Cutler 从 DEC 来到微软。
这名字现在的年轻人可能不熟,但在当年,他是 VMS 操作系统的总架构师,企业级大型机系统的顶级玩家。
他带着做 VMS 的那套经验来到微软,从第一天起,NT 就不是照着”个人电脑玩具系统”设计的。
它是按工业级标准搭的:可移植、抢占式多任务、对称多处理、对象化管理、内核态与用户态严格分层。
1993 年,NT 3.1 发布。
那一年,个人电脑上跑的 Windows 3.1 还是个建立在 DOS 上的 16 位壳子,而 NT 已经在下面把多处理器调度、虚拟内存、安全令牌这些东西全做完了。
再说一个更具体的:IOCP,输入输出完成端口。
1994 年,NT 3.5 里就有了这玩意儿。
那会儿”异步编程”这个词还没流行,绝大多数程序员还在用阻塞 socket 一个连接开一个线程。IOCP 的思路是:所有 I/O 完成事件排进一个内核队列,由一小撮工作线程去消费。
几万个并发连接打过来,线程数可能只有几十个。上下文切换的成本,被死死摁住。
直到很多年后,其他平台拿出类似的东西,大家才反应过来:哦,原来 Windows 在三十年前的服务器场景里就把这套机制吃透了。
今天你在各种语言里看到的 async/await、事件循环、reactor 模型,讲的都是同一件事的不同方言。
而 Windows,早就在内核里把这件事做完了,只是它不太会讲。
还有一件事,外面知道的人不多:从 Windows 10 开始,PC、服务器、Xbox、HoloLens、IoT 设备,跑的是同一个内核,内部叫 OneCore。
一个代码库,几十种产品形态,几万种硬件组合。
在软件工程里,这种”一套代码伺候所有人”的设计基本等同于自杀。但它做成了,代价是那个代码库大到你无法想象,随便改一行,得跑几十万条测试。
所以你看微软的更新说明,经常写着”修复了一些问题”。翻译过来就是:我们动了地基,但整栋楼没塌。
八、第六层地狱:把几千种硬件,吃成一个接口
游戏玩家可能更有体会。
为什么大作首发阵地永远在 Windows?
不是因为 Windows 性能最好,也不是因为微软更懂游戏。
是因为 DirectX。
在几千种不同规格的显卡、不同的显存带宽、不同的着色器架构、不同的音频芯片之间,DirectX 硬生生插了一层抽象。
游戏开发者不需要知道用户的显卡有几个计算单元、显存位宽是多少、驱动版本是多少。他只要调用 D3D 的接口,底下的运行时和驱动层,会自动把它翻译成硬件指令。
这件事在今天看来理所当然。但在 1995 年,PC 上的图形接口是一片烂泥,每家显卡厂商一套 API,游戏想多点开花,就得给每张卡写一份适配。
DirectX 干的事,本质上是把”硬件差异”这个无底洞,一次性吃进了系统层。
然后是架构迁移。
x86 到 ARM,喊了这么多年,真正难的不是指令集翻译,是生态。
Windows 的做法是:WoW64 先解决 32 位跑在 64 位上,ARM64 上再做一层 x86/x64 模拟,然后是 ARM64EC,允许一个程序里 ARM64 代码和 x64 代码互相调用。
什么意思?就是一个老插件,不用重写,也能被新的 ARM64 主程序加载。
这设计一点都不优雅,甚至在架构纯洁主义者眼里简直是异端。
但它管用。
外界总说微软动作迟缓。迟缓是真的。但它每次转身,都得拖着四十年的家当一起转,这跟一个二十岁的年轻人转身,能是一回事吗?
九、同行衬托:三条路,三种活法
要理解 Windows 的选择,最好的办法是看看别人。
| 苹果 | Linux | Windows | |
|---|---|---|---|
| 核心策略 | 技术专制,向前看 | 去中心化,各自为政 | 兼容优先,向后看 |
| 老软件命运 | 开发者不跟进就淘汰 | 依赖一升级就崩 | 尽量让它继续跑 |
| 用户成本 | 花钱买新设备 | 花时间解决依赖 | 忍受臃肿和补丁 |
| 优雅程度 | 高 | 高(理论上) | 低 |
| 谁在买单 | 用户 | 用户的时间 | 全世界的工程师 |
苹果的策略,虾神一直很佩服,也很警惕。
PowerPC 换 Intel,Intel 换自研芯片,两次架构大迁移,说换就换;32 位应用,macOS Catalina 一刀切掉,说没就没。
跑不了?那是开发者不跟进时代,请用户去骂开发者。
苹果的优雅,很大程度上建立在对历史遗产的无情抛弃上。它服务的是”愿意为体验付费的人”。
Linux 是另一个极端。
一个极度去中心化的技术集市。今天这个发行版搞 Wayland,明天那个发行版还抱着 X11;glibc 一升级,上个月编译的库立刻报符号找不到;装个显卡驱动,得先跟内核版本对一遍家谱。
服务器上是天堂,桌面上是修罗场。它服务的是”愿意为自由付出时间的人”。
Windows 选了第三条路:极其折磨工程师,但对用户和整个商业社会极度宽容。
它服务的是”明天早上八点必须开机干活的人”。
三条路没有对错,只有取舍。
但你得承认:前两条路,都需要用户先具备某种能力,要么有钱,要么有技术。
只有第三条路,把门槛降到了”会按开机键”。
十、代价:它不是神,只是把账算明白了
吹到这儿,必须泼一盆冷水。
Windows 一点都不干净。
注册表是一个没有 schema 的全局变量池,几十年下来,什么垃圾都往里塞,卸载软件留一堆键,装个软件改八百个地方。
DLL Hell 虽然有了 Side-by-Side 缓解,但历史遗留的坑还在,你永远不知道哪个程序会去覆盖系统目录里的某个库。
为了兼容,太多老接口不能删。不能删,就意味着攻击面一直在。安全债一年一年地滚,滚到最后只能靠内核补丁保护、驱动签名、虚拟化隔离这些更重的手段去兜。
还有那个所有人都骂的:更新完要重启。
而且它总挑你正要下班的时候。
以及商业公司的原罪:遥测、捆绑、默认设置里的那些小心思。
蓝屏也没消失,只是变少了。哪天你装了个来路不明的驱动,它照样能给你蓝一次。
这些都是”兼容”的利息。
你可以选择不付利息,代价是本金归零,全世界几十亿台设备上的旧软件,一夜之间不能用了。
Windows 不是没有能力变干净。它是不能。
它一旦真的干净了,身后那座由几亿个程序堆起来的城市,就得塌。
十一、结尾:它不是艺术品,是地下排污处理厂
回到开头那个问题。
盖茨凭什么当院士?
因为院士评的不是代码,是工程。
而工程的定义,从来不是”把事情做对”,是”在这个本来就不对的世界里,让它继续运转”。
Windows 最伟大的地方,从来不是它的图形界面,也不是它的开始菜单。
是它替整个计算机世界,吞下了无边无际的混乱和垃圾代码,然后把整洁和稳定,留在了最前端。
它的伟大在于,一个完全不懂电脑的退休老人,可以把二手市场买来的杂牌组装机插上电,顺畅地看新闻、跟孙子视频。
它的伟大在于,世界上任何一个不知名角落里的程序员,随手写了个漏洞百出的小工具,依然能在几十亿台设备上跑起来。
它的伟大更在于,它用自己满是伤痕、甚至略显笨拙的身躯,扛着全世界最沉重的历史包袱,走过了个人计算从零到繁荣的整个时代。
它不是陈列在玻璃展柜里的艺术品。
它是一座每天都在吞吐海量污泥、但依然能让整座城市井井有条运转的地下综合排污处理厂。
你平时看不见它,也不会感谢它。只有它停摆的那一天,你才会知道,原来马桶是需要有人通的。
工业界没有神。
只有一群人,愿意在没人看见的地方,把上一秒还在崩溃边缘的系统,扶回正轨。
写到这儿,虾神忍不住想多嘴一句,关于国内做操作系统的。
国内这几年做操作系统的团队不少,深度、统信、鸿蒙、还有各家大厂自研的内核。虾神认识其中几位大佬,说实话,单论内核功底,这帮人比我强一百倍不止,轮不到我指手画脚。
但虾神还是想说一个观察。
国内做操作系统,大部分走的是”重新来过”的路子,内核从头写,API 重新设计,生态从零建。思路很清晰:既然 Windows 背着四十年的屎山包袱,那我不要包袱不就行了?一张白纸好画图。
这个逻辑在实验室里是对的。
但到了真实世界,有一件事很多人忘了:Windows 最核心的竞争力,从来不是它的内核写得有多好。Linux 内核写得也好,Mac 内核写得也好。内核写得好这件事,全世界至少几十个团队能做到。
Windows 真正不可替代的东西,是它四十年不撕合同。
你做一个国产操作系统,内核半年写完,桌面环境一年搭好,应用商店塞几百个常用软件,这个阶段全世界掌声一片。但真正的考验是第十年、第二十年:那个 2027 年写的银行客户端,2037 年还能不能跑?那个某小厂十年前写的、源码早就丢了的驱动,你的系统认不认?
Windows 的答案是”认”。哪怕要写一千行 shim 去伺候它,哪怕要撒谎说自己是 Windows 2000,哪怕要在内核里塞一堆补丁。它认。
而一个”重新来过”的操作系统,第十年面对同样的问题,答案往往是”请开发者适配新版”。
翻译成用户能听懂的话,就是”你那个老软件,用不了了”。
这在国内可能暂时不是问题,毕竟国产操作系统现在的用户基数还小,生态里的软件大多有人维护。但一旦铺到几千万甚至几亿用户,各种稀奇古怪的历史遗留软件就会出现。到那一天,你是选择学 Windows 低头吃屎,还是选择优雅地告诉用户”对不起,不兼容”?
虾神不觉得有唯一正确的答案。苹果选了后者,活得也很好。
但苹果靠的是品牌溢价和封闭生态,用户可以接受”旧软件不能用”,因为苹果承诺新软件体验更好。如果你没有苹果那样的品牌号召力,又没有 Windows 那样的兼容性承诺,用户凭什么留在你的平台上?
所以虾神斗胆说一句:国内做操作系统的兄弟们,内核写得漂亮固然重要,但兼容性的组织能力和长期承诺,可能才是操作系统这门生意真正的地基。
内核是面子。兼容性是里子。
面子可以一年追上。里子,没个十年二十年,根本看不出你有没有。
而 Windows 用了四十年告诉全世界:我有。
十二、AI 来了:烂代码有救了,写代码的人呢?
写到这儿,本来该收工了。
但虾神刷了刷最近的新闻,觉得有件事不能不聊。
Cursor、Copilot、Claude Code……这些 AI 编程工具,一年前还是玩具,现在已经能坐下来帮你把一个两千行的屎山函数重构成人话版了。
虾神前阵子拿一个十年前自己写的、注释比代码还少的 Python 脚本喂给 AI,让它”翻译成现代 Python,加上类型标注,把全局变量干掉”。五秒钟,吐出来的东西比我自己重写还干净。
那一刻虾神的心情很复杂。一方面觉得”老子当年写的什么玩意儿”,另一方面觉得”老子以后是不是不用写了”。
然后就想到了这篇文章一直在聊的那个问题:Windows 的兼容性地狱,AI 来了是不是就没了?
你想想看。
Windows 最痛苦的是什么?不是写新代码,是旧代码不能动。
几十万个程序,源码丢了、作者死了、公司倒闭了,只剩一个二进制躺在用户硬盘里。你不能改它,只能伺候它。于是有了 Shim 引擎,有了版本号撒谎,有了一万条补丁规则,有了四十年的屎山。
但如果 AI 能直接读懂那个二进制呢?
不是反编译成一堆看不懂的汇编,是真的”理解”它在干什么,然后重写一份功能等价、但架构干净、安全合规、还能跑在新平台上的现代版本。
这事儿换人工来做,成本高到天上去了。一个 Delphi 7 写的进销存系统,二百万行,重构报价八百万,工期一年半,中间原开发者还得从海南飞回来对需求,老板一听直接摆手:能用就别动。
但 AI 不需要八百万。它不需要睡觉,不需要年假,不会跟产品经理吵架。
它只需要一堆 GPU 和电费。
如果这条路线走通了,虾神觉得不是”如果”,是”什么时候”,那 Windows 这四十年来扛着的最大包袱,可能一夜之间就有人接手了。
不是微软替他扛,是 AI 替他扛。
银行的核心系统?AI 重写,功能不变,代码规范。
医院的彩超软件?AI 重写,直接上 ARM,能耗降一半。
工厂里那个 Windows XP 上的数控程序?AI 重写,原生 64 位,还顺便修了三个隐藏了十五年的 bug。
到那一天,操作系统还需要兼容三十年老的二进制吗?
可能真的不需要了。
因为 AI 把”兼容”这件事,从运行时搬到了重构时。
你不用再在系统里养一堆补丁去哄着老程序。你直接让 AI 把老程序重写一遍,然后跑新的。
这是软件工程历史上第一次,清理历史债务的成本,有可能低于继续付利息的成本。
听起来很美对吧。
不过虾神得暂停一下这美好的想象,先说点当下的。
因为在 AI 来救场之前,我们还得先熬过眼下的日子。而眼下的微软,正在用一己之力证明一个黑色幽默:
人类写的代码,有时候比 AI 写的还像 AI 写的。
先说明,微软不缺好工程师。NT 内核那帮人到现在还是全球顶级水平,OneCore 的架构设计拿出去能当教材。
但微软近年这些操作,虾神实在憋不住要吐槽两句。
Windows 11 的右键菜单:哪位天才产品经理觉得用户只需要”复制粘贴删除重命名”?剩下的全给你塞进”显示更多选项”。于是你每解压一个 zip,得多点一下。二十年肌肉记忆的用户全被卖了,就为了 PM 晋升 PPT 上多一页”我们简化了右键菜单交互层级”。
OneDrive 自动备份,你是不是也有过这种经历:某天开机,桌面文件全多了个小云朵,全同步到云端了。你想关?设置入口藏得比你初恋的 QQ 空间密码还深。等你终于找到了,它还要弹一个对话框,声泪俱下地问你”真的要停止备份吗?你的文件可能会丢失哦”,翻译成人话就是”你确定不让我薅你了吗?”
打印机:这个不用多说了吧。Windows Update 一推送,第二天全公司打印机集体罢工,IT 小哥顶着黑眼圈来上班,第一件事不是修打印机,是给老板解释”这真的不是我的锅”。二十年前 Windows 替打印机厂商兜底,二十年后 Windows Update 自己变成了需要被兜底的那一方。
开始菜单里塞 Bing 搜索广告。锁屏界面推 MSN 新闻八卦:而且还是那种”某明星穿成这样走红毯”级别的八卦。任务栏强行绑定 Copilot 按钮,你不想用也关不掉,每次误触弹出来,比 XP 时代的 Office 曲别针”需要帮助吗?”还烦人。
虾神有时候觉得,Windows 现在像一个中年大叔:上半身穿西装打领带,下半身是条花裤衩。控制面板是 Windows 2000 的 UI,设置是 Win11 的新皮,右键菜单分裂成两代,音量调节和网络设置能从两个完全不同的入口打开两个长得完全不同的界面。一个系统里同时塞着三套 UI 范式,比楼下五金杂货铺还乱。
这不是工程能力的问题。
这是管理的锅。是”今年 OKR 是 AI 所以所有产品必须塞 AI”的锅。是”PM 为了晋升 PPT 多做一页所以必须上线新功能”的锅。是”没人敢在会上说这个改动会搞崩全球三亿用户的肌肉记忆”的锅。
好,上面那几句比较安全。下面这几句可能会掉粉,但虾神憋着不说难受。
你有没有注意过一个细节:微软这几年,越来越不像一家”工程师说了算”的公司了。
当年 Dave Cutler 主持 NT 内核的时候,代码评审是铁血纪律:一个句柄的生命周期没想清楚?回去重写。一条中断路径可能导致竟态?不修完不许下班。那时候微软的会议室里,工程师敢指着架构图对 VP 说”你这个方案不行,理由有三”。
现在呢?
现在微软的会议室里,PPT 比代码重要。你的晋升不看你修了多少 bug,看你在多大的场合做了多少次 presentation。你不需要证明你的代码能跑十年不出事,你只需要证明你的 OKR 里那个”AI 集成覆盖率”的数字比上季度涨了 12%。
印度的 IT 圈有个词,叫 “jugaad”:大概意思是”凑合着把事儿办了”。它不是完全贬义,有时候在资源极度匮乏的环境里,jugaad 是一种生存智慧。但把 jugaad 文化搬进一个拥有四十年代码遗产的操作系统团队里,结果就是你更新完系统打印机罢工了,右键菜单裂成两层皮,锁屏上弹出来的八卦标题比你写的技术文档还长。
还有个更微妙的东西:等级观念。
虾神在外企待过很长时间,经历过那种”印度 manager + 中国码农 + 美国产品”的组合。有一个经典场景至今记忆犹新:印度 lead 在会议上拍胸脯对 VP 说 “absolutely, we can deliver this in two sprints”,挂掉 Zoom 转头问中国团队:”can we do it?”中国团队说不可能。印度 lead 说:”ok,but I already said yes,so figure it out.”
这不是能力问题,是文化问题。在一个”对老板说 yes 比说出真实工期更重要”的环境里,代码质量永远是最先被牺牲的那一个。
于是你看到了 Windows 11 的现状:功能列表长得能铺满三页,发布会上的 demo 行云流水,Satya 的 LinkedIn 帖子正能量爆棚。但你的开始菜单在偷偷加载广告,你的右键菜单要多点一次”显示更多”,你的打印机,不说了,再说虾神血压上来了。
微软的人力结构变了,这个不用虾神说大家都知道。西雅图总部的印度裔员工比例这些年翻了几倍,纳德拉本人就是印度裔,这本身不是问题。纳德拉接手之后微软股价翻了十倍,Azure 做到了跟 AWS 掰手腕,这没得黑。
问题不在于印度人当了 CEO。
问题在于,当一家公司的中层管理从”工程师文化”变成”向上管理文化”,当 code review 逐渐被 PowerPoint review 替代,当”我把这事儿上线了”比”这事儿五年后会不会炸”更重要:
那你写出来的东西,跟那些需要 Shim 引擎兜底的 1998 年第三方软件,有什么区别?
区别只有一个:那些第三方软件是没资源、没文档、没测试的小破团队写的。
而你,是微软。
是那个曾经靠 Dave Cutler 的铁腕纪律、靠四十年兼容性不破金身、靠数万条测试回归流水线,撑起了全球信息产业地基的微软。
当年的奇迹,是工程师用命换来的。
现在的新功能,是 PM 用 PPT 换来的。
这就叫”印度化”?虾神不知道这个词算不算政治正确。但虾神知道一件事:
Dave Cutler 写代码的时候,不看晋升窗口。他看的是中断向量表。
而现在微软写代码的人,看的是 LinkedIn。
好了,这次真的槽吐完了。
讽刺就讽刺在这儿,Windows 最伟大的遗产,是替全世界写的烂代码兜底。
但它自己近年写的代码,越来越像需要被兜底的那一方。
所以虾神有时候会想,AI 如果真的接管了软件工程,第一个该优化的,可能不是那些二十年前的 Delphi 老系统。
而是微软自己 2024 年的某个 Pull Request。
好了,槽吐完了,说回正事。
虾神得说句更不中听的:
这个”更稳定更繁荣的软件盛世”里,不一定有你我的工位。
你别看现在 AI 写代码还得人盯着,那是今天。五年前 AI 连”猫”都认不出来,现在它能看懂四十年前的 COBOL 代码并给你画流程图。
十几年后,一个产品经理对着 AI 说:”我要一个跟 SAP 功能一样的 ERP,但是界面好看点,跑在浏览器里,预算五十万。”
AI 吐出来的东西,可能比现在一个五十人团队做三年的还靠谱。
那五十个人去哪儿了?
虾神不知道。
(好吧,虾神其实有一些猜测,但那些猜测说出来太得罪人,这篇文章的评论区已经够热闹了,就不添乱了。)
当年 Windows 替全世界的屎山代码擦了四十年屁股,擦出了一批又一批靠”维护老系统”吃饭的程序员。
你的价值,就建立在别人的混乱之上。
现在 AI 来了,要把那些混乱一次性清理干净。
清理完了,干净是干净了。
但你擦屁股的手艺,也就没人需要了。
讽刺吗?
Windows 是那个替所有人兜底的系统,AI 是那个替所有系统兜底的 AI。
而程序员,可能既不是前者,也不是后者。
只是被兜掉的那一段历史。
当然,虾神说这话不是贩卖焦虑。虾神自己也在学 AI,也在用 AI,也在一行一行地看着 AI 写出来的代码。
只是偶尔会想起王安石那句话:
看似寻常最奇崛,成如容易却艰辛。
Windows 的四十年,是四十年”奇崛”。
AI 可能让下一个四十年看起来”容易”。
但”容易”的世界里,谁来付账单,谁来写故事,谁又是故事里的人,这些问题,就不是代码能回答的了。
打完收工
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)