.NET 核心開源

oschina發表於2014-11-17

  對於.NET來說,今天是個大日子! 我們很高興宣佈.NET核心將要開源,包括執行時環境和框架類庫。

  這是我們為開源努力的自然結果,我們已經開源了主要的編譯器(C#,VB、F#),還有ASP.NET:

  我們通過將範圍擴充套件到.NET執行時環境和核心框架,使(微軟開源程式)進入下一個階段。

 什麼是 .Net 核心?

  .Net 核心是一個模組化的開發棧。該開發棧包含 .Net 平臺的所有特性。這些特性已經被用在 ASPNET Core 5 和 NET Native。下面會詳細介紹什麼是 .Net 核心以及它和 NET Framework 的關係。

 為什麼我們要開源 .Net 核心?

  我們開源 .Net 核心有下面兩個原因:

  1. 為跨平臺的 .Net 奠定基礎

  2. 建立一個強大的生態系統

  下面讓我們來關注更多細節。

 為跨平臺 .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)。

 開源的開發經歷

  我的團隊也開源過,比如MEF專案,但平心而論,那個並沒取得多少收穫。我們認為基本的原因是缺少社群的參與。當我們只開放了原始碼後,並沒有努力為之建立一個社群。我深深感到,建立一個社群才是開源專案成功的關鍵所在。而建立一個社群的關鍵是開發的過程也要開源地進行。

  為不辜負期望,我們同樣也會透明我們的開發計劃是什麼,我們要克服的有那些挑戰,以及哪些範圍還未完成。我來解釋一下這些。

  第一步是要停止code bombs,就像之前MEF中投的那些一樣。程式碼炸彈本質上是不定期的公開更新的原始碼,它們是系統專案組內部正在完成的程式碼。由於各種原因,這樣做是有問題的。舉個例子,公佈的時間延遲,大家很難看到同一份程式碼,這樣就很難進行公開的討論。另一個大問題是歷史版本丟失,自動同步讓我們同步一致程式碼,但感覺像reinventing Git.

  所以為防止程式碼炸彈,我們建立我們的開發環境在公開的GitHub 倉庫,它是一個領先的系統。這意味著所有的程式碼修改會立即表現出來。但我們不會:

  • Code reviews.  我們希望所有的程式碼審查過程全公開,通過 GitHub’s pull request model.

  • 設計文件及討論,我們同樣共享設計時的備註、規格以及實現的文件。我們一定會講清楚我們將用什麼格式。至少讓你可以記下基本文件,就像 Mad’s C# design notes的一樣。另一個想法是,我們給我們的設計討論會錄音,然後共享到 Channel 9。我們一定會講清楚,我們會以什麼樣的節奏去,怎麼實現它。

  我們初步計劃使用GitHub問題清單功能來跟蹤bug。 巧妙的是我們也提供了其它途徑,如 UserVoice論壇,微軟Connect網站和我們內部的團隊協作伺服器(Team Foundation Server)。 它們的介紹如下:

  • User Voice論壇。 在潛在昂貴專案排名方面,UserVoice有優秀的投票系統。 因此,對於更大特性和根本創新,UserVoice是蒐集反饋的最佳選擇。

  • 微軟Connect網站。 Connect網站主要使用者是企業使用者和產品支援人員。 我們將有可能繼續使用這個網站用於產品支援,但是不推薦你使用(它來提交bug),除非是提交.NET核心的bug。

  • 內部團隊協作伺服器。 我們不再使用TF Version Control工具來管理.NET核心,但是仍然管理大塊的DevDiv模組。 為了能夠跨平臺的協作工作,我們會繼續允許團隊通過TFS提交bug。 我們正在考慮如何公開那些bug。 一個方法是建立一個自動映象系統。

  在UserVoice和Connect網站上,當我們的團隊成員在GitHub上提交了相應的問題後,你可以看到一個關閉UserVoice/Connect上問題的流程。

  我們接受貢獻

  是的,我們接受貢獻!不過,與任何開源專案一樣,我們不會盲目的接受所有的貢獻。我們所收到的所有pull請求都會按照下面的標準進行評判:

  • 路線圖(Roadmap)。所有專案都專注在某些領域。為了保持重心和發展勢頭,大部分工作向專案路線圖看齊是很重要的。

  • 質量(Quality)。我們要為輸送高質量程式碼負責。因此,外部人員必須滿足與微軟員工相同的質量標準。包括正確的設計、架構、足夠的測試覆蓋率和遵守編碼風格。

  我們相信通過為外部開發者提供足夠的環境,在開源界的開發將會成功。例如,你可以看到我們的程式碼審查並且閱讀內部是如何設計的相關文件。我們將會公佈路線圖。

  貢獻者最好提早與我們溝通你的想法。這樣的話,我們就可以給你提供一些幫助,比如提供文件或者是針對你的方案進行討論。我們也會把我們希望大家做的工作釋出在GitHub的issues列表上,供大家進行選擇。

  通常,所有的社群貢獻都要通過GitHub的 pull request 模型來完成,也就是說,你首先要fork我們的專案,並在你的分支上進行開發,最後通過pull request將程式碼提交到主幹上。 對程式碼檢視也同樣是使用這一模型。

  在我們合入你的貢獻之前,你還需要簽署一份 Contributor License Agreement (CLA)協定。我們目前正在把這個工作工具化,最後的效果可能和Azure CLA過程類似。

  構造並執行你自己的分支

  要玩玩我們的程式或實驗你自己做的更改,你需要構建並執行你自己的庫版本。我們想要做的儘可能的簡單,所以看這裡:

  • 克隆我們得倉庫(git clone https://github.com/dotnet/corefx)

  • 呼叫build.cmd

  只需要Visual Studio 2013用來構建(不用“Dev14”)。將會構建所有得庫並執行單元測試。

  過去我們我們做的一個更改是強命名,以防止你草率的刪除已存專案的二進位制檔案。通過提供強命名二進位制檔案的新方法我們已經解決了這個隱憂,我們把新方法叫做開源簽名。你可以在我們的開發者指南中找到更多資訊。

 .NET基金會

  .NET核心專案是由.NET基金會來進行管理。他將成為推動.NET核心棧不斷向前的關鍵力量。我們還會與Xamarin/Mono專案的Miguel de Icaza進行緊密的合作,來建立一個共享的程式碼基線,使其發展為一個跨平臺實現的.NET核心棧。

  今天,只有部分程式碼庫可以在GitHub上訪問到:

  我們會以下幾個領域持續發力:

  • 更多的程式碼庫. 目前開源的部分,可以理解為整個專案的首付款。我們的目標是在2015年開源整個.NET核心棧。

  • 構建和執行在非Windows平臺. 我們現在只提供了在Windows上進行構建和執行的能力。我們正計劃與Mono社群一起元件一個公開的工作組來完成此項工作。

  • .NET 核心執行時環境 (CoreCLR). 我們正在擬定執行時環境的開源計劃。請保持關注。

 總結

  .NET核心棧將在GitHub上完全開放原始碼。我們已經對其中的一些庫做了一些必須要進行的工程性更改,並在核心框架程式碼倉庫中包含了它們。從現在到生成2015 構建期間,你將看到我們在開放原始碼方面所做的工作。歡迎下載原始碼!

  請多多使用.NET基金會的論壇,讓我們知道你們所想!

  原文地址:http://blogs.msdn.com/b/dotnet/archive/2014/11/12/net-core-is-open-source.aspx

相關文章