我后悔迁移到 Codeberg

我离开 GitHub 的主要原因,并非某个单一功能或某次宕机,而是平台在 Microsoft 掌控下的 “enshittification(劣化)”。网页界面被重写成了一堆迟缓臃肿的 JavaScript,要么把原本好好的功能弄坏了,要么让它们变得极其缓慢,以至于用起来成了折磨。除了技术上的衰败,GitHub 已经在事实上变成了 “公共基础设施”,就像 WhatsApp 一样,托管着全球很大一部分软件的源代码,并以此让 Microsoft 对每个人的项目——进而对每个人的数字生活——拥有了任何单一公司都不应拥有的影响力和监控能力。除此之外,关于正当开发者因 Microsoft 任意封禁而失去账号的故事,也进一步强化了一种感觉:至少在别处留个备份是个好主意。
Codeberg 看起来是一个可行的替代方案。它为自由及开源项目提供了一个值得信赖的家园,更重要的是,一个同样自由的家园,由一家非营利协会运营,而不是由地球上最大的软件供应商的子公司运营。不幸的是,其服务条款的最新更新,似乎标志着朝着改变我当初为之迁移过去的那个部分——即“自由”——迈出了第一步。
人类的愚蠢
我迄今为止发布的所有项目,都是靠 100% 的人类愚蠢而非 “人工智能”,更准确地说,是 LLMs(大语言模型) 构建的。我对 Codeberg 封禁那些主要由 LLM 驱动的项目并没有特别强烈的感受,至少没有我对同时封禁正当加密货币项目的那种强烈感受,后者看起来就像是无缘无故被捎带上的,仅仅因为大多数人还记得在 LLM 接过这一头衔之前的几年里,加密货币曾是当红反派。这两项条款在几天内相继落地,LLM 禁令在 6 月 29 日,加密货币禁令在 7 月 2 日,都是作为 Assembly 2026 提案提出的,而 条款现在竟把后者归入了——不管怎么说——“损害 Codeberg 声誉的内容”,这听起来像是 “我们没有充分的理由,也没有足够的不良先例来一刀切地封禁它” 的法律套话。
然而,公告 博文读起来非常糟糕,其中题为 “The development team of none” 的一节是最糟糕的。它写道:
用 LLM 来处理你的代码会给你带来一阵肾上腺素飙升。你可以飞速开发,像拥有一支庞大团队那样构建东西。只是你根本没有团队。事实上,你(常常)是独自一人,与一台把能源转化为代码的统计机器一起工作。
再往下一点,它又说:
似乎许多‘vibe coders(氛围编程者)’没有意识到,他们周围其实并没有一个社区。
这与大多数自由软件的制作方式脱节。大多数 FOSS(自由及开源软件) 开发者都是单打独斗,他们身边唯一的社群,就是那些提出功能请求或报告缺陷、而大多数时候根本不以任何形式作贡献的用户。我发布那些无聊的小工具已有数十年,早于这个网站,甚至早于 GitHub 本身(还记得 SourceForge 曾是最火的东西的时候吗?),它们中没有一个真正拥有过“社群”,至少不是 Codeberg 在那篇博文中所描绘的那种浪漫化的意义。我是一个独狼,所有代码都亲手编写,并为此花费了荒唐多的时间,而那种认为 LLM 是区分拥有真实社群的真实项目与虚假项目的分水岭的观念,只要看看任何代码托管平台上那些普通的、实用的小工具最初是如何诞生的,就根本站不住脚。
Codeberg 提出这种论调,说得直白点有点自以为是,要知道该平台实际上就活在 Forgejo 的圈子里,而 Forgejo 叛变 继承了来自 Gitea 的活跃贡献者社群——Gitea 在 Forgejo 出现之前,已经花了将近六年时间建立起那个社群。一个靠硬分叉别人的项目来获得自己社群的项目,转过头来却去教训独立开发者没有社群,这实在难以让人一本正经地为其辩护。
此外,Codeberg 把“拥有社群”与“是值得托管的正当软件”混为一谈,而个人项目的门槛向来只是一个能跑通的构建、最好有一个许可证、也许再加一个 README,而不是一个挤满贡献者的频道。小型的单作者工具生态之所以值得存在,很大程度上恰恰在于它不需要靠社群来证明其存在的合理性,而一个卖点就是托管个人代码的代码托管平台,却反过来论证相反的观点,显得格外奇怪。
审查
让我困扰的不是针对 LLM 项目的具体禁令,也不是针对加密货币项目的具体禁令。而是一个围绕“自由软件”构建的中心,现在却在告诉用户哪类软件被认为是好的、哪类不是,这比看起来的更接近审查。一旦平台在其条款中写明某一整个类别“损害其声誉”并可据此被移除,决定因素就不再是代码是否合法、是否可用、是否有用,而变成了是否符合平台所持的立场。我认为,被这种一刀切禁令波及的项目中,有相当大一部分是正当的软件,而不是 vibe-coded slop(氛围编程产生的垃圾)或 sh.tcoin(垃圾币)之类的实现。
我能想到的每一个采取这种做法的平台,都在开始向用户强加某种意识形态的那一刻变得充满分歧,无论那种意识形态当时是什么,也无论当时看起来多么正当。其机制总是一样的:一个真实的问题出现,一个不受欢迎的类别成了显而易见的替罪羊,平台封禁该类别而不是去解决问题,而这一禁令随后就成了下一个类别、再下一个类别的先例。今天毫无争议可以封禁的类别,就是明天该机制得以存在的理由,而那些为第一次封禁鼓掌的用户,很少会被问及对第二次封禁的看法。
我承认这两个类别都并非没有问题。LLM 驱动的仓库确实会给基础设施带来压力,确实会产生大量无法管理的低质量 issue 和 pull request,也确实带来了关于版权和代码来源的实质性问题,所有这些 Codeberg 都在其博文中提到了。加密货币领域反过来,则可能比软件领域几乎任何其他角落都产生了更多彻头彻尾的骗局。然而,对当红反派的一刀切封禁,并不能解决其中任何一个问题。
现在甚至连 Linus Torvalds(莱纳斯·托瓦兹)这样的人也在提出相当合理的论点,认为 LLM 只是一个工具,而且“显然是一个有用的工具”,只要谨慎使用、并以与其他所有代码相同的标准来检验其输出,它在 Linux 内核开发中就有其正当的一席之地。如果地球上最大、最具影响力的开源项目的维护者都能把 LLM 当作一个以结果论成败的工具,而不是一个见之即禁的类别,那么一个后院代码托管平台也同样可以做到。
我同样担心 LLM 对科技、乃至对整个社会未来的影响,我猜我的担心程度和写出 Codeberg 这项政策的人不相上下。我只是不相信封禁内容——而这本质上就是在封禁内容——是正确的出路。
合理的解决方案
我希望 Codeberg 采取的是这样一种解决方案:把真正的问题——按他们在那篇博文中自己的说法,就是资源消耗及其带来的基础设施成本——当作真正的资源问题来对待。对服务条款的一项修改本可以要求作者勾选一个复选框,声明某个仓库包含 LLM 生成的代码,或与加密货币相关,然后这些仓库就可以被划分到一层独立的基础设施上,不享有与其他人相同的资源。这一层级可以设定具体的配额,并可能要求作者为其消耗付费。诚实地申报真相(至少在一开始)将无需任何成本,而未能申报、一旦被发现,就可以处以 Codeberg 如今从一开始就对整个类别施加的那种永久性、即时性的封禁。
同样,带有 LLM 或 Crypto 标签的项目可以自动显示免责声明,明确声明 Codeberg 对该特定仓库的质量或正确性不承担任何责任。甚至,他们大可以在那些警告中直言不讳地声明Codeberg 不认可对 LLM 或加密货币的使用,以确保再三强调、让人彻底明白,从而让 Codeberg 不存在任何“声誉风险”。
这样的方法把资源消耗型项目的成本转嫁给创建它们的人,同时为那些构成平台存在理由的项目保留共享资源。所有这些都不需要 Codeberg 一开始就去决定哪些类别的软件在意识形态上是可接受的。“我们把所有不同意的都预先封禁”的做法传递的是错误的信号,而且是一条非常危险的滑坡。
尽管我没有一个项目属于这两个被禁类别,我现在还是打算着手搭建自己的公共 Git 托管,并将会在搬过去仅仅几个月后就搬离 Codeberg,就因为这件事。不是因为禁令本身,而是因为我不想依赖一个会心血来潮重写其服务条款、却没有恰当宣布该变更曾被纳入考虑、也没有给用户任何发表意见机会的平台。
这些决定确实经过了 Codeberg 自家的 Assembly 2026,这比大多数平台所走的流程要多,然而作为一名普通用户,我得知此事的方式可能和大多数人一样,是在事情已经尘埃落定的那天,通过网站顶部的一条深蓝色横幅。虽然我感激关于 ToS 变更的通知,但我更希望在平台还在决定是否要走这条路时就能看到一条横幅,并且希望它能链接到一个讨论帖,或至少是一个投票,这样我就能表达我的担忧——我的担忧关乎平台整体的自由,而非最终被禁的某个单一类别。
随机一篇博客