微軟的王朝建立在 API 之上#
微軟之所以能稱霸個人電腦市場數十年,核心原因不是 Windows 有多好用,而是 Windows API。開發者為 Windows 寫應用程式,使用者因為這些應用程式而購買 Windows,形成了一個幾乎無法打破的正向循環。
但 Joel 認為,微軟正在從兩個方向同時失去這個優勢。
第一個威脅:Web 應用程式#
Web 應用程式讓作業系統變得不那麼重要了:
- 應用程式跑在瀏覽器裡:使用者不再關心底下的作業系統是什麼,只要有瀏覽器就能工作
- 跨平台成為自然:一個 Web 應用天生就能在任何作業系統上執行
- 部署模式改變:不再需要在每台電腦上安裝軟體,只需要一個 URL
- 開發者的關注點轉移:越來越多開發者選擇開發 Web 應用而非桌面應用,因為觸及的使用者更多
Web 應用的崛起是對微軟的「外部威脅」——這是市場趨勢的自然演變,微軟很難阻止。但第二個威脅卻是微軟「自己造成的」。
第二個威脅:微軟自己的 .NET 策略#
這是 Joel 分析中最尖銳的部分。微軟推出 .NET 和 managed code 的策略,實際上是在破壞自己最大的優勢——Win32 API 的生態系統。
兩個陣營的內戰#
Joel 觀察到微軟內部存在兩個對立的陣營:
- Raymond Chen 陣營(向後相容派):Raymond Chen 是微軟 Windows 團隊的傳奇工程師,他極度重視向後相容性。他的理念是:不管舊程式寫得多爛、用了多少未公開的 API,新版 Windows 都必須能正確執行這些程式。這種做法成本極高,但它確保了 Windows 生態系統的穩定性
- MSDN Magazine 陣營(新技術派):這個陣營不斷推出新的框架和技術(.NET、WPF、Silverlight 等),鼓勵開發者「拋棄舊技術、擁抱新世界」。每隔幾年就有一套新的「革命性」框架要求開發者重新學習
當微軟告訴開發者「不要再用 Win32 了,改用 .NET」的時候,它實際上是在對開發者說:「你過去十年投資在我們平台上的所有知識和程式碼,現在都不算數了。」這個訊息的破壞力是巨大的。
開發者的反應#
面對微軟不斷變動的技術策略,開發者的反應是合乎邏輯的:
- 既然遲早要換技術,為什麼不換到 Web? 如果我必須重寫我的應用程式,為什麼不直接寫成 Web 應用?至少 Web 標準比微軟的框架穩定得多
- 技術疲勞:COM → COM+ → .NET → WPF → Silverlight… 開發者厭倦了每隔幾年就要重新學習一套新框架
- 信任流失:如果微軟對自己過去的技術都不尊重,開發者為什麼要信任微軟當前推薦的技術?
Raymond Chen 的向後相容哲學
Joel 特別推崇 Raymond Chen 的工作。Chen 在他的部落格中記錄了無數個為了保持向後相容性而做出的工程努力,例如:
- 某些舊版遊戲會讀取未公開的記憶體位址,Windows 團隊就在新版中確保那些位址的內容符合舊程式的預期
- 某些程式依賴了 Windows 的 bug,修復這些 bug 會導致這些程式崩潰。Windows 團隊的做法是:保留 bug 的行為,但只對那些特定的程式啟用
- 向後相容的工作量極其龐大,需要測試數千個舊程式,確保每一個都能正常運作
這種對向後相容的承諾,是 Windows 生態系統最寶貴的資產。而 .NET 策略正在侵蝕這個資產。
Web 成為新平台#
Joel 的結論是,微軟在兩面夾擊之下正在失去 API 戰爭:
- 外部:Web 應用讓作業系統 API 變得越來越不重要
- 內部:微軟自己的新技術策略推動開發者離開 Win32,卻沒有提供一個同樣穩定和有吸引力的替代品
- 結果:Web(HTML + CSS + JavaScript)正在取代 Windows API 成為開發者的主要平台
這篇文章寫於 2004 年,但它的分析在今天看來驚人地準確。Web 確實成為了主流的應用平台,而微軟後來也不得不接受這個現實(推出基於 Chromium 的 Edge 瀏覽器、支援 WSL、擁抱 Open Source 等)。
對其他公司的啟示#
微軟的故事提供了一個深刻的教訓:
- 不要破壞你自己的護城河:如果你的優勢建立在開發者生態系統之上,就不要做任何讓開發者覺得他們的投資可能歸零的事情
- 向後相容是一種承諾:它告訴開發者「你在我們平台上投入的時間和精力是安全的」
- 技術進步不能以犧牲信任為代價:即使新技術客觀上更好,如果推廣方式破壞了開發者的信任,最終損失會遠大於收益