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

削微寒發表於2022-01-12

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

大家好我是 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 在商業化路上的嘗試和坎坷。

文中寫道:

  • 還是沒有公司為 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 並沒有出面解決和解釋這麼做的原因。

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

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

蛋說無妨

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

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

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

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

相關文章