知名开源网盘项目 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被收购!惹程序员众怒,开团炮轰甲方的更多相关文章

  1. Atitit.一些公司的开源项目 重大知名开源项目attilax总结

    Atitit.一些公司的开源项目 重大知名开源项目attilax总结 1. Twitter--Bootstrap:1 2. Google2 2.1. Gson2 2.2. Angular.Js2 2. ...

  2. 所有外包项目威客网站列表----来自程序员接私活网qxj.me

    猪八戒    http://www.zhubajie.com/  有佣金,建议别去坑死了 csto      http://www.csto.com/ 开源中国众包   https://zb.osch ...

  3. python——创建django项目全攻略(野生程序员到家养程序员的完美进化)

    新建工程 我用pycharm写代码,所以一般就用pycharm创建django工程.右上角File-New Project.选择路径,修改项目名称,确定.就可以创建一个新的django工程.     ...

  4. 学会这8个优秀 Python 库用于业余项目,将大大减少程序员耗费的精力

    在数据库中即时保存数据:Dataset 当我们想要在不知道最终数据库表长什么样的情况下,快速收集数据并保存到数据库中的时候,Dataset 库将是我们的最佳选择.Dataset 库有一个简单但功能强大 ...

  5. 如何参与开源项目 - 细说 GitHub 上的 PR 全过程

    目录 一.概述 二.为什么要参与开源项目 三.为什么我想介绍如何 PR 四.我想参与开源项目,怎么开始? 4.1.寻找一个合适的开源项目 4.2.寻找贡献点 五.我要提交 PR,怎么上手? 5.1.第 ...

  6. java开源项目之IQQ学习记录之单例模式与log4j日志记录

    作者:sushengmiyan 本文地址:http://blog.csdn.net/sushengmiyan/article/details/18992741 打开IQQ项目,打开包iqq.app中的 ...

  7. Java 程序员每天都在做什么?

    作为一名 在大.中.小微企业都待过 的 Java 开发者,今天和大家分享下自己在不同公司的工作日常和收获.包括一些个人积累的工作提升经验,以及一些 Java 学习的方法和资源. 先从我的第一份 Jav ...

  8. Github上关于iOS的各种开源项目集合(强烈建议大家收藏,查看,总有一款你需要)

    下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件. SVPullToRefresh - 下拉刷新控件. MJRefresh - 仅需一行代码就可以为UITableVie ...

  9. iOS及Mac开源项目和学习资料【超级全面】

    UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITable ...

  10. 转:从开源项目学习 C 语言基本的编码规则

    从开源项目学习 C 语言基本的编码规则 每个项目都有自己的风格指南:一组有关怎样为那个项目编码约定.一些经理选择基本的编码规则,另一些经理则更偏好非常高级的规则,对许多项目而言则没有特定的编码规则,项 ...

随机推荐

  1. 动态规划--最长公共子序列( LCS 问题)

    博客地址:https://www.cnblogs.com/zylyehuo/ # -*- coding: utf-8 -*- # 最长公共子序列的长度 def lcs_length(x, y): m ...

  2. bug|jest|vue|记录:关于【4-4 使用 TDD 的方式开发 Header 组件(1)】05:26时的运行测试用例出错的问题

    错误情景 提示 jest 配置错误 Configuration error Configuration error: Could not locate module @/components/Hell ...

  3. C# using 别名

    场景重现 当using的多个库出现类名重复的情况时... 解决办法 使用类的完全限定名称,例如: // 不需要using,避免using名称重复导致的异常 // 使用类的完全限定名称,俗称全名. Sy ...

  4. nodejs读写yaml

    nodejs读写yaml npm install -g js-yaml // read.js const fs = require('fs'); const yaml = require('js-ya ...

  5. 查缺补漏——01-BFS

    01bfs 解决的是一类特殊的最段路问题. 在学习它的过程中,我更加深刻地学习到了泛化路径和 bfs. 01-BFS 是什么 首先明确,01-BFS 是一种图论算法.它解决的事最短路径问题.最短路径算 ...

  6. Sql查询(Select)语句实例

    span { color: rgba(255, 0, 0, 1) } Select 结构: 句子结构: Select 列名 [all/distinct] from 表名 where 条件 group ...

  7. cmd /k 解决cmd命令闪退问题

    cmd /k 的含义是执行后面的命令,并且执行完毕后保留窗口. & 是连接多条命令.PAUSE 表示运行结束后暂停,等待一个任意按键.EXIT 表示关闭命令行窗口.如果使用 cmd /c 就可 ...

  8. Sentinel——服务降级

    目录 简介 Sentinel方法级降级 Sentinel类级降级 OpenFeign类级降级 简介 服务降级是一种增强用户体验的方式.当用户的请求由于各种原因被拒后,系统返回-一个事先设定好的.用户可 ...

  9. System.nanoTime() 方法

    System.nanoTime() 方法 JDK1.5之后java中的计时给出了更精确的方法:System.nanoTime(),输出的精度是纳秒级别,这个给一些性能测试提供了更准确的参考. 注:1 ...

  10. 移动web开发——flex布局

    目录 1.0传统布局和flex布局对比 1.1传统布局 1.2 flex布局 1.3 建议 2.0 flex布局原理 3.0 父项常见属性 3.1 flex-direction设置主轴的方向 3.2 ...