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- 软件存储库