第二章: 微軟的特洛伊木馬 —— 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,是致命武器。