兩天前,一名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行代碼而已。
稿源:tech2ipo