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 的一个新的免费版本。
微软开发平台事业部副总裁S. Somasegar 表示:“目前全球有数十亿台设备,开发者需要针对各种设备和平台的工具。通过 Visual Studio 和 .NET,我们致力于提供全面的端到端解决方案,让开发者能够在多种设备和平台上开发及管理应用。”
至此,包括ASP.NET、.NET 编译器、.NET 核心运行时环境、框架和库在内的全部.NET 服务器端框架将全部走向开源(部分源代码可能会在接下来的几个月内逐步发布)。通过这项举措,微软将紧密与开源社区合作,共同改进.NET。
.NET Core Framework 团队的高级程序经理Immo Landwerth,也在.NET 框架的官方博客上宣布了.NET Core 开源的消息。.NET Core 是一个模块化的开发栈,它是未来的所有.NET 平台的基础。
Immo Landweth 提到,之所以要开源.NET Core,有两大原因:
- 作为跨平台的.NET 的基础。
- 构建并受益于一个更为强大的生态系统。
比如.NET 和 Mono 两者是完全独立的,很多代码是平台无关的,所以很多工作都是重复劳动。合作构建一个单一的软件栈是最理想的。
Immo Landweth 还提到,其团队使用敏捷开发已经有两年左右:尽早发布,让客户提供反馈,让他们取得了很大的成功。所以将代码开源出来,也可以尽快获得反馈,有助于提升项目质量。
.NET Core 的代码发布在了 GitHub 上。Immo Landweth 介绍了他们的原则:我们不想让社区来我们所在的地方;而是社区在哪里,我们就去哪里。他之前也做过一个实验,将一个个人项目从 CodePlex 移到了 GitHub 上,在 CodePlex 上两年,只有一个 pull 请求,而在 GitHub 上仅仅 5 天,就有了 3 个 pull 请求,还找到了两个贡献者。其中一个还给加上了单元测试。
Immo Landweth 的团队也意识到,任何开源项目要取得成功,构建一个社区是关键。在此之前,他们也做过一些开源项目,不过是不定期更新。这样存在一些问题,比如不同参与方看到的代码可能是不一致的,很难公开讨论。另外内部的一些历史记录可能也未能记录下来。因此,开发团队决定,以 GitHub 仓库作为主要的代码存储系统。所有代码修改都直接体现出来。而且还不止于此,团队的代码审查也公开进行,内部的设计文档和讨论也将分享出来。让公众透明地看到决策过程。
在接受外部贡献方面,有两个原则:
- 路线图。所有项目都专注于各自的特点领域。为保持其专注性和动向,大部分工作都要符合产品的路线图。
- 质量。外部人员所提交代码的质量应该达到微软员工的同等水平,包括正确的设计、架构、足够的测试覆盖,并遵循编码风格。
.NET Core 项目归.NET 基金会管理。Immo Landweth 还提到,他们将与Mono 项目的Miguel de Icaza 密切合作,创建一份共享的代码库,使其成为.NET Core 的一个跨平台实现。
目前放在GitHub 上的只是类库的一个子集,更多库、CoreCLR 相关的工作还在进行之中。
Miguel de Icaza 也撰文介绍了微软开源.NET 和 Mono 的关系。.NET 基于 MIT 这一非常宽松的许可协议开源,此外微软还提供了一份专利承诺,都有助于.NET 得到应用,同时避免开源、Unix 和自由软件社区曾出现过的持续数年的问题。他的团队可以利用微软的开源实现,来解决 Mono 代码库不完整或者存在错误的地方。
微软开源.NET 一事在社区引发了强烈反响,Hack News 上相关的讨论已经有 800 多条。很多钟爱 C#语言的 Unix/Linux 用户对此非常欢迎。也有人认为,到了这个时代,在存在替代选择的情况下,开发者已经没有理由为操作系统付费。他们可以选择云服务。微软此举只是吸引更多开发者使用其 Azure 服务。有趣的是,开发者社区总少不了语言优劣的争论,不少人认为 C#是最优秀的语言,很多人就语言的优劣展开了讨论。
评论