第二章:微軟的特洛伊木馬 —— DirectX
2024 年,一位剛畢業兩年的遊戲工程師,準備將他的第一款獨立遊戲推出市場。他用 Unity 寫,目標平台六個:Windows、Mac、Linux、iOS、Android、Switch。每一個平台背後跑的是不同的繪圖 API——DirectX、Metal、Vulkan、加上主機廠自己的專屬介面——每一套都有自己 的怪癖、自己的 bug、自己的除錯工具。同一段 shader 邏輯,他要調校到每一個 API 上都能正確運行,才算完成工作。
他心裡覺得這件事天經地義。Graphics API 嘛,自然是每家公司有自己的一套。Windows 用 DirectX,Apple 用 Metal,Linux 用 Vulkan——就是這樣。
錯。
1996 年,整個 PC 3D 繪圖世界,跑的是同一套 API。它叫 OpenGL,由一家叫 Silicon Graphics 的公司制定,開放標準、跨平台、文件完整。John Carmack 用它寫《Quake》;好萊塢特效工作站用它;CAD 軟體用它畫工程圖。
它本來可以成為繪圖世界的 HTTP——一條所有人共用的底層河道,上面百花齊放。
但它沒有。
它在 1997 到 1999 年之間,被一家從未正面與它競爭過的公司慢慢勒斃。兇手沒有留下指紋。受害人 SGI,甚至在臨死之前,親手簽了自己的死亡證明。
這一章要還原的,是這宗案的現場。因為這宗案,不是 1999 年結的。它的贓物,今日仍在被瓜分——每一位寫 Vulkan 又要寫 Metal 的工程師、每一家要同時養多支 platform team 的遊戲公司、每一個想離開 Windows 但成本高到放棄的用戶——都是受害者家屬。
I. 作案動機
要理解微軟為何一定要殺 OpenGL,先要理解 1994 年那個夏天 Redmond 的恐懼是什麼。
Windows 95 要出貨了。32 位元、記憶體保護、統一 API——這些都是微軟用了五年時間,向企業客戶、向資訊長、向財星五百強講到口乾的賣點。一切看似順風順水,直到一位叫 Alex St. John 的工程師做了一件很簡單的事:他把市面賣得最好的幾款 DOS 遊戲,裝到 Windows 95 上面跑。
《Wolfenstein 3D》幀率剩 三成。《Doom》時不時當機。《SimCity 2000》連音效都發不出來。
St. John 寫了一份內部備忘錄,最後一句很不客氣:「如果我們照這樣出貨,Windows 95 會成為消費者歷史上最尷尬的遊戲平台。」
備忘錄直接遞到蓋茲辦公室。
這個場景表面上是一個技術問題——作業系統的抽象層吃掉了太多 CPU 週期,遊戲跑不順。但蓋茲看到的不是技術問題,他看到的是一條直接威脅 Windows 壟斷根基的縫。
縫是這樣的:當時會買家用 PC 的人,很大一部分不是為了跑 Excel,而是為了打遊戲。如果 Windows 95 打不動遊戲,這批消費者就會繼續停留在 DOS,又或者更糟——他們會去買一台 Mac、一部 PlayStation、一台 Amiga。而一旦這批年輕用戶離開 Windows,十年之後他們走進辦公室,就不會再是 Windows 的天然擁護者。
換句話說,遊戲市場看上去是一個毛利低、麻煩多、顧客煩的下游市場。但它是整個 Windows 帝國的入口匝道。這條匝道如果塌了,Office 與 Windows Server 的護城河雖然還在,但會開始有水滲進來。
蓋茲沒有說這麼多。他只是批給 St. John 一間沒有窗戶的會議室、一支小團隊、加一句「你要什麼資源直接來找我」。
II. 武器鍛造
St. John 手下兩個工程師,Craig Eisler 與 Eric Engstrom,三個人被公司內部半戲謔半敬畏地叫做 Beastie Boys——因為他們都留長髮、穿 T 恤、有一種在微軟 dress code 邊緣遊走的氣質。他們要做的事,技術上講很簡單:寫一組 API,讓遊戲程式設計師可以繞過作業系統,直接跟硬體對話。
這組 API 分成幾個子系統。DirectDraw 處理 2D 繪圖,DirectSound 處理混音,DirectInput 處理搖桿與滑鼠,Direct3D 處理 3D 渲染。統一包裝之後,對外叫 DirectX。第一版 1995 年 9 月釋出,刻意低調,連名字都叫做 Game SDK——不敢太張揚,因為他們心知肚明:技術只是戰鬥的一半。
另一半,是要說服那群根本不信任 Windows 的遊戲工作室。尤其是 id Software 那群人。
這裡要停一下——因為這個 pattern 會在本書之後每一章重複出現。
微軟從來不是靠技術贏的。 DirectX 頭幾個版本寫得很差,文件差,執行緒不安全,記憶體管理一塌糊塗。Carmack 在他個人的 .plan 檔案裡貼過一篇公開信,逐條拆解 Direct3D 的設計缺陷,講到最後說「我會繼續用 OpenGL」。這篇文一出,當時所有有自尊心的 3D 工程師都點頭。
但微軟手上有一張 OpenGL 沒有的牌——它控制著作業系統本身。
這張牌的意思是:微軟可以決定哪一個 API 在 Windows 上跑得順、哪一個要自己搞驅動、哪一個可以放入作業系統的預設安裝包。它可以決定給哪家顯卡廠商優先技術支援、哪家要自己來。它可以決定 DirectX 的下一版什麼時候出、出了之後顯卡廠商要多久之內支援。
這張牌用來打正面戰是沒用的。但用來慢慢箍住 ecosystem,是致命武器。
III. 收編
Beastie Boys 的第一個目標,是 id Software——當時 PC 遊戲界的技術圖騰。想法很簡單:如果連 id 都肯過來 Windows,其他工作室還有什麼理由不跟?
微軟派去談判的人,是一位當時在 Windows 95 專案組內部的年輕產品經理。他帶去給 id 的條件很爽快:id 把《Doom》移植到 Windows 95,微軟出全部工程資源,賣出去的錢 id 自己全部袋走。
Carmack 同意了。沒有親自動手——派副手 Dave Taylor 跟微軟工程師合作——但他同意了。
1996 年,Doom 95 上市。它在 Windows 上跑得幾乎跟 DOS 版一樣順。底下走的,正是 DirectX 那一層薄到幾乎看不見的 API。
這筆 deal 表面上是微軟輸——付出了工程資源,自己沒收一分版稅。但實際上微軟贏了一件錢買不到的東西:一個象徵符號。
從那天起,微軟每敲一扇遊戲工作室的門——Sierra、LucasArts、Blizzard——都可以講同一句話:「連 id 都過來了。」
對話到這裡,就沒什麼好爭的了。
(順帶一提,那位飛去德州談判的年輕產品經理,1996 年從微軟離職,創辦了一家叫 Valve 的公司。他的名字叫 Gabe Newell。十幾年之後,他會做一件本書第六章要講的事——親手拆掉微軟這道牆。但那是後話。)
這裡開始顯現第一筆代價:
Doom 95 的成功,讓 id 引擎成為業界的預設選擇。之後每一代——Quake、Quake II、Quake III——都以 Direct3D 作為主要渲染路徑,微軟的工程師也配合做深度優化。當這些引擎被 license 給第三方工作室,就變成了《戰慄時空》(Half-Life)、《榮譽勳章》、《雷神之鎚競技場》的底層骨架。
這條供應鏈的終點,是 2001 年前後市面上絕大多數的 PC 第一人稱射擊遊戲,底層都是為 Direct3D 做過優化的引擎。
你想用 OpenGL 做一款同類型遊戲?可以。但你要從頭寫引擎。
IV. 詐死計
OpenGL 的守護人是 SGI——Silicon Graphics。九十年代中期,SGI 是繪圖界的神。好萊塢特效、軍用模擬器、醫療成像、CAD 工作站——背後幾乎全都是 SGI 的 IRIX 工作站在跑。一台機幾萬美元。OpenGL 在這些機器上跑了接近十年,架構成熟、文件完整、跨平台。
1996 年 Carmack 用 OpenGL 寫《Quake》,幾個月之內就把 PC 的 3D 畫質推上一個前所未見的高度。這一役,OpenGL 在 PC 遊戲圈一夜之間從「工作站用的東西」變成「真正可以拿來做遊戲的東西」。
微軟如果在 1996 年正面與 SGI 開戰,微軟會輸——因為 Direct3D 那時真的還打不贏。
所以微軟選了另一條路。
1997 年 12 月,微軟與 SGI 聯合宣佈一個合作案,叫做 Fahrenheit。新聞稿寫得很漂亮:兩家公司會共同開發下一代繪圖 API,統一 Direct3D 與 OpenGL 的未來。Fahrenheit 分三層——低階層接近 Direct3D,高階層接近 OpenGL,中階層負責場景管理。對外的說法是,這會是遊戲開發者、工作站用戶、CAD 工程師共用的下一代標準。
SGI 高層當時的盤算很合理。OpenGL 已經沒辦法在 Windows 上與一家控制著作業系統的公司硬碰。如果 Fahrenheit 可以把 OpenGL 的精神帶入 Windows,SGI 等於用一個軟性的方式守住自己的技術遺產。而微軟肯合作,證明微軟也認可 OpenGL 的價值。雙贏。
基於這個判斷,SGI 做了一個致命的決定:暫緩 OpenGL 在 Windows 上的進一步投資。反正 Fahrenheit 會來,重複做沒有意思。
兩年之後,Fahrenheit 悄悄消失。沒有推出任何可用產品。沒有記者會宣佈終止。就這樣慢慢地,從 SGI 與微軟的 roadmap 裡蒸發。
官方解釋是「市場條件改變」。
實際情況是這樣——在 Fahrenheit 存在的那兩年,Windows 上的 OpenGL 驅動程式支援陷入停滯。顯卡廠商(當時的 3dfx、ATI、NVIDIA、Matrox)開始接到微軟的暗示,把工程資源傾斜到 Direct3D 優化。遊戲引擎廠商感覺到風向,開始從雙 API 支援轉為 Direct3D 優先。一代本來想嘗試 OpenGL 的新進開發者,兩年沒有新工具、沒有新文件、沒有新範例,自然就轉投 Direct3D。
Fahrenheit 不是殺死 OpenGL 的唯一原因。OpenGL 的委員會治理模式本身就比不過 Direct3D 的單一決策者迭代速度;微軟對 Windows 驅動品質的控制權也是長期的結構優勢。但 Fahrenheit 做到了一件其他因素做不到的事——它讓 SGI 自願停下腳步。而那兩年的空窗期,恰好是 Direct3D 從追趕者變成領先者的關鍵窗口。
等 SGI 回過神,發現 Fahrenheit 沒有出貨的時候——
Direct3D 已經不再是 1996 年那個被 Carmack 嘲笑的 API。DirectX 5、6、7、8 一版接一版,在顯卡廠商全力配合之下迅速追上功能;到了 DirectX 8 引入可程式化 shader、DirectX 9 推出 HLSL 著色語言,整個 PC 繪圖生態的重心已經不可逆轉地傾向微軟。Carmack 依然在自家引擎裡保留 OpenGL 路徑——從《Doom 3》(2004)到《Rage》(2011),他是整個業界少數堅持不用 Direct3D 的人。但一個人的堅持,擋不住整個生態系的潮水。
SGI 本身在 2001 年開始大規模裁員,2006 年第一次申請破產保護,2009 年被整家公司收購。曾經的繪圖之神,從此只剩下一個名字。
Fahrenheit 這筆 deal 會寫入之後所有商學院的案例研究——不是作為一筆成功的合作,而是作為一個詐死計的教科書範例。你要殺一個比你強的對手,不需要跟他打,你跟他說「來一起做事」,然後用兩年時間,等他自己停下腳步。
V. 結案陳詞
1996 年 10 月,微軟在舊金山灣的阿爾卡特拉斯島——那個關過全美最凶惡罪犯的前聯邦監獄——辦了一場 DirectX 2.0 的發佈會。活動叫做 Judgment Day。幾百位遊戲工作室代表與媒體被大巴士載上島。舊牢房改成展示間,每間關著一款即將在 DirectX 上發行的遊戲。St. John 印了一份「死亡證明書」發給每位出席者,死者一欄填的是「DOS 遊戲」。
這場派對事後被內部檢討認為過於奢華,St. John 1997 年因為一連串類似事件被請離公司。
但他留下的東西,穩穩噹噹守了微軟接下來三十年。
這裡要把本章的核心論點收得清晰——為什麼 DirectX 是一匹特洛伊木馬,而不是一份禮物?
禮物是對玩家而言。玩家從此不用再改 CONFIG.SYS、不用再 debug IRQ 衝突、不用再自己動手。裝、按 Enter、玩。DOS 時代的「硬體地獄」一夜之間消失。
木馬是對開發者而言。一個用 DirectX 寫了兩三年的引擎,要移植到其他平台,等於從頭寫起。一家把全部身家押在 Direct3D 上的工作室,不會再做跨平台,因為成本太高、邊際收益太低。這個決定一做,它就正式從一家「PC 遊戲公司」變成「Windows 遊戲公司」——這兩個詞中間的距離,就是微軟的護城河。
而一旦開發者被鎖住,消費者就間接被鎖住。因為消費者買的不是作業系統,而是跑在作業系統上面的軟體。當你最喜歡的五十款遊戲全都只跑 Windows,你就會繼續買 Windows,就算 Mac 再便宜、Linux 再開放。
這個 pattern——先用便利吸引一批下游用戶,再用鎖定效應箍住中游開發者,最後反過來鎖住上游消費者——本書之後每一章都會再見到。
- NVIDIA 的 CUDA 先給遊戲玩家更漂亮的畫質,再鎖住 AI 研究員,最後全世界科技公司要買 NVIDIA GPU 才做得到 AI(第七章)
- Apple 的 iOS App Store 先給用戶方便的 app,再鎖住開發者——iOS 不允許 sideload、Apple 抽 30%——最後用戶換不了手機(本書之外的案例,但 pattern 一樣)
- 主機 SoC 先給玩家平價的 4K 遊戲體驗,再把 AMD 綁在長達十年的半客製晶片合約上,最後 TSMC 的大 die 製程經驗反過來塑造了整個 AI 晶片產業的地基(第八章)
DirectX 是這個 pattern 在消費科技史上的原型案例。之後所有的 platform lock-in,都是它的變奏。
VI. 贓物仍在被瓜分
回到開頭那位 2024 年的獨立遊戲工程師。
他要為每個平台處理不同的繪圖後端,這件事的歷史根源,就埋在 1997 年那份沒簽成的 Fahrenheit 合約裡面。如果當年 OpenGL 繼續發展,2024 年的世界可能是——一套 API、所有平台。他的遊戲寫一次,Windows、Mac、Linux、Switch 全都跑得動。他的工作室不需要養多支 QA team,不需要熬 shader 的 platform quirk,不需要每次大版本更新重修一次各平台的 driver bug。
他省下來的時間可以做什麼?可以多做兩款遊戲。可以把遊戲賣得便宜一點。可以跟大公司競爭得更激烈,因為平台稅(platform tax)沒有這麼高。
但這個世界沒有發生。
取而代之的是今日這個世界:每一個繪圖 API 屬於一家公司、每家公司用這個 API 箍住自己的平台、每一個獨立開發者都要向多位業主交租。
這個世界不是意外。它是 1994 年 Redmond 那間沒有窗戶的會議室、1996 年 Alcatraz 那場 Judgment Day、1997 年那份詐死的 Fahrenheit 合約——這一連串決定的邏輯後果。
微軟贏了這一役。但這一役贏得太乾淨、太徹底,它的副作用要到二十年後才開始顯現。DirectX 把 PC 遊戲生態鎖死在 Windows 的同時,也把 Windows 本身鎖 進了一個越來越封閉的循環——每一層新的抽象都為了保護上一層的商業利益,而不是為了讓開發者觸及硬體。需要自由度的人——科研工程師、伺服器管理員、那些日後會成為 AI 研究員的人——自然就往 Linux 走。不是因為他們記恨微軟,而是因為 Windows 在結構上已經不適合他們的工作方式。
等到 2012 年 AlexNet 點燃深度學習革命的那一刻,AI 的整個生態——從 CUDA 工具鏈到 PyTorch 框架到資料中心作業系統——早已長在 Linux 的土壤上。微軟花了三十年打造的 Windows 護城河,在 AI 時代被繞過去了。
這個故事是第五章的主題。
但在到達那一章之前,我們要先去東京。因為就在 Redmond 慶祝 DirectX 勝利的同一段時間,太平洋對岸,一家日本公司正在計劃一件讓蓋茲睡不著覺的事——
他們要把一台客廳主機,做成一部電腦的模樣。
而這部電腦,會跑 Linux。
