一名npm(nodejs package manager)社区的贡献者azer koçulu出于对npm管理层的怨愤(详情),不声不响删除了自己在npm上面的全部代码,其中就包含只有11行代码的“left-pad”,没想到从中国北京 到美国硅谷,从大学宿舍学习nodejs的新手到facebook的资深工程师,整个互联网界都炸开了锅,他们手中的许多nodejs模块,全罢工了。
虽然npm管理员在危机发生后采用强制重新编写发布了azer koçulu的代码,但是这次npm风波无疑意义深远。
要 理解npm,首先就要知道node.js。node.js是基于javascript语言的后端编程框架,开发网站用的语言,可以理解为php的替代品。 node.js最明显的特征在于,除了使用javascript语言,同时还拥有许许多多公用的模块,都由来自世界各地的开发者贡献,这些模块使用npm 管理,npm就有点像苹果的app商店,只不过这些模块都是免费的。
azer koçulu本来是npm的热情粉丝,经常为npm贡献代码,其中之一就有个叫kik的模块,但是这个模块可能是功能简陋,也可能是知名度不高,反正用的人很少,没什么存在感。巧巧合的是,刚好有一家公司也叫kik,是一款类似微信的社交工具。
kik 公司也要在npm社区用到kik这个名字,于是就给azer koçulu发律师函,义正言辞要求他把自己的kik换成别的,否则会有律师找上门。azer koçulu觉得kik公司说的很有道理,然后拒绝了。毕竟取名不应该先到先得吗?凭啥你说什么我就信什么,凭什么你要我做啥我就做啥。而且我又没做错什 么,我在刚开始编写kik模块时候并不知道有kik这个公司。
kik公司交涉失败,直接就向npm官方投诉了,没多久,npm社区管理员没经过azer koçulu本人同意,就把他在npm上面的kik模块的控制权交给了别人。
这下azer koçulu简直要爆炸了,对于npm大失所望,没想到npm社区是这种玩意,保护大公司,漠视个人开发者。这简直就是对自己价值观的奇耻大辱。
愤怒难抑,azer koçulu决定复仇,他要和npm决裂,一下子删光了自己在npm上面的所有代码。其中就包括流行组件“left-pad”。这个组件只有11行,功能很简单,就是在给定的字符串左边重复插入给定的字符,以达到需要的字符串长度。
这 个nodejs模块虽然简单,但是应用非常广泛,下载量超过57万次。facebook、spotify以及netflix等著名公司大型软件项目中都用 到了babel这个模块,而bel本来这个模块又调用了“left-pad”这个模块。同时受影响的还有当今非常著名的react框架,这个框架帮助前端 工程师更便捷地开发网站界面,全世界同时学习react框架的程序员可能数百万,但是突然就都不能用了。据npm官方博客,“left-pad”删除后, 受到影响的模块达到数千个。
这就像飞机的发动机突然掉了一颗螺丝,点火时候系统就肯定会报错,但是你却很难定位为题的出处。毕竟 nodejs采用连环套的设计思想,你调用的模块可能调用了其他模块,其他模块也调用了自己的其他模块,一层又一层,代码量千千万,定位并修复所有的问题 代码,实在工程浩大。
这场意外迅速在twitter、以及微博上炸开了锅,众多网友反应react、babel、ember无法使用,数小时后也有网友反映babel已经推出了紧急修补版。
以外发生4个多小时后,npm社区管理员决定出手,把“left-pad”这个名字从azer koçulu手中夺了回来,重新写了一个“left-pad”函数,终于才抚平了千万程序员躁动的心。
这 次意外发生后,众多开发者开始怀疑npm的管理能力,庞大的nodejs社区竟然危机四伏,今后如果有贡献者误操作或密码被盗,全世界无数的nodejs 开发者瞬间无法工作。同时也有人开始怀疑npm的设计哲学,为什么不设计官方标准库,而是把十来行,甚至只有1行的代码设计成独立的模块。比如有个叫 isarray的模块,下载量达到88万次,其实只有1行代码而已。
====================================分割线================================