微軟與開放——不得不說的故事(3)(轉載)

myan發表於2020-04-04
本文原載於《程式設計師》雜誌2008年第2期,經原作者同意轉載。


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戰爭了,因為開放已經成為我們每個人的共識。但是,這段歷史卻不應該被遺忘。正如馬克吐溫所說,歷史不會簡單的重複,而是會變奏式的重複。我們應該保持警惕,珍視開放和自由帶給每個人的價值。(全文完)



 

相關文章