虎嗅APP 14小时前
历史包袱变成了最大的护城河:为什么 Windows 保留 Win32 API?
index.html
../../../zaker_core/zaker_tpl_static/wap/tpl_keji1.html

 

本文来自微信公众号: 宇众不同的露萱 ,作者:宇众不同的露萱,原文标题:《历史包袱变成了最大的护城河:为什么 Windows 保留 Win32 API?》

2026 年 5 月,微软 Azure 首席技术官 Mark Russinovich 对着镜头说了一句话:

"90 年代有谁会预料到,Win32 在 2026 年仍然是一等 API?我可以安全地回答——没有。"

他顿了顿,又补了一句:

"2026 年应该有飞行汽车了,而不是 Win32。"

这句话在开发者社区炸了锅。

不是因为他说错了。

而是因为,一个市值三万亿美元的公司,它的首席技术官,亲口承认:

我们花了三十年,没能换掉自己最老的那块地基。

你有没有想过,为什么?

一个从 DEC 挖来的人

故事要从 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 活到今天,不是因为它优雅。

不是因为它高效。

不是因为没人想杀它。

而是因为杀它的代价,比养它更大。

这才是工程世界最残酷的真相:

真正决定一个技术生死的,从来不是技术本身。而是有多少人,把命运押在了它上面。

评论
大家都在看