【電腦】微軟是如何輸?shù)鬉PI之戰(zhàn)(上)
前幾天無(wú)意間看到這么篇猛文,很久沒(méi)有看過(guò)這么長(zhǎng)的英文文章了,覺得,很有必要將其翻譯成為中文,讓國(guó)內(nèi)的程序員也來(lái)瞅瞅。
這邊只是前半部分而已,后半部分還在翻譯中。
原文網(wǎng)址:
http://www.joelonsoftware.com/articles/APIWar.html
微軟是如何輸?shù)鬉PI之戰(zhàn)By Joel Spolsky
Sunday, June 13, 2004你應(yīng)該聽說(shuō)過(guò)這樣的說(shuō)法:“微軟完了!一旦Linux成功奪取了桌面操作系統(tǒng)的份額,并且網(wǎng)絡(luò)應(yīng)用軟件取代桌面應(yīng)用軟件,整個(gè)龐大的微軟帝國(guó)將會(huì)崩潰”
從某種意義上說(shuō),Linux的確是對(duì)微軟產(chǎn)生了巨大威脅,不過(guò),要預(yù)言這會(huì)帶來(lái)微軟的終結(jié),還是言之過(guò)早。微軟不僅有巨額現(xiàn)金存款,并且保持著穩(wěn)定的盈利。它需要一個(gè)很長(zhǎng)的時(shí)間才可能衰落。即使微軟未來(lái)十年連續(xù)犯下嚴(yán)重錯(cuò)誤,你也無(wú)法保證它不會(huì)在最后一刻力挽狂瀾,重新贏回市場(chǎng)。所以,不要太快說(shuō)微軟已經(jīng)完了。在九十年代初,所有人都認(rèn)為IBM會(huì)徹底失敗,因?yàn)椋捍笮蜋C(jī)已經(jīng)成為了歷史!Robert X. Cringely曾經(jīng)語(yǔ)言說(shuō)大型機(jī)的時(shí)代將會(huì)在千禧年來(lái)臨的時(shí)候結(jié)束,因?yàn)樗惺褂肅OBOL開發(fā)的大型機(jī)應(yīng)用軟件會(huì)因?yàn)榍晗x問(wèn)題而失效;并且這些應(yīng)用軟件的源代碼早就被人弄丟了,人們只能夠在CS架構(gòu)上將這些應(yīng)用軟件重新開發(fā)一次。
可是,事實(shí)如何呢?我們現(xiàn)在仍在使用著大型機(jī),千年蟲造成什么麻煩。并且,IBM成功的轉(zhuǎn)型為一間成功的科技咨詢公司,它正好是在制造廉價(jià)的
塑料電話。所以,從有限的數(shù)據(jù)資料上斷言微軟的末日實(shí)在是很嚴(yán)重的夸張之詞。
無(wú)論如何,還有一個(gè)不那么明顯的現(xiàn)象被大多數(shù)人給忽略了。那就是微軟已經(jīng)失去了它的掌上明珠-Windows API。微軟的壟斷地位以及Windows/Office系列軟的暴利不僅代表了微軟的所有收益,并且還掩蓋了大量的虧損或者勉強(qiáng)回本的產(chǎn)品線。 Windows API已經(jīng)不是開發(fā)者的興趣所在了。這只下金蛋的鵝還不算是徹底死了,但也是患上了不治之癥,并且,還沒(méi)有任何人注意到這個(gè)病癥。
這里,請(qǐng)?jiān)试S我為之前幾段話中的夸大之詞致歉。我想,我開始顯得跟那些商業(yè)雜志上無(wú)休止的討論Windows API微軟這一戰(zhàn)略資產(chǎn)的編輯們差不多了。我大概要花上幾頁(yè)紙來(lái)解釋我真正想要表達(dá)的意思,并且為之辯護(hù)。所以,請(qǐng)不要我解釋之前下任何的結(jié)論。這會(huì)是篇很長(zhǎng)的文章。我需要解釋W(xué)indows API是什么;我需要解釋它是如何失去的,并且它背后的長(zhǎng)遠(yuǎn)意義。還有,因?yàn)槲矣懻摰氖情L(zhǎng)遠(yuǎn)的趨勢(shì),所以我需要使用夸張并且高度概括的語(yǔ)言。
開發(fā)者,開發(fā)者,開發(fā)者,開發(fā)者
還記得操作系統(tǒng)的定義么?它就是那個(gè)管理一臺(tái)電腦的資源,并使得應(yīng)用程序能夠運(yùn)行的東西。實(shí)際上,人們并不怎么在乎操作系統(tǒng);人們?cè)诤醯氖遣僮飨到y(tǒng)所能夠支持的應(yīng)用軟件。如字處理軟件,即時(shí)聊天軟件,電子郵件,個(gè)人財(cái)務(wù),有巴黎希爾頓酒店照片的網(wǎng)站等等等等。只有操作系統(tǒng)本身,是沒(méi)有多大用處的。人們購(gòu)買操作系統(tǒng),是為了使用能夠在它上面運(yùn)行的各種強(qiáng)大的應(yīng)用軟件。因此,能夠支持最多最好的應(yīng)用軟件的操作系統(tǒng)才是最好的操作系統(tǒng)。
我上面的話,是要推出這么個(gè)邏輯結(jié)論:如果要你的操作系統(tǒng)賣得好,需要做的最重要事情是吸引開發(fā)者在你的操作系統(tǒng)上開發(fā)軟件。這就是史蒂夫·鮑爾默
跳到了講臺(tái)上并大喊:“開發(fā)者, 開發(fā)者, 開發(fā)者, 開發(fā)者!”這對(duì)于微軟來(lái)說(shuō)太重要了,以至成為了它不徹底“開放”Windows開發(fā)工具的唯一理由。因?yàn)?,微軟不希望在無(wú)意間將其他開發(fā)工具提供商造成致命傷害。有多種不同的Windows開發(fā)工具,會(huì)使得開發(fā)者對(duì)Windows平臺(tái)更加感興趣。不過(guò),微軟也是“真的想要”開放它的開發(fā)工具的。通過(guò)微軟的 “
Empower ISV計(jì)劃”,開發(fā)者可以花375美元購(gòu)買五套完整的MSDN宇宙版(換句話說(shuō):“基本上是除了飛機(jī)模擬器外的所有微軟產(chǎn)品。”).Net支持語(yǔ)言的命令行編譯器是捆綁在免費(fèi)的.Net運(yùn)行時(shí)里面的。C++編譯器也是
免費(fèi)的。所有鼓勵(lì)開發(fā)者使用.Net平臺(tái)開發(fā)的東西,從某種意義上說(shuō),都把Borland 這樣的公司給趕出了市場(chǎng)。
為什么蘋果跟升陽(yáng)賣不了電腦? 呵呵,當(dāng)然,這個(gè)標(biāo)題有點(diǎn)傻逼。蘋果跟升陽(yáng)當(dāng)然能夠賣電腦,但并不是面對(duì)利潤(rùn)最豐厚的兩個(gè)電腦市場(chǎng):企業(yè)以及家庭電腦。蘋果現(xiàn)在還是僅能占有個(gè)位數(shù)的市場(chǎng)占有率;而只有升陽(yáng)的人才用升陽(yáng)的桌面電腦(請(qǐng)了解我是在談?wù)摯筅厔?shì),當(dāng)我說(shuō)“沒(méi)有人”的時(shí)候,我實(shí)際上是指“少于一百萬(wàn)人”;以此類推。)
為什么呢?因?yàn)樘O果跟升陽(yáng)的電腦運(yùn)行不了Windows的應(yīng)用程序,或者說(shuō),當(dāng)它們可以運(yùn)行的時(shí)候,必須使用一些昂貴的并且運(yùn)行不那么好的虛擬模式。請(qǐng)記住,人們買電腦是為了他們能夠運(yùn)行的應(yīng)用軟件!人們不用Mac,是因?yàn)閃indows有比Mac多得多的桌面應(yīng)用軟件。
因此,Windows API是微軟非常重要的資產(chǎn)。
(我明白,我了解,在此刻,世界上2.3%的人在用麥金塔電腦,并且你們迫不及待的想要給我寄電子郵件說(shuō)明他們愛死蘋果電腦了!我再次聲明,我是在講宏觀大趨勢(shì),所以你們不要浪費(fèi)時(shí)間了。我明白你愛你的Mac。我了解Mac能夠運(yùn)行所有
你需要的東西。我也愛你們,你們很牛X,但是,你們只占世界的2.3%;所以,這篇文章與你們無(wú)關(guān)。)
微軟中的兩股勢(shì)力
在微軟內(nèi)部有兩股相對(duì)的勢(shì)力。我把隨意把他們叫做陳雷蒙德幫(陳雷幫)跟MSDN雜志幫(雜志幫)。 雷蒙德•陳是微軟Windows開發(fā)團(tuán)隊(duì)的一員。他從1992年便加入了這一團(tuán)隊(duì),并且,他的網(wǎng)志:
舊的新玩意 塞滿了Windows中一些東西來(lái)龍去脈的技術(shù)細(xì)節(jié);有些看上去很傻逼的事情,背后是可能有非常好的理由的。
雷蒙德•陳的網(wǎng)志上最好玩的東西便是Windows開發(fā)團(tuán)隊(duì)為支持向下兼容而付出
艱巨努力的各個(gè)
故事:
我們從用戶的角度來(lái)看事情。你買了甲乙丙三個(gè)程序,然后你升級(jí)到了Windows XP。你的電腦隨機(jī)崩潰,并且程序丙根本就運(yùn)行不了。你必然會(huì)去跟你的朋友說(shuō):“千萬(wàn)不要升級(jí)到Windows XP,它隨時(shí)會(huì)崩潰,并且不兼容程序丙”。僅此而已,你并不會(huì)去調(diào)試系統(tǒng),并確定是程序甲造成系統(tǒng)不穩(wěn)定,并且程序丙之所以運(yùn)行不了是因?yàn)樗褂昧藳](méi)有公開的Windows接口。所以,你會(huì)選擇把Windows XP退貨給零售商。(你幾個(gè)月前就買了甲乙丙三個(gè)程序,所以,你沒(méi)法將他們退貨,你能夠退貨的就只有Windows XP。)
我首先是從一個(gè)流行的游戲-模擬城市的開發(fā)者那邊聽到這樣的事情的。他說(shuō)模擬城市有個(gè)很致命的bug:它在釋放完內(nèi)存之后便立刻重新使用內(nèi)存。在DOS環(huán)境下,這樣的做法幸好不會(huì)是個(gè)什么問(wèn)題。但是,在Windows下面,一個(gè)程序釋放的內(nèi)存,很可能會(huì)立即被另一個(gè)程序獲取并使用,所以這樣的做法是絕對(duì)不允許的。Windows開發(fā)團(tuán)隊(duì)的測(cè)試人員測(cè)試了若干個(gè)流行的應(yīng)用程序,并且搞定了它們,但是模擬城市一直出現(xiàn)問(wèn)題。他們將問(wèn)題反映給了開發(fā)人員。后者將模擬程序給研究了個(gè)徹底,找出問(wèn)題的根源,并添加了特殊的代碼去檢查模擬城市是否有運(yùn)行,如果有運(yùn)行的話,便將內(nèi)存管理器運(yùn)行為特殊模式,在此模式下,程序能夠使用釋放過(guò)的內(nèi)存。
這并不是什么稀罕的事情。Windows的測(cè)試團(tuán)隊(duì)是龐大的,而他們最重要的責(zé)任就是要確保所有人都可以順利的升級(jí)他們的操作系統(tǒng),不管他們安裝了哪些應(yīng)用軟件,無(wú)論這些應(yīng)用軟件是否使用了不公開的舊系統(tǒng)接口還是依賴有問(wèn)題的系統(tǒng)資源。實(shí)際上,如果你去查閱Windows注冊(cè)表中的軟件兼容性部分,你會(huì)發(fā)現(xiàn)里面有很長(zhǎng)的一個(gè)被專門處理的軟件列表。新版Windows會(huì)專門模擬一些舊系統(tǒng)中的bug使得這些軟件可以正常運(yùn)作。雷蒙德•陳
寫道:“我對(duì)人們指責(zé)微軟在升級(jí)操作系統(tǒng)的時(shí)候,惡意的不向下兼容一些應(yīng)用軟件感到特別的惱火。如果一個(gè)軟件無(wú)法在Windows 95下運(yùn)行的話,那是軟件本身的失敗。我為修補(bǔ)這些第三方軟件的漏洞,確保他們能夠在Windows95下運(yùn)行已經(jīng)花費(fèi)了無(wú)數(shù)個(gè)不眠之夜。”
也有很多開發(fā)者與工程師并不認(rèn)同這樣的處理方式。如果一個(gè)軟件采用了非常規(guī)的運(yùn)作方式,或者依賴一些不公開的系統(tǒng)特性,那么,在系統(tǒng)升級(jí)的時(shí)候,是不應(yīng)該理睬他們的。蘋果的麥金塔操作系統(tǒng)的開發(fā)者始終都站在這么個(gè)立場(chǎng)。這就是為什么很少有早期的蘋果電腦上的軟件能夠在新版操作系統(tǒng)上運(yùn)行。比方說(shuō),很多開發(fā)者習(xí)慣了直接復(fù)制轉(zhuǎn)跳表外部的指針,并且直接調(diào)用他們,而不是按照正常的通過(guò)系統(tǒng)中斷來(lái)調(diào)用這些指針。蘋果的官方編程圣經(jīng)《Inside Macintosh》中亦有指出程序不應(yīng)該如此操作。但是,人們便是這么做了,程序也能夠正確運(yùn)行,并且還運(yùn)行得更加快些。直到新版的蘋果操作系統(tǒng)發(fā)布后,這些程序便完全無(wú)法運(yùn)行了。如果軟件公司用這樣的方式來(lái)開發(fā)商業(yè)應(yīng)用軟件的話,我只能夠祝他們好運(yùn)了。
相比之下,我在1983年寫的一些DOS應(yīng)用軟件至今仍能夠在微軟的新版操作系統(tǒng)下正常工作。我得感謝雷蒙德•陳。我當(dāng)然知道,這并不只是雷蒙德•陳的功勞,它背后還有其他很多人。但是,只有雷蒙德•陳在他那個(gè)牛X的網(wǎng)志“
舊的新玩意”中公布了這些細(xì)節(jié),我便用他的名字把這個(gè)陣營(yíng)稱為陳雷幫了。
陳雷幫是其一;我把另一個(gè)陣營(yíng)叫做MSDN雜志幫。因?yàn)?,MSDN雜志總是充滿了激動(dòng)人心的描述新技術(shù)的文章。比方說(shuō),COM+,MSMQ,MSDE以及 Office,IE等的各種控件,還有MSXML,DirectX(我指最新的版本),Windows Media Player,Sharepoint。。。對(duì)了!Sharepoiont!有人說(shuō)這是套超級(jí)華麗的開發(fā)框架,但是如果你使用它開發(fā)商業(yè)應(yīng)用軟件的話,它往往就是要出狀況。這樣的問(wèn)題有個(gè)屬于叫做:DLL Hell。東西在本機(jī)可以運(yùn)行:為什么到了別的地方就不行了呢?
陳雷幫相信如果可以使開發(fā)者只需要開發(fā)一次便可以讓程序到所有場(chǎng)合運(yùn)行的話,才是給開發(fā)者帶來(lái)的最大便利(好吧,所有的場(chǎng)合是指所有的Windows平臺(tái)。)。而雜志幫則是認(rèn)為提供全新的并且強(qiáng)大的二次開發(fā)平臺(tái)才是給開發(fā)者帶來(lái)便利,如果開發(fā)者能夠忍受轉(zhuǎn)換開發(fā)平臺(tái)的巨大痛苦的話。陳雷幫是穩(wěn)健派。事情已經(jīng)夠麻煩了,我們能夠確保現(xiàn)有程序能夠保持運(yùn)行就已經(jīng)夠好了。雜志幫則是改革派,他們總是一遍一遍的鼓吹沒(méi)有人可以追趕得上的技術(shù)革命。
這便是問(wèn)題所在。
微軟已經(jīng)失去了向下兼容的信仰 在微軟內(nèi)部,改革派的雜志幫已經(jīng)贏得了戰(zhàn)爭(zhēng)。
他們的第一個(gè)戰(zhàn)利品便是讓VB.Net不向下與VB 6.0兼容。這是我記憶中的第一個(gè)不向下兼容的升級(jí)產(chǎn)品,我升級(jí)到了VB.Net之后,我原有的VB 6.0的代碼無(wú)法完美的導(dǎo)入到新產(chǎn)品當(dāng)中。這是微軟第一次蔑視舊產(chǎn)品的用戶群。
微軟之外,天似乎還是沒(méi)有塌下來(lái)。VB6的開發(fā)者對(duì)此雖然竭力反對(duì),但是他們慢慢的便消失了。因?yàn)?,他們大多?shù)是企業(yè)內(nèi)部的開發(fā)者,并且他們已經(jīng)轉(zhuǎn)移到Web開發(fā)上了。長(zhǎng)遠(yuǎn)的傷害被暫時(shí)隱藏了。
經(jīng)過(guò)VB的勝利之后,雜志幫已經(jīng)掌握了主導(dǎo)權(quán)。突然之間,技術(shù)變革成了可以可以接受的事情了。IIS 6.0新的線程模型對(duì)舊應(yīng)用程序說(shuō)了拜拜。當(dāng)我發(fā)現(xiàn)Windows Server 2003的用戶使用FogBugz時(shí)會(huì)出現(xiàn)問(wèn)題的時(shí)候時(shí)很震驚的。還有,.Net 1.1也并不完全兼容1.0?,F(xiàn)在,一切都真相大白了。微軟操作系統(tǒng)的開發(fā)團(tuán)隊(duì)受雜志幫影響,他們不再往舊的Windows API做修補(bǔ)增強(qiáng),他們選擇了用新的玩意將其完全替代。Win32的平臺(tái)已經(jīng)是歷史了,開發(fā)者現(xiàn)在需要考慮的是WinFX平臺(tái)了-這是一個(gè)全新的 Windows API。所有的事情都變了,現(xiàn)在都是基于可托管代碼的.Net、XAML、Avalon。是的,這些東西比Win32的強(qiáng)大了很多,我承認(rèn)這點(diǎn)。但是,這并不是一個(gè)升級(jí),而是一場(chǎng)拋棄過(guò)去的革命。
<!--[if !supportLineBreakNewLine]--><!--[endif]-->第三方的開發(fā)者,他們?cè)缇蛥捑肓宋④?Windows平臺(tái)上復(fù)雜的開發(fā)過(guò)程,并且逐漸轉(zhuǎn)移到Web上面來(lái)。在早期.com經(jīng)濟(jì)泡沫時(shí)創(chuàng)辦雅虎電子商店的Paul Graham曾精辟的說(shuō):“現(xiàn)在,起步公司都應(yīng)該考慮開發(fā)基于Web的軟件,因?yàn)殚_發(fā)桌面應(yīng)用軟件已經(jīng)變得很沒(méi)趣了。因?yàn)槟愕淖烂鎽?yīng)用程序必須是基于微軟提供的API,并且與他們充滿臭蟲的操作系統(tǒng)打交道。而且,如果你寫出了些什么有用的東西的話,你會(huì)發(fā)現(xiàn)你只不過(guò)是在給微軟做市場(chǎng)調(diào)查罷了。”
微軟已經(jīng)變得太大了,有太多的開發(fā)人員,并且他們已經(jīng)習(xí)慣于技術(shù)升級(jí)帶來(lái)的好處了。他們突然之間會(huì)認(rèn)為把一切推倒重來(lái)也并不是一件什么大不了的事情。開發(fā)是能夠重來(lái)的。如果舊的微軟,我是說(shuō)擁有陳雷幫的微軟,也在提供類似Avalon之類的東西的話,這個(gè)“Avalon”會(huì)是一系列可以在舊Windows 平臺(tái)上運(yùn)行的DLL文件,并且應(yīng)用程序可以將它們捆綁在一起。從技術(shù)上來(lái)說(shuō),微軟是可以實(shí)現(xiàn)這些的。但是,微軟必須提供一個(gè)迫使你們升級(jí)到長(zhǎng)角(Longhorn)的理由。并且,微軟正嘗試的是一場(chǎng)影響深遠(yuǎn)的技術(shù)革命,跟Windows取代DOS類似的技術(shù)革命。問(wèn)題是,長(zhǎng)角相對(duì)于 Windows XP來(lái)說(shuō),并沒(méi)有太大的優(yōu)勢(shì);相比Windows于DOS的優(yōu)勢(shì)小。長(zhǎng)角似乎沒(méi)有辦法引誘人們?nèi)ベI新的電腦并安裝它,就好像Windows說(shuō)服人們購(gòu)買新電腦一樣。好吧,也許長(zhǎng)角能夠說(shuō)服人們,微軟是鐵定需要做到這點(diǎn)的。但是,到目前為止,這一切看起來(lái)都不是那么有說(shuō)服力。微軟已經(jīng)賭錯(cuò)了太多東西了。比方說(shuō),WinFS。從微軟的宣傳上看,WinFS是通過(guò)把文件系統(tǒng)變得跟關(guān)系數(shù)據(jù)庫(kù)一樣來(lái)實(shí)現(xiàn)文件搜索的,他們忽略是要通過(guò)實(shí)現(xiàn)搜索來(lái)實(shí)現(xiàn)搜索這個(gè)道理。不要讓我給我硬盤上的所有文件輸入關(guān)鍵詞,然后讓我通過(guò)查詢語(yǔ)言搜索他們。拜托了,我需要的只是在我輸入字符串的時(shí)候,可以快速的搜索我那天殺的硬盤,這個(gè)需要的只是1973年便發(fā)明的全文索引以及其他一些技術(shù)罷了。