近日,微软宣布了关于 .NET 开源的最新进展:开源的 .NET Core 和 ASP.NET 5 发布 RC 版本。通过这篇文章,我将简单介绍正在发生的关于“.NET 的开源和跨平台”是怎么回事,它给我们带来了什么,我们怎样去面对它的到来。

背景

.NET 的开源和跨平台或许本不该成为一个热点,因为它很早就在发生——似乎出乎大多数人的意料,却是事实。现在我们谈论的是以 2014 年微软 Connect() 大会上,官方宣布 .NET 全面开源和跨平台为起点的“彻底而绝对的”开源和跨平台。一年之后的现在,微软正式宣布,其官方支持的具有开源和跨平台特性的 .NET 发布 RC 版本,并建议可用于生产环境。

.NET 简史

可以说 .NET 是一个年轻的开发平台,得益于微软的影响力,尤其在企业和服务器市场,.NET 技术被广泛应用于各类软件的开发中。而从 Windows Vista 和 Windows Server 2008 开始,微软也将 .NET 运行时默认内置安装在各个版本的操作系统和设备中,现在,.NET 已成为基于微软技术栈开发软件的首选编程技术。十几年来,除了运行时和编程语言的频繁更新,微软还随着 .NET 一起发布了一系列用于解决特定领域问题的编程模型、范式和指南,比如广为人知的 WCF、WPF、ASP.NET 等。

转折点

随着互联网和云运动的深入,大家的步伐都轻快了起来。与之相对的是,.NET 庞大的平台和复杂的知识体系,让不少人望而生畏。另一方面,互联网技术之所以能够快速发展也正得益于其开放性,开放的技术更易受到欢迎和追捧。但依附于微软和 Windows 平台的 .NET 被认为是不够开放的,饱受争议和偏见

从技术人员的视角来看,.NET 框架本身设计上的先进性是令人惊叹的,与匹配的一系列灵活丰富的生态系统一同构成了生产力极高的开发平台。同大量其他开发平台相比,.NET 在平台开发效率、稳定性、安全性和性能等方面优势十分明显。

微软决定将这项颇具魅力的技术开源,并给予它跨平台的官方支持,不管对于 .NET 平台本身还是此前大量没有享受到 .NET 好处的开发者,都必将是一项大好事。

开源意味着:

  1. 免费    不用说,这当然是首当其冲的好处。虽然,.NET 本身其实从来也没有收过费。不过与开源匹配的免费一般还意味着我们在开发应用时如果要依赖其他软件,我们也会选择免费的、开源的。
  2. 更开放的开发方式    .NET 将接受来自社区的贡献,也允许基于官方代码库修改并再发布。其“所有权”意味更淡,更强调由社区驱动的开发,并可以更自由地定制 .NET,拥有自己的 .NET 不是梦。

跨平台意味着:

  1. 不与微软其他产品绑定在一起    连操作系统都不依赖了,更不可能还依赖其他什么微软的产品——虽然以前也从来没有跟微软的其他产品绑定过。
  2. 利用所有平台的优势    跨平台能力将开发环境和最终运行环境的选择权交回给开发者,通过提供跨平台一致的开发和部署体验,让我们更便利地使用 .NET。

这次,.NET 将开源和跨平台做全了。

彻底的开源

一个软件选择开源的原因有很多。比如完全由社区驱动、吸纳社区开发力量、接受安全坚督,或者商业品牌宣传等。而软件发起者也会根据其需要选择开源的方式。例如,不少优秀的软件既会发行开源的社区版本,也会发行针对企业用户的商业支持版本。这样的软件往往在其商业版本中提供了更多的功能特性。

.NET 则选择了彻底的开源,Apache 和 MIT 等授权协议基本对使用者没有什么限制。其开源的彻底性还表现在实现方式上:微软重写了 .NET!这是真的。区别于以往的 .NET,微软现在提供了全新的运行时 .NET Core,几乎完全重写了的 FCL——CoreFx,全新的编程范式 DNX Project 模型,全新的编程工具 Visual Studio Code。我想,即便为这个新的事物取个新的名字也并不为过。

但对“大 .NET 平台”的图景来看,似乎也可以说这次新的编程模型只是增加了新的花样而已。从已有的应用程序的维护上来看,这么理解也说得过去,毕竟微软还是会继续维护旧的运行时的。至少目前来看,新的 .NET Core 运行时并不会直接替换原有 .NET 体系,我们基于原有 .NET 运行时开发的软件将继续得到很好的支持。

为 .NET Core 开发框架和库

想知道这是不是你所憧憬的那个全新的 .NET?来看看吧:现在几乎所有此前的框架基础类库、框架,以及第三方类库和框架要想能适应新的运行时,都需要重新审视其兼容性,甚至需要重写。因为,新的编程模型是模块化的,以前可能只听说各种 Client Profile SKU,而 .NET Core 却相当于一个“FCL 不包含”的运行时。你声明好你自己的类库依赖什么,然后在部署后、运行之前,受依赖的项自动被安装。

我知道对于第三方类库和框架开发者来说,这种变化在短期内多少有些令人不悦,毕竟还是增加了一些意外的负担的。不过,模块化不管是开发还是运维都是一个不可阻挡的趋势,有其非常明确的好处。相信您已经  熟悉并接受了 NuGet 作为日常开发方式,感受到了它在团队协作和工程化方面带来的便利。不妨回想一下几年前没有它的日子,那时是怎么集中管理发布物的、是怎么持续集成和持续发布的?因此,请接受并支持 .NET 本身的模块化,并为未来的开发模型贡献一分力量吧!

又一个开发技术栈

Node.js 的 Hello World 应用程序之简洁令人印象深刻。现在跨平台的 .NET 也拥有了这种简洁跨平台的 .NET 被设计成非常轻便,其运行时安装包仅 11 M 大小,包括项目结构在内的几乎一切可能增加复杂性的东西都被重构得简明而直接。现在,我们不必依赖 Visual Studio——只需要使用 Sublime Text 或 Visual Studio Code 这类轻量级文本编辑器即可着手开发 .NET 应用程序;只需要一个命令即可完成编译,跨平台的 ASP.NET 应用程序还能够自动编译。

应用程序结构的精益化了之后,这仍是 .NET 平台。所以,我们还是可以使用 ASP.NET MVC 和 Entity Framework 这些高生产力的应用程序中间件;C# 这门优美高效的编程语言仍是我们的利器,其内置的 async 和 LINQ 等特性是难以拒绝的。

这样一个极具吸引力的技术栈,不容错过。


我个人对 .NET 的开源和跨平台是十分欢迎的,我自己的心情也因此振奋不已。通过上面的介绍,不知道是否让你也有了同 样的感觉,还是有了更多疑问?简而言之,.NET 现在与我们平常所知的 Node.js、Chromium 和 MongoDB 一样,它也是纯粹的跨平台的开源软件了;它现在能够运行于 Windows、Linux 和 OSX 等大量的平台上,还有同样开源跨平台的、质量上乘效率极佳的开发工具可用。

如果还有疑问,请关注我翻译的文章“关于 .NET 开源的 20 个问题”。