原文网址:http://www.blogwind.com/Wuvist/comment.aspx?Article_id=6984
 




前几天无意间看到这么篇猛文,很久没有看过这么长的英文文章了,心血来潮将其翻译成为中文。

这边只是前半部分而已,后半部分还在翻译中。

原文网址:http://www.joelonsoftware.com/articles/APIWar.html


微软是如何输掉API之战

By Joel Spolsky
Sunday, June 13, 2004


你应该听说过这样的说法:“微软完了!一旦Linux成功夺取了桌面操作系统的份额,并且网络应用软件取代桌面应用软件,整个庞大的微软帝国将会崩溃”

从某种意义上说,Linux的确是对微软产生了巨大威胁,不过,要预言这会带来微软的终结,还是言之过早。微软不仅有巨额现金存款,并且保持着稳定的盈利。它需要一个很长的时间才可能衰落。即使微软未来十年连续犯下严重错误,你也无法保证它不会在最后一刻力挽狂澜,重新赢回市场。所以,不要太快说微软已经完了。在九十年代初,所有人都认为IBM会彻底失败,因为:大型机已经成为了历史!Robert X. Cringely曾经语言说大型机的时代将会在千禧年来临的时候结束,因为所有使用COBOL开发的大型机应用软件会因为千年虫问题而失效;并且这些应用软件的源代码早就被人弄丢了,人们只能够在CS架构上将这些应用软件重新开发一次。

可是,事实如何呢?我们现在仍在使用着大型机,千年虫造成什么麻烦。并且,IBM成功的转型为一间成功的科技咨询公司,它正好是在制造廉价的塑料电话。所以,从有限的数据资料上断言微软的末日实在是很严重的夸张之词。

无论如何,还有一个不那么明显的现象被大多数人给忽略了。那就是微软已经失去了它的掌上明珠-Windows API。微软的垄断地位以及Windows/Office系列软的暴利不仅代表了微软的所有收益,并且还掩盖了大量的亏损或者勉强回本的产品线。 Windows API已经不是开发者的兴趣所在了。这只下金蛋的鹅还不算是彻底死了,但也是患上了不治之症,并且,还没有任何人注意到这个病症。

这里,请允许我为之前几段话中的夸大之词致歉。我想,我开始显得跟那些商业杂志上无休止的讨论Windows API微软这一战略资产的编辑们差不多了。我大概要花上几页纸来解释我真正想要表达的意思,并且为之辩护。所以,请不要我解释之前下任何的结论。这会是篇很长的文章。我需要解释Windows API是什么;我需要解释它是如何失去的,并且它背后的长远意义。还有,因为我讨论的是长远的趋势,所以我需要使用夸张并且高度概括的语言。

开发者,开发者,开发者,开发者

还记得操作系统的定义么?它就是那个管理一台电脑的资源,并使得应用程序能够运行的东西。实际上,人们并不怎么在乎操作系统;人们在乎的是操作系统所能够支持的应用软件。如字处理软件,即时聊天软件,电子邮件,个人财务,有巴黎希尔顿酒店照片的网站等等等等。只有操作系统本身,是没有多大用处的。人们购买操作系统,是为了使用能够在它上面运行的各种强大的应用软件。因此,能够支持最多最好的应用软件的操作系统才是最好的操作系统。

我上面的话,是要推出这么个逻辑结论:如果要你的操作系统卖得好,需要做的最重要事情是吸引开发者在你的操作系统上开发软件。这就是史蒂夫·鲍尔默跳到了讲台上并大喊:“开发者, 开发者, 开发者, 开发者!”这对于微软来说太重要了,以至成为了它不彻底“开放”Windows开发工具的唯一理由。因为,微软不希望在无意间将其他开发工具提供商造成致命伤害。有多种不同的Windows开发工具,会使得开发者对Windows平台更加感兴趣。不过,微软也是“真的想要”开放它的开发工具的。通过微软的 “Empower ISV计划”,开发者可以花375美元购买五套完整的MSDN宇宙版(换句话说:“基本上是除了飞机模拟器外的所有微软产品。”).Net支持语言的命令行编译器是捆绑在免费的.Net运行时里面的。C++编译器也是免费的。所有鼓励开发者使用.Net平台开发的东西,从某种意义上说,都把Borland 这样的公司给赶出了市场。

为什么苹果跟升阳卖不了电脑?

呵呵,当然,这个标题有点傻逼。苹果跟升阳当然能够卖电脑,但并不是面对利润最丰厚的两个电脑市场:企业以及家庭电脑。苹果现在还是仅能占有个位数的市场占有率;而只有升阳的人才用升阳的桌面电脑(请了解我是在谈论大趋势,当我说“没有人”的时候,我实际上是指“少于一百万人”;以此类推。)

为什么呢?因为苹果跟升阳的电脑运行不了Windows的应用程序,或者说,当它们可以运行的时候,必须使用一些昂贵的并且运行不那么好的虚拟模式。请记住,人们买电脑是为了他们能够运行的应用软件!人们不用Mac,是因为Windows有比Mac多得多的桌面应用软件。


 

因此,Windows API是微软非常重要的资产。

(我明白,我了解,在此刻,世界上2.3%的人在用麦金塔电脑,并且你们迫不及待的想要给我寄电子邮件说明他们爱死苹果电脑了!我再次声明,我是在讲宏观大趋势,所以你们不要浪费时间了。我明白你爱你的Mac。我了解Mac能够运行所有需要的东西。我也爱你们,你们很牛X,但是,你们只占世界的2.3%;所以,这篇文章与你们无关。)


微软中的两股势力

在微软内部有两股相对的势力。我把随意把他们叫做陈雷蒙德帮(陈雷帮)跟MSDN杂志帮(杂志帮)。

雷蒙德•陈是微软Windows开发团队的一员。他从1992年便加入了这一团队,并且,他的网志:旧的新玩意 塞满了Windows中一些东西来龙去脉的技术细节;有些看上去很傻逼的事情,背后是可能有非常好的理由的。

雷蒙德•陈的网志上最好玩的东西便是Windows开发团队为支持向下兼容而付出艰巨努力的各个故事

我们从用户的角度来看事情。你买了甲乙丙三个程序,然后你升级到了Windows XP。你的电脑随机崩溃,并且程序丙根本就运行不了。你必然会去跟你的朋友说:“千万不要升级到Windows XP,它随时会崩溃,并且不兼容程序丙”。仅此而已,你并不会去调试系统,并确定是程序甲造成系统不稳定,并且程序丙之所以运行不了是因为它使用了没有公开的Windows接口。所以,你会选择把Windows XP退货给零售商。(你几个月前就买了甲乙丙三个程序,所以,你没法将他们退货,你能够退货的就只有Windows XP。)

我首先是从一个流行的游戏-模拟城市的开发者那边听到这样的事情的。他说模拟城市有个很致命的bug:它在释放完内存之后便立刻重新使用内存。在DOS环境下,这样的做法幸好不会是个什么问题。但是,在Windows下面,一个程序释放的内存,很可能会立即被另一个程序获取并使用,所以这样的做法是绝对不允许的。Windows开发团队的测试人员测试了若干个流行的应用程序,并且搞定了它们,但是模拟城市一直出现问题。他们将问题反映给了开发人员。后者将模拟程序给研究了个彻底,找出问题的根源,并添加了特殊的代码去检查模拟城市是否有运行,如果有运行的话,便将内存管理器运行为特殊模式,在此模式下,程序能够使用释放过的内存。

这并不是什么稀罕的事情。Windows的测试团队是庞大的,而他们最重要的责任就是要确保所有人都可以顺利的升级他们的操作系统,不管他们安装了哪些应用软件,无论这些应用软件是否使用了不公开的旧系统接口还是依赖有问题的系统资源。实际上,如果你去查阅Windows注册表中的软件兼容性部分,你会发现里面有很长的一个被专门处理的软件列表。新版Windows会专门模拟一些旧系统中的bug使得这些软件可以正常运作。雷蒙德•陈写道:“我对人们指责微软在升级操作系统的时候,恶意的不向下兼容一些应用软件感到特别的恼火。如果一个软件无法在Windows 95下运行的话,那是软件本身的失败。我为修补这些第三方软件的漏洞,确保他们能够在Windows95下运行已经花费了无数个不眠之夜。”

也有很多开发者与工程师并不认同这样的处理方式。如果一个软件采用了非常规的运作方式,或者依赖一些不公开的系统特性,那么,在系统升级的时候,是不应该理睬他们的。苹果的麦金塔操作系统的开发者始终都站在这么个立场。这就是为什么很少有早期的苹果电脑上的软件能够在新版操作系统上运行。比方说,很多开发者习惯了直接复制转跳表外部的指针,并且直接调用他们,而不是按照正常的通过系统中断来调用这些指针。苹果的官方编程圣经《Inside Macintosh》中亦有指出程序不应该如此操作。但是,人们便是这么做了,程序也能够正确运行,并且还运行得更加快些。直到新版的苹果操作系统发布后,这些程序便完全无法运行了。如果软件公司用这样的方式来开发商业应用软件的话,我只能够祝他们好运了。

相比之下,我在1983年写的一些DOS应用软件至今仍能够在微软的新版操作系统下正常工作。我得感谢雷蒙德•陈。我当然知道,这并不只是雷蒙德•陈的功劳,它背后还有其他很多人。但是,只有雷蒙德•陈在他那个牛X的网志“旧的新玩意”中公布了这些细节,我便用他的名字把这个阵营称为陈雷帮了。

陈雷帮是其一;我把另一个阵营叫做MSDN杂志帮。因为,MSDN杂志总是充满了激动人心的描述新技术的文章。比方说,COM+,MSMQ,MSDE以及 Office,IE等的各种控件,还有MSXML,DirectX(我指最新的版本),Windows Media Player,Sharepoint。。。对了!Sharepoiont!有人说这是套超级华丽的开发框架,但是如果你使用它开发商业应用软件的话,它往往就是要出状况。这样的问题有个属于叫做:DLL Hell。东西在本机可以运行:为什么到了别的地方就不行了呢?

陈雷帮相信如果可以使开发者只需要开发一次便可以让程序到所有场合运行的话,才是给开发者带来的最大便利(好吧,所有的场合是指所有的Windows平台。)。而杂志帮则是认为提供全新的并且强大的二次开发平台才是给开发者带来便利,如果开发者能够忍受转换开发平台的巨大痛苦的话。陈雷帮是稳健派。事情已经够麻烦了,我们能够确保现有程序能够保持运行就已经够好了。杂志帮则是改革派,他们总是一遍一遍的鼓吹没有人可以追赶得上的技术革命。

这便是问题所在。

微软已经失去了向下兼容的信仰

在微软内部,改革派的杂志帮已经赢得了战争。

他们的第一个战利品便是让VB.Net不向下与VB 6.0兼容。这是我记忆中的第一个不向下兼容的升级产品,我升级到了VB.Net之后,我原有的VB 6.0的代码无法完美的导入到新产品当中。这是微软第一次蔑视旧产品的用户群。

微软之外,天似乎还是没有塌下来。VB6的开发者对此虽然竭力反对,但是他们慢慢的便消失了。因为,他们大多数是企业内部的开发者,并且他们已经转移到Web开发上了。长远的伤害被暂时隐藏了。

经过VB的胜利之后,杂志帮已经掌握了主导权。突然之间,技术变革成了可以可以接受的事情了。IIS 6.0新的线程模型对旧应用程序说了拜拜。当我发现Windows Server 2003的用户使用FogBugz时会出现问题的时候时很震惊的。还有,.Net 1.1也并不完全兼容1.0。现在,一切都真相大白了。微软操作系统的开发团队受杂志帮影响,他们不再往旧的Windows API做修补增强,他们选择了用新的玩意将其完全替代。Win32的平台已经是历史了,开发者现在需要考虑的是WinFX平台了-这是一个全新的 Windows API。所有的事情都变了,现在都是基于可托管代码的.Net、XAML、Avalon。是的,这些东西比Win32的强大了很多,我承认这点。但是,这并不是一个升级,而是一场抛弃过去的革命。

<!--[if !supportLineBreakNewLine]--><!--[endif]-->第三方的开发者,他们早就厌倦了微软 Windows平台上复杂的开发过程,并且逐渐转移到Web上面来。在早期.com经济泡沫时创办雅虎电子商店的Paul Graham曾精辟的说:“现在,起步公司都应该考虑开发基于Web的软件,因为开发桌面应用软件已经变得很没趣了。因为你的桌面应用程序必须是基于微软提供的API,并且与他们充满臭虫的操作系统打交道。而且,如果你写出了些什么有用的东西的话,你会发现你只不过是在给微软做市场调查罢了。”

微软已经变得太大了,有太多的开发人员,并且他们已经习惯于技术升级带来的好处了。他们突然之间会认为把一切推倒重来也并不是一件什么大不了的事情。开发是能够重来的。如果旧的微软,我是说拥有陈雷帮的微软,也在提供类似Avalon之类的东西的话,这个“Avalon”会是一系列可以在旧Windows 平台上运行的DLL文件,并且应用程序可以将它们捆绑在一起。从技术上来说,微软是可以实现这些的。但是,微软必须提供一个迫使你们升级到长角(Longhorn)的理由。并且,微软正尝试的是一场影响深远的技术革命,跟Windows取代DOS类似的技术革命。问题是,长角相对于 Windows XP来说,并没有太大的优势;相比Windows于DOS的优势小。长角似乎没有办法引诱人们去买新的电脑并安装它,就好像Windows说服人们购买新电脑一样。好吧,也许长角能够说服人们,微软是铁定需要做到这点的。但是,到目前为止,这一切看起来都不是那么有说服力。微软已经赌错了太多东西了。比方说,WinFS。从微软的宣传上看,WinFS是通过把文件系统变得跟关系数据库一样来实现文件搜索的,他们忽略是要通过实现搜索来实现搜索这个道理。不要让我给我硬盘上的所有文件输入关键词,然后让我通过查询语言搜索他们。拜托了,我需要的只是在我输入字符串的时候,可以快速的搜索我那天杀的硬盘,这个需要的只是1973年便发明的全文索引以及其他一些技术罢了。