微软开源.NET后CoreCLR与project Mono的关系



有人能向我解释一下Mono和微软最近提供的开源/Linux可移植.NET堆栈(CoreCLR、CoreFX、Roslyn、ASP.NET)之间的当前关系吗?

很明显,这些项目是重叠的,所以我很好奇他们两个的路线图是什么——Mono会以某种方式用微软的新组件取代他们自己的组件,还是他们会以某种形式共存?

我认为答案可能会随着时间的推移而演变,但我理解微软和Mono项目将合作,或者至少微软将允许Mono使用他们的开源.Net堆栈。

http://www.mono-project.com/docs/about-mono/releases/4.0.0/

虽然微软正在努力开发.NET核心:一个可重新发布和设想的.NET版本,但该项目仍在进行中。Mono目前继续提供一个跟踪.NET桌面/服务器版本的API。

这意味着我们集成的大多数代码都来自ReferenceSource drop。在未来,我们将提供一个与.NET Core相同的"Mono Core",以允许在使用CoreFX开发的新库分发系统中使用Mono运行时。

Miguel de Icaza(Xamarin首席技术官兼联合创始人,Mono项目创始人)评论道:

http://tirania.org/blog/archive/2014/Nov-12.html

.NET是在麻省理工学院的许可下开源的。该代码不仅是在这个非常宽松的许可证下发布的,而且微软还提供了一项专利承诺,以确保.NET得到应有的采用。

特别是两个项目:

Mono将能够从这个项目中使用它想要的任何数量的a。

微软表示,他们目前不打算收回补丁程序,也不打算参与该代码库的完全开源社区式开发,因为对Windows向后兼容性的要求非常高。

来自reddit上的Mono贡献者:

我认为人们对整个Mono/CoreCLR的情况有错误的看法。为什么一个VM成为开源并移植到其他操作系统意味着另一个VM不可能存在?这就像是说应该只有一个Python实现,或者一个JVM。这不是一件好事。竞争是健康的。

Mono恰好有很多CoreCLR没有的功能:LLVM、完整AOT、NaCl、tasklets、跨VM GC桥、各种探查器模块等。Mono的启动时间和运行时内存占用也针对CoreCLR(至少目前)甚至没有瞄准的平台/设备进行了优化。OTOH,CoreCLR具有更成熟的GC和通常更好的代码生成(因此启动时间较慢)。这两个虚拟机擅长不同的事情,没有理由两者都不存在。

这也不是说我们坚持保留自己的代码。当这样做有明显的好处时(维护更少、更正确、仍然足够便携),我们很乐意切换到CoreCLR/引用源代码。我们已经导入了大量的参考源代码,我们还导入了CoreCLR VM的某些部分:
https://github.com/mono/mono/blob/master/mono/metadata/decimal-ms.c
https://github.com/mono/mono/blob/master/mono/metadata/threadpool-ms.c

来自HN:上的.NET成员

核心框架库(CoreFX)-https://github.com/dotnet/corefx-用于所有.NET Core场景,包括.NET Native(UWP)。这意味着您的代码在所有这些不同的环境中都做同样的事情,因为它使用相同的底层框架库。另外,Mono项目采用了许多相同的代码,这意味着Xamarin应用程序的基本框架也越来越与CoreFX兼容。是啊!我们希望将来能使这一点更加正式。我们经常和@migueldeizaza谈论这件事。

基本上,它们之间有很多代码共享,如果它们在未来融合,我不会感到惊讶。既然微软已经收购了Xamarin,我想他们不会对维护两个运行时非常感兴趣。

最新更新