Npm left-pad事件

2016年3月22日，软件工程师阿泽尔·科丘卢（）删除了他在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包。发布者阿泽尔·科丘卢（）是加利福尼亚州奥克兰的独立软件工程师。该包通过循环，在字符串前反复添加指定字符，使之长度符合要求。left-pad被认为极其简单，科丘卢编写的最终版本中仅包含11行代码（不计空行）。

科丘卢在npm上发布了left-pad，npm是Node.js的默认包管理器，Node.js是JavaScript运行环境。当时，left-pad鲜为人知，但其使用却极为广泛：其作为依赖被数千个软件项目采用，被移除之前下载量超过1500万次。一些JavaScript中的重要项目依赖于left-pad才能工作：转译器Babel，支持向后兼容JavaScript代码；模块打包系统Webpack；网页框架React和React Native，分别广泛用于网站和移动应用的开发。

除left-pad外，科丘卢在npm上还拥有kik包，这是允许开发者为其项目设置模板的工具。开发了即时通讯软件Kik Messenger的加拿大公司Kik Interactive认为，科丘卢占有了他们的公司名。2016年3月11日，Kik聘请的专利联系人联系了科丘卢，要求其放弃对kik包的控制权，理由是公司拥有「Kik」商标。他在一封邮件中写道：

科丘卢很快回应，拒绝更改项目名称，并表示：

Kik公司后来再次恳求科丘卢改名，因此科丘卢要求3万美元赔偿，理由是「为了放弃我心爱的项目，忍受一群公司混蛋的麻烦」。2016年3月18日，npm公司首席执行官艾萨克·Z·施吕特（Isaac Z. Schlueter）向Kik Interactive和科丘卢发信，表示kik包的所有权将被手动转交给Kik Interactive。

 移除 
科丘卢对npm公司的决定表示失望，并声明自己不再愿意继续参与该平台。随后，施吕特向他提供了删除命令，用以删除他所有的273个模块。科丘卢在2016年3月22日执行了这个指令，删除了所有他之前发布的包。left-pad被撤下，不再能在npm上公开访问，但项目和代码仍然可以在GitHub上找到。

软件包被删除后，任何尝试构建或安装依赖left-pad的JavaScript项目（包括Babel和Webpack）都会遇到404错误，致使操作失败。Meta Platforms、PayPal、Netflix、Spotify等知名软件科技公司都在使用这个包。就连Kik Interactive的开发者也因这个包被删除而遇到构建问题。

删除后不久，其他开发者开始在项目的Git事务跟踪管理系统上发布大量反馈、评论、应急修复方案。

删除包一个小时后，科丘卢在Medium上发布文章《我刚刚解放了我的模块》（），解释了他删除软件项目的原因，表示这是为了抗议企业利益对自由和开源软件的侵蚀。

 善后 
Babel等开源项目的维护者迅速发布了热修复，移除了科丘卢删除的依赖项。npm社群用户也迅速发布了多个被删除的同名包，以防止恶意攻击。例如，另一位开发者重新创建了1.0.0版本的left-pad包。但由于科丘卢发布的是0.0.3版本，用户仍然遇到了问题。

大约两个小时后，npm从备份中手动恢复了原始的0.0.3版本，回退了删除操作。npm的首席技术官劳里·沃斯（）写道，尽管公司内部争论这是否为「正确的决定」，但他们还是「选择了大多数人的需求」。

 后续 
 反响 
npm的社区经理阿什莉·威廉斯（）代表平台就事件引起的问题向用户道歉，并表示平台「未能保护社区」。Kik Interactive也为此事道歉，公司消息部门负责人迈克·罗伯茨（）在Medium上公开了与科丘卢的邮件往来内容，并认为自己的交流是「一次礼貌的请求」。罗伯茨写道，他们最初联系科丘卢，是希望在npm上发布与科丘卢同名的开源包。科丘卢表示，他为干扰他人的工作感到抱歉，但他认为这样做「对社区长期利益有益」。

Twitter、GitHub、Reddit、Hacker News等平台上的用户对此事有着不同的反应，许多人认为这一事件曾短暂地「让互联网瘫痪」。不少人评价了JavaScript开发中「快速迭代、破坏一切」的文化、开源软件的不可预测性、对模块化编程的过度依赖。用户们还对npm强制将科丘卢的包转交给Kik Interactive的决定表示失望，认为这是法律威胁所迫。

 影响 
npm改变了其关于已发布包删除的政策，规定如果包发布超过24小时且至少有一个项目将其作为依赖，包将不能被删除。

该事件表明，npm包的中断可能会导致供应链攻击。除了备受关注的left-pad外，不少人迅速接管了其他被删除的包并注入未知代码。npm发布了新政策，以防止在类似纠纷中发生恶意接管。然而，该事件仍被作为过度依赖外部贡献者，导致软件产品攻击面增大的例证。科丘卢通过故意自我破坏left-pad来引发社会问题的做法，也被认为是npm等平台上发布抗议软件（）的前奏。

 参见 




 脚注 

 参考资料 

Category:基于互联网的行动主义
Category:2016年网络事件
Category:JavaScript