图片 2

.NET开源进行时:消除误解、努力前行(本文首发于《程序员》2015第10A期的原始版本)

2014年11月12日,ASP.NET之父、微软云计算与企业级产品工程部执行副总裁Scott
Guthrie,在Connect全球开发者在线会议上宣布,微软将开源全部.NET核心运行时,并将.NET
扩展为可在 Linux 和 Mac OS
平台上运行。.NET核心运行时将基于MIT开源许可协议发布,其中将包括执行.NET代码所需的一切项目——CLR、JIT编译器、垃圾收集器(GC)和核心.NET基础类库。

微软一直在朝着更加开放的方向努力。例如,公司首席执行官萨特亚纳德拉(Satya
Nadella)在Windows
10预览发布会上声称微软喜欢Linux,这并不出人意料,但是对于一家将Linux视作威胁的公司来说,发表这样的声明还是需要很大的勇气和魄力的。

自从11月公布这一计划以来微软已将自己的关键技术都进行了开源,包括.NET
Core、Roslyn、ASP.NET
5、MSbuild、WCF、OData
等。按照微软ASP.NET 5 的路线图(详见 ASP.NET 5 Schedule and
Roadmap
),2015年9月2日已经发布了里程碑的跨平台版本,完成.NET
Core 的跨平台开发,为 Mac 与 Linux 平台提供基于 .NET Core 的
dnx,实现完整的 .NET 跨平台开发工作流,并基于跨平台 .NET
开发一些应用案例,等到下个月初发布Beta 8的的时候就进入特性冻结阶段了。

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使用MIT协议开源,让它在Linux和OS
X系统上也能够运行。开发商们将能够在全球三个最大的操作系统上使用.NET框架了。具体内容可以参看http://www.hanselman.com/blog/AnnouncingNET2015NETAsOpenSourceNETOnMacAndLinuxAndVisualStudioCommunity.aspx,这里上图更直观:

微软实际上一共推出了三个以MIT方式授权的源代码集:

图片 1

  • ReferenceSource

  • CoreFX

  • CoreCLR

Visual Studio Community
2013将免费提供给用户,同时还具备全部的可扩展性。那包括了5000多个Visual
Studio的扩展件。最后,与Windows 10预览版一样,微软还发布了Visual Studio
2015预览版和.NET 2015预览版。安装Visual Studio社区版了。

图片 2

http://blogs.msdn.com/b/onecode/archive/2014/11/12/free-visual-studio-community-edition-released-today.aspx 有了它,你还可以免费下载和使用5000多个Visual
Studio插件。其中包括
示例代码浏览器Unity插件,等等。

上图中.NET Core 5 可以完整跨平台,.NET Framework 4.6
运行在Windows平台,对应Mono 4.2 版本运行在Linux,Mac平台。要理清楚.NET
Core和 .NET 、Mono之间的关系, 这个在.NET Core的
https://github.com/dotnet/core 有详细的说明。简单的说就是.NET
Core是.NET Framework的子集,包含了.NET
运行时库的核心功能,在跨平台和资源受限环境中使用,.NET
Framework还以MIT协议开源了ReferenceSource , ReferenceSource
是和Windows平台的有较深的耦合关系,Mono团队将ReferenceSource项目中的代码整合进入Mono,将Mono项目中一些有bug或未完成的组件替换为.NET的对应代码,你可以在Trello网站上跟踪该项目的进展情况,Mono最新的4.2
版本已经基本上完成了代码整合工作。通过Mono和微软的.NET团队的合作,把.NET
Core的代码融到Mono项目中,同时把Mono中的平台依赖代码贡献给.NET,现在可以实现完整的.NET堆栈的跨平台。也就说在.NET
Core推出之后,.NET Framework与Mono将基于.NET Core重新构建。.NET
Framework将成为.NET Core在Windows上的一个发行版,Mono将成为.NET
Core的一个跨平台发行版。

.NET Core Framework团队的高级程序经理Immo
Landwerth,也在.NET框架的官方博客上宣布.NET
Core
开源的消息。.NET
Core是一个模块化的开发栈,它是未来的所有.NET平台的基础。

开源是大势所趋,就在6年前,各大公司和厂商还在讨论是否应该开源,但现在大家讨论的则是如何更好地开源。随着互联网时代的发展和成熟,开源已经成为标配。从Github的.NET
Core
开源项目来看,目前已经有将近8273个star,老牌的Mono项目也才3769个Star,已经说明开发社区对微软开源的支持。

Immo Landweth提到,之所以要开源.NET Core,有两大原因:

相比Java体系成熟的生态圈,目前.NET在社区生态系统建设上还需要一段比较长的时间来完善。生态系统不单单是开发者,还需要包括他背后的就职公司、他开发的产品面向的客户、开发者的合作伙伴等等,当然还有微软。开发者能够从.NET这个平台上更容易创业、具有多语言跨平台的、具备快速部署优势、适合迭代开发的,涵盖从服务端到客户端、移动端,物联网IOT,具有超级高效率的Visual
Studio Community
2015。除此之外要让开发者有参与感,他在开发方面的经验和知识能够通过生态系统分享出去,影响其他人和公司,并且他的意见能够得到及时的反馈,那么这种参与感会吸引开发者。

  1. 作为跨平台的.NET的基础。
  2. 构建并受益于一个更为强大的生态系统。

最近几年,微软对于开源越来越支持,但是给开发社区的形象还没有转变过来。有篇文章《对微软技术的典型误解和偏见》写的非常贴切,对微软技术的误解与偏见在社区里是很微妙的,不少人对微软的开发技术栈有一些由来已久的偏见。微软已经做行业老大很多年,其在闭源方面的印象给开发者影响太深刻了,很难在短时间内扭转。需要持续的运营投入和影响。

比如.NET和Mono两者是完全独立的,很多代码是平台无关的,所以很多工作都是重复劳动。合作构建一个单一的软件栈是最理想的。

其实微软过去在社区运营方面很有经验,包括各种线上线下的活动,还有MVP等奖励机制,在开源方面,微软可以继续从前的动作,我本人是微软连任10年的ASP.NET方向的MVP,运营一个微信公众号-dotNET跨平台,主要就是本土化将微软开源项目的介绍、进展、分析和案例要及时告知中国开发者。建议微软官方培养成功案例,榜样的力量是无穷的,开源之后的赢家在哪里?甜头在哪里?树立这样的榜样,开发社区都会看到。

Mono 老大Miguel de Icaza 也在博客中针对这个事件发布博文:Microsoft Open
Sources .NET and
Mono
,
09年公开源代码使用的参考协议与 Open Source Initiatives 定义的“开放源代码”系统是冲突的,所以 Mono 的人既不能看,也不能用。当然现在这些限制都没有了。.NET基于MIT这一非常宽松的许可协议开源,此外微软还提供了一份专利承诺,都有助于.NET得到应用,同时避免开源、Unix和自由软件社区曾出现过的持续数年的问题。他的团队可以利用微软的开源实现,来解决Mono代码库不完整或者存在错误的地方。Mono团队的下一步计划是将.NET开源代码整合进入Mono。这个周末mono项目会更新整个计划,等着周末的好消息。

开源的好处是,吸收整个技术社区的力量促进开源项目的发展和竞争力,提高开发者的参与感和信任度,有利于吸引开发者,构建良好的生态系统。.NET开源,开发者不必担心这个项目会半途而废,可以更关注项目本身的发展和特性,背后有.NET基金会,微软和Xamarin公司,他们都有明确的开发路线图,强大的技术团队支持。

微软开源.NET一事在社区引发了强烈反响,Hack
News上相关的讨论已经有800多条。很多钟爱C#语言的Unix/Linux用户对此非常欢迎。也有人认为,到了这个时代,在存在替代选择的情况下,开发者已经没有理由为操作系统付费。他们可以选择云服务。微软此举只是吸引更多开发者使用其Azure服务。有趣的是,开发者社区总少不了语言优劣的争论,不少人认为C#是最优秀的语言,很多人就语言的优劣展开了讨论。

在云计算、大数据、移动互联网和物联网的时代,开发者需要看到微软在承诺开源之后的迅速行动,开源社区和生态快速搭建起来,跨平台官方支持版本快速发布出来,抓住移动互联网的契机,把整个.NET新局面打开。

 

开放与封闭是伪命题,巨头可以变着把戏玩

微软宣布.NET开发环境将开源 支持Mac OS
X和Linux

微软宣布将开源.NET核心运行时,并将支持Linux和Mac
OS

拥抱开源,走向跨平台:微软全面的端到端解决方案让开发者如虎添翼

微软发布新款模拟器:用VS做Android开发更容易

微软借力.NET开源跨平台支持,布局物联网平台开发

从.NET的开源到纳徳拉时代的「新微软」

.NET 開源三部曲(一): .NET 基金會及 Roslyn
編譯器

.NET 開源三部曲(二): ASP.NET vNext 開源及 .NET
Core

.NET 開源三部曲(三):如何迎接新的 .NET
時代