狠人!標星 3.4 萬的項目說刪就刪,幾行程式碼搞崩數萬個開源項目

開源是非多,滷蛋有話說。

大家好我是 HelloGitHub 的滷蛋,最近有個 「流行開源項目的作者刪掉項目、提交惡意程式碼」 的事情,引起了廣大開源愛好者的討論。

我深知維護開源項目的不易,所以比較好奇他為什麼捨得刪掉項目。

這不眼瞅著就要過年了嗎?無心工作的我就「順藤摸瓜」把這個事兒理了個大概,感興趣的小夥伴可以一起來看看這件事情的來龍去脈。

背景

首先要介紹下這次事情中兩個站在「風口浪尖」的 Node.js 開源項目:

1、faker.js

用於生成大量的假數據 Node.js 庫。可用於測試中自動創建豐富、合理、多樣的測試數據,包括姓名、日期、頭像、地址等。因為項目已經被作者刪除,我找到了之前項目首頁的鏡像,該項目創建於 7 年前、共有 3.4 萬星、266 位貢獻者。

新地址://github.com/Marak/faker.js(沒有程式碼)

2、colors.js

用於在 Node.js 控制台中顯示彩色文本的庫,創建於 7 年前共有 4.5 千星、44 位貢獻者。

地址://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 在商業化路上的嘗試和坎坷。

文中寫道:

  • 還是沒有公司為 Faker 買單,只有零星的個人開發者贊助
  • 期間他開發了基於 Faker 的付費雲服務,但並不賺錢
  • 一個初創公司抄襲了他的服務,並提供了類似的免費服務
  • Marak 與該公司 CEO 溝通後無果而終

上面這一堆事情重燃了他刪掉項目的決心,於是 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 並沒有出面解決和解釋這麼做的原因。

以上就是這件事情到目前為止的始末,網上對這件事的評價分為三派:

  • (支援)他自己的程式碼,他說了算。
  • (中立)同情。
  • (反對)有事兒說,別瞎搞。置他人於不顧、沒有責任感、不道德。

蛋說無妨

這件事兒因錢而起,為自由而終。

我個人覺得他刪項目這件事沒有任何問題,刪自己的程式碼有什麼問題。後面提交的惡意程式碼在我看來也只是一個程式設計師的惡作劇,這部分程式碼並沒有實質性的傷害只是容易被嚇一跳。他還給我上了一堂生動的安全課:重視庫的版本號,使用最新版風險很大。

我很佩服他有勇氣用這種方式發聲,是個狠人!

你對這事兒怎麼看?蛋說無妨。