微軟開源.NET後CoreCLR與項目Mono的關係
有人可以向我解釋一下 Mono 與 Microsoft 最近提供的開源/Linux 可移植 .NET 堆棧(CoreCLR、CoreFX、Roslyn、ASP.NET)之間的目前關係是什麼?
很明顯這些項目重疊,所以我很好奇它們的路線圖是什麼 - Mono 會以某種方式用微軟的新組件替換他們自己的組件,還是它們會以某種方式共存?
我認為人們對整個 Mono/CoreCLR 情況有錯誤的心態。為什麼一個VM成為開源並移植到其他作業系統意味著另一個VM不能存在?這就好像說應該只有一個 Python 實現或一個 JVM。那不是一件好事。競爭是健康的。
Mono 恰好有很多 CoreCLR 沒有的特性:LLVM、完整 AOT、NaCl、tasklet、跨 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
核心框架庫 (CoreFX) - https://github.com/dotnet/corefx - 用於所有 .NET Core 方案,包括 .NET Native (UWP)。這意味著您的程式碼在所有這些不同的環境中執行相同的操作,因為它使用相同的底層框架庫。另外,Mono 項目採用了很多相同的程式碼,這意味著 Xamarin 應用程序的基本框架也變得與 CoreFX 更加兼容。是啊!我們希望在未來使這更加正式。我們經常與@migueldeicaza 討論這個問題。
基本上它們之間發生了很多程式碼共享,如果它們將來會聚,我不會感到驚訝。既然 MS 已經收購了 Xamarin,我認為他們不會對維護兩個執行時非常感興趣。
我認為答案可能會隨著時間的推移而發展,但我理解微軟和 Mono Project 將一起工作,或者至少微軟將允許 Mono 使用他們的開源 .Net 堆棧。
http://www.mono-project.com/docs/about-mono/releases/4.0.0/
雖然 Microsoft 正在努力開發 .NET Core:一個可再發行和重新構想的 .NET 版本,但該項目仍在進行中。此時,Mono 繼續提供跟踪 .NET 桌面/伺服器版本的 API。
這意味著我們集成的大部分程式碼都來自 ReferenceSource 拖放。將來,我們將提供與 .NET Core 相同的“Mono Core”,以允許將 Mono 執行時與使用 CoreFX 開發的新庫分發系統一起使用。
Miguel de Icaza(Xamarin 的首席技術官和聯合創始人,Mono 項目的創始人)評論說:
http://tirania.org/blog/archive/2014/Nov-12.html
.NET 在 MIT 許可下開源。不僅程式碼是在這種非常寬鬆的許可下發布的,而且微軟還提供了一項專利承諾,以確保 .NET 將得到應有的採用。
特別是對於這兩個項目:
Mono 將能夠從這個項目中盡可能多地使用它。
…
微軟表示,他們目前不打算收回更新檔或參與該程式碼庫的完全開源社區風格的開發,因為對 Windows 向後兼容性的要求非常高。