一个月前,微软从.NET 6 中悄悄删除 Hot Reload 功能,从商业策略出发只为 Visual Studio 付费用户提供,这件事情引发了广大开发者的强烈抗议。虽然微软最后迫于形势更改了决策,并给予了道歉,但显然还无法平息大家的愤怒。
昨天,HackerNews 热榜上又一条关于.NET 的消息爬了上来:“The Microsoft .NET platform has been forked: Introducing Open.NET”。
在 Open.NET 项目的 GitHub 页面中,创建者们表示希望能有一个不受微软控制的“Open.NET”社区,能让 .NET 完成向开放编程语言的过渡。他们强调说,其它开源编程语言都是在开放环境中开发的,而不是像.NET 这样隔离大量开发人员进行黑箱操作。
微软上个月做出的这个商业决策,无疑深深伤害了开发者的感情。对于那些仍然讨厌微软的人来说,它将成为又一个说明“微软让人无法信任”的例子。
10 月 20 日,社区发现微软在即将发布的.NET 6 中悄悄删除了 Hot Reload 中的一个关键组件。Hot Reload 功能希望帮助开发者在创建项目时随时获取即时反馈,并在更改代码后可以立即查看结果。相较于谷歌推出的竞争性 Dart 编程语言与 Flutter 工具包, Hot Reload 无疑颇具卖点,微软也一直希望能把这项功能推向.NET 与 Visual Studio。
微软在最初的计划声明中将其描述为“一个雄心勃勃的项目,希望将 Hot Reload 带给更多.NET 开发人员。”但就在成果即将发布的最后一刻,微软突然决定把受众范围缩小至 Windows 与 Visual Studio 开发人员、不再开放跨平台版本。
荒谬的是,微软之前一直在测试、而且已经非常接近最终版本的.NET 6 候选版允许开发者通过 donet watch 在各类环境及平台上灵活使用 Hot Reload 功能,其中也包括颇具人气的 Visual Studio Code 开发环境。所谓候选版,就是功能完备、已经通过厂商生产就绪测试的版本,只需要在正式发布之前再检查一下 bug 即可。
微软在发布的最后一刻突然变卦,表示“Hot Reload 功能将仅通过 Visual Studio 2022 发布,旨在保证为大多数用户提供最佳体验。”微软公司 Hot Reload 功能项目负责人 Dmitry Lyalin 则把话说得更明白,微软结合“优先考量”,所以才放弃了将 Hot Reload 直接纳入 dotnet watch 工具的计划。社区对此明显大为恼火,GitHub 上已经有帖子对此提出质疑。Hacker News 网站及微软自己的相关博文下方也出现不少抗议性评论。
“请不要误会,这里我们做出澄清。面对需要应对的庞大场景数量,我们必须做出优先考量。因此,Hot Reload 不会作为 dotnet watch 工具中的功能发布。我们正在 VS 2022 上着力完美这项功能,稍后还将推出 VS4Mac 支持。”
微软公司前 F# 团队雇员 Phillip Carter 坦言,“在查看源代码后,情况更加令人失望。相关支持代码共有 1000 到 2000 行,但却在发布前最后一刻被撤掉了。这显然是在开历史的倒车,Hot Reload 功能在设计之初也压根不属于 Visual Studio 独占。恐怕未来还会有更多类似的情况出现。”
根据媒体掌握的情况,从.NET 6 中删除 Hot Reload 功能的决定来自微软开发部门负责人 Julia Liuson。据消息人士称,这项决定的深层考量在于保障业务收益。微软明显觉得这不是什么大事,却没想到激起了社区的愤怒回应。在.NET 项目上与开源社区合作多年的微软工程师们感到被公司背叛,同时担心这样的决定会对微软后续的开源参与工作造成深远影响。
最早在 GitHub 上抗议此次功能删除的独立开发者 Reilly Wood 表示,“微软的行为其实传达出这样的信息:想要良好的开发者体验,就得使用 Visual Studio。这似乎与.NET 团队之前的一切跨平台努力背道而驰。”
而就在此事之前,微软加入.NET 基金会的消息在.NET 社区中已经引发动荡。.NET 基金会成立于 2014 年,当时微软决定将.NET 项目开源,因此基金会本身应该以独立组织的身份持续推动.NET 开源软件的发展与协作。而一位辞职的董事会成员 Rodney Littles 近期公开质疑.NET 基金会的角色定位,询问“基金会到底是在帮助培养和推进社区健康稳定,还是帮助微软保持对开源.NET 的管控能力?”
微软还锁定并限制了一项 pull 请求,借以从.NET 6 dotnet watch 工具中删除 Hot Reload 功能。如此一来,社区就无法抓住最后时机评论或拒绝这项临时更改。虽然现在社区再次提交 pull 请求希望恢复 Hot Reload,但被批准的可能性明显不大。
面对.NET 基金会独立性遭受质疑、微软加入很可能建立掌控特权等呼声,另一位董事也选择了辞职。
为了推动 @dotnetfdn 继续向前发展,我已辞去执行董事职务。我仍会留在 @dotnet 团队,也期待能继续为我最喜爱的平台贡献力量。
这项有争议的商业决策,让很多人再次怀疑起软件巨头做出的开源承诺。根据多位公司内部消息人士证实,此举也激怒了微软公司大批开发人员,而后续上峰下达的“禁止抱怨”命令不仅无助于缓解事态、反而将群众情绪推向高点。
在微软之外,其他程序员骂的更加直接:“这是一个极其短视的决定,让我对 .NET 的未来感到害怕。我非常尊重 .NET 团队,我非常肯定他们不是这背后的人。”
虽然最后微软更改了决策,并给予了道歉,但对于那些仍然讨厌微软的人来说,这将成为又一个无法信任微软的例子。
不顾及开发者利益、侧重从商业角度考虑问题,这样的事情在微软的产品发展历史上已经屡见不鲜。很多产品甚至还在享受甚至仍然拥有强大的开发者支持,包括 Visual Basic、Microsoft Liquid Motion、Microsoft Blend、Microsoft WebMatrix、Microsoft LightSwitch for Visual Studio 和 Microsoft Expression Web(或许还包括 UWP)。
尤其伤害开发者的还有 2011 年微软突然宣布放弃“Silverlight”的事件。Silverlight 是微软花费巨资开发的 Web 应用程序开发框架。当时,很多开发人员也都觉得自己应该投资 Silverlight,但微软直接宣布了 Silverlight 的死亡,转而采用 HTML5 等新兴标准。
我说服了公司在一项重要产品上使用 Silverlight。大量的投资包括人力和学习过程。在我们的实施过程中,微软给 Silverlight 的未来扔下了一颗炸弹。我无法描述那种被背叛、沮丧的感觉,更不用说来自上层管理团队的压力。作为一个开发者,我的问题非常简单。为什么微软要做这样一件奇怪的事情来失去开发者的信任?为什么微软不能简单地继续支持 / 倡导 Silverlight,同时将 HTML5 视为一种新的趋势和发展路径呢?身为开发者,我认为微软的策略是两败俱伤……我已经不再鼓吹微软的任何新技术了。
之后,开发者对微软的不信任感逐渐深入到骨髓,一直非常担心会再次遭受 Silverlight 这样突然被淘汰的事情。
十年前,对要采用.NET 的开发者,有人劝阻道:“难道你没有听到 .NET 开发者对微软将应用开发重点从 .NET 转移到 HTML/JS/CSS 的强烈抗议吗?难道你没有听到 Silverlight 开发者愤怒的声音吗?”
十年后,因为.NET 这个 Hot Reload 事件,有开发者再次提及微软 Silverlight,表示大家对微软的愤怒情绪一直都十分强烈。
毫无疑问,所有的开发工具公司都会推出新的产品和技术,然后由于商业决策的需要,许多产品和技术会被淘汰或投入会收缩。对于被 Silverlight“照耀”的恐惧,最合理的想法可能来自于 Ed Charbeneau,当时他是 Telerik 的开发者倡导者,在几年前的一篇题为《微软讨厌企业开发者》的博文中。
Charbeneau 在谈到“.NET Core 5”的变化时(事实证明这并不是一回事,因为 .NET Core 变成了 .NET),并不认为微软憎恨企业开发者,他基本上建议这些开发者接受这些改变:
“少花点时间担心微软讨厌谁,或者本周有什么语言或框架被宣布死亡。相反,要拥抱进步,积极参与自我提高和教育。要做一个摒弃旧思维方式的人,要拥有更高的生产力,要跨平台,要开源。若能做到这一点,你会发现自己被一套独特的技能所武装,可以用来解决明天的问题,而不是无所事事地应付过去的问题。”
延伸阅读:
https://www.theverge.com/2021/10/22/22740701/microsoft-dotnet-hot-reload-removal-decision-open-source
https://visualstudiomagazine.com/articles/2021/08/17/silverlighted.aspx
如何设计高效实时渲染架构?
如何利用 WebCodecs 等新技术代替原来的 WebRTC 构建新的 SDK?
12 月 5 日,来 GMTC 全球大前端技术大会深圳站「音视频前端技术创新实践专场」找答案!扫描二维码或点击【阅读原文】,立即报名!