《转》.NET开源核心运行时,且行且珍惜

转载自infoQ

背景

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新局面打开,千万不要虎头蛇尾,且行且珍惜,开发者是最聪明的。

时间: 2024-11-03 16:12:39

《转》.NET开源核心运行时,且行且珍惜的相关文章

“迁移策略+新容器运行时”应对有状态应用的冷热迁移挑战

作者:稻农阿里云智能事业群高级技术专家参与主导容器运行时及网络创新工作:目前的工作侧重于基于进程虚拟化的研究及增强(网络及热迁移方面),在阿里推行微安全容器及热迁移等,力图在保持容器简单高资源利用率前提下,提供高安全及热迁移等增强功能 大家好,我的花名是稻农,首先我简单介绍一下我在这个领域的工作.在阿里,我们现在主要的侧重点是做大规模的运维和新的容器运行时.目前,大家可能已经对 Kubernetes 进行了广泛地使用,但多数还没有达到一定规模,有很多痛点以及内部的问题还没有得到充分暴露. 容器迁

从零开始入门 K8s | 理解 RuntimeClass 与使用多容器运行时

作者 | 贾之光??阿里巴巴高级开发工程师 本文整理自<CNCF x Alibaba 云原生技术公开课>第 30 讲,点击直达课程页面.关注"阿里巴巴云原生"公众号,回复关键词"入门",即可下载从零入门 K8s 系列文章 PPT. 一.RuntimeClass 需求来源 容器运行时的演进过程 我们首先了解一下容器运行时的演进过程,整个过程大致分为三个阶段: ? 第一个阶段:2014 年 6 月 Kubernetes 正式开源,Docker 是当时唯一的.

运行时(iOS)

运行时(iOS) 一.什么是运行时(Runtime)? 运行时是苹果提供的纯C语言的开发库(运行时是一种非常牛逼.开发中经常用到的底层技术) 二.运行时的作用? 能获得某个类的所有成员变量 能获得某个类的所有属性 能获得某个类的所有方法 交换方法实现 能动态添加一个成员变量 能动态添加一个属性 能动态添加一个方法 三.案例:运行时获取成员变量名称 1.分析 #import <Foundation/Foundation.h> #import "XMGPerson.h" #im

公共语言运行时 CLR

公共语言运行时(Common Language Runtime,CLR)是处于.NET核心Framework的面向对象引擎,其将各种语言编译器生成的中间代码翻译为执行应用程序所需的原生码(Native Code). 由于CLR将所有代码转换成公共的交互式语言,之后被编译成原生码.所以,从原则而言,.NET可以在Unix.Linux.Mac OS X或其他操作系统上实现. CLR在Web服务器上执行程序.CLR激活对象,对它们进行安全检查,在内存中创建它们,执行它们,并且进行垃圾回收.

Android运行时ART加载OAT文件的过程分析

在前面一文中,我们介绍了Android运行时ART,它的核心是OAT文件.OAT文件是一种Android私有ELF文件格式,它不仅包含有从DEX文件翻译而来的本地机器指令,还包含有原来的DEX文件内容.这使得我们无需重新编译原有的APK就可以让它正常地在ART里面运行,也就是我们不需要改变原来的APK编程接口.本文我们通过OAT文件的加载过程分析OAT文件的结构,为后面分析ART的工作原理打基础. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! OAT文件

Android运行时ART简要介绍和学习计划

Android在4.4就已推出新运行时ART,准备替代用了有些时日的Dalvik.不过当时尚属测试版,主角仍是Dalvik. 直到今年的Google I/O大会,ART才正式取代Dalvik.这个消息在科技界引起不小轰动,也吸引不少技术人员对它的"技术分析".可惜这些"技术分析"不过是引用了官方的数据和图表而已.这一系列文章将对ART进行真正的技术分析.老规矩,分析前先进行简要介绍和制定学习计划. 老罗的新浪微博:http://weibo.com/shengyang

基于OSSIM 的开源安全运维平台

基于OSSIM 的开源安全运维平台 一个安全运维平台能否有效就要看收集数据的能力,如果数据源都有缺失,那上层的关联分析很可能会产生偏差.对于网络安全设备而言,主要采集其安全日志(包括报警)和设备运行状态信息.这本OSSIM最佳实践向您展示了其基于插件的强大数据采集和处理能力. 然而目前市场上的安全设备的输出信息随着设备种类和生产厂家的不同都有所不同,并且没有一个统一的标准来格式化所有的安全日志.因此,同时收集多源异构安全设备的数据,除了OSSIM之外的各类开源工具都是一个复杂而艰难的过程. 1.

iOS Runtime 运行时

Objc Runtime使得C具有了面向对象能力,在程序运行时创建,检查,修改类.对象和它们的方法.(Runtime是C和汇编编写的) Runtime系统是由一系列的函数和数据结构组成的公共接口动态共享库,在/usr/include/objc目录下可以看到头文件,可以用其中一些函数通过C语言实现Objective-C中一样的功能. Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码,底层都是基于它来实现的. Objective-C

ART运行时Semi-Space(SS)和Generational Semi-Space(GSS)GC执行过程分析

Semi-Space(SS)GC和Generational Semi-Space(GSS)GC是ART运行时引进的两个Compacting GC.它们的共同特点是都具有一个From Space和一个To Space.在GC执行期间,在From Space分配的还存活的对象会被依次拷贝到To Space中,这样就可以达到消除内存碎片的目的.本文就将SS GC和GSS GC的执行过程分析进行详细分析. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 与SS G