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修改了平臺相關政策。該事件引起了媒體的關注，並在Software industry內引發了反響。人們討論通過軟件破壞以推動社會正義的問題，並關注模塊化編程中供應鏈攻擊的可能性。

**背景**
left-pad從npm移除前的內容
left-pad為自由開源的JavaScript包。發佈者阿澤爾·科丘盧（Azer Koçulu）是加利福尼亞州奧克蘭的獨立軟件工程師。該包通過循環，在字符串前反覆添加指定字符，使之長度符合要求。thenewslens_20160330left-pad被認為極其簡單，科丘盧編寫的最終版本中僅包含11行代碼（不計空行）。nymag_20160324
科丘盧在npm上發佈了left-pad，npm是Node.js的默認包管理器，Node.js是JavaScript運行環境。businessinsider_20160323當時，left-pad鮮為人知，但其使用卻極為廣泛：其作為依賴被數千個軟件項目採用，被移除之前下載量超過1500萬次。techcrunch_20220727一些JavaScript中的重要項目依賴於left-pad才能工作：轉譯器Babel，支持向後兼容JavaScript代碼；模塊打包系統Webpack；網頁框架React和React Native，分別廣泛用於網站和移動應用的開發。qz_20160327
除left-pad外，科丘盧在npm上還擁有kik包，這是允許開發者為其項目設置模板的工具。qz_20160327開發了即時通訊軟件Kik Messenger的加拿大公司Kik Interactive認為，科丘盧佔有了他們的公司名。thenewslens_201603302016年3月11日，Kik聘請的專利聯繫人聯繫了科丘盧，要求其放棄對kik包的控制權，理由是公司擁有「Kik」商標。arstechnica_20160325他在一封郵件中寫道：
科丘盧很快回應，拒絕更改項目名稱，並表示：
Kik公司後來再次懇求科丘盧改名，因此科丘盧要求3萬美元賠償，理由是「為了放棄我心愛的項目，忍受一群公司混蛋的麻煩」。qz_201603272016年3月18日，npm公司首席執行官艾薩克·Z·施呂特（Isaac Z. Schlueter）向Kik Interactive和科丘盧發信，表示kik包的所有權將被手動轉交給Kik Interactive。qz_20160327

**移除**
科丘盧對npm公司的決定表示失望，並聲明自己不再願意繼續參與該平臺。隨後，施呂特向他提供了刪除命令，用以刪除他所有的273個模塊。arstechnica_20160325科丘盧在2016年3月22日執行了這個指令，刪除了所有他之前發佈的包。qz_20160327left-pad被撤下，不再能在npm上公開訪問，theregister_20160323但項目和代碼仍然可以在GitHub上找到。arstechnica_20160325
軟件包被刪除後，任何嘗試構建或安裝依賴left-pad的JavaScript項目（包括Babel和Webpack）都會遇到404錯誤，致使操作失敗。qz_20160327Meta Platforms、PayPal、Netflix、Spotify等知名軟件科技公司都在使用這個包。theverge_20160324就連Kik Interactive的開發者也因這個包被刪除而遇到構建問題。qz_20160327
刪除後不久，其他開發者開始在項目的Git事務跟蹤管理系統上發佈大量反饋、評論、應急修復方案。qz_20160327
刪除包一個小時後，科丘盧在Medium上發佈文章《我剛剛解放了我的模塊》（I've Just Liberated My Modules），解釋了他刪除軟件項目的原因，表示這是為了抗議企業利益對自由和開源軟件的侵蝕。qz_20160327

**善後**
Babel等開源項目的維護者迅速發佈了熱修復，移除了科丘盧刪除的依賴項。huffpost_20160324npm社群用戶也迅速發佈了多個被刪除的同名包，以防止惡意攻擊。nymag_20160324例如，另一位開發者重新創建了1.0.0版本的left-pad包。但由於科丘盧發佈的是0.0.3版本，用戶仍然遇到了問題。nymag_20160324
大約兩個小時後，npm從備份中手動恢復了原始的0.0.3版本，回退了刪除操作。qz_20160327npm的首席技術官勞裡·沃斯（Laurie Voss）寫道，儘管公司內部爭論這是否為「正確的決定」，但他們還是「選擇了大多數人的需求」。zdnet_20160323

**後續**

**反響**
npm的社區經理阿什莉·威廉斯（Ashley Williams）代表平臺就事件引起的問題向用戶道歉，並表示平臺「未能保護社區」。theregister_20160329Kik Interactive也為此事道歉，公司消息部門負責人邁克·羅伯茨（Mike Roberts）在Medium上公開了與科丘盧的郵件往來內容，並認為自己的交流是「一次禮貌的請求」。theverge_20160324羅伯茨寫道，他們最初聯繫科丘盧，是希望在npm上發佈與科丘盧同名的開源包。theregister_20160323科丘盧表示，他為干擾他人的工作感到抱歉，但他認為這樣做「對社區長期利益有益」。businessinsider_20160323
Twitter、GitHub、Reddit、Hacker News等平臺上的用戶對此事有著不同的反應，許多人認為這一事件曾短暫地「讓互聯網癱瘓」。qz_20160327不少人評價了JavaScript開發中「快速迭代、破壞一切」的文化、開源軟件的不可預測性、對模塊化編程的過度依賴。nymag_20160324用戶們還對npm強制將科丘盧的包轉交給Kik Interactive的決定表示失望，認為這是法律威脅所迫。qz_20160327

**影響**
npm改變了其關於已發佈包刪除的政策，規定如果包發佈超過24小時且至少有一個項目將其作為依賴，包將不能被刪除。theregister_20160329
該事件表明，npm包的中斷可能會導致供應鏈攻擊。除了備受關注的left-pad外，不少人迅速接管了其他被刪除的包並注入未知代碼。huffpost_20160324npm發佈了新政策，以防止在類似糾紛中發生惡意接管。nymag_20160324然而，該事件仍被作為過度依賴外部貢獻者，導致軟件產品攻擊面增大的例證。theregister_20220203科丘盧通過故意自我破壞left-pad來引發社會問題的做法，也被認為是npm等平臺上發佈抗議軟件（Protestware）的前奏。techcrunch_20220727

**參見**
 駭客行動主義- peacenotwar- 軟件存儲庫

**腳註**

**參考資料 ==