知名开源项目Alist被收购!惹程序员众怒,开团炮轰甲方
知名开源网盘项目 Alist 被黑产收购?涉及泄露用户隐私?众多开发者成为黑奴?程序员集体炮轰项目评论区?
听起来还挺炸裂的,作为一名程序员,带大家扒一扒这个事件的来龙去脉。
什么是 Alist?
Alist 是一个万能的网盘文件管理器,可以让你在同一个网页上集中管理并浏览分散在各个网盘上的文件。

项目不仅支持 40 多种不同的网盘存储,还能在线浏览各种不同类型的文件,支持离线打包下载等操作,功能强大,也因此成为了坐拥近 5w star 的现象级知名开源项目,很多朋友会用它来搭建自己的私人云存储中心。
收购风波
然而最近,Alist 的作者突然宣布项目已交由公司运营:

说的还挺隐晦,就是被收购了呗。
公司收购开源项目的例子也不少,但为什么这一次引起了轩然大波呢?
首先是作者的态度,对于一个几万星的开源项目的出售,作者竟然 完全没有事前通知,还是被网友发现了不对劲并且在项目评论区挂了出来,作者才进行回复。这让很多朋友寒心:开源的尽头是收购变现?

而且,这次收购 Alist 的公司是 “不够科技”。对的,你没看错,公司名叫 “不够科技”。这里忍不住吐槽一下这家公司的英文名 bugotech,bug 科技?哪个正经的科技公司能用这名字?

传言这家公司之前就收购过其他开源项目,比如 Java 神器 Hutool 工具库,而且收购后这些项目都出现了 “一点点” 小问题,收集用户隐私、供应链投毒什么的,因此有网友甚至怀疑这是一家黑产公司。

结合 Alist 被收购后的几个炸裂变动,我想说:怀疑的太对了!
首先是使用新的开发者账号提交了一小段儿 获取用户设备信息 的代码。
代码的主体是执行终端命令来获取系统架构、CPU、内存等设备信息。你别说,这段代码还挺优雅,鉴定为 AI 生成。

这个提交的评论区下,已经是骂声一片了,新开发者迫于压力关闭了这次代码合并。

其实,客观来说,像评论区某位老哥说的一样,如果你是本地获取一些设备信息,用于处理兼容性和性能优化,倒也没什么问题。(狗头保命)

但是上报收集数据这一点,就有点那啥了。。。没啥好说的,就 “我爱你” 吧:

公司还修改了开源项目文档的内容,移除了原作者信息;并且迁移了官方文档的地址,在文档中删除了开源相关描述,重点突出了付费服务,加入了团队联系方式。
值得一提的是,开源文档改动这件事情在 去年 12 月 就已经发生了,也就是说,作者 可能早就把项目卖了。

还有像 Docker 官方镜像迁移等其他改动,我就不展开说了。
开源之怒
因为上面这些情况,参与这个项目的程序员、支持项目的用户还有广大具有开源精神和吃瓜的网友,都不能忍了!
我自己也是一名开源项目作者,很能理解这种愤怒。你想,本来我出于开源的支持和热爱对吧,给项目贡献代码;结果作者给卖了,不给你分钱,甚至都不告诉你一声。有种跟朋友合伙开公司,结果公司被卖掉的感觉。而且,还是把你和项目一起打包卖给了一家可能是黑产的公司,你要是不知情,说不定还接着屁颠儿屁颠儿给人家贡献代码呢,这不纯黑奴?!
有网友整活,给这个项目的开源贡献者做了个黑奴榜:

对了,如果有公司拿开源项目犯罪,开源贡献者算不算是帮凶?我脏了。。。
后来原作者也发布了道歉声明,但是真伪难证:

而且大家并不买账,该项目 GitHub 的 Issues 区和评论区可以说是炮火连天,虽然公司在持续不断地删除这些评论,但我们不惹事也不怕事!

甚至有正义之士主动提交代码合并请求,想把文档里的作者改回来。。。结局当然是合并不通过。看到这里,我彻底泪目,求求你收手吧!

用户警告
如果你正在使用 Alist,建议选择出售前的最后一个稳定开源安全版本 v3.40.0:

如果你之前给 Alist 授权了一些网盘的 API 访问,建议尽快解除授权,防止隐私的泄露。
此外,很快就有开发者站出来,推出了 Alist 的开源替代版本 OpenList,短短几天收获了几千 star。但毕竟也是基于原有 Alist 项目复刻出来的,所以目前 OpenList 并没有什么特别的优势,期待后续发展吧~
我的看法
最后说说我对这件事的看法吧。同样作为开源项目的程序员,我其实很能理解开源作者的辛苦。很多开源作者都是用爱发电,上班之余还要维护开源代码、还要处理用户反馈修 Bug,有时候还会发现自己的免费项目被人付费卖掉。。。说不累是假的,说不想变现也是假的。
这次大家反应这么激烈,不是因为不接受商业化,而是作者和收购公司的行为严重违背了开源社区的核心价值观:信任和透明。
因为信任,大家才愿意跟你一起无偿做项目;因为透明,用户才更愿意选择开源软件。
如果作者当初能够提前和社区沟通商业化计划,说清楚收购方的背景和意图,给贡献者一个交代,也给用户的数据安全一个保障。我相信大部分人都会理解和支持。毕竟,可持续的商业模式对开源项目的长期发展是有好处的。
但现在呢,伤害的不只是一个项目,而是整个开源生态的信任基础。
因此大家保护的不仅仅是一个项目,更是整个开源生态的健康发展,所以我也愿意花时间去做这样一期内容,让更多朋友了解到事情的真相,能够多支持开源软件吧。不然几年之后,还有多少开源项目,真的是开源项目呢?
也希望 Bug 科技耗子尾汁啊,不要把我这期内容投诉举报掉,三连保护保护保护。
更多编程学习资源
知名开源项目Alist被收购!惹程序员众怒,开团炮轰甲方的更多相关文章
- Atitit.一些公司的开源项目 重大知名开源项目attilax总结
Atitit.一些公司的开源项目 重大知名开源项目attilax总结 1. Twitter--Bootstrap:1 2. Google2 2.1. Gson2 2.2. Angular.Js2 2. ...
- 所有外包项目威客网站列表----来自程序员接私活网qxj.me
猪八戒 http://www.zhubajie.com/ 有佣金,建议别去坑死了 csto http://www.csto.com/ 开源中国众包 https://zb.osch ...
- python——创建django项目全攻略(野生程序员到家养程序员的完美进化)
新建工程 我用pycharm写代码,所以一般就用pycharm创建django工程.右上角File-New Project.选择路径,修改项目名称,确定.就可以创建一个新的django工程. ...
- 学会这8个优秀 Python 库用于业余项目,将大大减少程序员耗费的精力
在数据库中即时保存数据:Dataset 当我们想要在不知道最终数据库表长什么样的情况下,快速收集数据并保存到数据库中的时候,Dataset 库将是我们的最佳选择.Dataset 库有一个简单但功能强大 ...
- 如何参与开源项目 - 细说 GitHub 上的 PR 全过程
目录 一.概述 二.为什么要参与开源项目 三.为什么我想介绍如何 PR 四.我想参与开源项目,怎么开始? 4.1.寻找一个合适的开源项目 4.2.寻找贡献点 五.我要提交 PR,怎么上手? 5.1.第 ...
- java开源项目之IQQ学习记录之单例模式与log4j日志记录
作者:sushengmiyan 本文地址:http://blog.csdn.net/sushengmiyan/article/details/18992741 打开IQQ项目,打开包iqq.app中的 ...
- Java 程序员每天都在做什么?
作为一名 在大.中.小微企业都待过 的 Java 开发者,今天和大家分享下自己在不同公司的工作日常和收获.包括一些个人积累的工作提升经验,以及一些 Java 学习的方法和资源. 先从我的第一份 Jav ...
- Github上关于iOS的各种开源项目集合(强烈建议大家收藏,查看,总有一款你需要)
下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件. SVPullToRefresh - 下拉刷新控件. MJRefresh - 仅需一行代码就可以为UITableVie ...
- iOS及Mac开源项目和学习资料【超级全面】
UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITable ...
- 转:从开源项目学习 C 语言基本的编码规则
从开源项目学习 C 语言基本的编码规则 每个项目都有自己的风格指南:一组有关怎样为那个项目编码约定.一些经理选择基本的编码规则,另一些经理则更偏好非常高级的规则,对许多项目而言则没有特定的编码规则,项 ...
随机推荐
- 动态规划--最长公共子序列( LCS 问题)
博客地址:https://www.cnblogs.com/zylyehuo/ # -*- coding: utf-8 -*- # 最长公共子序列的长度 def lcs_length(x, y): m ...
- bug|jest|vue|记录:关于【4-4 使用 TDD 的方式开发 Header 组件(1)】05:26时的运行测试用例出错的问题
错误情景 提示 jest 配置错误 Configuration error Configuration error: Could not locate module @/components/Hell ...
- C# using 别名
场景重现 当using的多个库出现类名重复的情况时... 解决办法 使用类的完全限定名称,例如: // 不需要using,避免using名称重复导致的异常 // 使用类的完全限定名称,俗称全名. Sy ...
- nodejs读写yaml
nodejs读写yaml npm install -g js-yaml // read.js const fs = require('fs'); const yaml = require('js-ya ...
- 查缺补漏——01-BFS
01bfs 解决的是一类特殊的最段路问题. 在学习它的过程中,我更加深刻地学习到了泛化路径和 bfs. 01-BFS 是什么 首先明确,01-BFS 是一种图论算法.它解决的事最短路径问题.最短路径算 ...
- Sql查询(Select)语句实例
span { color: rgba(255, 0, 0, 1) } Select 结构: 句子结构: Select 列名 [all/distinct] from 表名 where 条件 group ...
- cmd /k 解决cmd命令闪退问题
cmd /k 的含义是执行后面的命令,并且执行完毕后保留窗口. & 是连接多条命令.PAUSE 表示运行结束后暂停,等待一个任意按键.EXIT 表示关闭命令行窗口.如果使用 cmd /c 就可 ...
- Sentinel——服务降级
目录 简介 Sentinel方法级降级 Sentinel类级降级 OpenFeign类级降级 简介 服务降级是一种增强用户体验的方式.当用户的请求由于各种原因被拒后,系统返回-一个事先设定好的.用户可 ...
- System.nanoTime() 方法
System.nanoTime() 方法 JDK1.5之后java中的计时给出了更精确的方法:System.nanoTime(),输出的精度是纳秒级别,这个给一些性能测试提供了更准确的参考. 注:1 ...
- 移动web开发——flex布局
目录 1.0传统布局和flex布局对比 1.1传统布局 1.2 flex布局 1.3 建议 2.0 flex布局原理 3.0 父项常见属性 3.1 flex-direction设置主轴的方向 3.2 ...