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) (英国英语).