近些年来,微软对于开源看似已开始呈现一种拥抱的姿态,其中值得一提的是 微软在 2014 年成立与赞助的一个独立自由软件组织——.NET 基金会。
.NET 基金会成立的宗旨,在于推进与维护微软开放源码后的 .NET 框架,同时也希望成为连接软件社群与商业开发者之间的桥梁,以此扩大 .NET 框架技术的软件生态系统。
愿景是美好的,可现实却颇为讽刺。近日,.NET 基金会前董事会成员及 ReactiveUI 核心维护者 Rodney Littles II 向 .NET 基金会质问道:“你是为了在 .NET 开源上执行微软的意愿,还是来帮助培养和促进一个健康社区的形成?”
上文提到,Rodney Littles II 是 .NET 基金会的前董事会成员,因此在他决定卸任后,按照基金会的章程规定,需要选出一位替补成员。而本次事件的起因,就是 9 月 22 日 .NET 基金会发布的 2021 年董事会选举结果通知:
乍看之下,这则通知并没有什么不妥之处:先说明是由于 Rodney Littles II 的辞职才要选出新的董事会成员,然后公布名单,最后展望一下未来并感谢所有参与者。
但恰恰就是其中那一句看似客套的“Rodney Littles II 已重新专注于个人生活,我们祝他一切顺利”引起了许多人的关心,他们向 Rodney Littles II 询问是否发生了什么事,因而惹恼了 Rodney Littles II:“我很好,我并不是因为个人生活有问题才离开董事会的。”
本来 Rodney Littles II 什么都不打算说,但这则通知的整个第二段都在讲他,看起来是在送他一个美好的祝愿,实际上却是未经他同意并核对的情况下,为 .NET 基金会营造一种虚伪的“透明”机制,(在此之前,.NET 基金会从未对离开的成员表示过这类“祝愿”,甚至都不会提及他们。)而 Rodney Littles II 会离开,也正因如此。
在 Rodney Littles II 刚当上 .NET 基金会董事会成员时,他踌躇满志,天真地以为可以将 .NET 基金会引导到一个以社区为中心的组织。但现实情况是,一直以来他都没有实现这个目标,甚至亲眼目睹了一个他很喜欢的基金会项目逐渐衰落。
“基金会的一切都在幕后谨慎处理,即便身为董事会成员,我都不了解完整的故事。”Rodney Littles II 无奈表示:“我看着微软‘杀’了一个开源项目,社区里的朋友要求基金会对此进行解释,而我却感到无能为力。”
在他任职期间,.NET 基金会曾推出了一个名为 Project Maturity 的试点项目,其中包括旨在提高软件质量的“成熟度配置文件”,对此,Rodney Littles II 其实是抱有疑惑的:“成熟度模型存在一个问题,那就是它看起来过于微软官僚主义了。”随后,由于该项目被众多社区成员抱怨其影响范围过大,不久后就被放弃了。
彼时 Rodney Littles II 意识到了,这已完全与最初他进入 .NET 基金会的初衷背道而驰。在基金会里,他想解决的开源可持续性问题根本无从下手,相比加倍努力去赢得少数人的青睐,安静离开显然是更好的选择,并且他也很清楚,.NET 基金会其实根本就不关心它的成员:“据我所知,.NET 基金会没有为其任何成员培养任何东西,反而在不断进行破坏。”
因此他决定回到属于他的地方,一个他真正可以发挥作用的地方:ReactiveUI。在这里,他只是一个社区成员,而不再是微软开源软件(MOSS)的某个监督者。
在辞职时,Rodney Littles II 明确表达了他想要“一个有更多时间和动力来推动 .NET 基金会的使命的人”来接替他,全程没有提到有关他个人生活的事情,因此在他看来,基金会这番说辞不过是展现它主张的“透明”与虚伪的“善意”。
脱离基金会的 Rodney Littles II 在接受 The Register 的采访时提到:“.NET 基金会与微软之间的独立性不够,对其成员项目的帮助太少,缺乏强烈的使命感,因此基金会没有一个统一的前进方向。”
一石激起千层浪,在 Rodney Littles II 分享他的经历后,越来越多人也开始揭露 .NET 基金会背后的问题。
首先,两周前 .NET 基金会执行董事 Claire Novotny 在没有与任何维护者讨论的前提下,将一个 PR 合并到她已多年没有参与维护的一个项目中——ReactiveUI 的 Splat 项目,她给出的理由是“应 .NET 基金会的项目要求”:
Claire Novotny 的这个举动令 ReactiveUI 项目的主要维护者 Glenn Watson 感到迷惑不已:“请解释一下这是什么问题,而且你没有与任何维护者讨论过。”
这件事引发的后果是,Glenn Watson 表示,在项目维护者均不知情的情况下,ReactiveUI 已转移到 .NET 的 GitHub Enterprise 存储库而非公共存储库,并且据他了解,许多其他的基金会成员项目也都从公共存储库中进行了转移,其中就包括 WiX 工具集。
WiX 工具集的开发者 Rob Mensching 也写了一篇博文讲述他的经历:
今年 8 月,.NET 基金会以“新政策”为由,开始对 Rob Mensching 进行反复提(sao)醒(rao),要求获得 WiX 工具集的管理员访问权限。原本 Rob Mensching 坚持拒绝,但原先由基金会在 WiX 工具集中安装的 CLA 机器人出现了一些问题,因此为了修复 CLA 机器人,Rob Mensching 最终还是对 .NET 基金会开放了管理员权限。
而在看到 Glenn Watson 说 ReactiveUI 莫名被转移到 .NET的 GitHub Enterprise 存储库之后,Rob Mensching 突然感到浑身冰冷:“.NET 基金会能做到不与项目维护者讨论就实现这一操作的唯一方法是——获得项目的管理员访问权限。”
原本 Rob Mensching 还抱着“他们应该不会背叛我”的侥幸心理,但查看之后的结果却是:“他们真的这样做了,WiX 工具集在没有任何讨论或提醒的情况下被转移到了 .NET 基金会的 GitHub Enterprise。”
虽然最后 Rob Mensching 成功将 WiX 工具集转移了回来,但他依旧对此感到十分痛苦:“很久之前,我一直努力想成为一名优秀的 OSS(开源软件)成员,但现在,.NET 基金会在玷污我在努力创建的项目。”
在以上事件持续发酵,质疑的声音越来越大后,.NET 基金会终于开始进行了回应。
先是**.NET 基金会执行董事 Claire Novotny 在 10 月 7 号出来道歉**:
“上周我犯了一个错误。当时我做了一个 PR 并将它合并到一个项目中而没有与维护者讨论。虽然我作为创始人和维护者参与了这个项目很多年——早在基金会之前——但我近年来已经很少活跃在这个项目中,因此我越界了,我没有考虑到从我当前的角色来看这个举动会造成怎样的影响。”
但社区成员对 Claire Novotny 这一看似道歉实则是在辩解与美化 .NET 基金会的长文并不买账,Akka.net 维护者 Aaron Stannard 更是直言道:“这完全不是道歉,只是满足了我和其他人对 .NET 基金会公开声明的最低期望。”
随后,在 10 月 9 号 .NET 基金会突然宣布 Claire Novotny 已向董事会发送了辞职信,董事会也接受了她的离开:“董事会今天早上开会并决定接受它,因为这符合 .NET 社区、.NET 基金会和 Claire 的最大利益。”
对此,开发者们依旧不接受。@ADefWebserver 评论道:“我觉得这是‘校园欺凌’。”@FiniteReality 表示赞同:“PR 根本就不是最大的问题,甚至在 .NET 基金会目前存在的问题中,它连前十都排不上,这只是方便为替罪羊找个借口罢了。”
.NET 基金会的新董事会成员,也是微软 MVP、曾领导 NUnit 测试框架团队并为众多开源项目做出贡献的 Rob Prouse,代表基金会为曾把项目代码强行移至 GitHub Enterprise 帐户的行为道歉:“这个举动是错误的,董事会对发生这种情况深感遗憾。”
Rob Prouse 指出,原本将代码转移至基金会的 GitHub Enterprise 账户主要有两个目的:
一、集中计费,让成员项目可以访问其他 GitHub 服务;
二、通过使用可获得的管理员访问权限,确保成员项目的连续性。
他表示,基金会已从此次事件中吸取到了教训:“我们应该向项目维护者询问是否要加入 GitHub Enterprise 帐户,并说清楚其中的好处。”
作为弥补措施,Rob Prouse 表示目前所有项目都可以申请从 GitHub Enterprise 帐户中删除,.NET 基金会项目委员会将联系所有受影响的维护者,若有遗漏,开发者也可以邮件告知。
Rob Prouse 在这封声明的最后强调了一句:“.NET 基金会只会在获得维护者同意并根据文件政策对其运营的基础设施进行更改。”
对于这番决定,开发者们终于稍微平复了:
@ghuntley:“这才是方法。”
@SeanKilleen:“我很欣赏这种立场以及开始纠正事情的努力。”
虽然 .NET 基金会对于 PR 和 GitHub Enterprise 的问题提供了回应与解决方案,但针对最初 Rodney Littles II 质问的那句“你是为了在 .NET 开源上执行微软的意愿,还是来帮助培养和促进一个健康社区的形成”,.NET 基金会至今都没有正面回答,或许未来也不会有答案。
那么,你对这一事件有何看法?你认为当前问题重重的 .NET 基金会还能挽回开源开发者的信任吗?
参考链接:
https://rodneylittlesii.com/posts/topic/foundation-echo-chamber
https://robmensching.com/blog/posts/2021/10/6/how-the-.net-foundation-kerfuffle-became-a-brouhaha/
https://www.theregister.com/2021/10/13/net_foundation_admits_it_violated/
https://github.com/dotnet-foundation/Home/discussions/59
https://github.com/dotnet-foundation/Home/discussions/39