npm left-pad事件
2016年3月22日,軟件工程師阿澤爾·科丘盧(Azer Koçulu)刪除了他在npm(JavaScript包管理器)上發布的left-pad
包。Kik Interactive希望讓科丘盧更改kik
包的名稱,但二者發生爭執。後npm公司強行變更了kik
包的所有權。作為回應,科丘盧刪除了left-pad
等包 。此舉導致成千上萬依賴left-pad
的項目無法構建或安裝,包括Babel轉譯器和React網頁框架。Facebook、PayPal、Netflix、Spotify在內的許多公司都在其軟件產品中使用了left-pad
,因此造成了不少問題。
該包從npm移除數小時後,npm公司手動恢復了該包。隨後,npm修改了平台相關政策。該事件引起了媒體的關注,並在軟件行業內引發了反響。人們討論軟件自我破壞以推動社會正義的問題,並關注模塊化編程中供應鏈攻擊的可能性。
背景
[編輯]left-pad
為自由開源的JavaScript包。發布者阿澤爾·科丘盧(Azer Koçulu)是加利福尼亞州奧克蘭的獨立軟件工程師。該包通過循環,在字符串前反覆添加指定字符,使之長度符合要求。[1][2]left-pad
被認為極其簡單,科丘盧編寫的最終版本中僅包含11行代碼(不計空行)。[3][4]
科丘盧在npm上發布了left-pad
,npm是Node.js的默認包管理器,Node.js是JavaScript運行環境。[5][3]當時,left-pad
鮮為人知,但其使用卻極為廣泛:其作為依賴被數千個軟件項目採用,被移除之前下載量超過1500萬次。[6][7]一些JavaScript中的重要項目依賴於left-pad
才能工作:轉譯器Babel,支持向後兼容JavaScript代碼;模塊打包系統Webpack;網頁框架React和React Native,分別廣泛用於網站和移動應用的開發。[8][9][1]
除left-pad
外,科丘盧在npm上還擁有kik
包,這是允許開發者為其項目設置模板的工具。[1]開發了即時通訊軟件Kik Messenger的加拿大公司Kik Interactive認為,科丘盧占有了他們的公司名。[2]2016年3月11日,Kik聘請的專利聯繫人聯繫了科丘盧,要求其放棄對kik
包的控制權,理由是公司擁有「Kik」商標。[2][10]他在一封郵件中寫道:
我們並不想對(
kik
包)過於強硬,但「Kik」在全球大多數國家都是註冊商標。如果你確實發布了名為kik的開源項目,我們的商標律師必定會找上門來,封掉你的賬戶之類的——我們別無選擇,必須這麼做,因為商標必須得保護,否則就會失效。我們能不能達成某種妥協,不用律師介入就讓你改個名字?如果我們提供一些補償,能不能讓你改名?[4]
科丘盧很快回應,拒絕更改項目名稱,並表示:
哈哈,你們真是太過分了。去你媽的,別再給我發郵件了。[4]
Kik公司後來再次懇求科丘盧改名,因此科丘盧要求3萬美元賠償,理由是「為了放棄我心愛的項目,忍受一群公司混蛋的麻煩」。[2][1]2016年3月18日,npm公司首席執行官艾薩克·Z·施呂特(Isaac Z. Schlueter)向Kik Interactive和科丘盧發信,表示kik
包的所有權將被手動轉交給Kik Interactive。[1]
移除
[編輯]科丘盧對npm公司的決定表示失望,並聲明自己不再願意繼續參與該平台。隨後,施呂特向他提供了刪除命令,用以刪除他所有的273個模塊。[10]科丘盧在2016年3月22日執行了這個指令,刪除了所有他之前發布的包。[1]left-pad
被撤下,不再能在npm上公開訪問,[6]但項目和代碼仍然可以在GitHub上找到。[10]
軟件包被刪除後,任何嘗試構建或安裝依賴left-pad
的JavaScript項目(包括像Babel和Webpack這樣的項目)都會遇到404錯誤,致使操作失敗。[1]Meta Platforms、PayPal、Netflix、Spotify等知名軟件科技公司都在使用這個包。[9]就連Kik Interactive的開發者也因這個包被刪除而遇到構建問題。[1]
刪除後不久,其他開發者開始在項目的Git事務跟蹤管理系統上發布大量反饋、評論、應急修複方案。[8][1]
刪除包一個小時後,科丘盧在Medium上發布文章《我剛剛解放了我的模塊》(I've Just Liberated My Modules),解釋了他刪除軟件項目的原因,表示這是為了抗議企業利益對自由和開源軟件的侵蝕。[1]
善後
[編輯]Babel等開源項目的維護者迅速發布了熱修復,移除了科丘盧刪除的依賴項。[8]npm社群用戶也迅速發布了多個被刪除的同名包,以防止惡意攻擊。[2][4]例如,另一位開發者重新創建了1.0.0版本的left-pad
包。但由於科丘盧發布的是0.0.3版本,用戶仍然遇到了問題。[4]
大約兩個小時後,npm從備份中手動恢復了原始的0.0.3版本,回退了刪除操作。[1]npm的首席技術官勞里·沃斯(Laurie Voss)寫道,儘管公司內部爭論這是否為「正確的決定」,但他們還是「選擇了大多數人的需求」[11]。
後續
[編輯]反響
[編輯]npm的社區經理阿什莉·威廉斯(Ashley Williams)代表平台就事件引起的問題向用戶道歉,並表示平台「未能保護社區」。[12]Kik Interactive也為此事道歉,公司消息部門負責人邁克·羅伯茨(Mike Roberts)在Medium上公開了與科丘盧的郵件往來內容,並認為自己的交流是「一次禮貌的請求」。[9]羅伯茨寫道,他們最初聯繫科丘盧,是希望在npm上發布與科丘盧同名的開源包。[6]科丘盧表示,他為干擾他人的工作感到抱歉,但他認為這樣做「對社區長期利益有益」。[3]
Twitter、GitHub、Reddit、Hacker News等平台上的用戶對此事有着不同的反應,許多人認為這一事件曾短暫地「讓互聯網癱瘓」。[3][9][10][1]不少人評價了JavaScript開發中「快速迭代、破壞一切」的文化、開源軟件的不可預測性、對模塊化編程的過度依賴。[3][9][4]用戶們還對npm強制將科丘盧的包轉交給Kik Interactive的決定表示失望,認為這是法律威脅所迫。[1]
影響
[編輯]npm改變了其關於已發布包刪除的政策,規定如果包發布超過24小時且至少有一個項目將其作為依賴,包將不能被刪除。[12]
該事件表明,npm包的中斷可能會導致供應鏈攻擊。除了備受關注的left-pad
外,不少人迅速接管了其他被刪除的包並注入未知代碼。[8]npm發布了新政策,以防止在類似糾紛中發生惡意接管。[4]然而,該事件仍被作為過度依賴外部貢獻者,導致軟件產品攻擊面增大的例證。[13]科丘盧通過故意自我破壞left-pad
來引發社會問題的做法,也被認為是npm等平台上發布抗議軟件(Protestware)的前奏。[7]
參見
[編輯]- 駭客行動主義——使用計算機和計算機網絡作為抗議手段以促進政治目的
- peacenotwar——2022年惡意軟件
- 軟件存儲庫——軟件包在計算機上的存儲位置
參考資料
[編輯]- ^ 1.00 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.10 1.11 1.12 Collins, Keith. How one programmer broke the internet by deleting a tiny piece of code. Quartz. 2016-03-27 [2024-05-11]. (原始內容存檔於2024-05-11) (美國英語).
- ^ 2.0 2.1 2.2 2.3 2.4 Kayue. 他一怒之下刪除11行程式碼 互聯網遭殃. 關鍵評論網. 2016-03-30 [2025-01-08]. (原始內容存檔於2023-10-04) (中文(臺灣)).
- ^ 3.0 3.1 3.2 3.3 3.4 Weinberger, Matt. One programmer almost broke the internet by deleting 11 lines of code. Business Insider. 2016-03-23 [2024-05-11]. (原始內容存檔於2024-05-11) (美國英語).
- ^ 4.0 4.1 4.2 4.3 4.4 4.5 4.6 Feldman, Brian. One Man Deleted 11 Lines of Code From the Internet and Broke Hundreds of Apps. Intelligencer. 2016-03-24 [2024-05-11]. (原始內容存檔於2024-05-11) (美國英語).
- ^ Claburn, Thomas. NPM is Not Particularly Magnanimous? Staff fired after trying to unionize – complaints. The Register. 2019-04-22 [2024-05-11]. (原始內容存檔於2024-05-11) (英國英語).
- ^ 6.0 6.1 6.2 Williams, Chris. How one developer just broke Node, Babel and thousands of projects in 11 lines of JavaScript. The Register. 2016-03-23 [2024-05-11]. (原始內容存檔於2023-10-16) (英國英語).
- ^ 7.0 7.1 Sharma, Ax. Protestware on the rise: Why developers are sabotaging their own code. TechCrunch. 2022-07-27 [2024-05-11]. (原始內容存檔於2024-02-29) (美國英語).
- ^ 8.0 8.1 8.2 8.3 Mazaika, Ken. How 17 Lines of Code Took Down Silicon Valley's Hottest Startups. HuffPost. 2016-03-24 [2024-05-11]. (原始內容存檔於2024-05-11) (美國英語).
- ^ 9.0 9.1 9.2 9.3 9.4 Miller, Paul. How an irate developer briefly broke JavaScript. The Verge. 2016-03-24 [2024-05-11]. (原始內容存檔於2024-05-11) (美國英語).
- ^ 10.0 10.1 10.2 10.3 Gallagher, Sean. Rage-quit: Coder unpublished 17 lines of JavaScript and "broke the Internet". Ars Technica. 2016-03-25 [2024-05-11]. (原始內容存檔於2024-05-11) (英語).
- ^ Tung, Liam. Disgruntled developer breaks thousands of JavaScript, Node.js apps. ZDNET. 2016-03-23 [2024-05-11]. (原始內容存檔於2024-05-11) (英語).
- ^ 12.0 12.1 Williams, Chris. 'No regrets' says chap who felled JavaScript's Jenga tower – as devs ask: Have we forgotten how to code?. The Register. 2016-03-29 [2024-05-11]. (原始內容存檔於2024-05-11) (英國英語).
- ^ Claburn, Thomas. Malware-infected npm packages more common than you may fear. The Register. 2022-02-03 [2024-05-11]. (原始內容存檔於2024-05-11) (英國英語).