兩天前,一名NPM(Nodejs Package Manager)社區(qū)的貢獻者Azer Ko?ulu出于對NPM管理層的怨憤,不聲不響刪除了自己在NPM上面的全部代碼,其中就包含只有11行代碼的“Left-pad”,沒想到從中國北京 到美國硅谷,從大學宿舍學習Nodejs的新手到Facebook的資深工程師,整個互聯(lián)網(wǎng)界都炸開了鍋,他們手中的許多Nodejs模塊,全罷 工了。
雖然NPM管理員在危機發(fā)生后采用強制重新編寫發(fā)布了Azer Ko?ulu的代碼,但是這次NPM風波無疑意義深遠。
要 理解NPM,首先就要知道Node.js。Node.js是基于Javascript語言的后端編程框架,開發(fā)網(wǎng)站用的語言,可以理解為PHP的替代品。 Node.js最明顯的特征在于,除了使用Javascript語言,同時還擁有許許多多公用的模塊,都由來自世界各地的開發(fā)者貢獻,這些模塊使用NPM 管理,NPM就有點像蘋果的App商店,只不過這些模塊都是免費的。
Azer Ko?ulu本來是NPM的熱情粉絲,經(jīng)常為NPM貢獻代碼,其中之一就有個叫Kik的模塊,但是這個模塊可能是功能簡陋,也可能是知名度不高,反正用的人很少,沒什么存在感。巧巧合的是,剛好有一家公司也叫Kik,是一款類似微信的社交工具。
Kik 公司也要在NPM社區(qū)用到Kik這個名字,于是就給Azer Ko?ulu發(fā)律師函,義正言辭要求他把自己的Kik換成別的,否則會有律師找上門。Azer Ko?ulu覺得Kik公司說的很有道理,然后拒絕了。畢竟取名不應該先到先得嗎?憑啥你說什么我就信什么,憑什么你要我做啥我就做啥。而且我又沒做錯什 么,我在剛開始編寫Kik模塊時候并不知道有Kik這個公司。
Kik公司交涉失敗,直接就向NPM官方投訴了,沒多久,NPM社區(qū)管理員沒經(jīng)過Azer Ko?ulu本人同意,就把他在NPM上面的Kik模塊的控制權交給了別人。
這下Azer Ko?ulu簡直要爆炸了,對于NPM大失所望,沒想到NPM社區(qū)是這種玩意,保護大公司,漠視個人開發(fā)者。這簡直就是對自己價值觀的奇恥大辱。
憤怒難抑,Azer Ko?ulu決定復仇,他要和NPM決裂,一下子刪光了自己在NPM上面的所有代碼。其中就包括流行組件“l(fā)eft-pad”。這個組件只有11行,功能很簡單,就是在給定的字符串左邊重復插入給定的字符,以達到需要的字符串長度。
這 個Nodejs模塊雖然簡單,但是應用非常廣泛,下載量超過57萬次。Facebook、Spotify以及Netflix等著名公司大型軟件項目中都用 到了Babel這個模塊,而Bel本來這個模塊又調用了“l(fā)eft-pad”這個模塊。同時受影響的還有當今非常著名的React框架,這個框架幫助前端 工程師更便捷地開發(fā)網(wǎng)站界面,全世界同時學習React框架的程序員可能數(shù)百萬,但是突然就都不能用了。據(jù)NPM官方博客,“l(fā)eft-pad”刪除后, 受到影響的模塊達到數(shù)千個。
這就像飛機的發(fā)動機突然掉了一顆螺絲,點火時候系統(tǒng)就肯定會報錯,但是你卻很難定位為題的出處。畢竟 Nodejs采用連環(huán)套的設計思想,你調用的模塊可能調用了其他模塊,其他模塊也調用了自己的其他模塊,一層又一層,代碼量千千萬,定位并修復所有的問題 代碼,實在工程浩大。
這場意外迅速在Twitter、以及微博上炸開了鍋,眾多網(wǎng)友反應React、Babel、Ember無法使用,數(shù)小時后也有網(wǎng)友反映Babel已經(jīng)推出了緊急修補版。
以外發(fā)生4個多小時后,NPM社區(qū)管理員決定出手,把“l(fā)eft-pad”這個名字從Azer Ko?ulu手中奪了回來,重新寫了一個“l(fā)eft-pad”函數(shù),終于才撫平了千萬程序員躁動的心。
這次意外發(fā)生后,眾多開發(fā)者開始懷疑NPM的管理能力,龐大的Nodejs社區(qū)竟然危機四伏,今后如果有貢獻者誤操作或密碼被盜,全世界無數(shù)的Nodejs 開發(fā)者瞬間無法工作。同時也有人開始懷疑NPM的設計哲學,為什么不設計官方標準庫,而是把十來行,甚至只有1行的代碼設計成獨立的模塊。比如有個叫 isArray的模塊,下載量達到88萬次,其實只有1行代碼而已。