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