Windows 機密文件Windows 95 原形畢露

Raymond Chen

雖然 Windows® 95 的 32 位元程式可以使用您的 32 位編譯器,16 位元程式可以使用您的 16 位元編譯器,但是 Windows 95 本身需要的是一種特殊的編譯器 ­─ 一種懂得 32 位元和 16 位元世界,而且可以彌補兩者差距的編譯器。Windows 95 還需要一個懂得如何連接兩種類型程式碼的自訂連結器,以及 VxDs 的自訂連結器 (Windows 95 的驅動程式格式)。

Windows 95 小組在語言和工具部門的協助下,推出這些特殊用途的編譯器及連結器。我相信語言部門一定覺得這個要求很奇怪:「您要我們編寫一個執行 X、Y 和 Z 的編譯器,而這個編譯器終其一生只要編譯兩個 DLL?」沒錯。不過這可是兩個相當重要的 DLL 喔!

即使這項要求明顯怪誕,語言和工具部門仍然努力完成,讓高度專業的編譯器和連結器成為 Windows 95 組建程序的一部分。當然,這個編譯器並不是馬上成形,Windows 小組是根據初版,以實作最佳化和修正錯誤的方式定期更新。

有一天,Windows 95 組建的速度不知為何慢得出奇。平常只要幾秒鐘就能夠連結的檔案,竟然花了數分鐘。雖然檔案還是順利產生,但大夥兒已經等到天荒地老了。而且,這種現象還不只發生在一部開發人員的機器上,而是整個小組的機器上。難道是我們的程式碼在連結器中突然遇到病態案例嗎?莫非是碰到連結器錯誤?

經過偵錯之後,終於找出問題所在。最新版的連結器含有一個語言部門忘記移除就交給 Windows 小組的診斷程式碼。這個診斷程式碼將其輸出記錄在某個編譯器小組成員電腦上的一個檔案,而那部電腦剛好在關機狀態 (這讓我想起 Leslie Lamport,他把分散式系統描述成因為一部您根本沒聽過的電腦當掉,就完全不能視事的系統,他也因為說了這段話而聞名遐邇)。

fig84a.gif

那版連結器已經逍遙的執行了好幾個禮拜。每當有人在建置 Windows 95 的時候連結 VxD,就會更新那部開發人員電腦上的那個檔案。只要那部電腦是在開機狀態,並且連上網路,就不會引起任何注意。但是一旦關機時,所有的動作就會變得像老牛拉車一樣。

問題找出之後,編譯器部門人員馬上就給 Windows 小組一個修補程式,從連結器移除那個診斷程式碼。

不同的人講述這個故事,都有不同的妙語作結。如果是由我講述,我的妙語是:「後來那位編譯器開發人員轉到 Windows 小組,最後變成我的老板」。我經常把這個故事當作一種溫和的揶揄重複講述,樂此不疲。

但如果講述人換成我的老板,他的妙語就很與眾不同了:「其實那個診斷程式碼根本不是我寫的,寫的人是我一位同事,他最後決定不在他的電腦,而是在我的電腦填滿診斷資訊!」

Raymond Chen 的網站「The Old New Thing」以及同名著作均探討 Windows 的歷史和 Win32 程式設計。他的 DNA 佈滿了無作用程式碼。