開源庫 faker.js 刪除事件

一、概要

  • faker.js 是一個用於 JavaScript/Node 環境中,生成假資料(例如姓名、地址、頭像、電子郵件、公司名稱等)用於開發、測試的庫。
  • 該專案由 Marak Squires(通常稱 “Marak”)維護。
  • 在 2022 年 1 月初,Marak 對該專案的 GitHub 倉庫進行突發刪除/破壞性操作,導致眾多依賴該庫的項目出現構建/部署故障。該事件引起整個開源社群對「依賴鏈」「軟體供應鏈穩定性」「開源作者維護動機」等問題的大量討論。

二、時間線與關鍵事件

時間事件備註
約 2012 – 2020faker.js 積累極高下載量與廣泛使用。在許多開發/測試流程中被採用。
2020 年 4 月25日Marak 在推特發佈其公寓火災、個人損失的訊息。引出其個人處境與後續心態變化。
2020 年(10月左右)Marak 在 faker.js 倉庫發佈 commit,暗示無法「免費為大公司」繼續維護。顯示其對開源維護者資源/補償的困境。 (JavaScript in Plain English)
2021 年 4 月25日Marak 發表部落格〈Open-source 變現是有問題的〉。他談及自己嘗試「Faker Cloud」商業化、但未達可持續模式。 (JavaScript in Plain English)
2022 年 1 月 4 日(左右)Marak 對 faker.js 倉庫強制 force-push,刪除大量程式碼、留下只一句「What really happened with Aaron Swartz?」於 README。倉庫幾乎清空,導致大量依賴中斷。 (TheGingerViking)
2022 年 1 月 5日(左右)同時 Marak 於另一個其維護庫 colors.js 推出「惡意」版本(如無窮迴圈列印 “LIBERTY”)破壞依賴生態。此事件與 faker.js 同時造成供應鏈風險。 (revenera.com)
2022 年 1 月 12 日開源社群迅速響應:新維護團隊成立,於 GitHub 組織 @faker-js/faker 接手。倉庫公告指出「由社群維護」並提供透明資金/治理路線。 (fakerjs.dev)

三、主要原因與背景

1. 維護者的資源壓力與補償困境

  • Marak 曾指出:他長年維護該庫、被大型科技公司(如 FAANG)無償使用,但自己幾乎沒有收入。 (TheGingerViking)
  • 他嘗試推出 Faker Cloud(線上假資料產生服務)以期變現,但遭遇挑戰。 (JavaScript in Plain English)
  • 在 2020 – 2021 年間,他公開質疑「為何我免費工作,而你們用我的成果賺錢卻不付我」。 (TheGingerViking)

2. 版權、授權與控制權問題

  • 雖然 faker.js 採用 MIT 許可證(允許商業使用),但這也使得 Marak 覺得自己對商用大公司沒有談判能力。 (JavaScript in Plain English)
  • 當他嘗試要求收費、或轉讓專案時,並未得到明確回應,導致其情緒變化。 (TheGingerViking)

3. 開源依賴鏈脆弱性暴露

  • 此事件如同 2015 年的 left‑pad 事件,暴露出大量應用程式高度依賴少數開源模組、維護者變動即可觸發大規模 “斷鏈” 效應。 (TheGingerViking)
  • 多家安全分析機構將該事件列為 “供應鏈攻擊/破壞” 案例。 (sysdig.com)

四、影響與後續發展

影響:

  • 大量 JavaScript/Node 專案因為 faker.js 的突變/刪除而構建失敗。 (Stack Overflow)
  • 開源社群重新檢視「依賴別人模組但未自備備份/快照」的風險。 (TheGingerViking)
  • 對開源維護者的補償方式、持續維護機制、社群治理機制引起更廣泛討論。

後續發展:

  • 新維護團隊在 @faker-js/faker 組織下迅速恢復專案運作,發布舊版所有功能、遷移至 TypeScript 、建立官方文件 fakerjs.dev。 (fakerjs.dev)
  • 舊的 資金 (Open Collective) 被標註為 “legacy”,並將新維護團隊的資金與舊贊助分離,提升透明度。 (fakerjs.dev)
  • 安全/風險社群將 faker.js/colors.js 事件納為“供應鏈脆弱性”教材,並強調需對 npm / GitHub 等平台模組做版本鎖定與快照。 (sysdig.com)

五、爭議點與討論焦點

  • 維護者的權利 vs 社群責任:開源作者理論上可對其代碼做任何操作,但當該代碼被廣泛依賴時,其單方面決策,是否應承擔更大責任? (TheGingerViking)
  • 商用大公司使用開源但未補償:Marak 提出的質疑是:為什麼大型公司使用其成果卻很少回饋?這觸發對「開源經濟模型」的檢視。 (JavaScript in Plain English)
  • 版本鎖定、備份與替代方案的重要性:許多受影響的專案在新版 faker.js 出問題後才發現自身依賴鏈沒有做好防禦。 (Stack Overflow)
  • 社群維護 vs 個人維護的可持續性:該事件凸顯長期由個人單打獨鬥維護熱門庫所面臨的燃盡風險。

六、教訓與建議

  1. 對重要依賴做快照/鎖版本:不要一味使用最新版,自動升級的風險不容忽視。
  2. 評估依賴的維護者/治理機制:熱門模組是否由社群團隊維護、是否有活躍治理與資金支持。
  3. 為開源貢獻者提供補償途徑:公司應該重視其使用的開源軟體背後的維護者,考慮贊助、捐款、商業授權等模式。
  4. 當維護者退出或行為異常時,社群應迅速建立替代路徑:例如 faker.js 的 fork / 新維護團隊就是正面範例。
  5. 對供應鏈攻擊/破壞風險保持警惕:即便看似可靠的依賴也可能被惡意變動/刪除。

七、補充資訊 & 參考連結

  • 官方公告:「An update from the Faker team」 – fakerjs.dev (2022-01-14) (fakerjs.dev)
  • StackOverflow 問答:What happened with faker.js? (Stack Overflow)
  • TheGingerViking 分析文章:「The right to delete … faker.js」 (TheGingerViking)
  • Revenera Blog:The story behind colors.js and faker.js (revenera.com)

Comments

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *