跳至內容

npm left-pad事件

這是一篇優良條目,請按此取得更多資訊。
本頁使用了標題或全文手工轉換
維基百科,自由的百科全書

npm left-pad事件
日期2016年3月22日,​9年前​(2016-03-22
地點npmJavaScript包管理器
起因Kik Interactive公司讓阿澤爾·科丘盧更改kik包的名稱,但遭到拒絕;後npm公司強行變更該包的所有權,於是科丘盧刪除了left-pad等軟體套件
參與者阿澤爾·科丘盧(Azer Koçulu
結果
  • 依賴於此包的軟體無法構建,許多公司因此受到影響
  • npm修改了平台相關政策
  • 人們開始考慮通過軟體抗議,並關注供應鏈攻擊等問題

2016年3月22日,軟體工程師阿澤爾·科丘盧(Azer Koçulu)刪除了他在npmJavaScript包管理器)上發布的left-pad。Kik Interactive公司希望讓科丘盧更改kik包的名稱,但二者發生爭執。後npm公司強行變更了kik包的所有權。作為回應,科丘盧刪除了自己開發的left-pad等包 。此舉導致成千上萬依賴left-pad的專案無法構建或安裝,包括Babel轉譯器React網頁框架FacebookPayPalNetflixSpotify在內的許多公司都在其軟體產品中使用了left-pad,因此造成了不少問題。

該包從npm移除數小時後,npm公司手動恢復了該包。隨後,npm修改了平台相關政策。該事件引起了媒體的關注,並在軟體行業英語Software industry內引發了反響。人們討論通過軟體破壞以推動社會正義的問題,並關注模組化編程供應鏈攻擊的可能性。

背景

[編輯]
left-pad從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網頁框架ReactReact 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的開源專案,我們的商標律師必定會找上門來,封掉你的帳戶之類的——我們別無選擇,必須這麼做,因為商標必須得保護,否則就會失效。我們能不能達成某種妥協,不用律師介入就讓你改個名字?如果我們提供一些補償,能不能讓你改名?[註 1][4]

科丘盧很快回應,拒絕更改專案名稱,並表示:

哈哈哈,真是夠了,你個混蛋。趕緊滾,別再給我發郵件了。[註 2][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 PlatformsPayPalNetflixSpotify等知名軟體科技公司都在使用這個包。[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]

TwitterGitHubRedditHacker 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]

參見

[編輯]

註腳

[編輯]
  1. ^ 原文:We don't mean to be a dick about it, but it's a registered Trademark in most countries around the world and if you actually release an open source project called kik, our trademark lawyers are going to be banging on your door and taking down your accounts and stuff like that — and we'd have no choice but to do all that because you have to enforce trademarks or you lose them. Can we not come to some sort of a compromise to get you to change the name without involving lawyers? Is there something we could do for you in compensation to get you to change the name?
  2. ^ 原文:hahah, you're actually being a dick. so, fuck you. don't e-mail me back.

參考資料

[編輯]
  1. ^ 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. ^ 2.0 2.1 2.2 2.3 2.4 Kayue. 他一怒之下刪除11行程式碼 互聯網遭殃. 關鍵評論網. 2016-03-30 [2025-01-08]. (原始內容存檔於2023-10-04) (中文(臺灣)). 
  3. ^ 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. ^ 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) (美國英語). 
  5. ^ 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. ^ 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. ^ 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. ^ 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. ^ 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. ^ 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) (英語). 
  11. ^ Tung, Liam. Disgruntled developer breaks thousands of JavaScript, Node.js apps. ZDNET. 2016-03-23 [2024-05-11]. (原始內容存檔於2024-05-11) (英語). 
  12. ^ 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) (英國英語). 
  13. ^ Claburn, Thomas. Malware-infected npm packages more common than you may fear. The Register. 2022-02-03 [2024-05-11]. (原始內容存檔於2024-05-11) (英國英語).