热门问题
时间线
聊天
视角
npm left-pad事件
2016年软件开发事件 来自维基百科,自由的百科全书
Remove ads
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修改了平台相关政策。该事件引起了媒体的关注,并在软件行业内引发了反响。人们讨论通过软件破坏以推动社会正义的问题,并关注模块化编程中供应链攻击的可能性。
Remove ads
背景

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;网页框架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的开源项目,我们的商标律师必定会找上门来,封掉你的账户之类的——我们别无选择,必须这么做,因为商标必须得保护,否则就会失效。我们能不能达成某种妥协,不用律师介入就让你改个名字?如果我们提供一些补偿,能不能让你改名?[注 1][4]
科丘卢很快回应,拒绝更改项目名称,并表示:
Kik公司后来再次恳求科丘卢改名,因此科丘卢要求3万美元赔偿,理由是“为了放弃我心爱的项目,忍受一群公司混蛋的麻烦”。[2][1]2016年3月18日,npm公司首席执行官艾萨克·Z·施吕特(Isaac Z. Schlueter)向Kik Interactive和科丘卢发信,表示kik
包的所有权将被手动转交给Kik Interactive。[1]
Remove ads
移除
科丘卢对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]
Remove ads
善后
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]
Remove ads
npm改变了其关于已发布包删除的政策,规定如果包发布超过24小时且至少有一个项目将其作为依赖,包将不能被删除。[12]
该事件表明,npm包的中断可能会导致供应链攻击。除了备受关注的left-pad
外,不少人迅速接管了其他被删除的包并注入未知代码。[8]npm发布了新政策,以防止在类似纠纷中发生恶意接管。[4]然而,该事件仍被作为过度依赖外部贡献者,导致软件产品攻击面增大的例证。[13]科丘卢通过故意自我破坏left-pad
来引发社会问题的做法,也被认为是npm等平台上发布抗议软件(Protestware)的前奏。[7]
参见
- 黑客行动主义——使用计算机和计算机网络作为抗议手段以促进政治目的
- peacenotwar——2022年恶意软件
- 软件存储库——软件包在计算机上的存储位置
脚注
参考资料
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads