Mono 現狀與未來:從Wine-mono 到.NET 9

张善友發表於2024-08-29

Mono 官網主頁[1]和 Mono GitHub 頁面今日釋出公告[2],微軟宣佈將 Mono 專案移交給 WineHQ 組織,也就是 Linux 相容 Windows 應用框架 Wine 的開發團隊。

image

微軟從 2014 年開始向.NET 開源發展,當時微軟宣佈.NET Core即將開源[3]。然而,在此之前,.NET 就已經有了一個名為 Mono 的開源計劃。 Mono 專案始於 2001 年,最初它主要致力於為 Linux 桌面應用程式建立一個.NET 開發平臺。第一次正式版本是在 2003 年釋出的,此後該專案逐漸演進為在多個平臺和作業系統上支援.NET。 這一事件標明微軟將Mono 的現代化改造的工作已經完成,是一個里程碑事件。Wine 是一款免費和開源的相容層,其中就包含 Mono 引擎。它使得在執行 Linux、FreeBSD 或其他一些作業系統的計算機上執行一些 Windows 應用程式成為可能。它也是 Valve 用來讓 Steam Deck 使用者在 Linux 驅動的手持裝置上玩 Windows 遊戲的 Proton 軟體的基礎。目前 Mono 專案已經移交到了 WineHQ 官網 Gitlab 頁面:https://gitlab.winehq.org/wine-mono/mono[4]。

Mono 是基於.NET Framework 的,.NET Framework 是作為 Windows 一部分發布的.NET 大版本。經過多年的發展,Mono 和.NET 都可以應用在不同的環境中。在.NET 領域中,這最終導致了.NET Core 3+(這是所有未來工作和創新的基礎)的釋出,而.NET Framework 是一個長期維護的版本,它將繼續被修復和調整。 但不會有任何重大的創新。

在 Mono 的世界裡,執行時演進為支援我們所謂的“移動配置檔案”,它是 API 的一個精選子集,適用於平衡使用者需求與降低獨立執行時部署的需求。這是 Xamarin .NET 努力的基礎,也是最近 WebAssembly 工作的基礎。

使用.NET 的不同場景以及使用它們的環境將開發人員必須使用的 API 集合分割開了。對於開發人員來說,沒有一種簡單的方法可以釋出在所有平臺上都可以工作的庫二進位制檔案。

建立能夠適用於所有不同環境的二進位制庫的願望是建立.NET 標準的推動力——一個 API 的通用介面,可以在所有不同版本的.NET 上工作,無論是小型裝置、移動系統,還是大型伺服器。我們在這裡所採取的方法是提出一套在所有平臺上都可以平等使用的 API。但這仍然意味著我們要維護庫的不同實現。

2020年釋出的.NET 5完成了.NET Framework、Mono和.NET Core的統一工作,整個生態的統一工作現在還在繼續,這一事件標明在執行時層面已經完成了CoreCLR 和 Mono 的統一,上層的庫使用同一套API。統一了類庫的實現,同時為使用者提供了兩種執行時選項。在較高的層次上,在 CoreCLR 中具有一個高吞吐量、高效能的執行時,還具有一個輕量級(但速度沒有那麼快)的 Mono 執行時。每個執行時都已針對它們最常使用的工作負載進行了調整:CoreCLR 用於伺服器和桌面應用程式;Mono 用於移動和輕量級應用程式,例如 WebAssembly。可以在我們支援的所有平臺上執行 C#或 F#程式碼。在某些平臺上,使用者將能夠選擇他們想要使用的執行時,而在其他平臺上,將只有一個執行時可以使用。例如,對於 Windows 上的桌面應用程式,只有 CoreCLR 執行時適用,而對於 iOS,只有 Mono 執行時可用。

下個月.NET 9將釋出RC版本,它將於年底在 .NET Conf 2024 上釋出。我們最關注的領域是雲原生和智慧應用程式開發。現在 .NET 是可以並行安裝了,並且可以按照使用者需要的頻率進行升級,我們有了千載難逢的機會來共同演進語言和執行時,而且你已經可以看到其中的一些東西了。


相關連結:

  • [1]Mono 官網主頁:https://www.mono-project.com/
  • [2]GitHub 頁面今日釋出公告:https://github.com/mono/mono/issues/21796
  • [3]當時微軟宣佈.NET Core即將開源:https://devblogs.microsoft.com/dotnet/net-core-is-open-source/
  • [4]WineHQ 官網 Gitlab 頁面:https://gitlab.winehq.org/wine-mono/mono

相關文章