呼吁改正《上海市衛生健康信息技術應用創新白皮書》 C# 被認定為A 組件 的 錯誤認知
近日,微信公眾號上海衛生觀察發了一篇文章前沿報告丨《上海市衛生健康“信息技術應用創新”白皮書》節選,《上海市衛生健康“信息技術應用創新”白皮書》(以下簡稱《白皮書》)正式發布,介紹了“醫療信創核心應用適配方法、公立醫院信息系統及全民健康信息平臺信創設計思路”, 其中發現了一個錯誤的認知,C#/.NET 被認定為A 組件, 具體詳見下圖:
![]()
C#/.NET 平臺需要被區分為兩個階段:.NET Core 1.0 對應的 C# 版本是 C# 7.0 為界線,我們來看下C# 的發展歷程:
-
C# 1.0(2002年1月):作為與 Visual Studio .NET 2002 一起發布的版本,C# 1.0 在設計上受到了 Java 的影響。它的主要功能包括類、結構、接口、事件、屬性、委托、運算符和表達式、語句以及特性,運行平臺.NET Framework 1.0/Mono 1.0。
-
C# 2.0(2005年11月):此版本引入了泛型、匿名方法和迭代器等特性,大幅提高了語言的靈活性和性能,運行平臺.NET Framework 2.0/Mono 2.0。
-
C# 3.0(2007年11月):這個版本伴隨著 .NET 3.5 的發布,引入了LINQ、匿名類型、隱式類型的局部變量、對象和集合初始化器、擴展方法、查詢表達式、Lambda 表達式等特性, 運行平臺.NET Framework 3.5/Mono 2.0。
-
C# 4.0(2010年4月):增加了動態綁定、命名和可選參數、泛型協變和逆變、嵌入的互操作類型等特性, 運行平臺.NET Framework 4.0/Mono 2.0。
-
C# 5.0(2012年8月):此版本引入了異步編程、調用方信息、協變返回類型和成員等特性, 運行平臺.NET Framework 4.5/Mono 3.0。
-
C# 6.0(2015年7月):引入了自動屬性初始化器、表達式體成員、字符串內插、空合并運算符、異常過濾器等特性, 運行平臺.NET Framework 4.8/Mono 4.4,在2014年成立了.NET基金會。
-
C# 7.0(2017年3月):增加了 out 變量、元組、模式匹配、局部函數、ref 局部變量和返回、擴展異步返回類型等特性, 運行平臺.NET Framework 4.8/Mono 6.12/.NET Core 1.0。
-
C# 7.1 和 7.2:這兩個小版本分別在 2017 年 8 月和 2017 年 11 月發布,引入了默認表達式、異步 Main 方法、推斷元組名稱、數字分隔符、ref 結構、in 參數等特性, 運行平臺.NET Framework 4.8/Mono 6.12/.NET Core 2.0。
-
C# 8.0(2019年9月):引入了可空引用類型、異步流、范圍和索引、默認接口方法、只讀成員、解構委托等特性, 運行平臺.NET Framework 4.8/Mono 6.12/.NET Core 3.1。
-
C# 9.0(2020年11月):隨 .NET 5 一起發布,引入了記錄、僅限 Init 的資源庫、頂級語句、模式匹配增強、本機大小的整數、函數指針等特性 , 運行平臺Mono 6.12/.NET 5.0。
-
C# 10(2021年11月):引入了記錄結構、結構類型的改進、內插字符串處理程序、global using 指令、文件范圍的命名空間聲明、擴展屬性模式、對 Lambda 表達式的改進、可使用 const 內插字符串、記錄類型可密封 ToString()、改進型明確賦值、在同一析構中可同時進行賦值和聲明、可在方法上使用 AsyncMethodBuilder 屬性、CallerArgumentExpression 屬性、增強的 #line pragma 等特性, 運行平臺Mono 6.12/.NET 6.0 。
-
C# 11(2022年11月):增加了原始字符串字面量、泛型數學支持、泛型屬性、UTF-8 字符串字面量、字符串內插表達式中的換行符、列表模式、文件本地類型、必需的成員、自動默認結構、常量 string 上的模式匹配 Span、擴展的 nameof 范圍、數值 IntPtr、ref 字段和 scoped ref、改進了方法組向委托的轉換、警告波 等特性, 運行平臺.NET 7.0 。
-
C# 12(2023年11月):引入了主構造函數、集合表達式、內聯數組、Lambda 表達式中的可選參數、ref readonly 參數、創建任何類型的別名、試驗性屬性、攔截器等特性, 運行平臺.NET 8.0.
我們從C# 的發展歷程來看,他的運行平臺一共有3個:Windows上的.NET Framework, 以及跨平臺(Windows/Linux/Macos)運行的mono 和.NET Core/.NET , 從時間線上來看2014年成立.NET基金會是一個分水嶺,2020 .NET 5的發布(2019年新冠疫情的爆發,統一的.NET時間變成了2020年),把.NET Framework/Mono/.NET Core 這三大平臺開始統一為.NET,下面這張圖來自我2019年參加華為云的一個演講PPT《面向 .NET 和 .NET Core 開發人員的華為云》。
C# 從他的誕生之日就是標準的ECMA 334/335 標準,JavaScript 最初由 Netscape 開發,現在由 ECMA 標準化的 ECMAScript 版本廣泛應用于網頁開發。這些語言的標準化工作有助于確保不同平臺和環境之間的兼容性和互操作性。
從標準化角度來說,把C#歸類為A組件是完全錯誤的,從開源項目和版權歸屬來說C# 在2014年成為開源項目,并且所有的版權和專利都歸屬社區中立的.NET 基金會。Java 語言由 Sun Microsystems 開發,后來成為 Oracle 的一部分。Java的版權都歸屬Oracle,因此C#應當歸類為淺藍色的開源組件。
.NET 平臺現在是指從(.NET 5.0開始的) 統一的C# 運行平臺, 他的知識產權歸屬方是.NET基金會,使用最寬松的MIT和Apache 2開源協議,文檔協議遵循CC-BY。這將允許任何人任何組織和企業任意處置,包括使用,復制,修改,合并,發表,分發,再授權,或者銷售。唯一的限制是,軟件中必須包含上述版權和許可提示,后者協議將會除了為用戶提供版權許可之外,還有專利許可,并且授權是免費,無排他性的(任何個人和企業都能獲得授權)并且永久不可撤銷。早在2022年微軟就已經特別公告過 .NET 不受 美國出口管理條例(EAR) 的約束。微軟已經在出口軟件頁面:Microsoft Exporting - Exporting Microsoft Products 明確了.NET的所有版本(除了老的.NET Framework)不遵守美國出口管理條例EAR: https://www.bis.doc.gov/ ,因此我們完全不需要擔心存在“斷供”問題。
中國信通院在2022 | OSCAR開源產業大會 大會上發布的 全球開源生態研究報告里 首次提出 開源社區成熟度度量模型,.NET 是法律合規表現出色,組件許可證兼容性較高。.NET開源生態是基于MIT 和 Apache 2.0 協議基礎上構建的,對于商業是友好的。
大家也可以下載信通院的《全球開源生態研究報告(2022年)》:http://www.caict.ac.cn/kxyj/qwfb/bps/202209/P020220916644891972234.pdf。
在國內,同樣有這么一支在龍芯旗下的.NET編譯器團隊,他們在參與dotnet的核心開發,當然還有很多社區同學也在參與dotnet 的開源協作。龍芯.NET 團隊已經發布了.NET Core 3.1和 .NET 6、.NET 7和.NET 8 , 他們也正在準備著發布.NET 9。具體可以關注他們的產品官網 http://www.loongnix.cn/zh/api/dotnet/。
中科院軟件所還有一個團隊在移植 RISC-V的工作。
OpenEuler 社區對.NET 的支持也是完整的。 OpenEuler 社區的李洋 在2023年12月份 中國 .NET 開發者峰會2023 上大家分享《openEuler社區對.NET的兼容支持介紹》,資料和視頻參見.NET 中文社區的網站。
上海市衛生健康“信息技術應用創新”白皮書,這樣的內容作為白皮書向全社會發布,需要遵守客觀、公平、公正的原則。 這里呼吁相關白皮書的發布單位及時糾正其中的錯誤。
歡迎大家掃描下面二維碼成為我的客戶,扶你上云





浙公網安備 33010602011771號