编译器丨千山、布加迪点评|赵云日前,AWS软件开发经理SaikatBanerjee在2022re:Invent大会上表示:“我们发现.NET开源项目资金严重不足。”说法有些出人意料。毕竟,Microsoft成立了.NET基金会,它声称这是“一个独立的非营利组织,旨在支持围绕.NET平台发展的创新的、业务友好的开源生态系统。”AWS是仅有的10家企业赞助商之一。不可否认,微软的.NET团队在这个平台上投入了大量的精力,在技术层面也欢迎包括AWS在内的外部贡献者的努力,但是.NET项目的开源生态建设之路并不尽如人意所以光滑的。尽管如此,AWS仍然表示将继续支持.NET,包括:为项目提供资金;社区优秀.NET项目奖励积分;积极参与.NET跨平台代码开发,致力于.NET到Windows/跨平台。1.摆脱微软,AWS正在加速.NET的跨平台发展“在过去的两年里,我们花了很多时间让客户从.NETFramework转向.NETCore,让客户摆脱Windows和SQLServer许可,以及使用Linux和云原生技术,”AWS高级产品经理MayurDewaikar说。.NETCore(现在正式称为.NET)是一个开源的跨平台版本,于2016年首次发布,其前身是.NETFramework。AWS之所以如此专注于.NET跨平台开发的实施,正是因为.NETFramework来自于Windows平台,所以调用COM或其他原生WindowsAPI的应用程序将无法在Linux上运行。另一方面,.NETFramework的某些部分(包括ASP.NETWebForms和WindowsCommunicationFoundation的许多组件,即WCF)并不是.NETCore的一部分,这使得许多.NET应用程序更适合Windows或Azure云环境,移植到其他环境变得异常困难。为了解决这些问题,AWS进行了多次尝试。首先,改进WCF。根据Banerjee的说法,AWS正试图“改进WCF,而不是让它变得陈旧”。这项工作包括对HTTP绑定的联合身份支持,以及扩展WFC消息队列支持以支持除Microsoft消息队列(MSMQ)之外的其他消息代理,例如RabbitMQ和AmazonSQS(简单队列服务)。然后,开发代码以从Linux容器连接到ActiveDirectory。在WindowsAD中,GroupManagedServiceAccount(gMSA)通常用作应用程序服务的帐户。这是一个可以移植到Linux的优秀架构。AWS开发了一个名为凭证获取器(credentialsfetcher)的组件,它是一个驻留在Linux实例上的守护进程。这允许用户在Linux容器中使用gMSA。此外,ServerlessNET(尤其是在Lambda上)是另一个棘手的问题。根据用户反馈,使用.NET启动Lambda时经常会出现冷启动问题。问题不仅在于每次运行函数都需要加载.NET运行环境,而且每次都要启动JIT(justintime)编译器将.NET中间代码编译成native代码,这也需要很长时间。最近的.NET7版本中的解决方案是AOT(运行前)编译。因此,AWS为.NET开发了Lambda工具,以将本机AOT编译添加到Lambda函数。根据Dewaikar的说法,.NET是AWS上第三大最受欢迎的应用程序开发平台,仅次于Python和Java。尽管微软的Azure云更适合.NET应用程序,但拥有统一AWS的企业可能希望将其.NET代码与他们部署的其他云系统一起运行。从这个角度来看,AWS对.NET开源工作的支持和投入,主要是为了让.NET摆脱对Windows的依赖,更容易使用其LinuxVM和云原生技术,从而获得更多的云服务客户.2、微软的矛盾:.NET开源的曲折历程回顾.NET本身的发展史,20年来一路走来有惊喜也有质疑。回到2002年2月,Microsoft正式发布了VisualStudio.NET,当时的CEOBillGates将其描述为“第一个用于构建XMLWeb服务和下一代Internet应用程序的完全集成平台”。开发环境”。当时,人们期望以一种创新的技术体系来阻挡当时如火如荼的Java。但事实上,在.NET萌芽的前几年,微软的决策者虽然在宣传上一度打出“公开牌”,但在行动上仍然坚持关闭源头,致力于捍卫自己的专利护城河。长期以来,它只能在Windows平台上使用。缺乏跨平台能力自然阻碍了.NET在非Windows用户群体中的推广。直到2014年,微软新任CEO纳德拉上任。在发布会上,他释放了一个明确的信号:Windows将不再具有过去的重要地位,云和移动才是微软未来的核心。从此,微软才真正开始从闭源时代的余晖中走出来,真正开始“拥抱开源”。.NET跨平台工作的正式支持对他们来说是具有里程碑意义的一步。.NET发展到今天很大程度上是因为微软对开源态度的转变。然而。NET一直以来在开源社区中争议颇多。比如与微软、Windows的深度捆绑,使得社区难以壮大,生态难以繁荣,也让不少项目维护者质疑其中立性。网友@知晓评论说,虽然发展到现在,微软对.NET开源方面的态度依然矛盾,甚至可以说是资源博弈。2021年10月,微软在即将到来的.NET6中悄悄删除了热重载功能,声称该功能仅在VisualStudio中支持,迫使用户转而使用价格昂贵的VisualStudio2022,这引发了批评。虽然微软很快恢复了这个功能并公开道歉,但这次事件确实“违背了项目维护者的信任”,需要多久才能弥合差距。3.写在最后。NET作为开发平台是当红的玩家,其开源过程中的一举一动都会影响到开发者的日常工作。此次曝光的开源资金不足问题,难免让人质疑微软对于.NET开源的决心和实力。可以肯定的是,微软不再将开源视为洪水猛兽,甚至在逐渐关注开源社区的发展和实力。然而,作为一家商业公司,其真正关心的从来不是一个项目是否开源,而是该项目是否具有商业价值,能否帮助微软的平台产品获得更多的市场份额。这是这个巨人的生存本能。参考链接:https://www.theregister.com/2022/12/01/net_open_source_heavily_underfunded/https://blog.csdn.net/farway000/article/details/123143983https://www.zhihu.com/question/547001632/回答/2613170001
