
開源是非多,滷蛋有話說。
大家好我是 HelloGitHub 的滷蛋,最近有個 「流行開源項目的作者刪掉項目、提交惡意代碼」 的事情,引起了廣大開源愛好者的討論。
我深知維護開源項目的不易,所以比較好奇他為什麼捨得刪項目。
這不眼瞅着就要過年了嗎?無心工作的我就「順藤摸瓜」把這個事兒理了個大概,感興趣的小夥伴可以一起來看看這件事情的來龍去脈。

首先要介紹下這次事情中兩個站在「風口浪尖」的 Node.js 開源項目:
1、faker.js用於生成大量的假數據 Node.js 庫。可用於測試中自動創建豐富、合理、多樣的測試數據,包括姓名、日期、頭像、地址等。因為項目已經被作者刪除,我找到了之前項目首頁的鏡像,該項目創建於 7 年前、共有 3.4 萬星、266 位貢獻者。

新地址:https://github.com/Marak/faker.js(沒有代碼)
2、colors.js用於在 Node.js 控制台中顯示彩色文本的庫,創建於 7 年前共有 4.5 千星、44 位貢獻者。

地址:https://github.com/Marak/colors.js(代碼有問題)
雖然它們提供的功能的比較單一,但在解決某些場景下的問題很方便,而且開源協議寬鬆(MIT),所以受眾很廣。在統計它們受歡迎程度之前,我想先簡單介紹下這種開源工具庫,發布到包管理平台和使用的流程。

一般情況下我們是通過 NPM(包管理器)使用它們,所以我找來了 NPM 的數據:

說實話我看到數據後驚呆了!「faker.js」和「colors.js」看似不起眼,但從數據上來看全球有近千萬的開發者在使用,加起來每天大約有 幾百萬的下載量,共計 2 萬個項目依賴它們!
如此流行的項目,作者是一位 GitHub 上叫做「Marak」的用戶:

Marak 大神為什麼要刪自己維護了多年的開源項目,而且刪完了不過癮還在往千萬人在用的項目中加入了惡意代碼?
經過事情還要從 2020 年 11 月 Marak 發的一條 issues 說起:

內容大致的意思就是吐槽:大公司免費用我的開源項目,沒有人為我的付出買單,我不想幹了!
我這裡用的是「吐槽「是因為項目是一年後才刪的。所以我推斷當時他並不是真的想刪,但萌生了「不想再為大公司免費維護開源項目」的想法,想通過維護開源項目有一份收入。此後 Marak 就開始了開源項目商業化的嘗試,但情況並未好轉。
時隔半年,時間來到了 2021 年 4 月 Marak 在自己的博客,發布了一篇名為《Monetizing Open-source is problematic》的文章,講述了這段時間 Faker.js 在商業化路上的嘗試和坎坷。

文中寫道:
上面這一堆事情重燃了他刪掉項目的決心,於是 Marak 在 2022 年 1 月 5 刪掉了 Faker.js 項目的源碼。

事情並沒有因為刪項目而結束,反而發生了更大的事情。隨後他就在 1 月 7 號 收到了 GitHub 的封號通知。

雖然沒過多久 GitHub 就解封了,但這些事情(不賺錢、被抄襲、被封號)加起來徹底激怒了 Marak,他開始用自己的方式反擊和為自由發聲。
第二天也就是 2022 年 1 月 8 日,他就在自己受眾更廣的 colors.js 項目中注入了死循環的惡意代碼,同時輸出亂碼並命名為 v1.4.44-liberty-2 版本,然後發布到了 NPM 平台。

後面就有了,大家見到的眾多 Node.js 庫崩潰、亂碼等現象。

目前 NPM 方面和 colors.js 另外一位維護者已經修復了這個問題,但項目作者 Marak 並沒有出面解決和解釋這麼做的原因。
以上就是這件事情到目前為止的始末,網上對這件事的評價分為三派:

這件事兒因錢而起,為自由而終。
我個人覺得他刪項目這件事沒有任何問題,刪自己的代碼有什麼問題。後面提交的惡意代碼在我看來也只是一個程序員的惡作劇,這部分代碼並沒有實質性的傷害只是容易被嚇一跳。他還給我上了一堂生動的安全課:重視庫的版本號,使用最新版風險很大。
我很佩服他有勇氣用這種方式發聲,是個狠人!
你對這事兒怎麼看?蛋說無妨。
👆 關注「HelloGitHub」第一時間收到更新👆