写点什么

微软新品被指剽窃!程序员开源两年的成功项目被迫终结

2020 年 5 月 27 日

微软新品被指剽窃!程序员开源两年的成功项目被迫终结

“我的开源项目被市值高达 1.4 万亿美元的微软偷走了。”


一名开发者用两年的业余时间开发并维护了一个开源项目 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。


Heivan 您好,祝您和您的家人一切顺遂——跟美国比起来,加拿大对 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 还是被终结了。


参考链接:


https://medium.com/@keivan/the-day-appget-died-e9a5c96c8b22


2020 年 5 月 27 日 16:147591

评论 4 条评论

发布
用户头像
和 scoop chocolately 有啥区别?
2020 年 05 月 30 日 19:57
回复
用户头像
scoop还没说话呢
2020 年 05 月 28 日 17:54
回复
用户头像
剽窃还行
2020 年 05 月 28 日 17:53
回复
用户头像
so tm what
2020 年 05 月 28 日 13:48
回复
没有更多了
发现更多内容

有关 HashMap 面试会问的一切

小齐本齐

Java 数据结构 算法

解决分布式session问题

架构师修行之路

分布式 架构设计 session

SpringBoot RabbitMQ消息队列的重试、超时、延时、死信队列

Barry的异想世界

RabbitMQ springboot 消息队列 死信队列 延时队列

Flink SQL CDC 上线!我们总结了 13 条生产实践经验

Apache Flink

flink

欧洲央行近期将决定是否建立官方数字货币

CECBC区块链专委会

数字货币 欧央行

甲方日常 14

句子

Java 工作 随笔杂谈 日常

Spring IoC 到底是什么?

小齐本齐

spring 程序员 ioc Spring Framework Spring Bean

如何搭建第一个 Spring 项目?

小齐本齐

spring Spring Framework Spring Bean

python——深入类和对象

菜鸟小sailor 🐕

组合模式

C/C++基础之sizeof使用

C语言与CPP编程

c c++ 编程 编程语言

Spring事务是如何应用到你的业务场景中的?

AI乔治

Java spring 架构 微服务 springboot

RabbitMQ 重要概念介绍

hepingfly

Java RabbitMQ 消息队列 JMS

高并发系列——CAS操作及CPU底层操作解析

诸葛小猿

CAS AtomicInteger compareAndSwap cmpxchg lock

oeasy 教您玩转 linux 010214 画面转文字 asciiview

o

STL总结与常见面试题

C语言与CPP编程

c c++ 编程 编程语言 stl

大作业

Geek_2e7dd7

Spring 5 中文解析测试篇-WebTestClient

青年IT男

单元测试 Spring5

京东上298购买的Linux网络编程笔记,感觉2年开发白干了

周老师

Java 编程 程序员 架构 面试

测试

测试

云龙

Http请求中如何保持状态?

架构师修行之路

随想之乐观估计

云杉

理财专题一

TCA

非科班进大厂必备算法

我是程序员小贱

面试 算法

前端必会的七种排序算法

执鸢者

算法 前端

为什么区块链能成为全球贸易的助推器

CECBC区块链专委会

区块链 金融 国际贸易

Java String 面面观

keaper

Java string pool string

基于 Flink 的典型 ETL 场景实现方案

Apache Flink

flink

Js 封装:阻止频繁重复操作

lockdown56

架构师课程大作业 知识图谱

杉松壁

微软新品被指剽窃!程序员开源两年的成功项目被迫终结-InfoQ