在开源社区的强烈抗议下 微软逆转了有争议的.NET变化
在开源社区的公开抗议下,微软正在改变从其即将发布的 .NET 6 中删除一个关键功能的决定。本周早些时候,微软因为商业利益原因在即将发布的 .NET 6 中删除了 Hot Reload(热重载)的一个关键部分,从而激怒了 .NET 开源社区,该功能允许开发者在应用运行时修改源代码,并立即看到结果。
这是一个许多人一直期待在 Visual Studio Code 和多个平台上使用的功能,直到微软在最后一刻做出了一个有争议的决定,将其锁定在 Visual Studio 2022,这是一个仅限于 Windows 的付费产品,据透露,最后一刻的改变是由微软开发者部门的负责人 Julia Liuson 做出的,是一个以商业利益为考量的举措。
"微软承认它犯了一个错误"
在引起反响后,微软现在已经推翻了这一改变,微软自己的许多员工在公司内部也很愤怒。"我们在执行我们的决定时犯了一个错误,花了比预期更长的时间来回应社区,".NET 项目管理主任 Scott Hunter 解释说。微软现在已经批准了社区的拉动请求,重新启用这一功能,它将在 .NET 6 SDK 的最终版本中提供。
媒体要求微软对一位高管下令改变这一事实进行评论,但该公司不想讨论这一有争议的决定。"我们已经采取措施来解决我们的一些 OSS 社区成员遇到的问题,"微软发言人在一份声明中说。"热重载功能将出现在 11 月 8 日提供的 .NET 6 SDK 的一般可用性构建中。"
不过,微软的博客文章并没有谈到这个有争议的决定。相反,它表明删除代码而不是简单地禁用它只是一个错误,而不是一个商业决定。亨特说:"在我们努力扩大范围的过程中,我们无意中最终删除了源代码,而不是仅仅不调用该代码路径,"。
虽然对 .NET 社区来说,这种逆转是值得欢迎的,但对那些重视这种决策透明度的人来说,围绕这一事件的解释和情况不会让他们感到轻松。
亨特说:"就像许多公司一样,我们正在学习平衡开放源码软件社区的需求和作为 .NET 的企业赞助商,有时我们不能正确地处理这个问题。当我们没有做到这一点时,我们能做的就是从我们的错误中学习,并更好地向前迈进。"
这一事件发生在 .NET 社区因微软参与 .NET 基金会而产生的数周动荡之后。该基金会是在 2014 年微软将 .NET 开源时创建的,它应该是一个独立的组织,其存在是为了改善 .NET 的开源软件开发和合作。一位辞职的董事会成员最近对 .NET 基金会的作用提出质疑,他问道:"在这里是为了执行微软对 .NET 开源的意志,还是为了帮助培养和促进一个健康的社区?"
最近的一场争论也导致了 .NET 基金会执行董事 Claire Novotny 最近辞职,还有人质疑鉴于微软在其中的特权以及 .NET 基金会的独立性。微软的这一转折无疑损害了它十年来所建立的一些开源工作,该公司在改善与 .NET 社区的关系以及围绕其对 .NET 基金会的影响的问题上仍有许多工作要做。
相关阅读
微软在最后一刻砍掉 .NET 6 热重载代码,结果惹恼开源社区
在萨蒂亚·纳德拉接管了微软 CEO 的职务之后,这家软件巨头一直在过去 10 年里积极拥抱开源,并且主动传达了对 Linux 和开源社区的热爱。五年前,该公司更是加入了 Linux 基金会,且官方对此表示了赞许。然而由于 .NET 社区正在酝酿的一场风暴,所有这些善意,都正处于一触即溃的危险边缘。
据悉,微软内部的一项有争议的商业决策,让许多人都开始质疑该公司对开源的承诺。多个消息来源向 TheVerge 透露,此举同样激怒了微软自家的许多开发者,但他们却被压着不许公开抱怨。
具体说来是,在本周即将发布的 .NET 6 中,这家雷德蒙德软件巨头悄然删除了 Hot Reload 的一个关键部分。该功能基本上允许开发者在创建项目时获得即时反馈、并更改代码以立即查看结果。
与竞争对手 Google 家的 Dart 编程语言和 Flutter 开发工具包来说,这是微软 .NET 框架的一个极大卖点,且该公司一直在积极将它引入 .NET 和 Visual Studio 集成开发环境。
微软最初的计划描述,是将 Hot Reload 带给尽可能多的 .NET 开发者。然而最后一刻的更改,又将它局限在了 Windows 平台上的 Visual Studio 开发人员,而不是走向开放与跨多个平台使用。
微软一直在测试接近最终版本的 .NET 6 候选发布(RC)版本,其允许开发者通过 dotnet watch 在各种环境和平台上使用热重载,包括流行的 VS Code 开发环境。
候选发布通常意味着功能完好、做好了投入生产的准备、且尽可能修复了测试期间发现的各种错误。
然而本周早些时候宣布的最后一分钟修改,又仅在 Visual Studio 2022 中启用了热重载功能。负责该功能的微软项目经理 Dmitry Lyalin 给出的理由是,其旨在为大多数用户提供最佳体验。
但是在 GitHub 上,还是有大量开发者对此表达了严重的挫败感,Hacker News 和微软官方播客文章下的评论也是一篇骂声。曾在微软 F# 团队工作的 Phillip Carter 在评论中写道:
在查看了源码之后,我发现了一个更让人感到失望的事实 —— Hot Reload 的支持代码只有 1~2 千行左右,但它们还是在最后一刻被撕票了。
作为一项起初并不局限于 Visual Studio 的功能,这是一个明显的倒退,我真不希望微软就此走上回头路。
The Verge 了解到,从 .NET 6 中删除该功能的决定,是由微软开发部门负责人 Julia Liuson 做出的。消息人士称,此举是一项以业务为主导的决定。
(传送门:GitHub)
显然,微软本想着偷偷引入这项变化,且预计不会引发强烈的反对。
但是对于长期在开源社区从事 .NET 相关工作的微软自家工程师看来,连他们都感到了深深的伤害与背叛,甚至担心这一决定会对微软后续的开源工作产生持久不利的影响。
最初在 GitHub 上曝光此事的独立开发者 Reily Wood 写道:
如果你想获得良好的开发体验,Visual Studio 无疑是最佳的选择。但 .NET 团队的所作所为,又与所有跨平台工作背道而驰。
回顾 2014 年,当时微软宣布了要将 .NET 开源。之后其本应保持独立自治,以期改善 .NET 开源软件的开发与写作。
然而近日,一位卸任的董事会成员对 .NET 基金会的角色提出了质疑,询问它是否仅代表微软的意愿行事、还是致力于帮助培养和促进一个健康的社区?
更让广大开发者感到愤怒的是,微软还锁定并限制了一个查询请求,以删除 .NET 6 中用于 dotnet watch 的热重载功能 —— 这严重阻碍了社区评论、以及拒绝最后一分钟的更改。
即使目前社区已经提交了自己的查询请求,以撤销微软的这项变动,但现在看来也是不大可能得到回应的。