跳转到内容

英文维基 | 中文维基 | 日文维基 | 草榴社区

npm left-pad事件

本页使用了标题或全文手工转换
维基百科,自由的百科全书

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的开源项目,我们的商标律师必定会找上门来,封掉你的账户之类的——我们别无选择,必须这么做,因为商标必须得保护,否则就会失效。我们能不能达成某种妥协,不用律师介入就让你改个名字?如果我们提供一些补偿,能不能让你改名?[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 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. ^ 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) (英国英语).