近日,《上海市卫生健康"信息技术应用创新"白皮书》(以下简称《白皮书》)正式发布,介绍了"医疗信创核心应用适配方法、公立医院信息系统及全民健康信息平台信创设计思路", 其中发现了一个错误的认知,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 的资源库、顶级语句、模式匹配增强、本机大小的整数、函数指针等特性 , 运行平台.NET Framework 4.8/Mono 6.12/.NET 5.0。
-
C# 10(2021年11月):引入了记录结构、结构类型的改进、内插字符串处理程序、global using 指令、文件范围的命名空间声明、扩展属性模式、对 Lambda 表达式的改进、可使用 const 内插字符串、记录类型可密封 ToString()、改进型明确赋值、在同一析构中可同时进行赋值和声明、可在方法上使用 AsyncMethodBuilder 属性、CallerArgumentExpression 属性、增强的 #line pragma 等特性, 运行平台.NET Framework 4.8/Mono 6.12/.NET 6.0 。
-
C# 11(2022年11月):增加了原始字符串字面量、泛型数学支持、泛型属性、UTF-8 字符串字面量、字符串内插表达式中的换行符、列表模式、文件本地类型、必需的成员、自动默认结构、常量 string 上的模式匹配 Span、扩展的 nameof 范围、数值 IntPtr、ref 字段和 scoped ref、改进了方法组向委托的转换、警告波 等特性, 运行平台.NET Framework 4.8/Mono 6.12/.NET 7.0 。
-
C# 12(2023年11月):引入了主构造函数、集合表达式、内联数组、Lambda 表达式中的可选参数、ref readonly 参数、创建任何类型的别名、试验性属性、拦截器等特性, 运行平台.NET Framework 4.8/Mono 6.12/.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) 的约束。微软已经在出口软件页面:https://www.microsoft.com/en-us/exporting/exporting-information.aspx 明确了.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 中文社区的网站****。****
上海市卫生健康"信息技术应用创新"白皮书,这样的内容作为白皮书向全社会发布,需要遵守公平、公正的原则。 这里呼吁相关白皮书的发布单位及时纠正其中的错误。