本文来自微信公众号: 宇众不同的露萱 ,作者:宇众不同的露萱,原文标题:《历史包袱变成了最大的护城河:为什么 Windows 保留 Win32 API?》
2026年5月,微软Azure首席技术官Mark Russinovich对着镜头说了一句话:
"90年代有谁会预料到,Win32在2026年仍然是一等API?我可以安全地回答——没有。"
他顿了顿,又补了一句:
"2026年应该有飞行汽车了,而不是Win32。"
这句话在开发者社区炸了锅。
不是因为他说错了。
而是因为,一个市值三万亿美元的公司,它的首席技术官,亲口承认:
我们花了三十年,没能换掉自己最老的那块地基。
你有没有想过,为什么?
故事要从1988年讲起。
那一年,比尔·盖茨做了一件当时很多人看不懂的事:他从DEC公司挖走了Dave Cutler。
Cutler是谁?
VMS操作系统的首席架构师。那个年代,VMS是企业级操作系统的天花板。抢占式多任务、虚拟内存、对称多处理——这些概念在80年代末,绝大多数程序员听都没听过。
盖茨要他做一件事:
给微软写一个"真正的"操作系统。
注意,是"真正的"。
因为当时的Windows 3.x,说白了,只是DOS上面套了一层图形壳子。没有内存保护,没有真正的多任务,一个程序崩溃,整个系统跟着死。
Cutler带了二十多个DEC的老部下,在雷德蒙德扎了五年。
花了1.5亿美元。
1993年,Windows NT 3.1发布。
Win32 API,就是在那一刻诞生的。
事情真的是这样吗?
Win32从设计之初,就不是一个"永恒方案"。
Cutler的团队很清楚,这套C风格的API笨重、啰嗦、充满历史包袱。光是创建一个窗口,你就得写几十行模板代码。
微软自己比谁都清楚这一点。
所以从1998年开始,他们启动了一轮又一轮的"替代计划":
MFC,封装Win32,让C++程序员少写点代码。
WinForms,.NET时代的GUI方案。
WPF,号称"下一代Windows界面"。
Silverlight,跨平台富客户端。
WinRT,Windows 8的全新运行时。
UWP,"通用Windows平台",微软押上全部身家的未来。
你数数,六次。
二十年间,微软至少六次试图埋葬Win32。
结果呢?
全部失败。
MFC成了遗产代码的代名词。Silverlight 2021年彻底停止支持。UWP?连微软自己的应用都在往回迁。
如果你是当年的工程师,你会怎么选?
你面前有两条路:
一条,花三年重写所有东西,赌用户愿意跟着你迁移。
另一条,在老地基上继续盖楼,丑是丑了点,但不会塌。
微软选了六次第一条路。
市场替它选了六次第二条。
看到这里,也许你会觉得:
是不是Win32设计得太好了?好到不需要替换?
不是。
Win32的设计有很多问题。调用约定混乱,ANSI和Unicode双版本并存,错误处理靠返回值而不是异常,文档里到处是"此函数已弃用,但仍可用"。
Raymond Chen——那个在微软干了三十多年、写了"The Old New Thing"博客的传奇工程师——讲过无数这样的故事:
某个游戏在Windows 95上依赖了一个未定义行为。
到了Windows XP,团队修了这个行为。
游戏崩了。
用户投诉信像雪片一样飞来。
最后怎么办?
Windows团队加了一段特殊代码:如果检测到是这个游戏的进程,就恢复那个"错误"的行为。
这不是段子。这是真实发生的工程决策。
真正的问题来了:
为什么微软不能像苹果那样,说一句"旧应用不兼容了,大家重新适配"?
答案只有一个词:
生态。
1995年,Windows 95发布。
那一年,全球有几十万开发者用Win32 API写软件。银行系统、医院管理系统、工厂控制软件、会计软件、ERP……
这些软件,不是写一次就扔的。
一家德国工厂1997年用Win32写的产线控制系统,到2020年还在跑。
一家日本银行2001年开发的柜台终端程序,到2025年还在用。
它们不会重写。
因为重写的成本,远远超过继续运行的成本。
因为写这些程序的人,可能已经退休了。
因为文档可能已经丢了。
因为没有人敢碰一个"正在正常运行"的系统。
Windows的兼容性,不是一项技术特性。
它是一份合同。
微软对全世界几百万开发者说:你在我这里写的代码,我保证它十年后、二十年后、三十年后还能跑。
这份合同,没有写在任何法律文件里。
但它比任何法律文件都有约束力。
因为一旦撕毁,开发者就会离开。
而开发者一旦离开,Windows就不再是Windows。
如果故事到这里结束,它就不会改变世界。
代价是巨大的。
Windows 11的安装包里,藏着大量你永远不会用到的兼容层。SysWOW64目录里跑着32位模拟。注册表里塞满了为特定应用准备的shim。
每一次Windows更新,测试团队要验证的不只是"新功能能不能用",还有"三十年前的老程序会不会挂"。
这就是为什么Windows更新总是那么慢、那么谨慎、那么让人焦虑。
不是工程师不行。
是他们背着一座山在跑步。
苹果可以轻装上阵,因为macOS的用户基数小,企业渗透率低,开发者社区相对集中。
Linux可以更激进,因为它的用户大多是自己编译、自己折腾的技术人群。
Windows不行。
Windows的用户是全球十五亿台设备。是医院、是学校、是政府窗口、是你妈的电脑。
它不能"快速迭代,打破常规"。
它只能背着三十年的包袱,一步一步往前走。
2026年的技术世界,到处都在讲"颠覆"。
Rust要颠覆C。
容器要颠覆虚拟机。
LLM要颠覆编程本身。
但你仔细看——
Docker的核心思想是什么?
是"我保证你的应用在任何机器上行为一致"。
这不就是Win32当年做的事吗?
Kubernetes的API为什么从1.0到现在几乎不破坏兼容性?
因为Google知道,一旦破坏,几百万个YAML文件就变成废纸。
Linux内核为什么坚持"永远不破坏用户空间ABI"?
Linus Torvalds说过一句著名的话:
"我们不破坏用户空间。这是规则。"
这不是保守。
这是对生态的敬畏。
当然,也有人在走另一条路。
Apple从Intel切到ARM,干脆利落。
Google的Android每个大版本都在改API。
Rust社区每年都在讨论"要不要稳定1.0之前的某些行为"。
两种选择,没有对错。
但Windows的故事告诉我们一件事:
当你承诺了兼容,你就不再只是一家公司。你成了一种基础设施。而基础设施,是不能随便拆的。
Win32活到今天,不是因为它优雅。
不是因为它高效。
不是因为没人想杀它。
而是因为杀它的代价,比养它更大。
这才是工程世界最残酷的真相:
真正决定一个技术生死的,从来不是技术本身。而是有多少人,把命运押在了它上面。
本内容由作者授权发布,观点仅代表作者本人,不代表虎嗅立场。如对本稿件有异议或投诉,请联系 tougao@huxiu.com。
本文来自虎嗅,原文链接:https://www.huxiu.com/article/4881602.html?f=wyxwapp