或许真的是应了那句老话:三十年河东,三十年河西。几年前,大家都认为微软是封闭的、邪恶的帝国,而Java是开源的代表,开放的象征。几年后的今天,Sun已经不复存在,Java收归甲骨文名下,而微软也不复一统天下的霸气,两方的立场开始似乎有了有趣的转变:Java开始染上了甲骨文封闭的风格,而微软却开始向开源和跨平台大步迈进了。
我这里不想多说甲骨文和Java,而是想谈谈微软和开放的问题。
众所周知,微软过去对开放阵营在很长一段时间里是采取仇视态度的。它公开称GPL是病毒,并用各种FUD论调来贬低开源软件。但后来看到这些手段并不奏效,加之谷歌和苹果这些新崛起的敌人更加危险,微软对开源的态度稍稍变得温和了一些,为研究开源问题还专门组建了部门。但总体来说,鲍尔默统治下的微软仍然是一个极其封闭的系统。为了保护WP微乎其微的市场份额,微软顽强地拒绝将自己的重要业务——特别是Office——移植到像iOS和Android这样的主流系统上。在鲍氏王朝的后期,微软内部也出现了一些开源抬头的迹象,例如将ASP.NET MVC这些较新的框架开放到Codeplex上,又如IIS开始接纳像PHP和Nodejs这样的非微软系。这些迹象表明微软内部已经在尝试转向,不过有这样一个老大压在头上,转型又谈何容易?
纳德拉来了。他在人前表现得颇为和善,谈话也比较婉转,但是话语中透出的意思却异常地明确:Windows未来将不再具备像今天这样重要的地位,云和移动才是微软未来的核心。这其中透露出的意味是惊人的。这个上任没几天的新官,轻声慢语却几乎是全盘否定了前任鲍尔默定下的方向。当然,我们听其言也要观其行,而事实上微软行动也是相当的坚决:Office for iOS/Android 以出乎所有人意料的速度推出,Azure的名字不再冠以Windows,微软甚至非常积极地开始为Android平台开发各种应用。另一方面,微软在开源方面的动作也更加积极,Azure引入了更多开源技术,包括Docker这样对Linux也是相当新潮的技术,微软也已经在考虑支持它了。
如果仅仅从商业角度看的话,微软现在的处境甚至可以称之为风雨飘摇。但从另一个方面来解读的话,我反倒觉得微软正在迎来一个相当难得的历史机遇。首先,只知道销售和利润的老鲍离开了,技术出身、更加懂得平衡的纳德拉上台之初,重新树立了新的发展方向,而这个方向目前看起来还是比较靠谱的。微软其实并不缺人才和想法,奈何庞大的官僚机构和过于成功的老产品压制了创新,“放下包袱,开动机器”,这是一个绝好的时机。其次,经过几年市场的洗礼,饱受嘲弄的微软已经不再是当年的霸主心态,而开始显露出壮士断腕的勇气和锐意追赶的决心。既然连一直视为命脉的Windows都可以让位,现金牛Office也可以放低姿态,对现在的微软来说,已经没有什么不敢舍弃的了,请不要轻视哀兵的力量。
我们再说说市场方面的问题。是的,微软在这个市场上已经输给了苹果和谷歌,目前看来也没有迎头赶上的机会。但再把眼光放长远一点看的话,其实移动终端的发展在未来几年将面临越来越乏力的局面:苹果例行的产品更新也已经很难赢得喝彩,手机增长的人口红利不可持续,甚至平板市场已经开始出现下跌趋势,反而PC在多年衰退之后看到了一线增长的曙光。微软的Surface发展到第3代,也总算在销售上打开了一些局面(难道真如传说中那样,微软产品不到3.0都不行?)更加重要的是,目前还存在一个巨大的企业级移动市场有待开掘,包括苹果和谷歌在内的巨头也在觊觎这个领域,而且在一些局部战役上小有斩获,但在企业市场已经深耕多年的微软,有足够的底气和它们来打一场硬仗。鹿死谁手,尚未可知。
最后聊聊开源的Mono。在从前,出于自己的商业策略考虑,微软通常会在介绍.Net平台的时候顺带提及一下Mono,以证明自己的跨平台性,但对它很难说有什么真正的支持,那时的微软可不乐意见到应用能够被轻易移植到Linux等其他平台。时代变了,现在Mono反倒是微软一个很好的支持对象。我的观点是,如果你是一个对微软平台还有兴趣的程序员的话,现阶段可以多多关注一下Mono,这绝对是一个潜力很大,而且被严重低估的技术。Xamarin做了一件很了不起的事情,目前很少有哪个语言框架可以像Mono这样,Windows、Linux、iOS和Android几大平台通吃,而且基础设施相当完善(微软的BCL基础库整体设计是相当不错的,虽然也存在一些局部上的问题,C#单就语言而论也比Java表现力更佳),甚至借助ikvm这样的邪门兵器,有些Java库都可以直接拿来用,这简直就是吸星大法好吗。
当然Mono也不是没有问题。最大问题在于Mono for Android/iOS只能有限制地免费使用,再深入一些的开发就要收费。人家公司要生存不假,但是这个门槛严重阻碍了很多程序员使用Mono也是事实。其实现在放眼全世界,除了Delphi等少数古董之外,真的很少有哪家公司对基础开发平台收费了。个人认为比较理想的办法是微软提供一定的资金支持,Mono全平台免费,服务倒是可以收费的。如果真能这样的话,想必Mono的使用量会迎来一次爆发性增长吧?
PS:其实我对微软早已放弃的Silverlight也有一些想要吐槽的地方,不过那是另外一个话题,这里就暂且不表了。