为什么 Windows 11 的界面看起来像是一个由不同时代碎片拼凑而成的“缝合怪”?为什么开发者在构建 Windows 应用时,面对十几种框架无所适从?
微软前首席技术官、PowerShell 之父 Jeffrey Snover 近日发表了一篇深度博客,以内部人士的视角,犀利地剖析了 Windows GUI 策略在过去几十年间如何一步步走向碎片化、混乱与自我毁灭。他将这种现象称为 “Boof-a-rama”(聪明人做蠢事),揭示了技术决策背后深刻的内部政治与战略摇摆。

📜 历史回顾:从“统一圣典”到“巴别塔”
1. 🏛️ 黄金时代 (1985-1990s):Win32 的统治
- 状态:一切都很简单。开发者只需掌握 C 语言 和 Win32 API。
- 标志:Charles Petzold 的《Programming Windows》被誉为开发者的“圣经”,所有人都遵循同一套规则。
- 转折:90 年代,微软引入 MFC, COM, OLE, ActiveX。Snover 指出,这些组件架构虽然强大,但引入了巨大的认知复杂性,让 Windows 开发变得臃肿不堪。
2. ⚔️ 第一次内战:WPF vs. C++ (2003-2006)
- 愿景:2003 年,微软展示了 Longhorn (Vista) 的宏伟蓝图,核心是 Avalon (即后来的 WPF) —— 一个基于 GPU 加速、矢量渲染、XAML 驱动的现代化 UI 框架。
- 背叛:2004 年,风向突变。高层下令“所有新开发必须用 C++”。
- 后果:
- WPF 被边缘化:尽管 WPF 随 Vista 发布,但 Windows 外壳(Shell)本身却拒绝使用它,仍由旧 C++ 代码构建。
- 团队决裂:这导致了 Windows 工程团队 与 .NET 团队 之间的深刻怨恨。WPF 失去了作为“未来唯一标准”的地位,Silverlight 随后兴起又迅速消亡。
3. 🎭 第二次内战:Silverlight vs. HTML5 vs. WinRT (2007-2012)
- 摇摆:
- 2007 年:微软力推 Silverlight 作为跨平台未来。
- 2010 年:突然宣布 Silverlight 已死,HTML5 才是王道。
- 2012 年:Windows 8 发布,WinRT 横空出世,宣称原生 C++ 回归。
- “饥饿游戏”时刻:Snover 生动地描述了 Build 2012 大会上的混乱场景:“开发者听到的是:未来是 WinRT,同时 HTML+JS 是一等公民,而且 .NET 仍然有效,而且 C++ 回来了,而且你应该写 Metro 应用,而且你的 WPF 代码还能用……这不是策略,这是六个团队争相抢夺开发者注意力的《饥饿游戏》。”
- 结局:企业开发者被 UWP 的沙箱限制和商店强制要求吓退,纷纷逃离。
4. 🌀 现代乱象 (2015-至今):14 年转向 14 次
进入 Windows 10/11 时代,混乱并未停止,反而加剧:
- 频繁更名与重构:从 UWP 到 Project Reunion,再到 WinUI 2、WinUI 3、Windows App SDK。
- 官方弃疗:微软自己的产品(如 Office、新版 Outlook)都不再使用推荐的 WinUI 3,转而投向 WebView2 (Web 技术) 或保留旧代码。
- 数据惊人:如今的 Windows 生态充斥着 5 种编程语言 驱动的 17 种 GUI 技术!
📊 当前 Windows GUI 技术栈全景图
Snover 列出了这份令人眼花缭乱的清单,展示了极度的碎片化:
| 类别 | 框架/技术 | 状态/评价 |
|---|---|---|
| 微软原生 (legacy) | Win32 (1985) | 仍在广泛使用,Petzold 的书依然有效 |
| MFC (1992) | 维护模式,C++ 包装器 | |
| WinForms (2002) | 仍是快速开发数据录入表单的首选 | |
| WPF (2006) | 强大但被微软“冷处理”,不再有新投资 | |
| 微软原生 (modern) | WinUI 3 (2021) | 官方推荐的“现代”答案,但路线图不明 |
| MAUI (2022) | .NET 团队的跨平台选择,取代 Xamarin | |
| 微软 Web 混合 | Blazor Hybrid | 在 WebView 中跑 .NET Razor |
| WebView2 | 将 Chromium 嵌入原生应用(Teams/Outlook 都在用) | |
| 第三方霸主 | Electron | 目前部署最广泛的 Windows GUI 技术 (VS Code, Discord) |
| Flutter | Google 的跨平台方案 | |
| Qt | 严肃的跨平台工业级选择 | |
| Tauri | Rust 后端的轻量级 Electron 替代者 | |
| 其他 | Avalonia | WPF 的精神继承者 (开源) |
| React Native | Facebook 方案的 Windows 移植版 | |
| Delphi / JavaFX | 依然在生产环境中顽强生存 |
💡 核心症结:Boof-a-rama (聪明人做蠢事)
Snover 创造了一个新词 “Boof-a-rama” 来形容这种局面:一群极其聪明的人,因为内部政治、过早的承诺和混乱的商业策略,共同制造了一个愚蠢的结果。
- 技术本身无罪:WPF、UWP、WinUI 单独看都是优秀的技术。
- 死于内耗:它们往往不是被市场淘汰,而是被内部团队斗争(Windows 团队 vs. .NET 团队)、CEO 更迭带来的战略急转弯以及开发者大会上的过度承诺所扼杀。
- 信任崩塌:这种不可预测性导致像 Charles Petzold 这样的权威作者在 2012 年后停止了《Programming Windows》的更新——因为连他也无法确定下一秒哪个框架会被废弃。
混乱何时休?
Jeffrey Snover 的这篇博文不仅是对历史的复盘,更是对微软现状的严厉批评。
- 开发者的困境:面对 17 种选择,新手无从下手,老手不敢投入。
- 用户的代价:最终体现在 Windows 11 上,就是视觉风格的不统一、性能表现的参差不齐以及体验的割裂感。
- 未来的隐忧:只要内部政治和战略摇摆依然存在,WinUI 3 是否会成为下一个被“边缘化”的牺牲品?
对于微软而言,要重建开发者的信任,需要的不仅仅是推出一个新的框架,更需要停止内战,给出一个十年不变的坚定承诺。否则,Windows 桌面开发生态将继续在“Boof-a-rama”中沉沦,将市场份额拱手让给 Web 和跨平台框架。











评论