他一怒之下刪除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 < 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原本的程式碼以開源方式發佈,任何人均可自由使用。

即使如此問題仍未解決。雖然npm的系統容許人們重新使用已被棄用的名字,但規定其版本號碼不能相同。Koçulu的left-pad版本是0.0.3,Westland的版本是1.0.0——而line-numbers指明要使用0.0.3版的left-pad。

npm跟Westland商討後,決定採取史無前例的舉動,以備份方式取消Koçulu的「取消發佈」指令。

在left-pad最初刪除後大約兩個半小時,npm解決了問題。Schleuter在官方博客中指出,Westland在10分鐘內重新發佈left-pad非常重要,而大約這個時間,使用npm的社群也取去其餘272個模組的名字——有些使用相同程式碼,有些發佈虛設模組——以防止惡意攻擊。Schleuter對他們表示謝意。

孰是孰非?

Koçulu相信開放源碼社群最終會提供真正自由的空間,來代替現時的npm。他在文章中對於刪除left-pad造成的破壞致歉,並提供解決辦法,及表示歡迎其他人管理其模組。

有人在Koçulu的文章處留言,認為npm的做法並無不妥,畢竟私人公司需要遵守法律,以免影響整個存庫運作。也有留言者表示「當我開始編寫kik時,不知道有一家同名公司」的解釋站不住腳,正如司機不能以「我不知道車速限制」為由來超速。

另一方面,有開發人員認同Koçulu的決定。例如有人留言指雖然Koçulu破壞了他的模組,但他欣賞Koçulu堅持自己的價值。亦有留言對Koçulu說「你做了正確的事」,即使帶來的麻煩使他需要在「上海醒來之前」把問題解決。

避免悲劇重演

Kik Messenger的負責人Mike Roberts事後公開雙方的電郵,表示他們的用詞並非完美,但用意僅是禮貌地提出要求,希望可以在npm中使用“Kik”這個名字,對於其言詞造成其他印象致歉。針對是次意外,npm亦提出數個方案,以免同類事件重演。

有分析認為問題源於開發人員太依賴使用模組,在一層又一層的程式碼下,常用的模組會被隱沒。開發人員應該減少依賴,才能減少出錯機會,也降低被攻擊的風險。

也人慨嘆竟然存在只有11行程式碼的模組,反問「我們是否忘記了如何寫程式」。更有人拿此事開了個玩笑,製作了leftpad.io這個網站,宣稱「為了避免這個可怕的悲劇在我們的生命中重演,left-pad.io提供所有"left-pad"的功能」。


猜你喜歡


年薪破百萬在台北買不起房?調整資產配置,買房不難!

年薪破百萬在台北買不起房?調整資產配置,買房不難!
Photo Credit: VI College價值投資學院

我們想讓你知道的是

想在買房時擁有好的貸款條件,一定要趁有穩定好工作的時候申貸較佳。面對通膨升息時代的來臨,大家務必聰明善用資產配置成為人生最佳助力,而不是讓買房成為拖垮自己財務的稻草。

本文作者:VI College價值投資學院 台灣區總經理 黃士豪

買房是很多人畢生夢想,許多上班族開始投資的動機,也是希望透過能扣除每月支出後、盡可能放大剩餘的存款,更快買到人生第一間房。但是看著房價不斷飛漲,媒體不斷報導百萬年薪工程師、醫師都無法在台北置產,讓很多人感到恐慌、甚至放棄買房念頭。

32歲的飛輪教練阿謙很努力賺錢,汲汲營營忙於工作,希望能買一兩千萬的房子,好安身立命。為了達成目標他相當努力培養技能,除了具有飛輪跟肌力教練資格外,平時也提供學員筋膜按摩服務。

因為服務口碑很好,目前團體加個人每月穩定都有100小時課程,即使前段時間疫情不穩定也只有少掉一成教練收入,月收入約為6至10萬。

對於未來目標,阿謙除了希望可以透過被動收入增加、改變目前靠時間及體力換取金錢的現況,也希望能夠買入兩間2000萬的房子,一間自住、一間出租賺取被動收入。

既有資產配置上,由於懷抱著買房夢,因此阿謙保留110萬活存現金,另外有一張台幣56萬的美元保單,投入美股58萬有不錯獲利。

買房對平均月收入8萬的阿謙來說是否為不可能任務?我認為,阿謙應該先拋掉想法便是:別為了賺頭期款而投資。

五月第一篇
photo credit:VI College價值投資學院
VI College價值投資學院 台灣區總經理 黃士豪建議阿謙讓投資為自己置產。

給阿謙的投資建議一:別為買房投資,要讓投資為你置產。

遇到像阿謙這樣懷抱著買房夢的學員,我都會先要他們反覆問自己:為什麼要買房?

如果從資產及投資角度來看,房子算是防守型資產,如果將房屋價值放進整個資產配置後,花在買房的錢就不能超過總資產50%,否則就會讓自己變成房奴,更會因為多數資產都卡在房子,而因為房價變化影響心態。

假設買房能為自己帶來安全感,那這想法相當好、也值得去達成這個人生目標,這時就可以思考如何利用投資來幫自己買房。

以阿謙希望買到2000萬的房這個目標來看,房價2000萬首購需支出頭期款為400萬,這時除了要因為固定支出增加房貸這一項,因此要提高保障型資產外,也要確保進攻型投資組合有400萬,並透過選擇權等投資方式妥善配置讓自己能利用每年10-20%投資報酬來支付房貸本金及利息。

給阿謙的投資建議二:想買房保障人生,別抱持保障心態投資

在與阿謙諮詢對談過程中,我也看到許多保守型投資人最容易落入的「陷阱」:認為是保障,其實處於風險中。

將錢投入投資市場,因為跌價造成損失,這是一種可視但未知的風險。但是如果將錢都投入到定存、活存現金中,每年因為通貨膨脹造成損失,加上失去將錢轉進保守型甚至進攻型投資組合中能產生的獲利,這是屬於容易忽略但已知的風險。

保障型資產是為了當有突發風險產生時,讓我們不用擔心生計並可渡過半年時間進行避險。就阿謙每月支出約5萬來說,保留30萬是足夠的。特別是在進攻型投資組合都握有許多高價值公司並有不錯獲利時,應該將額外80萬緊急帳戶資金及活存轉進進攻型投資組合,才能更快達成買房目標。

而究竟是否該買第二間房出租賺取被動收入,我也請阿謙好好想想:買第二間房的目的是什麼?

如果買房是為了投資,那麼比起將一大筆錢投入保守型資產,以阿謙還年輕並且收入相對穩定情況下,該如何積極進攻讓自己退休時可以擁有千萬甚至億萬資產,才是最適當思考方式。

這些建議也適合你:購買投資型保單前先停看聽

在阿謙現有投資組合當中,我也看到在許多學員資產配置中都會出現的「投資型保單」。這類同時具備投資及保險功能的保單屬於保守型資產,因此建議在購買時要注意投入金額加上其他保守型投資不要超過總資產20%外,更要先釐清以下關鍵。

首先便是保單報酬形式為何?是在一定年限後固定會發放股息給保戶,還是保險公司會每年將這些錢投入特定投資標的做為報酬?這些資產增長能否看得見,甚至是否穩定,必須先了解。

其次則是這些保單綁約年限,這會影響可動用資金及運用彈性。當然,既然是保險更要確認又是綁定哪方面保險,在自己真正需要時是否能夠降低醫療或意外造成風險。懂得從資產角度思考保單,可以讓你在投資道路上少走相當多冤枉路。

附帶一提,想在買房時擁有好的貸款條件,一定要趁有穩定好工作的時候申貸較佳。面對通膨升息時代的來臨,大家務必聰明善用資產配置成為人生最佳助力,而不是讓買房成為拖垮自己財務的稻草。

image

本文章內容由「VI College價值投資學院」提供,經關鍵評論網媒體集團廣編企劃編審。


猜你喜歡