他一怒之下刪除11行程式碼 互聯網遭殃

他一怒之下刪除11行程式碼 互聯網遭殃
Photo Credit: Ian Lishman / Juice Images / Corbis / 達志影像

我們想讓你知道的是

刪除短短11行程式碼,竟然會令Facebook、Reddit、Netflix及Spotify等大型網站出現錯誤?早前互聯網的一次意外,揭露了不少網站的弱點。

現時每個網站都是一個龐大架構,技術人員建站時不可能獨力寫出全部程式碼,通常會使用其他人寫好的套件,而這些套件又很可能用到另一些人的套件。不少程式員都會在網絡上開放源碼,讓世界各地的程式員能夠使用其成果,互相協助。

一層又一層的程式碼,令不少開發人員容易忽略其網站依賴一些不由他們控制的套件,一旦這些套件發生問題,可能會造成骨牌效應,使網站出錯。近日一名程式員就因為刪去11行程式碼,使數以千計的開發人員、管理人員從記錄中發現錯誤訊息。

共享小工具

這場網絡小意外的成因之一,是JavaScript模組庫npm。npm讓使用程式語言JavaScript的開發人員,能夠輕鬆分享他們所寫的程式碼,並再日後重用。這些程式碼多數只為解決特定問題,像一些方便的小工具般,當有人「發明」了後所有人都能直接使用,通常稱為包(package)或模組(module)。

因此npm既是模組管理系統,也是一個模組庫,負責管理模組庫的是npm公司,創辦人之一是npm的創造者Isaac Z. Schlueter。npm公司容許任何人以開放源碼方式,把他們的模組上載至npm的公開庫中,讓其他人自由使用。

名字的爭拗

造成是次意外的主角、來自加州奧克蘭的程式員Azer Koçulu,原本非常擁抱及支持npm,不但在npm上發佈了273個模組,更會大力宣揚npm。他早前開始設計一件小工具,並把這項計劃以“kik”之名註冊到npm。然而開發流動通訊軟件Kik Messenger的公司Kik Interactive卻認為,Koçulu佔用了該公司的名字。

3月11日,Kik公司聘請的專利代理人Bob Stratton傳電郵給Koçulu,指該公司將會發佈一個重要的軟件包,名字同樣叫做“Kik”,希望他能夠把其計劃易名,以免用戶混淆兩者。Koçulu迅速回絕︰「抱歉,我正建立的開源計劃使用這個名字。」

Stratton表示他們無意冒犯,但那是個註冊商標。然後態度漸趨強硬,語帶威脅地指如果Koçulu堅持使用該名字,他們的律師會以上門、取下其帳戶等手段來保護其商標。最後Stratton希望雙方能夠妥協,不用律師來解決問題。

Koçulu回覆︰「哈哈,你確實冒犯了我。所以,(略去),別再回覆。」但Stratton再一次懇求Koçulu改名,因此他開出3萬美元的條件。

撤出npm

這個時候,Kik及Stratton向npm的支援團隊求助。Schlueter嘗試以溝通解決爭拗不果,最終npm認為一個有足夠知識的用家輸入「npm install kik」時,會預期安裝的東西跟Kik(通訊軟件)有關,因此根據其政策決定把模組的名字給予Kik公司。

Koçulu不接受這個決定。他對Schleuter說︰「我認識你多年,不曾想像你會站在企業專利律師的一方,來威脅開放源碼計劃的貢獻者。」失望的Koçulu更要求npm刪除其帳戶,以及他上載的所有模組︰「我不願再成為npm的一份子,如果你不刪除的話,讓我知道如何刪除,我應該有權刪除自己在npm的所有東西。」

Koçulu在網誌上解釋,事件令他意識到npm屬於私人領域,在這領域中企業比人民更有權力。但他參與開放源碼的計劃是因為他相信「權力歸於人民」,故決定刪除模組。Schleuter給了他一個指令,可以一次過把他在npm的所有東西刪除。他輸入指令,把在npm上註冊的273個模組悉數刪除——雖然有部份仍可在GitHub上找到。

重要的11行

在刪除模組之前,Koçulu未有警告其他使用者——特別是那些用上其模組的開發人員。在那273個模組當中,有一個稱為left-pad,只有11行程式碼︰

module.exports = leftpad;
function leftpad (str, len, ch) {
 str = String(str);
 var i = -1;
 if (!ch && ch !== 0) ch = ' ';
 len = len - str.length;
 while (++i   str = ch + str;
 }
 return str;
}

這個模組的工作非常簡單︰把一個字串的開頭補上字符,使其長度符合要求。假如程式員希望所有字串都是5個字元,不夠長的話都用0補上,使用left-pad就能把「369」變成「00369」。

如此簡單的left-pad很受歡迎——根據npm統計數據,在過去一個月有超過200萬次下載。很多開發人員也許未曾聽過left-pad,但在不經意的情況下用到這個模組——可能是他們使用的模組用到left-pad,可能是他們使用的模組所使用的模組……如此類推。

一子錯,滿盤皆落索

當left-pad在3月23日上午5時30分(香港、台灣時間)於npm模組庫上消失後,npm技術團隊觀察到每分鐘有數以百計的故障訊息。其中一個受影響的大型軟件包是JavaScript編譯器Babel︰Babel用上一個稱為“line-numbers”的模組,而line-numbers使用到left-pad。Facebook、Netflix、Reddit及Spotify等都使用Babel來優化其程式碼,因此也受到left-pad的消失所影響。

不足10分鐘內,程式員Cameron Westland嘗試解決問題,他發佈了功能相同的模組,並命名為“left-pad”——因為Koçulu已刪除他的模組,Westland可使用相同名字,而且Koçulu原本的程式碼以開源方式發佈,任何人均可自由使用。


猜你喜歡


一圖看懂微電腦瓦斯表:三大安全遮斷功能,守護居家安全「不漏氣」

一圖看懂微電腦瓦斯表:三大安全遮斷功能,守護居家安全「不漏氣」

我們想讓你知道的是

相較於傳統機械式瓦斯表,微電腦瓦斯表可以主動偵測異常情況,在漏氣、超時使用、五級以上地震發生時,自動遮斷瓦斯,以防瓦斯外漏所造成的氣爆、火災等危害,強化居家安全的守護。

你收過瓦斯公司寄來說明可換裝微電腦瓦斯表的通知單嗎?自從2011年天然氣事業法通過之後,政府便開始推廣微電腦瓦斯表,屆齡換裝微電腦瓦斯表完全免費,每個月也只要多40元的基本費,就可以享受微電腦瓦斯表所帶來的安全保障。和傳統瓦斯表相比,微電腦瓦斯表增加了精密微電腦晶片、感震器、壓力開關、緊急遮斷閥等零組件,在偵測到漏氣、超時使用、大地震時,便會進行自動遮斷功能。這些功能對你我的居家安全有什麼保障?一起來搞懂吧!

微電腦瓦斯表_第一篇_完稿

三大安全遮斷-漏氣遮斷

瓦斯管線會因為風吹雨淋日曬、被老鼠嚙咬等原因,而慢慢老化破裂;再加上台灣地震頻繁,也是導致瓦斯管線鬆脫漏氣的原因之一。一般來說,我們可以透過發現家中瓦斯的使用量異常增加,或者是聞到瓦斯特有的臭味,來注意到瓦斯有漏氣的情況。可是,現代家庭的瓦斯管線往往鋪設在室外,又或者大量漏氣的時候沒人在家、或正在其他房間休息,可能不會發現這個危險警訊。

微電腦瓦斯表可以偵測到瓦斯漏氣的問題,並且自動進行「漏氣遮斷」,在第一時間阻止易燃的瓦斯洩漏,以免在不知情的狀況下浪費瓦斯,甚至造成嚴重災禍,全家人每天都能安心生活。

三大安全遮斷-超時遮斷

想必很多人都有急著出門,然後突然想不起自己到底有沒有把爐火關掉的經驗吧?這種不踏實的心情,在忙得抽不開身的時候,特別讓人覺得難受。大家可能也聽說過,家中長輩開了瓦斯爐燒水泡茶,結果朋友打電話來聊天,講著講著就忘記瓦斯爐的火還開著,如果爐火一直燒下去,可能真的會導致一發不可收拾的憾事。

微電腦瓦斯表可以偵測瓦斯的使用量與時間的關係,開大火的話,用氣的時間會縮短;開小火的時候,時間就會相對拉長。這個功能可以在家人使用瓦斯,但忘了關火時,自動判斷是不是應該要啟動「超時遮斷」的功能。

三大安全遮斷-地震遮斷

發生五級以上的地震時,如果正好在使用瓦斯,微電腦瓦斯表就會馬上停止供氣,這就是「地震遮斷」功能。說到地震,其實和微電腦瓦斯表的發明及推廣有著非常密切的連結。日本早在1987年就開始推廣使用微電腦瓦斯表,因為有這項設備,所以不管是1995年的阪神大地震,或者2011年的311大地震,都因為「地震遮斷」發揮作用,才不至於因為瓦斯而引起更多事故。

同樣位於地震帶上的台灣,我們向來十分在乎房屋的結構和材料是否防震,如果能更進一步裝設微電腦瓦斯表,在地震發生時發揮作用,自動遮斷瓦斯,就能防止因為設備損壞所造成的瓦斯外洩以及氣爆、火災等事故。

微電腦瓦斯表在日本目前已有將近100%之普及率。在台灣,目前的年度裝置率則從2014年的8.43%,提升至2022年第2季的48%。所謂多一份用心,就是多一份保障。在我們小心用氣、用火的同時,再加上微電腦瓦斯表的主動防護,家人的生命安全和財產保障,就更加完整了!

經濟部能源局廣告


猜你喜歡