Leaving GitHub for Forgejo
632 points • 5 days agoArticle Link

我把代码从 GitHub 迁到自托管的 Forgejo 实例,有好几个原因,但归根到底是一个问题:所有权。在截至 2026 年 4 月的一年里,GitHub 记录了 257 起事故,其中 48 起属重大事故;CTO 公开道歉,称容量需要扩大 30 倍才能应付 AI 带来的负载。但宕机只是表象,根本转折是在 2025 年 8 月:GitHub 不再有自己的 CEO,被并入微软的 CoreAI 部门,也就是在开发 Copilot 的团队。现在把代码推到 GitHub 等于推到了微软 AI 组织的一个单元,这从根本上改变了你与平台的关系。

2026 年 4 月训练数据默认设置的变更把这件事具体化。 GitHub 修改隐私声明,Copilot Free 、 Pro 和 Pro+ 用户的交互数据默认用于 AI 训练,并且没有仓库级别的退出选项。作为维护者,我不能要求 GitHub 不在我的代码库交互上进行训练。退出是按用户账户设置的,这意味着任何使用 Copilot 的人接触到我的代码时,代码都有可能被用作训练素材,不论我如何授权。私有仓库的豁免也没想象中完全:当 Copilot 激活时生成的"代码片段和交互上下文"仍会被收集。只有 Copilot Business 和 Enterprise 客户例外,且是因为他们受单独的数据保护协议约束。

还有管辖权问题。 GitHub 和 Microsoft 都是美国公司,这意味着它们持有的任何数据都可能受到 FISA 第 702 条和 CLOUD Act 的影响,不管数据物理存放在哪儿。 GitHub 于 2024 年 10 月推出的欧盟数据驻留选项解决了数据位置问题,但没能解决管辖权,因为 CLOUD Act 是随企业控制权而非地理位置生效。微软一位律师在法国参议院听证会上宣誓表示,他无法保证存放在欧洲数据中心的欧盟数据不会被美国政府静默访问。荷兰政府也得出相同结论,并于 2026 年 4 月软启动了 code.overheid.nl——一个自托管的 Forgejo 实例,正是因为需要在一个自己真正拥有的平台上发布源代码。

我选择 Forgejo 而不是 GitLab,主要出于两点考虑。第一是许可:GitLab 采用 open core 模式,许多生产功能被锁在企业版后面;而 Forgejo 在 2024 年 8 月改用 GPLv3+ 许可,明确要保持 copyleft,抵抗商业收编。第二是治理:Forgejo 隶属于 Codeberg e.V.,一家在柏林注册的非营利组织,有成员选举的董事会和公开预算。 2022 年 12 月从 Gitea 分叉,正是因为 Gitea Ltd 在未经社区同意的情况下控制了商标,项目结构也反映了这次教训。 Forgejo v15.0 LTS 于 2026 年 4 月 16 日发布,长期支持到 2027 年 7 月。

我的部署跑在一台 64 GB 内存的 Intel NUC 上。 Forgejo v15 LTS 、 Postgres 17 和 Traefik 在 Docker 中运行;Actions 运行器放在由 Incus 管理的 KVM 虚拟机里。运行器才是真正需要下功夫的部分,因为它要执行不受信任的代码,例如对我的仓库做 npm 和 pip 安装,并按 Renovate 的日程每天运行。我用了五层重叠隔离:用 KVM 虚拟机避免共享主机内核;在该虚拟机内用 gVisor 作为 Docker 运行时,在用户空间拦截系统调用;每周做一次破坏性重建,从干净基础镜像销毁并重建整个虚拟机;用 nftables 做出口过滤,阻断对局域网的访问;以及使用范围绑定的运行器令牌,确保令牌只能在注册范围内使用。这些技术本身并不新,但把它们整合到一台 NUC 的单人家庭实验室里,才使整体方案可行。

这其中有真实的权衡。可发现性和社交网络是最大的代价,因为贡献者习惯在 GitHub 上找到我。我的计划是在迁移完成后将每个公共 GitHub 仓库归档,并在 README 中指向 code.jorijn.com,以保持发现路径。 Forgejo Actions 倾向于与 GitHub Actions 保持相似体验,而不是完全兼容,所以有些功能会静默失效,比如工作流级别的权限受限,有些 action 需要固定版本或自行分叉。 Forgejo 没有 Dependabot,因此我在同一自托管运行器上运行 Renovate 。也没有 7×24 的厂商支持,只有一个 issue 跟踪器和一个聊天室——对单人运维足够,但对更大团队可能难以扩展。

这种迁移并不适合所有人。如果你的团队不想运行基础设施、如果你高度依赖 GitHub 特有功能如 Codespaces 或 Advanced Security 、或者你的贡献者群体完全依赖 GitHub 的社交网络,那么这些摩擦可能不值得。荷兰政府的方法是个好范例:code.overheid.nl 是软启动平台,而非全面替代。我的部署也是同样的思路:Forgejo 是我的主平台,GitHub 是镜像,我也不排除以后再调整。关键是:在一台 NUC 上实现一个有防护能力的自托管 Forgejo 部署是可行的,但运行器需要真正用心对待;如果你不准备处理 KVM 隔离、 gVisor 、 nftables 和每周重建,最好把 CI 任务放到托管运行器上,或者继续留在 GitHub 。

361 comments • Comments Link

Git 的设计初衷是去中心化的,但凭借出色的工具、可扩展性和维护能力,GitHub 已成为事实上的中心枢纽。很多人认为,尽管技术上可以离开 GitHub,但为了项目的可发现性和长期存续,在 GitHub 上保留镜像仍然非常重要,因为那些托管在小众或自托管平台上的项目常常在镜像消失后也逐渐沉寂。

促使人们想要离开 GitHub 的一个重要原因是,GitHub 使用公开仓库来训练像 Copilot 这样的商业 AI 模型,却没有征得开发者的明确同意。这让许多开发者感到被背叛,因为开源社区原有的契约——例如署名和许可证合规——被利益化的行为所践踏。

围绕 AI 训练的法律环境正在向大型科技公司倾斜,法院通常裁定使用公开数据进行训练是允许的。这使得一些人觉得阻止 AI 抓取数据的斗争已近失败,从而考虑通过限制访问或制定新许可证来应对,但这些方案往往被认为不切实际或效果有限。

除了代码托管外,GitHub 的真实价值还在于其集成的项目管理功能,比如 issue 跟踪、 CI/CD 和访问控制。迁移仓库本身并不难,但要把项目的整个表面搬走——包括问题记录和 CI 配置——却是离开 GitHub 的主要障碍。

Forgejo 被视为一个真正可定制、由社区治理的替代方案。与 GitHub 不同,Forgejo 的架构从一开始就为定制设计,允许用户以较少的工作实现私有仓库的"展示"模式等功能,从而提供实际可用的自由,而不仅仅是理论上的源代码访问。

GitHub 的"社交组件",如星标、关注者和协作工具,被一些人视为双刃剑。它们确实有助于项目可发现性,但也催生了虚荣指标,并在用户和贡献者中滋生出某种权利感,这可能侵蚀 FOSS 的核心原则。

虽然去中心化经常被讨论,但现实是多数系统随时间推移会趋向中心化。真正的难题不仅在于离开 GitHub,而在于避免简单地建立另一个新的中心;例如 Forgejo 的兴起本身也可能形成一种新的依赖。

对于不想自托管的人来说,找到简单、低成本的 git 托管服务很困难。多数替代方案要么定价偏向企业级,要么捆绑许多不必要的功能(如 CI/CD 和 AI 工具),市场上缺少类似 GitHub 早期每月 7 美元那样基础且经济实惠的选择。

推动离开 GitHub 的动力来自多重因素的叠加:频繁的服务中断、反 AI 情绪、以及出于政治不稳定和供应链风险对美国科技巨头的普遍不信任。这使得像 Codeberg 这样的欧洲替代方案和各种自托管解决方案更具吸引力。

尽管存在离开 GitHub 的运动,但凭借其强大的网络效应、免费资源和高可发现性,GitHub 仍然是开源项目的主导平台。对许多开发者,尤其是处于职业早期的人来说,GitHub 个人资料在求职时仍然非常重要,因此短期内全面撤离的可能性不大。