數位自主:為什麼開發者與政府正從 GitHub 遷移至 Forgejo
數位自主:為什麼開發者與政府正從 GitHub 遷移至 Forgejo
將原始碼從集中式供應商遷移到自託管實例的決定,鮮少僅僅是因為單次停機。雖然停機令人沮喪,但這通常是更深層結構性轉變的徵兆。對於許多開發者,甚至是國家政府而言,討論的焦點已從「服務是否可靠?」轉向了「究竟是誰擁有存放我智慧財產權的平台?」
這種緊張關係最近在荷蘭政府推出 code.overheid.nl 時達到了頂峰,這是一個自託管的 Forgejo 實例,旨在確保公共原始碼託管在國家實際控制的基礎設施上。此舉反映了數位自主日益增長的趨勢,正從「平台即服務」模式轉向主權基礎設施。
The Erosion of Independence
獨立性的侵蝕
多年來,留在 GitHub 的主流論點是 Microsoft 維持著一定的距離感。然而,這種動態在 2025 年 8 月發生了根本性的變化,當時 Thomas Dohmke 卸任了 CEO 並未被接替。相反地,GitHub 被併入 Microsoft 的 CoreAI 部門。
這次重組標誌著優先事項的轉移:GitHub 不再僅僅是一個託管代碼的場所;它現在是 Copilot 和 AI 技術棧的端到端主要引擎。這種結構性變化對用戶而言具有實質性的後果:
The AI Training Default
AI 訓練預設值
在 2026 年 4 月,GitHub 切換了 Copilot Free、Pro 和 Pro+ 用戶的用戶互動數據使用權,將其從「選擇加入」變為「選擇退出」進行 AI 訓練。至關重要的是,並沒有提供儲存庫層級的退出選項。這意味著,如果使用 Copilot 的貢獻者與該儲存庫進行互動,維護者將無法阻止其代碼庫成為訓練材料。
Reliability as a Side Effect of AI
AI 的副作用:可靠性下降
最近的重大停機事件——包括 2026 年 4 月數百個儲存庫中提交(commits)的靜默回滾——被 GitHub 的 CTO 歸因於「代理型 AI 工作流增長」所產生的巨大負載。當容量需求需要擴大 30 倍以跟上 AI 的步伐時,傳統 git 操作的穩定性就變成了 AI 生態系統增長的可選關注點。
The Jurisdictional Trap
管轄權陷阱
除了企業政策之外,還存在法律現實。由於 GitHub 和 Microsoft 是總部位於美國的企業,它們受 FISA Section 702 和 CLOUD Act 的約束。這些法律允許美國情報與執法部門強制要求提供數據,無論該數據在物理上存儲於何處。
雖然 GitHub 為 Enterprise Cloud 引入了歐盟數據駐留功能,但這只是對管轄權問題的地理性解決方案。正如 Microsoft 的律師在 2025 年向法國參議院宣誓作證時所承認的,存儲在歐洲數據中心的數據無法保證免受美國政府的靜默存取。對於需要真正數位主權的實體而言,「託管在法蘭克福」並非「由本地擁有並營運」的替代方案。
Why Forgejo?
為什麼選擇 Forgejo?
在尋求替代方案時,選擇通常會在 GitLab 或 Forgejo 之間進行。雖然 GitLab 是強大的行業標準,但它遵循「開源核心」模式,許多關鍵的生產環境功能被鎖在專有的企業級方案中。
Forgejo 作為 Gitea 的一個分支(fork),提供了不同的路徑:
- True Open Source: 重新授權為 GPLv3+ 以抵制商業化收購。
- Non-Profit Governance: 由 Codeberg e.V. 管理,這是一家德國的 Verein,擁有成員選舉的董事會和公開預算。
- Lightweight Footprint: 能夠在適度的硬體(如 Intel NUC)上運行,同時提供必要的 forge 體驗。
The Hard Part: Securing the CI/CD Runner
實務上的難點:確保 CI/CD Runner 的安全性
自託管一個 git forge 是相對簡單的;確保在 CI/CD runner 中執行不受信任的代碼才是真正的挑戰所在。一個具備防禦性的 runner 架構需要「具有深度的周邊防禦」以防止供應鏈攻擊損害主機系統。
A Multi-Layered Defense Strategy
多層次防禦策略
為了降低執行生命週期腳本(例如 npm install)的風險,強化的 runner 設定應採用幾層重疊的防禦:
- KVM Isolation: 在專用的虛擬機(Virtual Machine)中運行 runner,而不是使用容器,以確保主機內核(kernel)- kernel 不會被共享。
- gVisor Runtime: 在 VM 內使用
runsc來攔截用戶空間的系統調用,在任務(job)與內核之間增加第二層隔離層。 - Destructive Rebuilds: 每週自動銷毀並從全新的映像檔(image)重新創建 VM,以確保沒有持久狀態或惡意軟體存續。
- Egress Filtering: 使用
nftables來阻擋 runner 存取當地的網路(LAN),防止受損的任務(job)掃描內部基礎設施。 - Scope-Bound Tokens: 使用受限的 PAT 範圍,以確保洩露的 token 能夠被用於行政管理動作。
Trade-offs and Realities
權衡與現實
遷移至非 GitHub 的選擇並非沒有代價。主要的損失是「發現性」與「社交圖譜」。GitHub 是開源界的「城市廣場」,遷移至私有實例會降低專案的專屬性可見度。
其中一種緩解策略是將 GitHub 作為鏡像(mirror)或存檔(archive)來使用。透過在 GitHub 上存檔公開發佈的儲存庫,並將 README 指向新的正式地址(例如 code.jorijn.com),開發者可以保留發現路徑,同時重新獲得對其主要開發環境的所有權。
Conclusion
結論
向 Forgejo 與自託管的轉向,不僅僅是對停機事件的反應,而是邁向自主權的戰略性舉措。隨著國家政府與個別開發者都意識到,企業控制的平台優先考慮其自家的 AI 路徑圖,而非用戶的主權權利,回歸去中心化、由所有者營運的基礎設施,已成為一種必然而非僅僅是小眾的偏好。