.NET 開源三部曲(一): .NET 基金會及 Roslyn 編譯器

Microsoft 在今年 11 月的 Connect(); 活動中,在多項新消息中包括開源了 .NET Framework 的核心.NET 官方部落格的文章),於是引發了很多 Microsoft 擁抱開源、.NET 開源的討論,但其實這並不是 Microsoft 或 .NET 開始開源的第一天,不論是將開源專案融入 Microsoft 的產品之中(使用 jQuery、Bootstrap 等做為網站專案範本)、抑或是將 Microsoft 的技術開放源碼(e.g., IronPython, ASP.NET MVC 等)都已經行之有年,而比較正式的官方宣示,應該要算是今年稍早在 4 月的 //build/ 2014 開發者大會中,宣佈成立 .NET 基金會以及 .NET 編譯器(代號:Roslyn)平台的開源

.NET 基金會

為什麼宣示開源要成立基金會?我們可以先看看其它開源專案、社群的作法,首先,很多人熟悉的泛 UNIX 系統(包含 Linux、BSD 等)中的 GNU 計劃的開源軟體,就是由自由軟體基金會(Free Software Foundation)來管理;而許多網際網路重要的開源軟體專案,如:Apache HTTP 伺服器Apache Hadoop 分散式運算平台等,都是由 Apache 軟體基金會來管理維護;還有堅持網路為開放平台的 Mozilla 基金會也主持了許多漫遊網際網路的軟體專案,如:Firefox 等。在開源的世界裡,由一個基金會來主持、維護或管理開放源碼專案是必然的狀況,而且有專職的單位才能夠持續各種的維護、管理甚至是壯大生態系,才能讓這些專案茁壯或是廣泛應用到更多地方,不然你可以想想看,你把自己的專案開源公開出來,影響的範圍可能很有限(當然,絕對有神人會這樣一放出來就紅了),另一方面,如果 Microsoft 決定將產品或技術開源,但又是由自己的商業公司部份來主持與經營,自然也不容易建立起更大的生態系撐起這些開源專案。

於是 .NET 基金會(.NET foundation)就這樣誕生了,這個獨立於 Microsoft 的基金會就負責管理這些開源的專案,管理來自各個想貢獻這些專案的意見或程式碼,也可以確保這些專案的發展方向不受單一公司主導而且更符合開發人員、社群的需求,透過這樣的基金會,也可以看出 .NET 相關技術開源之路的決心,而且也是照著開源社群的作法來做,所以從宣佈成立的那一刻起,所有 .NET 相關的技術若決定開源,都會由這個基金會來管理,在這一頁可以看到目前 .NET 基金會所管理的專案。


.NET 基金會持續增加管理的開源專案

.NET 編譯器平台 "Roslyn"

同樣在 //build/ 2014 上宣佈的還有 .NET 編譯器平台(compiler platform)-- Roslyn 的開源(我之前的文章有簡單的介紹),這算是整個 .NET 平台開源的開端,Roslyn 編譯器平台的開源主要有三個方向:

  • 編譯器最重要的工作之一,就是將開發者寫的程式碼轉換成執行平台的代碼(native code, byte code, IL, LLVM 等),所以編譯器與程式碼的語法習習相關,編譯器開源後,開發人員與社群不只是可以對編譯器本身的功能提出意見,還可以對於程式語言的功能提出意見或改進,像是接下來要發展的 C# 6.0 的語法,就有許多部份是來自於 Roslyn 專案的這個討論頁(Discussions under C# Language Design),這意味著你與我都有機會對 C#(或 Visual Basic.NET)提出意見,不再只是 Microsoft 公司內產品單位獨自打造而已,讓新版的程式語言規格可以更符合社群期待。

  • 除了轉換程式碼之外,Roslyn 還包含程式碼分析、語法提示、程式碼重構等等功能,功能強大的 Visual Studio 許多功能都是基於這些功能來開發,在 Roslyn 開源之後,任何人都有機會將這些功能移植到其它編輯器、程式碼工具等,開發人員有更多平台或工具的選擇。


    在 Sublime 中套用 Roslyn 技術做出 C# 的語法提示。來源:https://github.com/ligershark/Kulture

  • 在 Microsoft 開源 .NET 相關技術之前,原本就有一個 Mono 專案,根據 .NET、C# 的規格自行實作了開發及執行環境,也可以將 .NET 或 C# 相關技術帶到非 Windows 的平台上,像知名的遊戲引擎 Unity3DXamarin 所開發的跨平台開發技術(將 C#/.NET 的程式碼編譯至 Mac/iOS/Android 平台上)等都是使用 Mono 來實作,在 Roslyn 開源後,Mono 計劃也可以與之相輔相成,互相運用彼此優異的部份,同時也可以貢獻給這些基於 Mono 所開發的專案。

透過 Roslyn 的開源,除了讓這個編譯器平台能夠廣納接受來自世界各地開發者、開發社群的創新之外,也是 Microsoft 將其發展多年的技術貢獻給社群的方式。


在接下來的兩個部曲,我們再來談談 ASP.NET 的開源、.NET 核心開源還有 .NET Server Stack on Linux/Mac 的議題。