今天是國慶節,也是中秋節,月滿中秋,舉國歡慶,在這裡祝各位開發者中秋國慶快樂。放假在家就想把這幾年對於.NET發展相關生態做個梳理,寫一篇文章來總結一下這兩年從騰訊出來自己創業,推動.NET在國內的應用的一些感想,畢竟我是一個弱小的創業者,沒有大公司的資源,更多是要靠大家的共同努力,打造更加有生命力的.NET社群。
首先我們處於中國這樣的一個大環境之下,在中國的.NET社群發展來說,相對於微軟開源.NET 的2014年之前,中國的.NET社群得到了長足的發展,湧現了大量的開源社群,其中以NCC(.NET Core Community)為代表匯聚了國內主要的開源專案,NCC的發展過程也是曲折的,不時聽說有人詆譭,我們相信謠言與誹謗終將破滅,一切詆譭開源社群的行為終將被反噬。在NCC 之外還存在著有特色的社群,比如以微信開發生態發展起來的盛派開發者社群,最近他們推出了集合盛派多年開發經驗的框架NCF。
隨著中國的發展,很多技術因為一些原因越來越受制於人,尤其是上游核心技術。在中美當前背景下為了解決這個問題,我國明確了「數位中國」建設戰略,搶佔數位經濟產業鏈制高點。於是,國家提出「2+8」安全可控體系,2020-2022年是國家資訊科技應用創新產業推廣最重要的3年,中國IT產業從基礎硬體-基礎軟體-行業應用軟體有望迎來國產替代潮。
資訊科技應用創新產業(簡稱信創)需要在四個層面逐步實現:基礎硬體設施,如晶片、伺服器、儲存、交換機、路由器;底層軟體,包括作業系統、資料庫、中介軟體等;應用軟體,面向實際應用的不同領域;安全產品,保障邊界安全、終端安全和管理安全產品。目前在安可領域,高階晶片伺服器等硬體已能基本滿足辦公需求;基礎軟體正在實現國產化替代。而在信創下,應用生態便顯得匱乏了。 要實現應用軟體從WinIntel 聯盟、雙A聯盟(Android + ARM)到信創產業的平滑過渡,是豐富國產應用生態、推動信創產業從「可用」走向「好用」的重要手段。國內眾多應用軟體開發商也正在安可這一領域展開激烈競爭。
在信創產業龍芯給我們做出表率,他們積極投入研發力量把OpenJDK 和 .NET 納入信創產業來建設,龍芯支援了計算機上執行應用程式的動態虛擬機器器Java、Javascript、.NET三大虛擬機器器,龍芯還正在開發一套指令翻譯系統,可以將其他指令集翻譯成Loongarch指令相容X86,ARM,MIPS。目前信創產業國內也有很多的參與方,其中ARM的鯤鵬計算推進比較快,最近我也同華為的鯤鵬生態的相關負責人溝通,他們在鯤鵬生態對.NET支援是很支援的,而不是坊間流傳的不支援.NET, 我和華為雲的同學一起在華為雲上建立了一個生態合作伙伴論壇的.net技術專區 :https://bbs.huaweicloud.com/forum/forum-1184-1.html。 9月份我給華為雲鯤鵬計算的全國各地的產業基地的同學們分享了一次.NET 技術。
在信創產業背景下的中國.NET社群的發展也正在加速,活躍的社群加上具有說服力的開源產品的不斷湧現,結合.NET的效能優勢,充分發揮.NET的跨平臺能力,在各行各業的開發者在各自領域都可以推出有競爭力的產品,亦或是基於其他語言流行產品的.NET版本或者使用者端,這裡舉一個例子就是看到有些人覺得國內的.NET開源專案之中大多數ORM或者Web框架之類,同質化嚴重,我覺得有競爭才是好事,能說服社群的產品就是要貨比三家、大浪淘沙。
微軟是非常有誠意發展.NET社群的,通過成立類似於Apache基金會的.NET基金會來支援.NET社群和開源,旨在拓寬和加強.NET生態系統和社群。這可以通過多種方式完成,包括專案指導,指導,法律和行銷幫助,技術和財務支援設定等,2014年 .NET基金會的創始成員中有六位創始人,均非微軟公司員工。隨著微軟的收購動作,Miguel 也成了微軟員工,Migel一直在努力讓.NET基金會獨立於微軟。2014年以來已經有眾多知名公司加入.NET基金會, 僅在平臺專案中,.NET平臺上有87%貢獻者其實不在Microsoft工作。在.net conf 2019 AWS加入了支援.NET Foundation的.NET開源生態系統中越來越多的行業領導者,這些成員包括Microsoft,Google,Red Hat,JetBrains,Unity,三星,Pivotal,Insight和Telerik,AWS等公司。
我對所有參與社群建設的人都充滿敬意,也鼓勵各位.NET開發者積極融入社群,去了解、參與甚至創造.NET開源專案,請不要在社群裡充滿了嘲諷、不屑和鄙夷(經常可以在微信群,QQ群,部落格評論裡見到這種言論)。不要抱怨社群沒有什麼,而是想想能為社群做什麼。等到.NET社群充滿了戰鬥力,受益的最終還是整個開發群體。
這幾年.NET社群得到了很大的發展,還是有賴於.NET 本身的技術發展,.NET技術方面的優化和升級,也是.NET發展的強勁動力,很多人在談到.NETCore相對於.NET Framework的優點時,第一時間想到的是開源跨平臺。其實跨平臺只是起點而非目的。.NET Core的更大的意義在於效能的提升,以及保持與時俱進的設計甚至引領潮流。即將在2020 dotnet conf 上釋出的.NET 5 將支援所有 .NET 應用程式型別:Xamarin、ASP.NET、IoT 和桌面,將利用一個單獨的基礎類別庫 (BCL)、兩個獨立的執行時(MonoCLR和CoreCLR,因為很難將兩個截然不同的執行時單獨作為源)和一個工具鏈(比如 dotnet CLI),結果將是行為、API 和開發人員體驗之間的一致性。.NET 的統一有很多優點。將框架、執行時和開發人員工具集統一到一個程式碼庫中,將減少開發人員(Microsoft 和社群)需要維護和擴充套件的重複程式碼量。
並且所有 .NET 5 原始碼都將是開放原始碼,所有人都能見證和參與其中,這讓全球真心熱愛這個平臺或C#語言的有志之士有了一個集中的交流地,也極大的促進了國內.NET的發展,這些年雖然缺少了微軟中國的佈道支援,國內的.NET開源社群一樣發展的不錯,如果有微軟中國的資源投入支援,相信這個結果會更好。
效能的提升直接使得很多人開始關注和學習.NET 帶來的優化,例如基礎庫中相當多的執行緒安全的靜態方法被優化和重寫,大幅減少競爭資源的損耗;推出效能極佳的System.Text.Json基礎庫替代包袱沉重的Json.NET,還有更底層的Span<T>/Memory<T>, ref struct 等的引入,讓C#在高效生產力的條件下擁有C/C++的效能。從C# 7.0開始一路完善的模式匹配(當然還是有很多人對這些新特性不是很滿意),以及Range/Index的切片語法等等,這些都使得基於.NET的程式設計體驗更上一層樓。在設計上引領潮流方面來說,以ASP.NET Core最為典型---依賴注入無處不在,認證、授權、紀錄檔、設定、中介軟體等模組都非常值得學習,對Docker,雲服務、微服務、IOT、ML等支援和持續優化,也使得.NET/C#在較前沿的工程領域佔有一席之地,特別是基於WebAssembly技術的Blazor框架在前後端分離的前端框架上也是引領潮流的。
回顧自2014年以來的.NET 的開源發展路程,一路發展也不是一帆風順的,中間也有不少批評和困擾。例如在.NET Core 2.1的HttpClient 出現了一些嚴重的效能問題,使得很多開發者怨聲載道,EF Core 3.0 不再預設使用使用者端評估(https://docs.microsoft.com/zh-cn/ef/core/querying/client-eval)這樣的一個較大的破壞性更新,讓開發者在升級專案的資料存取層程式碼時遭遇打擊。.NET的版本升級現在也是很快,這裡強烈建議大火把專案升級到當前最新的LTS版本,以後的升級儘量避免隔代升級,比如即將到來的.NET,從3.1升級上去會比較順滑,這裡特別要提醒的是別以為.NET 4.8也可以順滑的升級到.NET 5。這些發展道路上的問題確實也打擊了部分開發者的耐心和信心,以至於他們在當時不得不額外花費時間,承受進度壓力處理問題的時候,對.NET的評論極其負面。這同時也阻撓了相當一部分人將.NET Framework專案遷移到.NETCore或升級舊版本.NET Core的信心,隨著.NET Core/Framework,新舊版本之間的差距越來越大,最終造成了惡性迴圈,專案的老化積重難返,想找到靠譜的人維護也變得逐漸困難。
但是從總體上來說,這些年.NET的在技術發展上取得的成績是值得欣喜的,它走出的每一步都是讓.NET繼續煥發青春,接下來幾年時間裡也是國家資訊科技應用創新產業發展的黃金時間,一個完全開放的.NET生態會是這裡非常重要的參與者。