背景
InfoQ中文站此前报道过,2014年11月12日,ASP.NET之父、微软云计算与企业级产品工程部执行副总裁Scott Guthrie,在Connect全球开发者在线会议上宣布,微软将开源全部.NET核心运行时,并将.NET 扩展为可在 Linux 和 Mac OS 平台上运行。.NET核心运行时将基于MIT开源许可协议发布,其中将包括执行.NET代码所需的一切项目——CLR、JIT编译器、垃圾收集器(GC)和核心.NET基础类库。此外,微软还发布了Visual Studio Community 2013,这是Visual Studio的一个新的免费版本。
关于此次事件的报道和评论,已经有了很多版本。不过,最近经常有朋友问我的看法,索性就梳理了下思路,把想到的可能影响和启发都写了出来,博大家一看。
不是终点
记得.NET宣布开源的当天,编辑群里就一阵骚动,看得出大家还是很激动的。笔者最初也是吃了一惊,不过后来静心一想,这也是水到渠成的事情了。从时间轴看,近几年,.NET家族已经先后开源了多个成员,包括ASP.NET、C#编译器等,再加上这次的.NET核心运行时,至此,服务器端框架已经全部开源(或者很快开源)。所以,这次事件只是把微软的.NET开源战略推上了高潮,但肯定不是结束。
宣布开源是个新起点,如何把开源社区构建起来,生态系统培育起来,才是关键。开源需要精心的运营,每年的开源项目不断涌现,而在不断消失。.NET开源项目不需要考虑失败的问题,开发者关注的是跨平台支持何时落地、开源社区如何运转起来。
大势所趋
开源是大势所趋,就在5年前,各大公司和厂商还在讨论是否应该开源,但现在大家讨论的则是如何更好地开源。随着互联网时代的发展和成熟,开源已经成为标配。从Github的.NET Core开源项目来看,目前已经有将近6000个star,考虑到开源一个多月的时间,这样的成绩已经说明开发社区对微软开源的支持。
以前,开源是一种保障软件项目生存的方式,而现在很多开源项目已经成为企业的一种商业和运营策略,生存已经不是问题,如何活的更好才是关键。就像某I做Linux开源是为了卖服务和硬件,Google做Android开源是为了获取移动互联网入口一样,微软做.NET开源也是为了其“移动优先、云优先”战略利益服务的。看到网上有人说开源是微软的阴谋论,笔者不是很赞同。现在IT界玩的都是阳谋了,为了公司利益无可厚非,只要不损害社区的利益,更何况开源本身是件好事情。
曾经的两强争霸
在2005年以前,Java和.NET平分秋色,由于微软的强大支持,在社区等很多方面.NET甚至比Java更出色,毕竟Java在曾经的Sun的领导下并没有太多亮点,多亏了开源支持,才保持着鲜亮的生命力。当时,在企业级开发领域,Java EE和.NET都已经受到来自开发社区的诟病。但是随后而来的移动互联网浪潮给了Java另一次生命,谷歌开源安卓系统,借此掌控移动互联网入口,其开发语言Java也成为众多移动开发者的首选,要么iOS上的Object-C语言,要么安卓的Java,而且大部分是两者都要。微软则选择了一条相对封闭的策略,即使联合诺基亚,Windows Phone的市场占有率依然不高,这直接导致.NET的使用率也不高。
笔者还记得,在两强争霸的年代,国内少有的几个技术论坛中,.NET和Java两派吵得不可开交,立场鲜明,从工具支持吵到语言特性,又吵到函数库支持。现在想想,多个竞争者并存的年代对开发者是好事,有比较有选择,而且可以让竞争者倾听开发者的声音。
跨平台支持
此次.NET开源和对Linux、Mac OS的支持,为移动开发者提供了新的选择,未来可以不再依赖于Java,.NET支持的C#、C++等可以成为移动开发语言。作为后来者的C#语言的优势明显,Java一直在追赶,现在有了跨平台支持,开发者可以自由选择。
从.NET开源实现项目Mono的博客上可以看到,Mono计划与.NET团队合作,把.NET Core的代码融到Mono项目中,同时把Mono中的平台依赖代码贡献给.NET。
相比Java体系,目前.NET只开源了服务器端框架,而Java开源的是全部系统,包括客户端和开发工具。未来微软开源的路是否更加宽广,值得观察。
培养生态系统
生态系统的培养需要一段比较长的时间,Java开源将近10年了,才形成如此成熟的生态圈,.NET需要有耐心和执行力才能走得更远。既然是生态系统,那么一定要制定并维持好生态系统中的游戏规则。这个系统不单单是开发者,还需要包括他背后的就职公司、他开发的产品面向的客户、开发者的合作伙伴等等,当然还有微软。一个平台想要凝聚力,不外乎从物质和精神两个方面分析。物质方面,开发者能够从这个平台上获取利益,比如这个平台是支持开发者创业的、多语言跨平台的、具备快速部署优势的、适合迭代开发的,生态系统的成功案例多,具备这些特质,会让这个平台的开发者最终受益。从精神方面,要让开发者有参与感,他在开发方面的经验和知识能够通过生态系统分享出去,影响其他人和公司,并且他的意见能够得到及时的反馈,那么这种参与感会吸引开发者。关键点包括创业孵化器、制定和维护生存法则、塑造合作共赢的业务模式、让圈内的利益相关者受益。
最近几年,微软对于开源越来越支持,但是给开发社区的形象还没有转变过来。毕竟,微软已经做行业老大很多年,其在闭源方面的印象给开发者影响太深刻了,很难在短时间内扭转。需要持续的运营投入和影响。
其实微软过去在社区运营方面很有经验,包括各种线上线下的活动,还有MVP等奖励机制,在开源方面,微软可以继续从前的动作。有两点建议:一是重视本土化,关于微软开源项目的介绍、进展、分析和案例要及时告知中国开发者;二是培养成功案例,榜样的力量是无穷的,开源之后的赢家在哪里?甜头在哪里?树立这样的榜样,开发社区都会看到。
开源选择
开源的历史很久远了,以Java为例,开源快10年了,它的服务器端、客户端、开发工具都是开源的,虽然历经了Sun、Oracle等公司的发展,但一直保持旺盛的生命力。特别是在移动互联网崛起之后,Java获得了新生,发展迅猛。开发者在选择开源平台和项目中,最担心的不是这个项目能不能满足我的需求,是这个项目靠不靠谱,会不会一直做下去,这是最关键的。这就是为什么绝大多数成功的开源项目背后都是有大公司的支持,有很多人全职做开源项目,人员稳定,路线图清晰,开发者放心,敢用你的产品。其次才是满足需求,赢得信任感。
开源的好处是,吸收整个技术社区的力量促进开源项目的发展和竞争力,第二个好处是,提高开发者的参与感和信任度,有利于吸引开发者,构建良好的生态系统。劣势,对于一些没有厂商支持的开源项目,路线图不明确,有纷争,存在分裂或者失败的机会。对比.NET开源,开发者不必担心这个项目会半途而废,可以更关注项目本身的发展和特性。
云优先战略
今年,Azure成为首个在中国落地的全球公有云平台,其支持Linux和很多其他开源软件,这本身就说明微软目前的态度非常开放,从Windows到Azure,战略意图很明显。从全球来看,Azure占全球PaaS市场份额的64%,排第一。微软开源的态度,可以吸引更多开发者使用Azure平台,毕竟Azure不是一个微软专有技术的平台。
未来,且行且珍惜
笔者对.NET开源抱有比较高的期待,在云计算、大数据、移动互联网和物联网的时代,Java一家独大不利于社区的发展,微软已经不再是过去封闭的巨头,开始拥抱开源,翻看微软过去的历史,我从不怀疑微软的强大的执行力,时间是一个关键的因素,开发者需要看到微软在承诺开源之后的迅速行动,开源社区和生态快速搭建起来,跨平台官方支持版本快速发布出来,抓住移动互联网的契机,把整个.NET新局面打开,千万不要虎头蛇尾,且行且珍惜,开发者是最聪明的。