微軟和開放,一段不得不說的往事

按:本文發表於2007年11月《程序員》雜誌。一些讀者要求將此文發表於網上,現經徵得原作者同意,在本人博客上將此文予以轉載。

 

 

隨着OOXML與ODF的競爭爲世人所知,微軟又一次與開放扯上了關係。9月初OOXML在ISO的投票失敗之後,就免不了有一批微軟的粉絲們忿忿不平,他們很無辜地質問道,不是要一個開放文檔標準嗎?OOXML不是開放文檔標準嗎?爲什麼要反對呢?難道微軟提出的開放標準就不是開放標準嗎?當然對面陣營的人士也不含糊,他們憑直覺抗拒把微軟與開放並列,並且質疑OOXML厚達數千頁的說明規範是一種陰謀,或者至少會反對在ODF之外另立一個開放文檔標準。不過不能否認,僅從法理上看,OOXML的開放性並不存在什麼問題。其唯一的問題就是OOXML背後的名字——微軟。在越來越開放的軟件產業裏,微軟幾乎是傳統封閉勢力的最後一塊保留地。儘管做出了一些小的、無足輕重的姿態,但是在整體上講,它仍然強硬地抗拒開放的趨勢,禁止在自己的幾乎任何產品和項目中使用和參與開放軟件,並且在各種場合散佈反對開源的觀點,試圖使人們的思想重新回到十數年前的狀態。這些都不假,但是具體到OOXML這件事情上,微軟的“開放性”似乎又確實無可指責。這就給我們討論這一話題帶來了困難:總不能僅憑臆測就妄斷是非曲直吧。


在這種時候,講一點實證主義是有好處的,認真地瞭解一點歷史故事,看看歷史上微軟在開放標準領域的所作所爲,有助於我們更好地理解現在正在發生的事情。


很遺憾的,在微軟不長的歷史中,每次與開放扯上關係,幾乎都是充當反面教員的角色。人們記憶猶新的,如微軟分化和吞噬Java的企圖,在Web標準方面與W3C唱對臺戲的故事。然而有一段幾乎被人遺忘的精彩故事,其實卻能更全面、更深入地揭示微軟對於開放標準的策略和手段。現在就讓我們來回顧一下這個充滿了權謀、利誘、屈膝投降和最終悲劇收場的真實往事。


1. 和平年代
這段往事發生在實時3D計算機圖形API領域。


計算機圖形學就是用數學計算和軟硬件手段在計算機輸出設備上繪製圖形的學問,1970年代以來,隨着相應設備和研究的進展,計算機圖形學獲得了快速的發展。人是視覺動物,因此圖形毫無疑問是計算機最重要的應用領域之一。一開始,計算機圖形的主要應用是在科學和工程方面,比如統計圖表、CAD等。1970年代末期,視頻遊戲出現了,計算機圖形學很快從壁壘森嚴的國家實驗室和軍方研究機構走出來。不過那個時候很少有人想到,計算機圖形最終能夠實施繪製以假亂真的三維真實感圖形,營造一個虛擬現實。


1992年斯皮爾伯格的《侏羅紀公園》引起全球轟動,計算機繪製真實感圖形的能力已經無人質疑,而這一領域的進展將給遊戲、CAD、教育、科學、管理和軍事等幾乎所有IT應用領域帶來完全革命性的變化。毫無疑問,這個領域是兵家必爭之地。

但是怎麼個爭法呢?做圖形硬件?當然好,但是很快就會有競爭對手。做應用軟件或者遊戲,不錯,不過也是侷限於一時之爭。在IT領域裏,真正高層次的競爭是工業標準的競爭,那麼在計算機圖形領域裏,最重要的工業標準是什麼呢?毫無疑問,就是圖形API。所有的開發者都希望用統一的方式編寫圖形程序,這就給在這個領域裏形成工業標準創造了條件。一旦這樣的API標準出現並且被接受,那麼所有的硬件設備製造商都得老老實實地實現這個API標準,並儘量對它實施優化件,所有的平臺製造商都得支持這個API標準,所有軟件開發商都得在這個API之上開發圖形軟件。誰要是掌握這個標準,就可謂挾天子以令諸侯,一呼天下應。意識到這一點,就不難明白,3D圖形API是影響整個計算機圖形工業的重大標準,茲事體大,不可等閒視之。也正是因此,絕不應該讓這麼重大的技術標準落入一家把持之下。


在當時,因爲《侏羅紀公園》繪製逼真的恐龍場景而聞名於世的SGI當然是這個領域的領先者,事實上,當時SGI手上有三大法寶——其一是SGI圖形工作站,其二是專門針對圖形應用而優化的UNIX變體IRIS,其三是被稱爲IRIS GL的3D真實感圖形API。這個IRIS GL這是經過在SGI工作的頂尖計算機圖形學專家和工程師們數年心血的結晶,乾淨、清晰而且非常先進,在當時可謂無人可望其項背。


SGI本來坐居高端圖形產業的頂峯,似乎可以高枕無憂。不過當時SGI也發現獨孤求敗的滋味並不好受,至少業績的進一步成長受到了明顯的限制。於是SGI決定將IRIS GL開放出來,讓它儘快成爲工業標準。SGI完全就是無私奉獻嗎?它是不是想憑藉OpenGL控制圖形工業?我們不得而知,不過無論是當時還是事後來看,這一舉動有巨大的進步意義。相關廠商一拍即合,1992年初,OpenGL體系結構審覈委員會(OpenGL Architecture Review Board,簡稱OpenGL ARB)正式成立,當年7月,經過認真審覈和提高的OpenGL 1.0規範正式出爐,標誌着3D圖形API正式步入開放時代。


實事求是地說,雖然已經冠以 “Open”的名號,不過OpenGL當時很大程度上還是受SGI影響的。你要在自己的平臺上實現OpenGL,就得給SGI繳納授權金。當然,也不是SGI一家獨大,否則談何開放?所謂開放,實際上是指OpenGL標準在制訂過程中, ARB成員都可以充分討論,自由發表意見,就標準的大小問題投票。應該說,這一過程還是能夠保證標準的公平、公正和公開,在當時是相當不錯的了。實際上Java剛出道的時候,也差不多是這個模式,在開源還沒有大行其道的時候,這就算是開放了。當然,按照今天的標準,這個開放的程度還很不夠,撫今追昔,今天的計算機用戶和程序員,着實應該好好感謝1990年代末期的開源運動。


在OpenGL ARB的創始成員中,微軟的名字赫然在列。那時候的微軟,儘管還沒有後來那樣不可一世的霸氣,但是也已經非常強大,它會甘心全心全意支持OpenGL的發展嗎?


我們現在當然無法瞭解當時微軟對於OpenGL的真實態度,但是最初微軟的表現還是不錯的。當時Windows NT正在研發當中,其主要的目標之一就是與基於UNIX的圖形工作站競爭,因此微軟內部的一個小組積極支持了Windows平臺的OpenGL發展。隨着PC上圖形硬件的飛速發展,大約在1990年代中期,PC終於可以與高端圖形工作站相比,在這個過程中,Windows與OpenGL之間的關係,即使不能用蜜月來形容,至少也是相當和諧的。


另一個很重要的原因,就是微軟此時在圖形領域還羽翼未豐,甚至可以說,還相當幼稚,根本不具備跟SGI相抗衡的實力。著名的WinG事件就暴露了當時微軟在圖形領域的薄弱實力。那個時候,Windows 3.0/3.1已經開始大肆流行,可是PC上所有像樣子的圖形和遊戲程序無一例外是在DOS下直接訪問視頻緩衝區,Windows的GDI本身就是爲靜態圖形設計的,在當時的硬件上慢得要死,因此還冒出來一種叫做“Windows圖形加速卡”之類的硬件來幫助Windows GDI圖形加速,根本就自身難保,別提還在上面開發高性能動畫圖形程序了。不過微軟已經明確Windows就是它的未來,因此努力試圖證明Windows可以成爲合格的遊戲開發平臺。大約在1994或1995年,微軟推出了一個叫做WinG的圖形開發包。這個開發包的主要功能,就是幫助圖形開發者在Windows 3.0/3.1中快速繪製2D圖形,從而實現動畫功能。WinG實際上是一組DLL,安裝之後,它將替換Win16中CreateDIBSection()、SetDIBColorTable()、BitBlt()和StretchBlt()等API,並通過提供一種被稱爲WinGDC的設備上下文,提供對圖形數據雙向讀寫的能力,從而實現快速的像素矩陣Blit。那個時候的遊戲和動畫主要是2D的,衡量性能的核心指標就是Blit的速度。所以WinG也算是門當戶對。筆者還記得當年運行WinG中的一些例子,屏幕上的窗口裏眼花繚亂地快速繪製彩色方塊和線條,看上去確實不慢。但是很顯然,微軟那時根本就不理解圖形和遊戲程序員的需求,WinG這個東西既沒有提供直接訪問視頻緩衝區的能力,有沒有提供高層的圖形API,如同雞肋,從來就沒有流行開,從而也迅速被微軟拋棄。事後,微軟甚至根本就不承認WinG的存在,此事被傳爲“佳話”,爲天下笑。在這樣的局面下,微軟對OpenGL採取合作態度,也是時勢使然。


不管怎麼樣,這是一段風平浪靜的和平年代。


一切看上去都很好,當PC圖形硬件進一步發展,傳統上用於科學與工程領域的OpenGL在遊戲領域中也開始顯現出巨大的潛力,它成熟、強大、乾淨而且特別適合於教學,似乎沒有什麼能阻擋OpenGL成爲PC遊戲的首選圖形API。然而就在同時,隨着Windows 95的巨大成功,微軟成爲業界霸主,實力空前壯大,心態也就悄悄發生了變化。1996年9月15日,微軟在剛剛發佈的DirectX套件中附帶了一個被稱爲Direct3D的新組件,並且開始在各種場合宣稱散步對OpenGL不利的言論,企圖讓程序員相信Direct3D纔是專門針對遊戲的3D圖形API。美好的和平時代終結了。

 

2. Direct3D vs. OpenGL
在Andre LaMothe遊戲編程的經典著作《Windows遊戲編程大師技巧》中介紹DirectX的時候,作者以其特有的LaMothian式幽默感嘆道:


“我開始感覺自己變成微軟的傳教士了,總在試圖把我所有的朋友們都推向這個黑勢力。但是有什麼辦法呢?微軟這幫壞傢伙總是能研究出更好的技術。”


這一說法集中體現了遊戲程序員的矛盾心態。當然在今天,特別是在Google的光輝下,很多人會直截了當地反對“微軟技術更好”的說法,但是在1990年代的中後期,微軟的確在軟件技術的所有領域都高歌猛進,在3D圖形API領域也不例外。


1994年,微軟的全部精力都集中在即將發佈的Windows 95上。從各個領域傳來的聲音都表明,Windows 95將是一款劃時代的極爲成功的操作系統。但是在一片叫好聲中,也存在一些不和諧音符,這就是來自PC遊戲開發領域的質疑聲。大部分視頻遊戲的開發者堅定地認爲,DOS是比Windows 95更好的遊戲開發平臺。在DOS下,程序員可以獨佔機器的全部資源,不用擔心同時運行的另外的進程的干擾。更重要的是,DOS允許程序員直接訪問硬件設備,儘管這帶來的沉重的負擔(需要針對市面上流行的每一款顯卡和聲卡寫驅動程序),但是卻能保證最大的速度。相反,Windows 95採用了保護模式,在硬件之上建立了層層的抽象,限制了對設備的訪問,對於性能敏感的遊戲程序員來說,這是難以接受的。再加上當時Watcom C/C++和DOS4GW等技術已經非常成熟,DOS在PC遊戲產業中的地位看上去是牢不可破的。事實上,這種情況持續到Windows 95發佈後的最初幾年裏,那時候大部分遊戲玩家爲了玩高質量的視頻遊戲,不得不在硬盤上保留一個DOS操作系統。有人甚至據此斷言說,DOS永遠都會存在下去。


微軟的高層對這種情況並不高興,但是似乎並沒有什麼辦法,WinG的失敗使人不得不對Windows遊戲領域謹慎從事。況且這個時候微軟已經將OpenGL置入Windows中,就算是在Windows上開發遊戲,OpenGL應該也是當然之選。一切似乎已成定局,如果不是三名微軟程序員的冒險行動,歷史將會是另一番模樣。


<!--[if !vml]-->
   圖1. DirectX 1.0 Logo


大約在1994年的下半年,微軟的三名工程師Craig Eisler、Alex St. John和Eric Engstrom不甘心讓Windows 95淪爲二流的遊戲平臺,決心一起努力來解決這個問題。他們冒險發起了一個項目,目標是讓Windows 95平臺上的遊戲程序員也能夠全速訪問硬件設備,Eisler任dev lead,St. John是主開發,Engstrom任程序經理。這個項目開始的時候,距離Windows 95預定的正式發佈時間只有幾個月,因此,這個項目的地位非常微妙:一方面,微軟內部許可和支持它,給這三劍客照付工資,另一方面,這並不是一個“一定要成功”的項目,也沒有得到更強力的支持,無論它的結局如何,Windows 95會照常發佈。就在這樣的局面下,技術史上又一個無心插柳柳成蔭的故事誕生了。三人找到了解決問題的辦法,並且逐漸完善,形成了後來被稱爲DirectX的解決方案。很顯然,這一成果令包括比爾蓋茨本人在內的微軟高層大喜過望,立刻傾注大量資源予以全力支持。

<!--[if !vml]--><!--[endif]-->

圖2. 1996年發佈的Command & Conquer Red Alert CD封面

 

1995年9月,Windows 95正式發佈後僅僅一個月,DirectX的第一個版本以“Windows Games SDK”的名義發佈了。此後一年,微軟像旋風般地連發三個DirectX版本。1996年9月發佈的Direct 3.0被認爲是DirectX的第一個成熟版本。1996年底當時如日中天的Westwood工作室發佈即時戰略遊戲《紅色警戒》,這款遊戲分爲DOS和Windows 95兩版,其中Windows 95版就是基於DirectX開發的。這款2D遊戲採用640x480甚至更高的800x600分辨率,在Windows 95下表現相當出色。當時的大學校園裏,奔騰電腦剛剛進入寢室,若干玩家自建網絡,多人聯機對戰“紅警”,一片喊殺聲震天,開寢室遊戲聯機對戰風氣之先河。《紅色警戒》全球正版銷量1200萬張,創造了即時戰略類遊戲的吉尼斯世界紀錄。正是這款遊戲的巨大成功,使得整個PC遊戲開發產業確信,DOS將成爲過去,Windows和DirectX是遊戲開發的未來。


圖3. 紅色警戒續篇The Aftermath截圖


最初的DirectX與OpenGL並不構成明顯的競爭關係,兩者分工明確。DirectX對硬件要求低,對應普通家用PC配置,長於開發2D遊戲。而OpenGL對顯卡要求高,目標是高端圖形工作站平臺,主攻CAD市場,倒也算是涇渭分明。從技術上講,當時微軟內部正處於COM技術的高峯時代,幾乎所有東西都要COM化,DirectX也不例外。DirectX以COM組件的方式暴露API,編程比較繁瑣複雜,但也促進了C++在視頻遊戲中的應用——用C語言去訪問COM實在是一種吃飽了撐的自找麻煩的行爲。而OpenGL自始至終保持平坦化的C風格的API,畢竟其本質不過是圖形硬件的一個接口,每個API調用最終會變成通過PCI總線對圖形硬件發出的命令。因此,OpenGL編程簡潔明瞭一些,但這並不是說OpenGL簡單,3D圖形編程從來也不是一件簡單的事情。從圖形功能上講,DirectX中主要的視頻模塊稱爲DirectDraw,其主要出發點是向程序員提供對於視頻緩衝區(frame buffer)的直接訪問能力,從而能夠以寫內存的方式在屏幕上繪製圖形元素,特別是能夠飛快地bitblt圖像到視頻緩衝區中,以及快速在屏幕上滾動場景的能力,而這正是高性能2D遊戲的關鍵。OpenGL雖然也提供了讀寫視頻緩衝區的能力,但是其重點在於3D圖形,用戶只需要在OpenGL的邏輯空間中把所需要的圖形“畫出來”就行,至於3D圖形怎樣投影並柵格化到2D的屏幕上來,OpenGL會替你代勞。因此,OpenGL是比DirectDraw更高層的圖形API,兩者之間沒有明確的競爭關係。然而這並不是說DirectDraw對OpenGL沒有衝擊。事實上,正是因爲DirectDraw的出現,延緩了Windows遊戲開發人員接受OpenGL的速度。倘若沒有DirectDraw,Windows遊戲開發人員最遲在1997年就一定會採用OpenGL作爲遊戲圖形API,那樣的話,OpenGL一統天下的局面就會迅速出現。DirectDraw打了一個時間差,而這個時間差後來被證明至關重要,因爲Direct3D很快就開始與OpenGL正面對壘。


DirectX 3.0發佈不久,微軟發佈了一個更新版,內部版本號從4.04.00.0068增加到了“4.04.00.0069”。從版本號上看,這次更新小得不能再小了。然而具有諷刺意義的是,這實際上是一次對整個產業具有決定性影響的重大事件,因爲在這個DirectX 3.0更新版中,附加了一個被稱爲Direct3D的組件。正是這個組件,在不到五年的時間裏成爲主宰整個PC遊戲圖形工業的標準,也徹底打碎了OpenGL試圖在這個產業建立起來的開放而平等的局面。


Direct3D是怎麼冒出來的呢?雖然發明DirectX的三劍客是非常傑出的工程師,但是他們的強項在於計算機系統,而要開發出可與OpenGL匹敵的3D API,就得有一個精通3D數學和圖形算法,對圖形硬件極爲熟悉,擁有豐富遊戲開發經驗,且具備大局觀的大師級人物坐鎮背後。即使是在今天,這樣的人才也絕對是鳳毛麟角,更不用說在1990年代初期了。在當時,全世界屈指可數的幾個高手幾乎全在SGI、NASA這類的大機構力高官厚祿,微軟想要發展自己的3D API,就得往小公司身上打主意。這時候,一家成立於1992年的英國公司RenderMorphics被納入微軟的法眼。這家小公司成立了一個Reality Lab實驗室,專事3D圖形技術及API技術研究。在當時,這家公司在當時並不大的3D圖形中間件市場三分天下有其一,已經是很不簡單。而其背後的靈魂人物Servan Keondjian幾乎是身處SGI之外最牛的3D開發大師。受到DirectX項目進展的鼓勵,微軟開始信心膨脹,大約到2004年底,微軟就決定要連人帶公司把Servan和他的RenderMorphics一口吃下。談判進展飛快,1995年2月,微軟收購RenderMorphics,Servan也成功被微軟招入麾下,主持Direct3D項目的開發。這就是Direct3D的源流。


Direct3D最初發布的時候有兩個模式,一個稱爲Retain模式,另一個稱爲Immediate模式。Retain模式的大意是用事先建好一個3D模型,讓攝像機在裏面運動,得到屏幕上的運動的3D圖像。這種方式適合於某些應用和遊戲的開發,但嚴格來說與OpenGL並不是一回事,仍然不構成直接競爭關係。而Immediate模式則是直截了當地與OpenGL分庭抗禮,其面向的問題與OpenGL完全相同。除了一些技術細節上的區別(比如OpenGL採用右手系,Direct3D採用左手系)之外,兩者最大的差別就是,一個是跨平臺的,開放的,一個是專供Windows平臺的,專有的。


說實話,Direct3D的最初版本遠未達到工業級別,成熟度與OpenGL相去甚遠。它不但完全以COM組建方式暴露接口,而且設計的非常繁瑣。任何一個簡單的操作,哪怕只是一次狀態改變,都需要創建和提交一種稱爲“execute buffer”的對象。這不僅意味着編程的複雜性大大提高,代碼的可讀性大大降低。但是,這畢竟是一個3D圖形API,而且站在它背後的是微軟巨人,沒人會小看它。相反,正是因爲人們十分清楚微軟的力量,因此對於Direct3D的出現將導致的3D圖形API大分裂的局面感到非常憂心。一時間,要Direct3D還是要OpenGL的爭論塵囂日上。


這個時候,發生了一件在遊戲開發歷史上非常著名的事件。DOOM的主程序、3D遊戲程序員的精神領袖John Carmack發表了公開發表了一篇文章。他在嘗試將Quake遊戲移植到兩種API上,並且從功能、性能、驅動程序支持和使用的易用性四方面對Direct3D和OpenGL進行了對比,得出的結論是,兩者功能相當,性能接近,驅動程序方面,Direct3D略有優勢,所以前三項基本旗鼓相當。但是從易用性來看,OpenGL的優勢是壓倒性的。由於Direct3D中executive buffer的存在,Direct3D程序非常繁瑣晦澀,用它簡直是自找麻煩。在這封公開信的結尾,Carmack堅定地站在了OpenGL的一邊,甚至呼籲微軟放棄Direct3D,擁抱OpenGL。他最後說:“在接下來的很多年裏,我每天都會基於3D API編寫程序。我需要真正能幫助我的東西,而不是給我帶來麻煩的東西。”

<!--[if !vml]--><!--[endif]-->

圖4. John Carmack,程序員的偶像

 

這一權威的、理性的聲音很大程度上衝銷了微軟的宣傳功效,但顯然不可能使微軟放棄自己親生的Direct3D。相反,John Carmack實際上充當了一個諮詢專家,讓微軟認識到了Direct3D的缺陷所在。到了1997年6月DirectX 5.0發佈的時候,微軟在Direct3D中加入了DrawPrimitive API,消除了創建executive buffer的必要。但實際上,DrawPrimitive仍然是一個不怎麼樣的設計,另一個3D大牛Chris Hecker給微軟寫了一封公開信,在信裏他說,DrawPrimitive“是OpenGL設計的一個不成熟的、糟糕的抄襲,但卻偏偏漏掉了使OpenGL如此高效的關鍵的架構決策”。


但是,此一時也彼一時也,這封公開信影響有限。微軟強大的宣傳機器已經開始全力運作起來,在整個市場上到處嚷嚷“今年過節不遊戲呀不遊戲,遊戲就用D3D呀D3D”。更厲害的是,仗着微軟在操作系統領域的霸主地位,微軟開始與衆多硬件廠商談判,要求它們優先支持DirectX。不但如此,很多人猜測,微軟故意降低了OpenGL在Windows平臺上的性能,採取不正當手段敗壞OpenGL的名譽。這種咄咄逼人的攻勢之下,OpenGL ARB這個鬆散的組織軟弱無力的一面就體現出來了,基本上束手無策。


勝利的天平似乎開始向微軟傾斜了。怎麼辦?


這個時候,SGI——OpenGL的孃家人——挺身而出。

 

3.SGI淪陷
1990年代中期,3D硬件還是昂貴稀罕的東西,無論是OpenGL還是Direct3D,很多時候實際的渲染是軟件實現的。所謂軟件渲染,也就是通過CPU計算來實現渲染效果。人們發現,在微軟的Windows平臺上,OpenGL的軟件渲染速度比Direct3D慢很多倍。微軟對此的解釋是,OpenGL本身的設計是面向CAD類應用的,適用於精確嚴格的渲染,因此必須搭配昂貴的3D硬件才能表現突出。如果你想只用軟件來模擬,對不起,由於OpenGL設計上的某些“缺陷”,它就是比DirectX慢很多倍,因爲後者是從頭到腳面向實時渲染而設計的。然而計算機圖形專業人士懷疑,這根本就是不實之詞,OpenGL與Direct3D在性能表現上的差異,根本就與設計無關,完全是因爲微軟沒有用心實現OpenGL。但是光懷疑沒用,你說微軟實現得不好,你自己實現一個看看?說實話,這可不是一個容易的事情,沒有兩下子是絕對沒戲的。

 

這時候,SGI站出來了。1996年,在新奧爾良舉辦的SigGraph會議上,SGI展示了他們實現的OpenGL for Windows,並且把Direct3D的幾個流行demo移植到OpenGL上,將兩者進行了針鋒相對的比較。結果是顯而易見的,OpenGL不但不比Direct3D慢,而且在某些方面還更勝一籌。API之戰的第一回合,OpenGL獲勝,結果不但是OpenGL給自己正了名,而且還迫使微軟優化了自己的OpenGL實現。

 

不過,對於遊戲開發來說,軟件渲染還是太慢,無論是OpenGL還是Direct3D,軟件渲染做做Demo還可以,要開發好玩的3D遊戲,沒有硬件支持那是不行的。1990年代中後期,3D硬件越來越便宜,迅速普及到家用PC上,這才使得高性能視頻遊戲飛入尋常百姓家。這時候,哪個API得到更廣泛而高質量的硬件支持,哪個API就會表現出色。於是API之戰的第二回合,就成爲驅動程序之戰了。而在這一方面,微軟憑藉其強大的產業控制力,顯然佔據優勢。

 

戰役主要發生在1997年。當時Windows 98正在做大規模的售前宣傳,微軟宣稱,Windows 98將成爲PC遊戲玩家的最佳平臺,因此,廠商們都在積極開發Windows 98上的遊戲,爭取在聖誕節大撈一票。到底是用OpenGL還是Direct3D呢?因爲此前發生的Carmack公開信事件,很多遊戲廠商都傾向於採用OpenGL。要在Windows 98上支持OpenGL,最好使用微軟提供的一個驅動程序工具包,這個工具包基於微軟開發的Mini-Client Driver(MCD),從而使得硬件廠商可以很輕鬆地開發OpenGL驅動程序。在1997年GDC大會上,大部分主流3D硬件廠商都展示了基於MDC的OpenGL驅動程序,但是由於MDC是微軟的產品,而微軟對OpenGL的態度又不明朗,因此遊戲廠商還是不敢造次,老老實實地用DirectX開發。不久之後,遊戲廠商的謹慎被證明是正確的,微軟在1997年夏天,對那些企圖在Windows 98上支持OpenGL的硬件廠商來了一次釜底抽薪,宣佈說,除了開發階段,任何廠商都不能獲得MCD的使用許可。這等於是給那些基於MCD的OpenGL驅動程序判了死刑。一時間Direct3D無與爭鋒,僅僅一年時間就成爲了3D遊戲的事實標準。

 

來而不往非禮也,SGI再一次挺身而出。早在微軟釜底抽薪之前,SGI實際上就提供了自己的OpenGL驅動程序工具包,在其中,SGI使用了一種完全不同於MCD的驅動程序支持模型,稱爲Installable Client Driver(ICD)。要從純技術角度來看的話,ICD的好處是性能高,缺點是比較複雜,總體來講是不如MCD的。可無奈你微軟上屋抽梯,讓人家硬件廠商無路可走,於是只好跟着ICD打游擊了。漸漸的,基於ICD的OpenGL驅動程序越來越多,很多有影響力的遊戲廠商開始重新考慮支持OpenGL。在這種局面下,微軟也只好順水推舟,重新放開MCD限制,允許廠商在Windows 98上支持OpenGL。第二回合,微軟先贏後輸,雖然一時間稱霸3D遊戲API領域,但是勝利並不穩定。

 

兩回合下來,微軟終於明白硬碰硬並不是好辦法,需要另謀高招。1998年的SigGraph上,人們驚奇地發現,微軟與SGI站在一起,宣佈要共同開發一個新的、統一的3D圖形API,他們稱之爲Fahrenheit Project。這個項目是誰構思出來的,微軟是如何說服SGI的,現在已經無據可查。總之,按照當時的承諾,這個項目將在1999年或2000年推出實質產品。看到幾年來拉鋸般的3D API之戰終於要結束了,合作時代即將到來,幾乎所有人都興奮不已。和平萬歲!未來屬於Fahrenheit!

 

戰爭結束,合作開始,SGI以滿腔熱情投入了Fahrenheit的開發之中,不但不再全力支持OpenGL了,而且連自己的起家之本——基於MIPS的圖形工作站,也甩掉一邊。公允的說,SGI的動機也不是那麼單純。對他們來說,MIPS圖形工作站的衰亡史不可避免的,這一點十分清楚。普通Wintel PC很快就會讓高端圖形工作站變成昂貴的廢物。那麼如何在PC市場重現榮光呢?Fahrenheit項目毫無疑問是一個很好的切入點,跟PC軟件領域的霸主合作,使得SGI有機會進入這個超級龐大的市場,並掌握3D圖形API的標準,這種好事,當然不可錯過!

 

問題在於,SGI看錯了微軟。微軟豈能輕易放棄自己在3D領域好不容易獲得的霸權,拱手把半壁江山讓與SGI呢?到1999年年中的時候,情形已經非常明顯,微軟並沒有遵守去年許下的諾言,事實上,微軟除了派去幾個專家參與制定Fahrenheit標準文檔,做做表面文章之外,根本沒有投入開發力量,從而把具體工作一口氣全甩給SGI去做,讓對手不再有足夠資源投入到OpenGL上。同時,微軟自己則繼續將大筆資源傾注到DirectX的下一個版本——也就是日後打贏關鍵一仗的主力軍——DirectX 7.0上。不但如此,微軟還使出對付Borland和其它對手的老招數——挖角,不斷以高官厚祿引誘SGI的頂級專家們。這樣的搞法,Fahrenheit能成功纔是見了鬼了。

 

一來二去,全世界都明白了,SGI被忽悠了!不過爲時已晚。2000年,DirectX 7.0問世,一時間橫掃3D圖形市場。而傳說中的Fahrenheit呢?則還只是停留在概念上的東西。Fahrenheit總架構師David Blythe被微軟成功挖角。如今,這個當年OpenGL領域數一數二的頂級大師已經搖身一變成爲DirectX 10的主設計師和Windows Presentation Framework的主要設計者之一。好一個Fahrenheit項目!讓微軟人財兩得,而SGI不單是賠了夫人又折兵,更失去了廣大OpenGL社羣的尊敬,不可不謂慘。

 

打輸這一仗,SGI算是把老底和老臉都輸光了。自那以後,SGI每況愈下,直到2006年,終於難以支撐,向法院申請破產。一代高科技傳奇,竟落得這般田地。

 

好在畢竟技術底子雄厚,在2007年,SGI成功地經歷了一次重組。重組後的SGI,變成了一個超級計算機、服務器集羣和存儲的系統廠商,跟圖形已經基本沒有關係了。不知道如今SGI的人看到公司名字裏的“G”,鼻子會不會酸呢?

 

好在OpenGL並沒有因爲SGI的沉淪而完蛋,相反,失去了商業巨頭的支撐和控制,OpenGL反倒真正成了開放的API,獲得整個產業的支持。

 

4.鳳凰涅磐
進入21世紀之後,圖形軟件市場發生了有趣的變革。首先,由於Web的大發展,微軟在桌面操作系統上一統天下的局面出現了鬆動。如今,人們開發一個桌面應用程序必須考慮在Windows和Mac,甚至還有Linux三個平臺上的可移植性,這就使得OpenGL的標準和開放性成爲一個重大的優勢。其次,圖形硬件市場實現了整合,nVidia和ATI成爲GPU市場的領袖,它們具有足夠的財力和技術實力,可以按照自己的意願對OpenGL提供第一流的支持。第三,更重要的變革在於,PC已經不再是唯一的3D圖形應用平臺,智能家電、遊戲機、手機、PDA、車載計算機、工業設備、機器人等都成爲新的圖形應用平臺。在這些平臺上,OpenGL是獨一無二的首選方案。微軟不但是後來者,而且恰恰因爲微軟在PC軟件領域的巨大成功,從而引起整個產業對它四面設防,從而使它很難取得大的成功。

 

2002年,OpenGL 1.4完成,使OpenGL在固定管線技術上達到了最高峯。2004年,劃時代的OpenGL 2.0推出,引入了GLSL,允許開發者使用可編程管線功能,從而使OpenGL登上了現代圖形硬件發展的快車。2006年8月,OpenGL 2.1發佈,成爲當前主流的OpenGL版本。

 

鳳凰涅磐的時刻即將到來。按計劃,OpenGL 3.0將於2008年推出。這個新的標準在保留對傳統API支持的前提下,從頭開始全新設計,提出了更先進的圖形概念和對象模型,從而走到了圖形編程的最前沿。

此外,更令人興奮的或許是OpenGL ES。這個專供嵌入式系統使用的OpenGL“精簡版”如今已經是手機、PDA、車載設備等嵌入式平臺上的標準圖形API。只要想想手機的用戶量,我們就不難憧憬OpenGL ES的光明燦爛的前景。給所有人以希望,這就是開放的偉大之處。

 

在以後的日子裏,我們大概不會再見到十年前那樣激烈的API戰爭了,因爲開放已經成爲我們每個人的共識。但是,這段歷史卻不應該被遺忘。正如馬克吐溫所說,歷史不會簡單的重複,而是會變奏式的重複。我們應該保持警惕,珍視開放和自由帶給每個人的價值。(全文完)


注:本文轉載自CSDN孟巖的博客:http://blog.csdn.net/myan

發佈了30 篇原創文章 · 獲贊 1 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章