微软工程师揭秘 Windows 95 UI 如何“迁移”到 Windows NT
微软资深工程师 Raymond Chen 近日在官方博客披露了一段 Windows 历史:Windows 95 用户界面(UI)是如何迁移到 Windows NT 4.0 的?这背后不是简单的代码复制,而是一场复杂的跨代码库移植工程。
尽管 Windows 95 和 Windows NT 的窗口管理器都源自 Windows 3.1,但两者在多年演进后已严重分叉。因此 NT 团队没有直接拷贝 Win95 的窗口管理器,而是把 Win95 代码当作参考实现,再在 NT 代码库中重新实现功能,例如:
-
RegisterClassEx
-
SetScrollInfo
-
窗口右上角的关闭按钮行为等
而对于资源管理器(Explorer)及其它 shell 组件,则处理更为直接:这些部件“几乎按原样”被移入 Windows NT 代码库,之后再做必要修改使其符合 NT 特性(如 Unicode 支持)。
对于用户模式 shell 等组件,NT 团队做出的修正也合并回 Windows 95 的代码库。这意味着下一次 Windows 95 UI 的发布版本就不再必须重新修很多问题。为了防止 NT 团队的改动在 Windows 95 构建中引入 bug,他们采用多种保护措施:
- 用
#ifdef WINNT等宏来隔离 NT 专属代码。 - 对于一些改动(如上述
sizeof改为sizeof(...) / sizeof(...)),因为对 Windows 95 模式下除以 1 无影响,所以可以直接引入,而无需特殊宏隔离。
Raymond Chen 回忆,微软当时使用名为 Source Library Manager(SLM,工程师昵称为“slime”)的源代码管理系统。不同于现代分支管理工具,SLM 需要手动同步代码修改至两套平台,虽流程部分自动化但远非今日的 git 合并般简单。
值得一提的是,Windows 95 Shell 移植至 NT 的工程由另一位微软元老 Dave Plummer 带队。Plummer 也是 Windows 产品激活系统的设计者,见证了 FCKGW 密钥流出并绕过 XP 激活的著名历史。

