Posted by & filed under Visual Studio.

【电脑】微软是如何输掉API之战(上)

前几天无意间看到这么篇猛文,很久没有看过这么长的英文文章了,觉得,很有必要将其翻译成为中文,让国内的程序员也来瞅瞅。

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

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

是的,这篇翻译是下篇,上篇是在:
http://www.blogwind.com/Wuvist/6984.shtml

我在2005年2月13日翻译的。如果你没有看过上篇,也没有看过原文(http://www.joelonsoftware.com/articles/APIWar.html),请先看上篇。而且建议去看原文,因为,我在翻译的时候去掉了一些附带说明与链接。

原文作者:Joel Spolsky
Sunday, June 13, 2004


一统天下的运行时

.Net降临了。这是一个浩大的工程;一个企图彻底根除所有混乱局面的工程。它自然有内存管理。它不仅有Visual Basic,还有一门新的语言。这语言继承了Visual Basic的精神,但却有着C风格的语法-大括号跟引号。最妙的是这门糅合了VB跟C的新语言叫C#,也就是说你再也不用跟别人说你是一个“Basic”基本程序员了。那些恐怖的拖泥带水的Window函数、钩子、向后兼容的Bug还有无从解释的字符串返回语法都被扫除了;取而代之的是一个崭新只有一种字符串并面向对象的接口。一统天下的运行时。这很美,在技术得赞下微软。.Net是一个超赞的程序开发环境,它可以帮你管理内存,拥有丰富、完整并统一的操作系统接口;而且还有丰富、超级完整还很优雅供基本操作的对象库。

但是,程序员不用.Net做太多开发。

当然,也有用.Net的人。

但,使用一个全新彻底革新的程序开发环境来统一VB跟Windows API开 发并存造成的混乱是愚蠢的。现在,我们不是有一种或者是两种开发语言,而是有三种开发语言(还是四种?)!就跟对两个在吵架的小孩大喊:“你们都别吵 了!”一样愚蠢。在电视里面,这样子大喊也许会有效;但在现实生活中这样搞法的必然结果就是你跟两个小孩三个人一起吵得更加大声。

(顺便说一下,那些有关注神秘但被政治所改变的网志聚合格式世界的朋友,你们可以发现同样的事情也发生了。RSS被分裂成为了几个版本-不准确的规则跟一堆政治性质的斗争。而企图解决这一切的做法竟然是定义一个新的叫ATOM的聚合格式。结果便是不同版本的RSS现在多了一个ATOM来搅局-不准确的规则跟一堆政治性质的斗争。当你企图引入第三方来解决对立的两方时,结果便是三足鼎立。你什么也没有统一而且你也没有解决任何事情。)

所以,.Net现在并没有统一并简化世界,我们现在反倒陷入了更大的混乱。所有的人都在犹豫他们的开发策略,究竟有没有足够能力把现有程序转到.Net上呢?

无论微软的市场信息是多么的统一(“用.Net吧!相信我们!”),它的大部分用户还是在使用C,C++,VB 6.0跟传统的ASP做开发。更不用说其它公司提供的开发工具了。然后,仅剩的使用.Net做开发的公司做的是ASP.Net!ASP.Net需要跑在Windows服务器上,但,它需要一个Windows做客户端。这就是我谈到Web时要强调的重点。

哦,等一下,还有其它的东西!

现在微软有了太多的开发人员搞得它重新发明一次整套Windows API还觉得不够爽,它竟然重新发明了两次!在去年(应该是03年,Wuvist注。)的PDC上,微软宣布了它们的下一代操作系统,代号长角。长角不仅有上述的东西,还有一套全新的用户界面API,代号Avalon。Avalon再次把一起推倒从来以利用现在电脑高速的显卡跟实时三维渲染的优势。所以,如果你现在正在开发Windows界面程序,并且使用了微软现在“官方”宣称的最先进的开发环境:WinForms;那么两年后你得重新开始以支持长角跟Avalon。这解释了为什么WinForms在诞生之时便死翘翘了。但愿你还没有在WinForms上投入太多。Jon Udell从微软那找到了一个题为:“我如何在Windows Forms与Avalon间做选择?”的幻灯片,并且问了这么个问题。这是个好问题,并且没有人可以很好的回答它。

所以,我们有了Windows API,有VB,现在还有了带若干种不同语言供选择的.Net;但,我们不能在这些环境下浸淫太久。因为,微软正在开发Avalon呢!注意到没?Avalon可只能在微软最新的操作系统上跑,但是,它得等很久很久以后才能开跑。对我个人来说,我没有时间很深入的学习.Net,并且,我们也没有把Fog Creek的两个应用程序从传统的ASP跟VB 6.0转到.Net上。因为投入做这么件事情对我们没有回馈。一点都没有。在我关心的范围里,它纯粹是一件“开火并动作”的事情:微软会爱死我们停止给Bug跟踪软件跟CMS开发新的功能,并浪费几个月的时间转移到新的开发环境里。这无法使我的任何一个客户获利,也没法让我多卖一套软件。但这对微软来说很妙,因为微软也有它自己的CMS跟Bug跟踪软件。对微软来说,再也没有比使我为追时髦而浪费时间重新绕着.Net转,并且一两年后在为Avalon浪费一次时间的事情让它感到更的爽了。在我忙着转的时候,它却在给它的软件加新功能,懂了没?

没有一个有日常工作的程序员可以有时间可以去追赶所有从雷德蒙出来的新开发工具。因为,微软有太多该死的员工在研发新的开发工具!

现在不是1990年

微软是在八十年代成长起来的,那正式个人电脑高速发展的年代:新出厂的电脑比现有的还多。这意味着如果你的产品只能够在新电脑上跑的话,过不了一两年它也可以占领市场,既便没有人刻意“转用”你的产品。这是Word跟Excel能如此彻底取代WordPerct跟Lotus的原因之一。微软只需要等待下一波硬件升级的浪潮,然后把Windows,Word跟Excel一块卖给企业用户(有些企业还是第一次买电脑)。所以,从很多方面来说,微软从来没有学习如何促使用户从产品的N版升级到N+1版 的必要。当用户买了新电脑,他们会很高兴在新电脑上使用微软的各种最新产品,经管他们不太可能纯粹的做软件升级。这也无所谓,个人电脑市场当时在疯狂的增 长。但是,现在的世界,个人电脑市场已经饱和了,并且现有的电脑都跑得不错。谢谢,微软突然意识到它花长时间等待最新的产品进入市场了。当它企图“终结”Windows 98的时候,现实是有太多的人还在使用着Windows 98,而微软得打破自己的诺言,无奈的继续给这老爷系统做多几年支持。

不幸的是,当所有人都用着98年产的电脑用得很开心的时候,像.Net、长角跟Avalon这些美丽的新技术锁定用户的企图便变得不容易实现了。即使长角真的在2006年如此发布(我此刻其实也并不相信这点),它也得花上几年的时间以获得足够的人认同它是新的开发平台。开发者,开发者,开发者跟开发者在开发软件的时候,并不卖微软那“人格分裂”开发建议的帐。

走进网络

我不能理解我说了这么多却没有提到网络。所有的开发者机会做新软件的时候都有一个选择:做网站或者做“胖客户端”在PC上跑的软件。两者的利弊很简单:网站更加容易配置(deploy),而胖客户端软件则能提供更快的反应时间以提供更有趣的用户界面。

网站更容易配置,因为它不需要安装。对用户来说,“安装”一个网络应用程序等于在浏览器地址栏里输入一个网址。我今天刚装了Google的新Email程序:按Alt+D,输入gmail,再按Ctrl+Enter。 网络应用程序有着相当少的兼容性问题或者跟其它软件冲突的机会。所有使用你产品的用户都使用着你最新的版本,你不必为各种旧版本提供支持。你可以使用任何 你喜欢的开发环境,只要你能够让程序在你自己的服务器上跑就好。你的程序实质上也能自动为所有地球上的电脑服务。而且,你用户的数据在实质上也能自动供地 球上所有的电脑使用。

但,这些需要牺牲流畅的用户界面做代价。这边有一些网站无法做得很好的事情的例子:
1.建立快速画图的程序

2.实时带红色下划线的拼写检查

3.警告用户说他们点浏览器的关闭按钮时会丢失手头的资料

4.根据用户的操作更新部分显示内容而不访问服务器

5.建立一个键盘按键驱动而不需要鼠标的程序

6.让用户在断开网络的情况下继续操作。

这些也并不是多大不了的事情。而且有些会很快被聪明的Javascript程序员搞定。Gmail跟Oddpost这两个新的网站正巧都是做Email应用的,并且巧妙的绕过或者彻底的解决了上述的一些问题。并且,用户似乎不是很在意UI上的不足以及界面迟钝的反应。几乎我认识的所有正常人都因为某种原因非常满意基于web的Email程,无论我多么努力的向他们推荐富客户端软件。唉~更富的客户端软件其实。

所以,Web用户界面已经有八成火候了,并且即使没有新的浏览器我们也很可能可以把它做到九成半。这对绝大多数人来说已经足够好了。而此用户基础对那些选择Web做新软件开发的程序员来说也足够好了。

这也就意味着,微软的API突然间变得无足轻重了。Web程序不需要Windows!

这不是说微软并没有意识到这些事情的发生。他们当然清楚。而且,在事情表面化的时候,他们突然紧急刹车了。很有潜力的技术如HTA跟DHTML停止发展了。Internet Explorer的整个开发团队似乎消失了;他们以及好几年没有任何作为了。微软没有理由让DHTML变得比现状更好;因为这对于它的核心业务-富客户端软件太危险了。微软这些日子来的口号是:“微软在富客户端软件开发公司上压了重注。”你可以在长角的幻灯片上看到这些。来自Avalon团队的Joe Beda说:“Avalon跟长角在整体上说,是微软的根基。这说明我们相信桌面软件的威力,坐在本机前就能够玩很酷的东西。这里,我们正对桌面软件做投资,我们认为这是跟很好的方向,并且我们希望开启新一轮激动人心的……”

问题是已经太晚了。

我自己对此是有点伤心的

我自己真的是对此有点伤心。对我来说,Web很棒;但是,基于Web的软件反应慢,用户界面不统一是对日常稳定操作的一大退步。我爱我的富客户端软件,而且当我需要去使用这些软件的Web版本的时候,我会呆掉的。我每天使用的这些 软件有:Visual Studio,CityDesk,Outlook,Corel PhotoPaint,QuickBooks。 但,这些却是程序员即将要带来给我们的。没有人(我再重复一次,没有人意味着少过一百万人)会再使用Windows API做开发。风险投资商不会给做Windows应用程序的公司钱的,因为他们担心来自微软的威胁。并且,绝大多数用户不像我这么在意蹩脚的Web界面。

这里有个铁证:我注意到(并且,我从人事部门的朋友处证实了)纽约的Windows API开发并懂得C++跟COM的程序员年薪大约是十三万美金;而典型的使用托管语言(包括Java,PHP,Perl甚至ASP.Net)的Web程序员年薪是八万美元。差距是巨大的。而且当我跟在微软做客服的朋友聊天时,他们承认微软已经错过了一整代的程序员。请一个有COM开发经验的程序员每年需要十三万美金,是因为在过去约八年的时间里没有人在乎去学COM开发了。所以,你一定得找到有相当资历的程序员,并说服这些往往已经处于管理人员的层次人去处理底层的程序(神啊!救救我吧!)如处理marshalling跟monikers跟apartment线程跟aggregates跟tearoff跟其它一千万种基本上只有Don Box能理解的事情,事实上Don Box也受不了再跟这些玩意打交道了。

我讨厌说这点。但一堆开发人员已经转到Web上很久了,并且不愿转回去。大多数.Net的开发人员是开发ASP.Net的,做微软Web服务器端的开发。ASP.Net是卓越的;我已经做了十年的Web开发,但ASP.Net便硬是再往前夸了一步。但它是服务器端的技术,客户端可以使用任何桌面软件。更甚者,ASP.Net在Linux中使用Mono也跑得很好。

所有的这些兆头都对微软不妙,它无法再从API垄断上获得巨额利润了。新的API是HTML,而市场的新胜利者将会是那些能玩转HTML的人。

posted on 2006-01-07 03:25 问天 阅读(3984) 评论(14) 编辑 收藏 收藏至365Key

FeedBack:

# re: 微软是如何输掉API之战(下)
2006-01-07 03:44 | 航天奇侠

谁又知道,玩转html的是谁呢。
# re: 微软是如何输掉API之战(下)
2006-01-07 09:47 | fisher

谢谢告诉我国外还有这方面的声音!
我面对的客户正是文中所提到的对界面要求离谱的群体.操作不方便,反应慢等诸多劣势的基于浏览器的系统根本不接受,我暂时是不会放弃完全编译型的开发平台的
# re: 微软是如何输掉API之战(下)
2006-01-08 02:08 | zhzkl

精彩 谢谢翻译!!!
# re: 微软是如何输掉API之战(下)
2006-01-08 12:28 | microsheen

不错
# re: 微软是如何输掉API之战(下)
2006-01-09 11:44 | Jemmy

DHTML? 脚本一多,经常慢得跟什么似的。 另外不得不说一句,本文的作者不懂Avalon。 另外为了吸引更多的windows平台的开发,.NET是绝对需要的。没人用.NET开发? Open your eyes to look around
# re: 微软是如何输掉API之战(下)
2006-01-09 12:08 | 问天

我所知道用dhtml用得最多的网站包括有gmail/netvibes.com等……
都很快……

Win32 API/.Net/WinFX 是三套不同的API吧?作者只是想说明这点的弊端而已……

另外,请注意这篇文章写于June 13, 2004。

还有,请注意文中“(我再重复一次,没有人意味着少过一百万人)”这话,不要咬文嚼字……

# re: 微软是如何输掉API之战(下)
2006-01-09 15:37 | szcuipeng

“我再重复一次,没有人意味着少过一百万人”
国内这2年有大量的采用.Net平台的,国外的就不清楚实际情况,据说是用其它平台的(服务端的比如j2ee等)要比.Net的多很多,但因为.Net平台是后来者,加上ms的推广策略(现金投入、开发工具的易用性方面、免费和盗版…),所以增长比较快。
泛泛而谈。
# re: 微软是如何输掉API之战(下)
2006-01-10 02:02 | 像人一样死去

这 个是发展的必然,想象一下,当你会骑自行车的时候你看见了机车,当你学会骑机车之后还有汽车,编程也不一样,你站的时代不同,除非你统领世界的技术发展, 否则你必须要不断地学习,旧的东西因为不合适一定要撇弃,你告诉我什么没有API?什么的API是一成不变的,即使是汇编也有发展,也有变革,如果你非要 纠缠这一点,那么去了解一下史前工具—“打孔机”。传说中“新石器时代”的编程工具,虽然它很原始,但是也不是一成不变的。MS没有输,相反他在休息 之后,正在大踏步地开创他的新时代!
# re: 微软是如何输掉API之战(下)
2006-01-10 12:14 | Jemmy

Win32 API/.Net/WinFX 是三套不同的API吧,是不同,但是要说的是.NET和Winfx不重复。winfx是基于.NET 2.0的,winfx并不替代.NET,也替代不了,winfx只是提供了更好的GUI, 更统一的通讯方式,以及.NET从来没有的工作流支持,开发一个应用程序,除了winfx提供的功能,其他的还是靠.NET本身来实现
# re: 微软是如何输掉API之战(下)
2006-01-11 04:24 | sunmast

比尔盖茨在2000年的时候就说windows不再是微软最重要的产品了,而是.NET
(记不大清楚了,大意是这样)

最后一段讲的很可观。
我在翻译一本.NET Enterprise Service/COM+的书,而我有几个同事听说此事,第一个反应就是“天哪,你怎么还在搞这种古董级别的东西?!”,或者是“Java is the world, java is everything!”(烧坏了脑袋)
我的理由和本文有些相同,新的API需要相当长的一段时间才会被企业和程序员接受,尤其是服务器端的程序(windows vista server在哪里?)

b/s程序打败c/s程序是趋势,但不意味着d/html打败桌面程序。d/html需要换代,ajax这样的技术只可能是一种补充而已。下一代 web技术有很多选择,比如macromedia的flex;但vista的avalon虽不完全为此设计,但在这里绝对也是最出色的。这是微软继续保持 优势的法宝之一。
“新的API是HTML,而市场的新胜利者将会是那些能玩转HTML的人。” — avalon很可能就是这个胜利者。

第一段这么说.net实在是无法苟同。.net对于web server端的应用,应该说已经相当完善了;而对于桌面应用(非底层应用),基本也只有内存占用的问题了;对于mobile应用,也不必别人的差。对我 来说.net就像新陈代谢一样合理而自然,这是微软做过的最正确的事情之一。传统开发者转向.net开发,比以往任何转型都容易的多,哪怕是从VB6到 C#。

# re: 微软是如何输掉API之战(下)
2006-01-11 04:33 | sunmast

>>> 如处理marshalling跟monikers跟apartment线程跟aggregates跟tearoff跟其它一千万种基本上只有Don Box能理解的事情

哈哈,夸张了点。只是从社区感觉大部分.net开发者确实都不喜欢这些东西,但没那么高深吧?就这几个概念,恐怕花一俩个晚上的时间就能看懂。你只需要理解这些概念就可以了,.net程序员不需要vc程序员那么精通底层。

# re: 微软是如何输掉API之战(下)
2006-01-13 09:55 | jspadmin

是不是太片面了点?
# re: 微软是如何输掉API之战(下)
2006-01-19 07:15 | aa

没输掉呀, 全世界92%的人能离得了由API构成的Windows极其丰富无比的各项应用吗?
# re: 微软是如何输掉API之战(下)

2006-01-20 11:44 | 王答
Joel Spolsky 写的东东就是幽默。呵呵。


微软是如何输掉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的强大了很多,我承认这点。但是,这 并不是一个升级,而是一场抛弃过去的革命。

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

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

标签:无
问天 @2005-2-13 4:08:44
查看本分类 电脑 的所有网志

回复:【电脑】微软是如何输掉API之战(上)

翻译得很好,这个作者很有名的,给出作者的中文主页,大家可以去看看。http://chinese.joelonsoftware.com/index.html

Comments are closed.