呼籲改正《上海市衛生健康資訊科技應用創新白皮書》 C# 被認定為A 元件 的 錯誤認知

张善友發表於2024-06-24

近日,微信公眾號上海衛生觀察發了一篇文章前沿報告丨《上海市衛生健康“資訊科技應用創新”白皮書》節選,《上海市衛生健康“資訊科技應用創新”白皮書》(以下簡稱《白皮書》)正式釋出,介紹了“醫療信創核心應用適配方法、公立醫院資訊系統及全民健康資訊平臺信創設計思路”, 其中發現了一個錯誤的認知,C#/.NET 被認定為A 元件, 具體詳見下圖:

呼籲改正《上海市衛生健康資訊科技應用創新白皮書》 C# 被認定為A 元件 的 錯誤認知

C#/.NET 平臺需要被區分為兩個階段:.NET Core 1.0 對應的 C# 版本是 C# 7.0 為界線,我們來看下C# 的發展歷程:

  1. C# 1.0(2002年1月):作為與 Visual Studio .NET 2002 一起釋出的版本,C# 1.0 在設計上受到了 Java 的影響。它的主要功能包括類、結構、介面、事件、屬性、委託、運算子和表示式、語句以及特性,執行平臺.NET Framework 1.0/Mono 1.0。

  2. C# 2.0(2005年11月):此版本引入了泛型、匿名方法和迭代器等特性,大幅提高了語言的靈活性和效能,執行平臺.NET Framework 2.0/Mono 2.0。

  3. C# 3.0(2007年11月):這個版本伴隨著 .NET 3.5 的釋出,引入了LINQ、匿名型別、隱式型別的區域性變數、物件和集合初始化器、擴充套件方法、查詢表示式、Lambda 表示式等特性, 執行平臺.NET Framework 3.5/Mono 2.0。

  4. C# 4.0(2010年4月):增加了動態繫結、命名和可選引數、泛型協變和逆變、嵌入的互操作型別等特性, 執行平臺.NET Framework 4.0/Mono 2.0。

  5. C# 5.0(2012年8月):此版本引入了非同步程式設計、呼叫方資訊、協變返回型別和成員等特性, 執行平臺.NET Framework 4.5/Mono 3.0。

  6. C# 6.0(2015年7月):引入了自動屬性初始化器、表示式體成員、字串內插、空合併運算子、異常過濾器等特性, 執行平臺.NET Framework 4.8/Mono 4.4,在2014年成立了.NET基金會。

  7. C# 7.0(2017年3月):增加了 out 變數、元組、模式匹配、區域性函式、ref 區域性變數和返回、擴充套件非同步返回型別等特性, 執行平臺.NET Framework 4.8/Mono 6.12/.NET Core 1.0。

  8. C# 7.1 和 7.2:這兩個小版本分別在 2017 年 8 月和 2017 年 11 月釋出,引入了預設表示式、非同步 Main 方法、推斷元組名稱、數字分隔符、ref 結構、in 引數等特性, 執行平臺.NET Framework 4.8/Mono 6.12/.NET Core 2.0。

  9. C# 8.0(2019年9月):引入了可空引用型別、非同步流、範圍和索引、預設介面方法、只讀成員、解構委託等特性, 執行平臺.NET Framework 4.8/Mono 6.12/.NET Core 3.1。

  10. C# 9.0(2020年11月):隨 .NET 5 一起釋出,引入了記錄、僅限 Init 的資源庫、頂級語句、模式匹配增強、本機大小的整數、函式指標等特性 , 執行平臺Mono 6.12/.NET 5.0。

  11. C# 10(2021年11月):引入了記錄結構、結構型別的改進、內插字串處理程式、global using 指令、檔案範圍的名稱空間宣告、擴充套件屬性模式、對 Lambda 表示式的改進、可使用 const 內插字串、記錄型別可密封 ToString()、改進型明確賦值、在同一析構中可同時進行賦值和宣告、可在方法上使用 AsyncMethodBuilder 屬性、CallerArgumentExpression 屬性、增強的 #line pragma 等特性, 執行平臺Mono 6.12/.NET 6.0 。

  12. C# 11(2022年11月):增加了原始字串字面量、泛型數學支援、泛型屬性、UTF-8 字串字面量、字串內插表示式中的換行符、列表模式、檔案本地型別、必需的成員、自動預設結構、常量 string 上的模式匹配 Span、擴充套件的 nameof 範圍、數值 IntPtr、ref 欄位和 scoped ref、改進了方法組向委託的轉換、警告波 等特性, 執行平臺.NET 7.0 。

  13. 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 開發人員的華為雲》。

image

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/ ,因此我們完全不需要擔心存在“斷供”問題。

image


中國信通院在2022 | OSCAR開源產業大會 大會上釋出的 全球開源生態研究報告裡 首次提出 開源社群成熟度度量模型,.NET 是法律合規表現出色,元件許可證相容性較高。.NET開源生態是基於MIT 和 Apache 2.0 協議基礎上構建的,對於商業是友好的。

image

大家也可以下載信通院的《全球開源生態研究報告(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 中文社群的網站

image

上海市衛生健康“資訊科技應用創新”白皮書,這樣的內容作為白皮書向全社會發布,需要遵守客觀、公平、公正的原則。 這裡呼籲相關白皮書的釋出單位及時糾正其中的錯誤。


相關文章