查看原文
其他

开源程序员绝望毁库跑路的背后

The following article is from 卫sir说 Author 卫剑钒




| 转载自:卫sir说

| 编辑:周晶晶

| 设计:张千禧

| 责编:王玥敏


最近发生了一件离奇的事,一般而言,程序员都把自己的开源项目代码看的珍贵无比,但却有一位程序员,把自己的开源代码弄得面目全非,宣布“endgame”。

已经有很多新闻报道了此事1,这里仅仅简要描述一下事件经过。

数千个使用了开源 NPM 包 faker.js 和 colors.js 的项目,在2022年1月上旬(1月5日~1月8日)发现,他们所用的项目代码已经完全“坏掉了”,而始作俑者竟是项目作者 Marak Squires的故意行为。

faker.js 可以生成测试用的虚拟数据,包括姓名、地址,公司,日期,财务,图像,随机数等。

colors.js提供对颜色的各种操作和计算,可实现控制台上带颜色文本的输出。

比如某些用户看到其控制台输出这样的乱码:

或是这样:

总之,Marak Squires把他亲手开发的faker.js和colors.js 项目的代码恶搞一通,使得下载了其最新版代码的用户,在node.js控制台上看到了大量奇奇怪怪的乱码,而且是无休止的输出。

好好的两个开源项目,为什么 Marak Squires 突然要自己搞破坏?

不想在开源界混了吗?

我想他大约真的不想在这个圈子混了。

原因何在?

很简单:伤心、绝望。

缘何伤心绝望?很简单,自己辛辛苦苦写代码,得不到收益。

早在2020年11月,Marak就已经发出警告,说不再“无偿工作”来支持那些商业巨头(许多大公司包括亚马逊云等都使用了他的代码)。

他原话翻译过来是这么说的:“不好意思,我不会再免费支持使用我代码的财富500强(以及其他小型公司)了,没有更多可说的,你们要么给我一份年薪六位数的劳动合同,要么找其他人在分支上干吧!”

当然,并没有公司雇佣了他。(这下就更不敢了)

Marak年近40,他19岁从麦吉尔大学毕业,在微软工作了5年。由于对封闭软件开发不满,辞职投向开源。

2010年之后,Marak对Node.js非常感兴趣,于是和好友联合创办Nodejitsu公司,还曾被评为纽约地区值得关注的25个创业之星。他们创建了最早的Node.js平台即服务(PaaS)业务。

2015年,Nodejitsu被GoDaddy收购。Marak Squires这个名字从各种新闻中销声匿迹,只有@marak作为开源贡献者依旧在社区中活跃,在Github上,他有90多个项目。但他若干年来,从开源项目中获得的赞助总计只有几千美元。

他也尝试过再次创业,但创办的Faker Cloud云服务并没有什么响动,Marak曾联系最大的赞助商Retool(Retool每月给他赞助500美元),看看他们是否有意收购。Retool CEO礼貌性地回了他邮件说会考虑,但随后再无音讯,却在其自家的产品中直接提供了与Faker Cloud一样的功能。

2020年10月,因公寓失火(有爆料说他玩炸药2),Marak在推特上求捐助,但所得不多,以至于有了11月份他赌气不再玩开源的言论。

总之,他虽然通过开源打开了一定局面,但求职、求收购都未能成功,求捐助也所得甚少,给人一种他几乎无法维持生计的感觉。

故事就介绍到这里。



这件事违法吗?

还到不了违法的地步。因为他的改动并没有什么真正的攻击力和危害,更多只是在node.js控制台上输出大量乱码,程序员按Ctrl+C(两次)或Ctrl+D即可退出,所以危害不大。法律没有说一个程序不能输出乱码,也没有说一个开源工作者不能毁掉自己的项目。

其实,一个主体提供程序,另一个主体使用程序,应该有一个协议或合同的,里面要明确双方的权责。比如要给多少钱,程序要实现什么功能和性能,什么时候交货等等。如果一方违约,另一方就可以进行追索,直至打上法院。

那么在这件事中,Marak和使用他程序的人之间,签了什么协议?

MIT协议。



这件事违背MIT协议吗?

这件事不违背MIT协议。

MIT协议很简短,可以理解为只有三句话:你可以免费用、随便用;要保留版权信息和许可信息;我不负责。

我们就看最后一句:我不负责。

原话是这么说的(翻译后):

本软件是“按原样“提供的,不附带任何明示或暗示的保证,包括没有任何有关适销性、适用性、非侵权性保证以及其他保证。在任何情况下,作者或版权持有人,对任何权益追索、损害赔偿以及其他追责,都不负任何责任。无论这些追责产生自合同、侵权,还是直接或间接来自于本软件以及与本软件使用或经营有关的情形。



这件事违背GitHubyong hu协议吗?


发生这件事后,GitHub把Marak的账号冻结了,Marak在推特上提出抱怨(他在上面有90多个项目呢)


网友Sergio Gómez说:“删改自己的代码也违反到GitHub的服务条款了?这是赤裸裸的绑架!我们最好做好分散托管软件源代码的准备。”

网友Piero说:“Marak搞乱了faker和colors,影响到无数项目,难道还指望着自己能不受一点牵连?”

那么,GitHub这样做到底对不对?

我看了一下GitHub服务条款,大概是违反了其中的第C款以及对应的“GitHub可接受使用策略”中的第2条或第10条:

第2条:直接支持造成技术伤害的非法主动攻击或恶意软件活动。

第10条:不得从事严重伤害其他用户的活动。

不过我觉得,就Marak改动代码带来的那点困扰,能谈得上一点“恶意”,但谈不上“严重伤害”。

所以,GitHub判得是有点重的,可能GitHub管理人员觉得这已经是“恶意软件”和“严重伤害”了吧!

反正解释权掌握在他们手中。

Marak反正也不玩开源了,估计也懒得和他们计较。




这件事危害大吗?



这件事,Marak到底做了什么?

他改了代码,上传了GitHub,同时上传了NPM仓库(应该是通过npm publish命令),也即向仓库声明并上传了最新版的包(faker.js包和colors.js包)。

受影响的人,多是从NPM取了这个最新版的包(多半是通过npm install),然后运行时发现了问题。

Marak肯定知道,大家发现后,可以回退使用以前的版本。

事实上,NPM官方已经将相关包回滚至先前版本。

所以,伤害并非不可逆的,而且可以简单的可逆。

而且,这种对最新版本包的尝试,大多都是在开发测试阶段进行的。

这也是这两个包每周下载量很大的原因之一,是因为很多程序员喜欢每日都下载最新的依赖包版本,以保证自己的代码和依赖都是最新的。

统计数据表明,出事前,faker.js的每周下载量有200多万,colors.js的每周下载量有2000多万3。(一开始看到这个巨量数字,我是懵的。心想这些程序员是疯了吗,天天下载?后来一问才知道,很多人做每日构建时自动取最新版)

但这个应该是在开发测试环境做的,影响的也只是开发测试人员,并不会影响到使用(依赖这两个包的)软件产品的用户。

通常,生产版(发布版)应该是充分测试确保无误的情况下,才可以发布的。

所以,这个恶作剧按道理不会影响到一个软件的最终用户,只是开发测试人员大约会困惑2个小时(查找问题大约需要的时间)

毕竟,只有开发人员才用这两个包的。

在我看来,这是Marak用一种极端的方式告诉其他开发者:“我不玩了!”



这件事违背道德吗?


总而言之,虽然Marak很伤心,但这事做得不太好。

你可以不维护、不更新你的项目,但不能乱搞一气泄愤,并让很多程序员困惑。

这显然严重地损害了他在开源圈的声誉,我想,知道这件事的程序员,以后用faker.js和colors.js的时候,心里都会怪怪的吧。

这暴露了他在心理上还很不成熟。

GitHub上有人评价此事说“What a child.”,这个评价非常精到。

道德的标准有很多,所以不好一概而论,我们看一下计算机道德规范协会(Computer Ethics Institute)制定的10条戒律:

1) 不准使用计算机危害他人。
2) 不准妨碍他人的计算机工作。
3) 不准窥探他人的计算机文件。
4) 不准使用计算机进行偷盗。
5) 不准使用计算机作伪证。
6) 不准私自复制未付费的专用软件。
7) 不准未被授权使用他人的计算机。
8) 不准盗用他人的知识产品。
9) 必须考虑所编写程序或所设计系统的社会后果。
10) 必须总是以确保关心和尊重同事的方式使用计算机。

原文如下: 

计算机道德十条戒律(原文)

Marak在一定程度上,违背了第2条和第9条。

所以这件事,总的来说,不太好,虽然也不太严重。



这件事的后续影响?


这件事的最大好处是:提醒使用开源的人,长个心眼,不要什么代码你都那么信任。

这就是专家们常说的“供应链风险”。

最常见的风险是:代码不安全;断供。

代码不安全那是必然存在的,谁能保证自己的代码完全没有安全问题呢?

断供也是必然会存在的,谁能保证一个开源项目一直有人维护呢?

大多数开源代码,本来又没有要钱,你哪好意思要求人家那么多呢?

本来开发者就是用爱发电嘛!你又没给钱,不能要求太多。

而且,我想,人们肯定会继续使用Marak的faker.js和colors.js,然后继续不给他钱。

然后,也许会有一位心理更强大的同志接手它们,或分叉它们。



程序员如何通过开源赚钱?


大概有这么几种方法吧:

被雇佣(比如Linus、尤雨溪都曾被雇佣)

被基金会或大公司资助(比如Linux、Spark等)

卖商业版(比如MiniGUI、VirtualApp等)

创业(比如Nginx,TDengine、Confluent等)

公司被收购(比如MySQL、Docker、Nginx等)

做服务(提供收费的云服务,或者提供维保服务)

……

不过,Marak似乎都试过了,都没成功。(除了他被收购的Nodejitsu)

所以有点绝望了。



开源程序员应该赚到钱吗?


一个人的作品被广为使用,他是不是应该赚到钱?

我觉得从道德上讲,理应如此。

但现实是残酷的,人们的心理很简单,既然有不花钱的可用,为什么要花钱。

而且faker.js和colors.js就是因为免费,才被广为使用。(如果他是收费的,就有人会推出免费的)

开源程序员可能早就应该想明白,你要的是名,还是利,还是都想要。

在现有的开源机制下,如果你代码写得好,也确实解决了一些问题,赚到名是可行的。

但想要赚到钱,就要努力更多了,就像我上面说的,你要有能力把你的代码商业化。

如果现在还不行,就天天思考这个问题,直到找到解决方案。

不过,像faker.js、colors.js这种项目,由于功能比较简单,也没有太深的技术壁垒,商业化显然是困难重重。

现有的开源运营机制也无法支持按使用量付费。

所以Marak要想出更好的办法来,或者等待更好的机制出现。



能否有更好的机制?

我想肯定会有,因为几乎所有聪明的程序员,都在想这个问题:我不被雇佣,不被捐助,也不创业,能否从我的代码赚钱?

数字世界(包括互联网)是程序员们搭建起来的乐园,但他们基本上是以义务劳动或者被雇佣形态(赚的不多)来工作的。

因为在数字世界建造的早期,他们的实力还不足以让他们改变现有的商业模型,仍然是现实世界的资本和资金控制着他们。

但数字世界会越来越强大,现实世界的一切,都会或早或晚地迁移到数字世界中来。这就是为什么“元宇宙”概念自92年提出后,历经30年,终于开始被世人正视的原因。

程序员,这些数字世界的建造者,不会不考虑自己的利益,他们以前没有做到,现在可能也没有做到,但以后肯定能做到。

所以我们看到,程序员发明出来数字世界里的原生货币:加密货币;发明出来数字世界里的组织架构:DAO;以及一切他们能够掌握自己数字资产的方法和技术:Crypto、Web3、NFT。

程序员肯定会找到一种方法,把他们创造出来的有价值的资产(如代码、服务、系统等),以一种稳定、可靠、可持续的方式,获取收益。而不再依靠现实世界里的资本大佬。

这就是为什么越来越多为自己谋利益的聪明的程序员和黑客们,都转向了Crypto和Web3。

Marak也不例外。

他的地址是:marak.eth

他的资产在:opensea.io/Marak

文|卫剑钒



相关阅读 | Related Reading


瞰见|字节的火山引擎年初上演开源违规大戏,企业该何去何从?

“源”来是你-Vol.28 | Apache InLong(incubating) 团队招聘啦,欢迎投递!


这本书献给所有铸就开源世界的人们



开源社简介

开源社成立于 2014 年,是由志愿贡献于开源事业的个人成员,依 “贡献、共识、共治” 原则所组成,始终维持厂商中立、公益、非营利的特点,是最早以 “开源治理、国际接轨、社区发展、开源项目” 为使命的开源社区联合体。开源社积极与支持开源的社区、企业以及政府相关单位紧密合作,以 “立足中国、贡献全球” 为愿景,旨在共创健康可持续发展的开源生态,推动中国开源社区成为全球开源体系的积极参与及贡献者。


2017 年,开源社转型为完全由个人成员组成,参照 ASF 等国际顶级开源基金会的治理模式运作。近七年来,链接了数万名开源人,集聚了上千名社区成员及志愿者、海内外数百位讲师,合作了近百家赞助、媒体、社区伙伴。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存