微軟工程師揭秘 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 激活的著名歷史。