想像一下:你正在建造世界上最先進的摩天大樓。你有最先進的材料、傑出的建築師和無限的資金。但問題是——這整棟價值數十億美元的建築都建立在一個單一的木塊上,這個木塊是由住在內布拉斯加州的某個你從未見過的人手工雕刻的,他在釣魚旅行之間把維護它當作業餘愛好。
歡迎來到現代軟件開發,這不是假設的噩夢——這就是現實。
讓開發者冒汗的漫畫

Randall Munroe的xkcd #2347像一記精準的打擊一樣擊中了程式設計世界。這幅漫畫展示了一座標有「所有現代數碼基礎設施」的危險高塔,不可思議地平衡在一個小小的區塊上:「一個內布拉斯加州的隨機人士自2003年以來一直無償維護的專案。」
如果你不是程式設計師,你可能會認為這是誇大其詞。如果你是程式設計師,你可能正在檢查你的LinkedIn個人資料,確保你沒有不小心把內布拉斯加州列為你的位置。
一切的荒謬壯觀
這裡既搞笑又可怕的是:這完全準確。
互聯網——這個人類工程的奇蹟,讓你可以在與祖母視訊通話的同時訂購壽司並爭論電影情節——依賴於數千個微小的軟件函式庫。其中許多由以下這些人維護:
- 有著與他們的世界關鍵程式碼完全無關的日常工作
- 開始這個專案是為了解決他們自己的特定問題
- 從未打算讓數百萬個應用程式依賴他們的工作
- 為維持文明運轉大約收到零元報酬
這就像發現金門大橋的主支撐纜繩實際上是某人表弟做的非常好的友誼手鍊,而且不知何故它已經正常運作了幾十年。
當高塔搖晃時
這幅漫畫不僅有趣——它具有預言性。我們已經在現實生活中看到了這個確切的場景:
2016年的Left-Pad災難:一位開發者從網絡上移除了一個11行的JavaScript函式庫。突然間,主要網站無法建構它們的程式碼。十一行。**十一行。**這比大多數購物清單還短,而它幾乎讓互聯網癱瘓了一天。
偉大的OpenSSL恐慌:這個保護大部分互聯網通訊的函式庫,多年來由一小群志願者在業餘時間維護。正如一個標題所說:「互聯網正被兩個叫Steve的人保護著。」
Core-js編年史:一個被75%的前100名網站使用的函式庫,由一個辭職全職工作在它上面的人維護,他付不起生活費,陷入法律麻煩,然後進了監獄。與此同時,大部分互聯網繼續使用他的程式碼,卻不知道他的名字。
開源的美麗瘋狂
讓這整個情況既荒謬又奇怪地鼓舞人心的是,它不知何故運作著。這個無政府主義的數碼共產主義系統——資本主義和政府資助都沒有驅動開發——讓我們的技術世界持續運轉。
想想看:沒有人付錢給這些人。沒有政府要求他們的工作。沒有公司擁有這些關鍵部分的大多數。然而不知何故,通過純粹的自願努力和只能被描述為數碼利他主義的東西,我們擁有了這個令人難以置信的共享基礎設施。
這就像如果世界上所有的道路都是由那些只是想「你知道嗎?我喜歡道路。我會在空閒時間修理這條路」的人建造和維護的。而且不知何故這產生了一個完美運作的全球交通系統。
內布拉斯加因素
你可能會問,為什麼是內布拉斯加?這是「偏遠地區」的完美比喻——無意冒犯內布拉斯加人,他們可能有比維護關鍵互聯網基礎設施更好的事情要做(但顯然還是在做)。
這幅漫畫的天才之處在於它捕捉了這些維護者的地理和社會匿名性。現在某個地方,某個人正在修復你銀行應用程式依賴的函式庫中的錯誤,而他們可能正在穿著睡衣看Netflix的時候這樣做。
情節轉折:情況正在惡化
這裡是喜劇變得稍微黑暗的地方。相依性問題實際上正變得更加複雜:
- 比以往更多的相依性:現代應用程式可能依賴數千個外部函式庫
- 更深的巢狀:函式庫依賴其他函式庫,這些函式庫又依賴其他函式庫
- 更快的變動:「內布拉斯加州的隨機人士」可能下個月會因為新工作而放棄這個專案
我們本質上是在用整個數碼世界玩疊疊樂,而且每年我們都在往一個越來越不穩定的塔上添加更多積木。
安全噩夢
最近的xz後門事件為這幅漫畫增添了一個可怕的新維度。一個惡意行為者花了三年時間與維護者建立信任,最終接管了這個專案並插入了一個可能危及全球系統的後門。我們避免災難的唯一原因是因為一個人注意到他們的SSH登入使用的CPU比平常稍微多一點。
一個人。稍微多一點的CPU。這就是正常星期五和「互聯網崩潰的那一天」之間的細微界線。
無名英雄
儘管情況危險,我們應該慶祝這些匿名維護者。他們不僅僅是讓燈亮著——他們使現代軟件開發成為可能。沒有他們,每個程式設計師都需要重新發明每個輪子,我們仍然會從頭開始寫計算器。
這些人:
- 在凌晨2點修復錯誤,因為世界另一端的某人提交了一個問題
- 寫出比大多數付費軟件更好的文件
- 以耐心和專業處理來自百萬美元公司的功能請求
- 這一切都是免費的,出於對好程式碼和功能系統的熱愛
隱藏在笑聲中的教訓
xkcd漫畫之所以有趣,是因為它揭示了一個令人不安的事實:我們複雜的技術世界建立在自願的人類善意基礎上。「內布拉斯加州的隨機人士」不是系統的弱點——他們是系統不知何故真正運作的證明。
當然,這很危險。是的,如果錯誤的人決定改玩陶藝而不是程式設計,一切都可能倒塌。但它能運作的事實本身就是人類合作和開源開發奇妙魔力的證明。
我們能做什麼?
如果這幅漫畫讓你對你應用程式的相依性感到緊張(它應該),這裡有一些想法:
- 了解你的相依性:了解你的軟件依賴什麼
- 支持維護者:許多人接受捐款或企業贊助
- 回饋:提交好的錯誤報告,撰寫文件,提交補丁
- 有備用計劃:對於真正關鍵的相依性,考慮替代方案
壯麗而可怕的未來
當我們在這個數碼善意的基礎上建立越來越複雜的系統時,內布拉斯加人變得既更重要又更匿名。我們比以往任何時候都更依賴他們,但我們大多數人甚至不知道他們的名字。
這是一個如果不是完全真實的話會完全荒謬的設定。現在某個地方,某個人正在維護讓你早上鬧鐘工作、咖啡店支付系統運行、串流服務提供恰好能幫你入睡的節目的程式碼。
而且他們可能是免費這樣做的,因為他們認為程式碼應該正常運作。
內布拉斯加州的隨機人士不是我們系統的錯誤——他們是一個功能。一個美麗的、危險的、絕對必要的功能,使我們的數碼世界成為可能。
所以下次你的應用程式完美運作時,也許向宇宙發送一點感謝,感謝所有讓這座偉大的數碼疊疊樂塔屹立不倒的匿名英雄。
只是盡量不要想太多當他們決定去度假時會發生什麼。
延伸閱讀:查看這幅漫畫的完整解釋以獲得現實世界的例子和更深入的技術背景。