狠人!標(biāo)星 3.4 萬的項(xiàng)目說刪就刪,幾行代碼搞崩數(shù)萬個(gè)開源項(xiàng)目
開源是非多,鹵蛋有話說。
大家好我是 HelloGitHub 的鹵蛋,最近有個(gè) 「流行開源項(xiàng)目的作者刪掉項(xiàng)目、提交惡意代碼」 的事情,引起了廣大開源愛好者的討論。
我深知維護(hù)開源項(xiàng)目的不易,所以比較好奇他為什么舍得刪掉項(xiàng)目。
這不眼瞅著就要過年了嗎?無心工作的我就“順藤摸瓜”把這個(gè)事兒理了個(gè)大概,感興趣的小伙伴可以一起來看看這件事情的來龍去脈。
背景
首先要介紹下這次事情中兩個(gè)站在“風(fēng)口浪尖”的 Node.js 開源項(xiàng)目:
1、faker.js
用于生成大量的假數(shù)據(jù) Node.js 庫。可用于測(cè)試中自動(dòng)創(chuàng)建豐富、合理、多樣的測(cè)試數(shù)據(jù),包括姓名、日期、頭像、地址等。因?yàn)轫?xiàng)目已經(jīng)被作者刪除,我找到了之前項(xiàng)目首頁的鏡像,該項(xiàng)目創(chuàng)建于 7 年前、共有 3.4 萬星、266 位貢獻(xiàn)者。
2、colors.js
用于在 Node.js 控制臺(tái)中顯示彩色文本的庫,創(chuàng)建于 7 年前共有 4.5 千星、44 位貢獻(xiàn)者。
雖然它們提供的功能的比較單一,但在解決某些場(chǎng)景下的問題很方便,而且開源協(xié)議寬松(MIT),所以受眾很廣。在統(tǒng)計(jì)它們受歡迎程度之前,我想先簡(jiǎn)單介紹下這種開源工具庫,發(fā)布到包管理平臺(tái)和使用的流程。
一般情況下我們是通過 NPM(包管理器)使用它們,所以我找來了 NPM 的數(shù)據(jù):
說實(shí)話我看到數(shù)據(jù)后驚呆了!「faker.js」和「colors.js」看似不起眼,但從數(shù)據(jù)上來看全球有近千萬的開發(fā)者在使用,加起來每天大約有 幾百萬的下載量,共計(jì) 2 萬個(gè)項(xiàng)目依賴它們!
如此流行的項(xiàng)目,作者是一位 GitHub 上叫做「Marak」的用戶:
Marak 大神為什么要?jiǎng)h自己維護(hù)了多年的開源項(xiàng)目,而且刪完了不過癮還在往千萬人在用的項(xiàng)目中加入了惡意代碼?
經(jīng)過
事情還要從 2020 年 11 月 Marak 發(fā)的一條 issues 說起:
內(nèi)容大致的意思就是吐槽:大公司免費(fèi)用我的開源項(xiàng)目,沒有人為我的付出買單,我不想干了!
我這里用的是“吐槽“是因?yàn)轫?xiàng)目是一年后才刪的。所以我推斷當(dāng)時(shí)他并不是真的想刪,但萌生了“不想再為大公司免費(fèi)維護(hù)開源項(xiàng)目”的想法,想通過維護(hù)開源項(xiàng)目有一份收入。此后 Marak 就開始了開源項(xiàng)目商業(yè)化的嘗試,但情況并未好轉(zhuǎn)。
時(shí)隔半年,時(shí)間來到了 2021 年 4 月 Marak 在自己的博客,發(fā)布了一篇名為《Monetizing Open-source is problematic》的文章,講述了這段時(shí)間 Faker.js 在商業(yè)化路上的嘗試和坎坷。
文中寫道:
- 還是沒有公司為 Faker 買單,只有零星的個(gè)人開發(fā)者贊助
- 期間他開發(fā)了基于 Faker 的付費(fèi)云服務(wù),但并不賺錢
- 一個(gè)初創(chuàng)公司抄襲了他的服務(wù),并提供了類似的免費(fèi)服務(wù)
- Marak 與該公司 CEO 溝通后無果而終
上面這一堆事情重燃了他刪掉項(xiàng)目的決心,于是 Marak 在 2022 年 1 月 5 刪掉了 Faker.js 項(xiàng)目的源碼。
事情并沒有因?yàn)閯h項(xiàng)目而結(jié)束,反而發(fā)生了更大的事情。隨后他就在 1 月 7 號(hào) 收到了 GitHub 的封號(hào)通知。
雖然沒過多久 GitHub 就解封了,但這些事情(不賺錢、被抄襲、被封號(hào))加起來徹底激怒了 Marak,他開始用自己的方式反擊和為自由發(fā)聲。
第二天也就是 2022 年 1 月 8 日,他就在自己受眾更廣的 colors.js 項(xiàng)目中注入了死循環(huán)的惡意代碼,同時(shí)輸出亂碼并命名為 v1.4.44-liberty-2 版本,然后發(fā)布到了 NPM 平臺(tái)。
后面就有了,大家見到的眾多 Node.js 庫崩潰、亂碼等現(xiàn)象。
目前 NPM 方面和 colors.js 另外一位維護(hù)者已經(jīng)修復(fù)了這個(gè)問題,但項(xiàng)目作者 Marak 并沒有出面解決和解釋這么做的原因。
以上就是這件事情到目前為止的始末,網(wǎng)上對(duì)這件事的評(píng)價(jià)分為三派:
- (支持)他自己的代碼,他說了算。
- (中立)同情。
- (反對(duì))有事兒說,別瞎搞。置他人于不顧、沒有責(zé)任感、不道德。
蛋說無妨
這件事兒因錢而起,為自由而終。
我個(gè)人覺得他刪項(xiàng)目這件事沒有任何問題,刪自己的代碼有什么問題。后面提交的惡意代碼在我看來也只是一個(gè)程序員的惡作劇,這部分代碼并沒有實(shí)質(zhì)性的傷害只是容易被嚇一跳。他還給我上了一堂生動(dòng)的安全課:重視庫的版本號(hào),使用最新版風(fēng)險(xiǎn)很大。
我很佩服他有勇氣用這種方式發(fā)聲,是個(gè)狠人!
你對(duì)這事兒怎么看?蛋說無妨。