@ 2018.09.21 , 10:00

程序员之怒:web崩溃百万

您可能从来没有听说过,但是在2016年3月23日,互联网几乎崩溃了。

当愤怒的程序员决定清除托管在名为npm上的JavaScript 注册列表中所有的代码时,搭建起互联网的大量软件都崩溃了。

这听起来不是什么大不了的事——毕竟,代码总是处于被删除然后重新上传更新的状态——但由奥克兰的开发者AzerKoçulu所创建的这一组11行代码的包,恰好是简单但应用范围极其广泛的工具。 Facebook、Netflix和Airbnb等公司的正常运行都依赖于它。

程序员之怒:web崩溃百万
Github via Quartz

问题得到了及时的解决,对于我们绝大多数用户来说,由于浏览器缓存,我们不会注意到任何的异常。

但对于Web开发人员来说,这是一场短暂的噩梦,每秒都有数千个模块崩溃。当时有一位开发人员在github论坛上写道:“全网都崩溃了啊”。

那么为什么删除这么一小段代码就像多米诺骨牌一样推倒了互联网的其他部分呢?首先,在构建程序时,有许多现成的模块和工具可使过程更快更简单。

Javascript模块最大型的注册表其实是一家名为npm的开源平台,它有点像开发人员的App商店。他们在上面查找他们想要的功能,然后把找到的相关功能的代码地址添加到本地的引用中。格式诸如npm.****,开发工具内置的功能自动调用其中的代码。

模块中最受欢迎的是Koçulu的11行的'left-pad'模块——一个简单到令人惊讶但又非常有用的代码片段。事实上,整个开发社区甚至都没有意识到之前几乎所有人都引用了这段代码。

“如果开发人员调用npm模块,软件编译器只会在时机成熟时下载代码并运行,而不是下载之后保存到本地上。”科技记者Matt Weinberger解释道。

我们在这里谈论的是知名的硅谷企业。正如Weinberger的报道,Facebook,Netflix和Spotify依赖left-pad包更快地运行代码编译器Babel,以及帮助开发人员构建界面更为友好的React——Facebook 的内部项目,最初用来架设Instagram 。

npm模块大部分时间都运行得很好——除非当前模块被删除,这就是Koçulu所做的事情。

为了开源社区的荣耀,在10分钟内,其他人就发布了功能完全相同的替补版本,这解决了一些问题,但并非全部。

面对如倒下的多米诺骨牌一样的连锁崩溃,npm采取了前所未有的措施,从备份中还原了被删除模块,从而在根本上解决了问题。

但此举引发了编程人员的强烈反对和关于npm社区用户权益问题的激烈争论。

回到开头,为什么Koçulu删除了自己的模块?正如他在一篇文章中所解释的那样,这一切都是因为与通信公司Kik之间的纠纷——Koçulu正在编写的模块,也命名为kik。

该公司希望他更改模块的名称,以便他们可以推出自己的产品,但他拒绝了,导致两方之间发生了激烈的口角——通过电子邮件。

最终,npm平台卷了进来,却不是与他们的开发人员站在一起——他们同意,为了全社会更广泛的利益,kik归属于Kik公司会更有意义。

该决定使Koçulu异常恼火,并向平台管理者发送了一封电子邮件说:

“我很多年前就是平台的用户,也是社区的贡献者,并且万万没想到你们会支持公司的专利律师威胁我这样的开源贡献者……心寒了,我希望删除我贡献的所有代码,包括我的帐户。我不想成为npm的一部分,如果你们做不了,请告诉我该如何做。我想我有权从npm上删除我的东西。”

几个小时后,npm同意了他的要求,删除了他在npm注册的所有273个模块。但由于所有人都只看到kik,没有人意识到随之而来的是什么。

Koçulu此后曾向他的模块使用者道歉,但始终坚持他最初的决定。

本文译自 sciencealert,由 majer 编辑发布。

支付宝打赏 [x]
您的大名: 打赏金额:
赞一个 (25)