还记得去年年底令全球多数 Java 工程师深夜加班的 Apache Log4j 2 漏洞吗?彼时,发现最初只有 3 个人赞助该开源项目的事实令许多人受到冲击,甚至有人因此感慨道“这就是开源丑陋的一面”:当项目顺利进行时,一切都很好;而一旦项目出问题了,每个人都只会去抱怨项目背后的无偿维护者。
Apache Log4j 2 漏洞发生至今已一月有余,目前尚未彻底平息。不曾想,上周又发生了一起令许多开发者“头秃”的开源事件:数千个使用了流行开源 NPM 包 faker.js 和 colors.js 的项目一夜之间突然“变砖”,不断输出满屏乱码,而“罪魁祸首”竟是项目作者 Marak Squires 故意为之。
对许多 JavaScript 和 Node.js 开发者而言,faker.js 和 colors.js 这两个库应该并不陌生:从每周下载数据可以看出,faker.js 和 colors.js 的应用十分广泛,如 AWS CDK 等许多流行工具均在开发过程中使用了这两个库,一直以来也没有意外发生。因此,上周末有 AWS CDK 用户看到其应用在控制台上不断打印乱码时感到无比震惊:“究竟发生了什么?”据该用户分享的截图显示,这些乱码包括文本“LIBERTY LIBERTY LIBERTY”以及一系列非 ASCII 字符:该用户认为这是“由于 faker.js 导致的奇怪输出”,事实证明,Ta 的猜想没错。据 faker.js 的 GitHub 页面显示,该库代码已被全部删除,所有 commit 信息都被改为「endgame」,且 Readme 部分也仅剩下项目作者 Marak Squires 留下的一句话:“What really happened with Aaron Swartz(Aaron Swartz 到底发生了什么)?”
(注:Aaron Swartz 是一名出色的开发人员,曾建立 Creative Commons、RSS 和著名社交网站 Reddit,但在 2011 年被指控非法入侵 MIT 和学术数据库 JSTOR 以窃取文件,后于 2013 年自杀。)不仅如此,有心人应该已经发现了上文 faker.js 下载量图中奇怪的最新版本号“6.6.6”——要知道,与国内普遍的认知不同,圣经中用三个“6”连写表示恶魔的符号,代表以撒旦为首的邪恶势力,因此西方国家常将三个“666”视作魔鬼、撒旦等不吉利的象征。类似事情也发生在了 colors.js 库:Marak Squires 在 v1.4.44-liberty-2 版本中为 colors.js 库添加了一个“new American flag module”并将其发布至 GitHub 和 NPM,而代码中其中引入了一段无限循环,让所有使用了 colors.js 的程序都会在控制台无休止地打印各种非 ASCII 字符的乱码。事后,Marak Squires 还刻意嘲讽道:“我们注意到,在 v1.4.44-liberty-2 版本的 colors.js 中有一个 Zalgo 漏洞,请相信我们正在努力解决这个问题,很快就会有一个解决方案。”(注:Zalgo 文本原指用 Unicode 组合字符在字母上过度添加各种符号生成的一种数字文本,常用于恐怖场景以令人毛骨悚然,在此处指代那些非 ASCII 字符的乱码。)Marak Squires 这番操作打破了许多原以为 NPM 库被破坏的猜想,但转而却令更多人百思不得其解:好好的两个开源项目,为什么 Marak Squires 突然要自己搞破坏?问题似乎始于 2020 年 9 月 Marak Squires 遭遇的一场火灾。当时,Marak Squires 租借的房子突发大火,所有财产几乎被全部烧毁,无奈之下 Marak Squires 在推特上发布求助:“我在一场公寓火灾中失去了所有东西,几乎无家可归,也无法访问我的大部分帐户,所有值钱的东西都不见了。如果有人能给 paypal@marak.com 一点钱,那将帮助我免于在街上冻僵,哈哈。”在这之后,或许是求助金额尚不足以支持 Marak Squires 的生活,近十天后,他又在 GitHub 上谴责大型公司使用其开源项目却不回馈的行为:“恕我直言,我不会再用我的免费工作来支持财富 500 强企业了(以及其他较小规模的公司)。没什么好说的。趁这个机会,你可以给我发一份年薪六位数的合同,或者克隆项目,让别人来做。”从这两件事中,我们似乎可以窥见此次 Marak Squires 毫无征兆“自毁”项目的原因:拒绝白嫖,一切因“钱”而起。
好在据 The Verge 报道,目前 colors.js 已更新至正常版本,虽然 faker.js 仍未修复,但可降级至之前的 5.5.3 版本来解决问题。而 GitHub 方面似乎也因此暂时封禁了 Marak Squires 的 GitHub 账户:十年前,他的初创公司首轮募资数百万元,入选纽约地区最受关注的创业之星。
到了2020年,他却因持有炸弹原材料、房屋失火被逮捕,被释放后因无家可归请求网友接济。
有人“挖坟“到他当初求助的那条帖子下面谴责说这都是你自己的错,我一点也不同情你。但也有人坚持认为开发者有权对自己的代码做任何事情。不管怎么说,在给全世界近两万个项目搞出乱码的大篓子之后,更多关于Marak这位程序员本人和开源社区的讨论,是停也停不下来了。2010年,Marak与高中时代的好友Charlie一起创办了一家云服务公司。
公司主营Node.js服务器托管,同时面向个人开发者和企业用户。
彼时Node.js还是一项刚兴起的开源技术,云计算也正飞速从概念走向商用。两人对公司的前景非常有信心,Marak甚至喊出“JavaScript进去,钱出来”这样的豪言壮语:
据Observer报道,Marak此前有6年多创业或加入创业公司工作的经历,失败的多,成功的少。但他觉得那些项目更多是出于对开源的兴趣而参加,并未经过深思熟虑。2010年4月,Marak去参加了JsConf开发者大会,回来后不停的向好友安利Node.js技术有多么棒。这一次他感觉自己找到了真正感到兴奋的方向,好友也被他感召,两人租了房子,准备大干一场。在创业刚开始,他们可以一天工作18个小时,不是在写代码就是在商量事情,又或者到开源社区参与讨论。两人联合创办的公司Nodejitsu首轮融资获得75万美元,还被评为当年纽约地区值得关注的25个创业之星:他们在这条创业赛道上属于早期领头羊,在2012创建了最早的Node.js平台即服务(PaaS)业务。2013年Nojitsu成为彭博新成立的投资基金Bloomberg Beta首批投资的公司。
这时候的Marak经常到各地演讲,宣传他们的一些相关项目:随着Node.js影响力加大,微软Azure、Salesforce等更老牌更强大的云服务公司纷纷入局。到了2015年,Nodejitsu宣布被GoDaddy收购,并退出PaaS行业。2015年之后,Marak Squires这个名字从各种财经商业新闻中销声匿迹,只有@marak作为开源贡献者依旧在社区中活跃。时间线来到2020年9月15日,Marak Squires在纽约租住的公寓发生火灾。
大火扑灭后,FBI接到报案,有邻居在这所公寓外发现了一个可疑包裹。调查发现,公寓里有不少如硝酸钾、镁粉、硫粉、铜粉、铝粉、熔丝和混合杯(mixing cups)这样的危险物品。
同时,FBI还发现了有关军用炸药、饵雷 (隐蔽爆炸装置)的书籍。调查人员之一John Miller表示:虽然这些材料都是分开的,但混合起来就能做出爆炸装置。据此,FBI拘留了时年37岁的Marak Squires和另一名嫌疑人,当时两人均因烧伤在医院接受治疗。
邻居表示,Marak Squires平时经常独来独往,几乎不与邻居交流,家里的窗帘也总是拉上的;火灾后被送去医院的路上,他还一度“情绪失控”。
据nydailynews报道,2018年Marak Squires就因打伤女友被捕,他在抢夺女友手机时弄伤了她的手臂;当时他有一个5岁的女儿,但目前“他和女孩的母亲已经分居”。在Marak因公寓失火涉嫌制造炸弹事件被捕的一个多月后,曾因无家可归在Twitter发帖请求网友捐款接济。
当时他只说了公寓失火,并未谈及其他。
许多因开源软件关注他的网友,慷慨解囊帮他渡过了这个难关。
也有网友留言劝他:
看到了吧,把开源软件免费送给别人并不能帮你生存下去。如果有下辈子,不如做个微软程序员试试?已经年近40的Marak并没有心情解释一些“陈年往事”:
其实,他19岁从麦吉尔大学毕业,就在微软工作了5年。随后,因对封闭的软件开发不满,才辞职投向开源。
他现在只是感到心灰意冷。
我想我这辈子剩下的时间和下辈子都只会去做社会工作来帮助别人。我已经没有写代码的欲望了。
后来,Marak的兴趣越来越转向区块链和加密货币。
2021年他在推特上称,自己把房子都卖了,押宝NFT。
时间线再来到2022年,截至被封之前,他在GitHub上已经有90多个开源项目,最热门的便是被他亲手炸掉的「faker.js」与「color.js」。
许多大公司包括亚马逊云等都使用了他的代码,但他并没有从中获得什么收益,生活也逐渐拮据。Marak选择的开源许可是条款很宽松的MIT协议,把他的代码拿去商用也不需要支付任何费用。而他从开源项目中获得的赞助总计只有几千美元。
他也尝试过重回云服务的创业路线,创办的Faker Cloud云服务也没有掀起太大水花。
Marak曾经尝试联系最大的赞助商Retool(每月给他赞助500美元),看看他们是否有意收购。
Retool CEO礼貌性地回了他邮件说会考虑,有消息再联系你,但随后再无音讯,而且在自己的产品中直接提供了与Faker Cloud一样的功能。直到最终Marak删库跑路,他的一系列经历才再被网友挖掘出来。毫无疑问,这起事件再次引起了人们对于开源开发者生存现状的关注,这或许也是 Marak Squires 此次的行动目标:现实中,大量网站、软件和应用均依赖免费的开源项目来创建基本工具和组件,但就如同 Apache Log4j 2 一样,这些开源项目背后维护者的财政困境鲜为人知。针对此次事件,诸多资深开发者也表达出了各自的看法。@Mike_Walsh:“老实说,这人完全有权破坏自己的工作,尤其是当他利用自己的空闲时间维护这些项目,却没有看到一分红利时。为什么大公司就应该从别人的无偿劳动中赚到一大笔钱,甚至他们还声称这样做是‘出于对开源的热爱’?所以我觉得这样很公平,你对我好我会回报你,但如果你在背后捅了我一刀,也同理。”
@GT500:“就我的理解来看,我认为这个人忘记了开源的精神,只是贪婪罢了。如果他想要别人为他的软件付费,那他就不应该在开源许可下发布它。开源的倡导者花了几十年的时间试图让公司使用开源软件,试图说服他们这是免费的、应该使用它,且永远不必为此付费。而这个人的行为会导致什么?我们可能会回到公司只使用垃圾付费软件的黑暗时光,因为他们会觉得已经不能再信任开源项目了。”
从开源中来,到开源中去。可能对很多开源开发者而言,最终目标并不是金钱,更多是希望人们共同参与项目维护,以此回馈社区。那么在你看来,你认为这一矛盾该如何缓解,开源开发者又该如何自处呢?参考链接:
[1]https://twitter.com/marak/status/1478540163588493313
[2]https://abc7ny.com/suspicious-package-queens-astoria-fire/6425363/
[3]https://web.archive.org/web/20210516172305/https://marak.com/blog/2021-04-25-monetizing-open-source-is-problematic
[4]https://www.nydailynews.com/new-york/nyc-crime/ny-queens-bomb-materials-man-charged-20200916-bybbhwqwijbuxg7ndsuy43w6zu-story.html
[5]https://abc7ny.com/suspicious-package-queens-astoria-fire/6424889/
[6]https://www.youtube.com/watch?v=varf6oWaFtU
[7]https://www.businessinsider.com/the-best-25-hidden-gems-of-nyc-startups-2011-5#nodejitsu-does-cloud-hosting-23
[8]https://observer.com/2011/04/nodejitsus-co-founders-on-the-power-of-node-js-and-the-beauty-of-javascript/