拒絕白嫖,開源項(xiàng)目作者刪庫(kù)跑路,數(shù)千個(gè)應(yīng)用程序無(wú)限輸出亂碼
幾天前,開源庫(kù)「faker.js」和「colors.js」的用戶打開電腦,發(fā)現(xiàn)自己的應(yīng)用程序正在輸出亂碼數(shù)據(jù),那一刻,他們驚呆了。
更令人震驚的是,開發(fā)者們發(fā)現(xiàn),造成這一混亂局面的就是「faker.js」和「colors.js」的作者 Marak Squires 本人。
一夜之間,Marak Squires 主動(dòng)刪除了「faker.js」和「colors.js」項(xiàng)目倉(cāng)庫(kù)的所有代碼,讓正在使用這兩個(gè)開源項(xiàng)目的數(shù)千位開發(fā)者直接崩潰。
「faker.js」和「colors.js」
faker.js 在 npm 上的每周下載量接近 250 萬(wàn),color.js 每周的下載量約為 2240 萬(wàn),本次刪庫(kù)的影響是極其嚴(yán)重的,使用這兩個(gè)項(xiàng)目開發(fā)的工具包括 AWS CDK 等。
如果在構(gòu)建和測(cè)試應(yīng)用時(shí),真實(shí)的數(shù)據(jù)量遠(yuǎn)遠(yuǎn)不夠,那么 Faker 類工具將幫助開發(fā)者生成偽數(shù)據(jù)。faker.js 就是可為多個(gè)領(lǐng)域生成偽數(shù)據(jù)的 Node.js 庫(kù),包括地址、商業(yè)、公司、日期、財(cái)務(wù)、圖像、隨機(jī)數(shù)、名稱等。

faker.js 支持生成英文、中文等多語(yǔ)種信息,包含豐富的 API,此前版本通常一個(gè)月迭代更新一次。faker.js 不僅可以使用在服務(wù)器端的 JavaScript,還可以應(yīng)用在瀏覽器端的 JavaScript。
現(xiàn)在,faker.js 項(xiàng)目的所有 commit 信息都被改為「endgame」,在 README 中,作者寫下這樣一句話:「What really happened with Aaron Swartz?」

Swartz 是一位杰出的開發(fā)人員,幫助建立了 Creative Commons、RSS 和 Reddit。2011 年,Swartz 被指控從學(xué)術(shù)數(shù)據(jù)庫(kù) JSTOR 中竊取文件,目的是免費(fèi)訪問這些文件。Swartz 在 2013 年自殺,Squires 提到 Swartz 可能意指圍繞這一死亡疑云。
Marak Squires 向 colors.js 提交了惡意代碼,添加了一個(gè)「a new American flag module」,然后將其發(fā)布到了 GitHub 和 npm。

隨后他在 GitHub 和 npm 發(fā)布了 faker.js 6.6.6,這兩個(gè)動(dòng)作引發(fā)了同樣的破壞性事件。破壞后的版本導(dǎo)致應(yīng)用程序無(wú)限輸出奇怪的字母和符號(hào),從三行寫著「LIBERTY LIBERTY LIBERTY」的文本開始,后面跟著一系列非 ASCII 字符:

目前,color.js 已經(jīng)更新了一個(gè)可以使用的版本。faker.js 項(xiàng)目尚未恢復(fù),開發(fā)者只能通過降級(jí)到此前的 5.5.3 版本來(lái)解決問題。
為了解決問題,Squires 在 GitHub 上還發(fā)布了更新以解決「zalgo 問題」,該問題是指損壞文件產(chǎn)生的故障文本。

「我們注意到在 v1.4.44-liberty-2 版本的 colors 中有一個(gè) zalgo 錯(cuò)誤,」Squires 以一種諷刺的語(yǔ)氣寫道?!肝覀儸F(xiàn)在正在努力解決這個(gè)問題,很快就會(huì)有解決方案。」
在將更新推送到 faker.js 兩天后,Squires 發(fā)了一條推文,表示自己存儲(chǔ)了數(shù)百個(gè)項(xiàng)目的 GitHub 賬戶已經(jīng)被封。Squires 在 1 月 4 日發(fā)布了 faker.js 的最新 commit,在 1 月 6 日被封,直到 1 月 7 日推送了 colors.js 的「liberty」版本。然而,從 faker.js 和 colors.js 的更新日志來(lái)看,他的賬戶似乎被解封過。目前尚不清楚 Squires 的帳戶是否再次被封。

至此,故事并沒有就此結(jié)束。Squires 2020 年 11 月發(fā)在 GitHub 上的一篇帖子被挖出來(lái),在帖子中他寫道自己不再想做免費(fèi)的工作了。「恕我直言,我不想再用我的免費(fèi)工作來(lái)支持財(cái)富 500 強(qiáng)(和其他小型公司),以此為契機(jī),向我發(fā)送一份六位數(shù)的年度合同,或者 fork 項(xiàng)目并讓其他人參與其中?!?/p>

Squires 的大膽舉動(dòng)引起了人們對(duì)開源開發(fā)者的道德和財(cái)務(wù)困境的關(guān)注,這可能是 Marak Squires 行動(dòng)的目標(biāo)。大量網(wǎng)站、軟件和應(yīng)用程序依賴開源開發(fā)人員來(lái)創(chuàng)建基本工具和組件,而所有這些都是免費(fèi)的,無(wú)償開發(fā)人員經(jīng)常不知疲倦地工作,努力修復(fù)其開源軟件中的安全問題。
開發(fā)者們?cè)趺纯?/strong>
軟件工程師 Sergio Gómez 表示:「從 GitHub 刪除自己的代碼違反了他們的服務(wù)條款?WTF?這是綁架。我們需要開始分散托管免費(fèi)軟件源代碼?!?/p>

「不知道發(fā)生了什么,但我將我所有的項(xiàng)目都托管在 GitLab 私有 instance 上,永遠(yuǎn)不要相信任何互聯(lián)網(wǎng)服務(wù)提供商?!?/p>

有網(wǎng)友認(rèn)為 faker.js 團(tuán)隊(duì)的反應(yīng)有些夸張了,并說(shuō)道:「沒有人會(huì)用一個(gè)只生成一些虛假數(shù)據(jù)的包賺大錢。faker.js 的確為開發(fā)者生成偽數(shù)據(jù)節(jié)省了一些時(shí)間,但我們也可以讓實(shí)習(xí)生編寫類似程序來(lái)生成數(shù)據(jù)。這對(duì)企業(yè)來(lái)說(shuō)并沒有那么重要?!?/p>

甚至有人認(rèn)為 Marak 這么做是一種沖動(dòng)行為,不夠理性,并和他之前「賣掉房子購(gòu)買 NFT」的傳聞聯(lián)系起來(lái),認(rèn)為 Marak 需要學(xué)會(huì)控制自己的情緒:

這種說(shuō)法很快帶偏部分網(wǎng)友的看法,有人原本同情開源項(xiàng)目被「白嫖」,但現(xiàn)在已轉(zhuǎn)向認(rèn)為 Marak 是惡意刪庫(kù),并指出:「停止維護(hù)他的項(xiàng)目或完全刪除都是他的權(quán)利,但故意提交有害代碼是不對(duì)的。」

當(dāng)然,也有人為開源軟件(FOSS)開發(fā)者的待遇鳴不平:「希望有相關(guān)的基金會(huì)位 FOSS 開發(fā)人員提供資金支持」,而軟件的可靠性和穩(wěn)定性也是至關(guān)重要的。

有人表示:一些大公司確實(shí)不尊重開源項(xiàng)目的版權(quán),濫用開源項(xiàng)目對(duì)于 FOSS 開發(fā)者來(lái)說(shuō)是絕對(duì)不公平的。但 Marak 對(duì) faker.js 的做法并不可取,不是正面例子,存在 Marak 的個(gè)人負(fù)面原因。

對(duì)此,你有什么看法?