一名开发者用两年的业余时间开发并维护了一个开源项目 AppGet,项目取得了比较大的成功,并引起了微软的注意。
不幸的是,微软在上周的 Build 2020 大会上推出了同样的项目。最终,这名开发者只得停止维护并终结掉了自己的开源项目,但他给出了一系列的证据表示微软在剽窃。
填补空白的官方 Windows 软件包管理器 WinGet
Linux 和 macOS 的开发者经常用包管理器来安装和管理应用,特别是一些需要不同依赖的命令行程序,比起手动一个个去官网下载代码编译要方便高效得多。Linux 系统有一些常见的包管理命令,如 apt-get、yum 或 dnf,而 Windows 在“包管理工具”方面则一直乏善可陈。
为了留住开发者和 Linux 爱好者,让 Windows 与 Linux、macOS 使用上差别越来越小,5 月 20 日,微软在 Build 2020 大会上宣布开源一个新工具:Windows Package Manager(WinGet),Windows 软件包管理器。
WinGet 由一个命令行工具和一组用于在 Windows 10 上安装应用的服务组成,可以帮助使用者快速轻松地发现地安装不同的工具,只需要输入一个命令即可:winget install
这次官方发布的 WinGet 命令行工具可以说是意义非凡。有了它之后,不仅是安装软件方便了不少,开发者在其他操作系统中的习惯可以延伸到 Windows 上,也能让 Windows 的工作流更加灵活,特别是通过脚本调用或者部署软件都能更加高效。
已经开源两年的 AppGet
在 Build 2020 大会之前,微软官方虽然一直没有软件包管理器,但是位于加拿大的凯文·贝吉(Keivan Beigi)早在 2018 年就发布了一个开源免费的软件包管理器 AppGet,用以在 Windows 中安装和更新软件。AppGet 基本上可以模仿 apt-get 在 Linux 中的工作方式,例如,使用命令 appget install winrar 将在计算机中下载并安装 WinRAR 浏览器。
AppGet 开源至今已经包含了 1400 多个软件包,每个软件包都经过了验证。并且还拥有相当大量的使用者,早已成为 Windows 生态系统的重要补充。
但是这个开源项目的结局并不太好,在微软发布 WinGet 之后,AppGet 的作者 Keivan 表示:“将不再从事 AppGet 开发工作。AppGet 的客户端与后端服务将立即进入维护模式,并从 2020 年 8 月 1 日起被永久关闭。”
更为让人吃惊的是,Keivan 列举了一系列证据,表示微软的软件包管理器剽窃了他的工作。
一年前,Keivan 在 2019 年 7 月 3 日的时候收到了微软高级经理 Andrew 的电子邮件,对方要求和 Keivan 见面沟通 AppGet 的发展。最初他很高兴微软注意到了他的这个业余项目,所以马上答应可以在微软温哥华分部见面。随后他和 Andrew 以及 Andrew 产品组内的中另一位微软工程经理讨论了 AppGet 背后的设计思路,以及 AppGet 未来发展的下一步计划。
Keivan,
我是 Windows App Model 工程团队的负责人,主要管理应用程序部署方面的工作。首先,我要感谢您在 appget 开发方面投入的心力——它已经成为 Windows 生态系统中的重要补充,降低了 Windows 开发者们的工作难度。我们接下来几周计划在温哥华与其他几家公司会面,如果届时您恰好有空,我们也希望能跟您和您的团队直接交流,聊聊怎么推动 appget 更好地发展下去。
一周之后,Keivan 再次收到了来自微软的邮件:
Keivan,
很高兴认识您,并了解到关于 appget 的更多信息。我们正在为您规划一条新的发展道路。如您所知,我们一直非常重视 Windows 系统上的软件包管理工具,也希望在这个领域中有所建树。我们的团队正在成长,当前的一大目标就是建立起专项小组,确保 Windows 上的软件包管理器与软件分发功能得到显著改善。这也许将给 Windows 平台上的软件分发方式带来重大改进,机会难得哦(至少在我看来,这确实是个好机会)。这项工作,有望定义 Windows 乃至整个 Azure/Microsoft 365 生态中的未来应用程序分发方式。
有鉴于此,您有没有考虑过在 appget 身上投入更多时间和精力,甚至直接加入我们微软?
微软希望 Keivan 将全部精力都放在 AppGet 身上。如果 Keivan 同意,届时微软会决定是否需要调整 AppGet 的名称。但在数次沟通交流过程中,Keivan 都弄不清楚自己将在微软中得到怎样的职位,比如职责是什么、需要向谁报告等。但微软方面一直希望 Keivan 能快速移交代码所有权,双方在具体方法上没有达成共识,于是 Keivan 只能继续等待微软下一步的回应。
不幸的是,在接下来的 6 个月里,他再也没有收到任何后续消息。直到上周他听说微软将在第二天发布 WinGet。
Keivan,
您好,祝您和您的家人一切顺遂——跟美国比起来,加拿大对 COVID-19 疫情的控制还比较到位。
我很遗憾地知会您,上次商议的雇用事宜没能解决。但我们仍然非常感谢您的意见与建议。我们一直在开发 Windows 软件包管理器,而且首个版本将在明天正式发布。我们在相关博文中也提到了 appget,微软希望 Windows 平台上能够有多种不同软件包管理器的生存空间。我们的软件包管理器同样基于 GitHub,但其中也包含自己的实现成果。这个项目将保持开源,我们期待着您能够为它带来宝贵的贡献。
在明天项目上线之后,我打算再跟您聊聊微软的这款软件包管理器。但在此之前,项目本身还是完全保密的,因此请您不要向他人透露。
祝好
Andrew
WinGet 核心原理、术语、manifest 格式或者结构,就连软件包 repo 的文件夹结构都跟 AppGet 一模一样。
Keivan 对这个结果也无可奈何,停止维护 AppGet 之后,他表示:“这样一家市值高达 1.4 万亿美元的企业早在多年之前就该做好这项工作。
Windows 应用商店曾是无数用户的噩梦,同样的事情不该在软件包管理器身上重演。”而且还大方承认:“无论我在 AppGet 的推广方面投入多少精力,都不可能让它像微软官方解决方案那样获得足够的重视与普及度。我开发 AppGet 不是为了赚钱或者被微软聘用;相反,我的想法非常简单——让 Windows 用户也能获得比较正常的应用程序管理体验。”
他说,真正让他难受的,是整件事情的处理方式。缓慢而低效的沟通速度、永无应答的交流对象,最后则是给人沉重一击的官方公告。客观上讲,WinGet 的大部分设计灵感都来自 AppGet,但微软却刻意把 AppGet 描述成一个恰好存在、因此可以顺带一提的管理器方案。相比之下,反倒是其他跟 WinGet 共通点不多的软件包管理器,在官方公告中得到了更多提及与强调。
AppGet 终结之日
AppGet 是一个开源项目,遵守了 GitHub 上的开源协议,也凝聚了这位开发者两年多的心血。但得知微软发布了相同产品之后,他没有任何挣扎地直接终结掉了这个项目。
有网友评论说不应该惯着微软:“他们阅读了 AppGet 的代码,然后将其重写了。根据美国版权法,这是非法的。应该去起诉他们!他们要么买断 AppGet,要么必须取消该项目,解雇从事该项目的每位员工,然后雇用一个从未见过 AppGet 代码的全新团队来遵守法律。”
事实上,微软十年前也曾因为要进军中国的社交网络市场,从而剽窃了加拿大一家名叫“Plurk”的类似微博网站的代码。Plurk 公开指责微软“公开盗窃代码、设计和用户界面”,于是微软在这场公关危机中迅速的关闭了新项目并表达了歉意。
但也有更多网友表示,Keivan 所经历的不过就是这些大公司的通用策略,比如组织技术人员与他交流,套取有用信息,然后发展自己的产品。
虽然很多人支持他发起诉讼,但也有人并不看好这个方式:
“第一,将 apt-get 的想法应用到 Windows 空间,这对个人项目而言是不利的定位,基本上逃脱不了最终被大型公司的产品所取代的命运。对微软来说,不过就是个时间问题,只需看看 VS Code 和 TypeScript。
第二,大公司可以无限期的将诉讼进行到底。开发者个人属于弱势的一方。
第三,首先就不应该信任他们,不应该跟他们进行交流。”
但是不管怎么样,开源项目 AppGet 还是被终结了。