.Net 核心是一个模块化的开发栈。该开发栈包含 .Net 平台的所有特性。这些特性已经被用在 ASPNET Core 5 和 NET Native。下面会详细介绍什么是 .Net 核心以及它和 NET Framework 的关系。
为跨平台 .Net 奠定基础
作为一个 .Net 开发者,你以后可以在 Linux、 MacOS、 iOs 和 Android 上构建或者运行你的程序,而不仅仅是 Windows。
这有一个挑战就是,windows已经有一套代码实现,同时 Mono 也有一套代码实现。Mono 社区事实上被强迫重新实现了一次 .Net,因为没有开源的代码实现。当然该代码实现可以通过 Rotor 来让变得可用。但是没有我们的开源授权,让这件事变得不可能。客户已经提出了很多的问题,但是这些问题很难去修复,因为双方都不可以看到对方的代码。这也导致了很多重复的工作,而且实际上这些工作不是针对特定于平台而导致的。immutable collections就是一个很明显的例子。
建立一个扩平台的技术栈的最好方法,就是通过合作的方式去建立唯一的技术栈。同时最好的合作方式就是去把它开源。
建立并利用一个强大的生态系统
我的团队使用NuGet(.NET平台下一个开源项目)实现更敏捷的开发周期已近两年了。 为了让客户提供反馈,我们早期进行了发布,现在我们已取得了巨大的成功。
如果你仔细思考会发现: 开源本质上是敏捷开发模式。 每一个改动都需要立刻发布,并且(在理论上)可用。 我团队里的很多成员是Twitter和Stack Overflow会员,他们热衷于客户讨论。 不止一次,我希望我能够给客户介绍内部文档,并向他们解释我们的系统是如何实现的。 或者只是简单地介绍一个问题是如何被解决的。
对于我们来说,开源架构也意味着我们可以实时与客户进行交流。 当然,并不是每一个客户都想我们紧密互动。 但是确实有一些人使得架构变得更好,因为他们提供了早期、稳定的反馈。
我把这比作驾驶一辆汽车: 频繁的小幅度的调整方向盘比大幅度的调整更有效,且风险更低。
选择利用 GitHub
我们决定在 Github 上存放 .Net 核心的代码,因为据 Phil Haack 说在 Githut 上发布代码,可以帮助提高效果:
这当然是开玩笑。
作为一个原则,我们不想告诉社区我们在哪里。相反,我们应该去到社区它本身就存在的地方。根据其他的一些项目反馈来看,Github是 .Net 的最主要社区。
不相信?我原来也怀疑所以我做了个小实验。我将自己的一个开源项目从CodePlex上移到了GitHub上。在CodePlex上两年了我只有一个pull request,而移到GitHub上五天后我的pull request就达到了三个,而且发现了另外两个贡献者。这是三个月前了,总共从那时起我已经获得了16个pull request,许多都有实质性的进展。(顺便说一句:最开始的那一个被加进了很多单元测试,很酷有木有?)尽管这个还不算是严格意义上的案例,但确实能让我们听到更多客户的需求。
所以为了加入社区,我们决定将 .NET Core 发布在GitHub上,一个月前,在GitHub上已经能看到我们的成果了(our samples available on GitHub)。