跳转到内容

npm left-pad事件

这是一篇优良条目,点击此处获取更多信息。
本页使用了标题或全文手工转换
维基百科,自由的百科全书

npm left-pad事件
日期2016年3月22日,​8年前​(2016-03-22
地点npmJavaScript包管理器
起因Kik Interactive公司让阿泽尔·科丘卢更改kik包的名称,但遭到拒绝;后npm公司强行变更该包的所有权,于是科丘卢删除了left-pad等软件包
参与者阿泽尔·科丘卢(Azer Koçulu
结果
  • 依赖于此包的软件无法构建,许多公司因此受到影响
  • npm修改了平台相关政策
  • 人们开始考虑通过软件抗议,并关注供应链攻击等问题

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

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

哈哈哈,真是够了,你个混蛋。赶紧滚,别再给我发邮件了。[註 2][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. ^ 原文:We don't mean to be a dick about it, but it's a registered Trademark in most countries around the world and if you actually release an open source project called kik, our trademark lawyers are going to be banging on your door and taking down your accounts and stuff like that — and we'd have no choice but to do all that because you have to enforce trademarks or you lose them. Can we not come to some sort of a compromise to get you to change the name without involving lawyers? Is there something we could do for you in compensation to get you to change the name?
  2. ^ 原文:hahah, you're actually being a dick. so, fuck you. don't e-mail me back.

参考资料

[编辑]
  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) (英国英语).