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

我們想讓你知道的是
刪除短短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 < len) { 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原本的程式碼以開源方式發佈,任何人均可自由使用。
Tags:
開發者盛會「AWS Dev Day Taiwan 2023」將於10/20在南港展覽館盛大登場!即刻報名掌握最新技術趨勢

我們想讓你知道的是
一年一度的開發者盛會「AWS Dev Day Taiwan 2023」即將在今年10月20日於南港展覽館盛大舉辦,邀請各方開發者及雲端技術工作者一起線下相見,掌握技術趨勢!
近年來,隨著技術不斷進步,生成式AI技術已邁入產業應用階段,雲端服務、運算晶片等相關產業也紛紛迎來噴發式的成長。全球市場研究機構TrendForce在今年5月的調查報告中指出,AI帶動伺服器與晶片的硬體需求成長,下半年AI運算風潮將持續滲透至雲端、電商、製造等專業領域;也就是說,跨領域的AI技術開發與雲端應用,亦是未來各大產業的主流發展趨勢。
面對不斷創新、變動的AI技術,開發者該如何掌握趨勢呢?別擔心,AWS即將於10月20日於南港展覽館二館舉辦的「AWS Dev Day Taiwan 2023」,就是開發者及雲端技術工作者們了解技術趨勢的絕佳機會。
AWS Dev Day七大焦點主題,多技能高效開發者的養成之路
今年度開發者大會聚焦各大產業的熱門議題,期待帶領與會者深入了解AWS的全新服務如何幫助開發者提升生產力、克服不同應用場景的開發挑戰。本次活動共包含超過15場以上的議程,內容依技術性質分為「AI雲端技術與產業策略」、「開發者體驗最佳化」與「驅動雲端效能革新」三大類別,並以多軌分場的方式針對以下七大主題深入探討,每位開發者都可以選擇感興趣的領域深入了解:
- 生成式 AI
- 現代化應用開發
- 開發者專案管理
- 開發維運一體化
- 雲端安全與韌性
- 雲端設計原則及架構最佳實務
- 資料庫進階應用

為了保證議程內容扎實、拳拳到肉,AWS邀請各方產業大咖擔任議程講師,包括AWS內部的資深技術講師、企業資深開發者、產業高級主管等重量級人物,深度解說熱騰騰的產業趨勢走向、AWS的服務精華與資深開發者的第一手實戰經驗,邀請與會者站在產業典範轉移的前緣,成為新一代的多技能高效開發者。
AWS Dev Day帶您掌握現代開發趨勢!參與就送多項精美好禮
一年一度專屬於開發者的年度盛會怎能錯過?不只能在現場與眾多技術同好互動交流,還能接觸知名企業的第一手轉型及開發經驗,甚至現場還配有 AWS 的專業技術團隊,提供與會者最即時的服務諮詢。相信不論是尋求突破、創新的執行長、技術長、技術主管,還是期待自我賦能、增廣見聞的解決方案架構師、工程師等開發者,都能在各式議程中找到經驗參考或解決方案。除此之外,只要報名並出席活動,還有機會帶走防風傘、毛氈收納包等活動好禮!有得學、有得拿,不要猶豫了,立即點此報名吧!

AWS Dev Day Taiwan 2023 活動詳細資訊
活動時間: 2023年10月20日(五) 10:00-16:00
活動地點:南港展覽館二館
報名方式:免費參與,立即點此報名
注意事項:報名成功者將於活動前三日收到行前通知信。