跳到正文

开源的新模式:对拉取请求关闭,对混音开放。

好吧,我要开始一堂历史课了,因为自这篇文章发表以来已经过去了好几代软件工程师,我得假设不是每个人都知道大教堂是什么。每个人都知道集市是什么,因为他们正在使用

本文目录文章开头

a new model for open source: closed to pull requests, open to remix.

好吧,我要开始上一堂历史课了,因为这篇文章已经过去了好几代软件工程师,我必须假设不是每个人都知道大教堂是什么。每个人都知道集市是什么,因为他们每天都在用 GitHub 这个集市。

大教堂与集市 - 维基百科

GitHub 采纳了集市的理念——一个去中心化的、开放的、自组织的开源项目——并提供了一种工作流,让任何人都可以通过 pull request 检查或贡献源代码。

我一直在想,需要一种新的软件开发模式。我们不会回到大教堂模式,即由一个小型、私密、排他的团队来构建源代码,发布版本经过精心规划、频率低且打磨精良。

但既然 AI 已经到来,显然我们需要别的东西。GitHub 的集市模式,即使在 AI 之前,就已经暴露出它的裂痕,因为它制造了基于消费者的特权心态,每个人都在纠缠维护者去合并某些东西。它制造了非常奇怪的社会结构期望:发布代码的人有义务维护它,并且这份工作分文不取。

但现在 AI 来了,大坝已经彻底决堤了。

因为阅读一个由代码生成的 pull request 有什么意义呢?我只想阅读并理解核心思想。如果是个好主意,我可能会把它合并回上游,但不应该有任何期望认为我一定会这么做。

你看,开源软件按定义就是开源的,因为许可证说它是按原样提供的,而按原样提供允许你重新混合(remix)软件。

a new model for open source: closed to pull requests, open to remix.

但问题一直在于,人们认为重新混合软件太难了,但其实并不难。这只是一个知识鸿沟问题,而现在智能体(agent)的出现已经不复存在了。Nix 已经存在很久了。如果你没看过我几天前发布的关于 Nix overlays 的文章,你应该读一读。

这个世界还没意识到你其实可以用一个 Nix overlay 修复所有问题

我们这个行业现在有很多不确定的事情,但有一件事我很确定,而且已经确定了将近 13 年,那就是 Nix 是一门糟糕的编程语言。我记得我第一次学它的时候,感觉就像在往山上推屎。学习悬崖

所以,我要提出一个我希望对其他开源维护者有帮助的方案。这就是我现在以开源许可证发布软件时的思考方式。

重混模式(The Remix Model)

  • 结构:去中心化且可组合。思想通过独立的 overlay 传播,而不是汇聚到单一的代码仓库和单一的维护者。
  • 工作流:在 as-is 许可证下发布源代码和意图。其他人通过编写一个小的 Nix overlay 来进行重混,该 overlay 一次性表达所需的更改,然后在 devenv shells、Docker 镜像、NixOS 系统和测试、CI 以及智能体沙箱中复用该 derivation——无需 fork 或维护一个分叉的产物。
  • 核心原则:思想重于补丁。有价值的单位是行为或架构的改变。维护者决定是采纳它、重新实现它还是忽略它。原作者没有审查、集成或维护该更改的固有义务。
  • 社会契约:该许可证已经允许进行混搭,而不会对任何人的未来时间产生索取。署名和可见性依然可以存在;不存在持续的维护义务。向上游合并仍然是可选且审慎的。
  • 发现:有用的改编以覆盖层(overlay)的激增形式出现在各处。维护者如果愿意,可以从这些成果中取样;其他人则只需通过代理更新自己的覆盖层,就能获取并组合各种想法。
示例:某个项目的使用者想要在该项目中禁用 Git 的强制推送功能。该使用者无需向上游项目提交拉取请求,而是制作一个覆盖层来修补 Git 使其拒绝强制推送;这只需定义一次,然后就会一致地出现在开发环境、容器镜像和系统测试中——而无需针对上游项目提交拉取请求。

实际上,从现在起,对于我在 GitHub 上发布的任何代码,我都会禁用拉取请求,保持讨论区开放,并发布并维护关于如何混搭我的软件的指南。

无限可定制且易于使用的软件。这就是我希望成为标准做法的事情。如果你消除了发布开源软件和运营大型项目的认知负担,那么我们将看到更多人发布软件。如果他们以正确的方式去做,那么我们将看到世界上出现多得多的软件。

GitHub 网络图提供了一种绝佳的方式来探索生态系统中的混搭作品。见鬼,你甚至可以运行代理来总结人们在做什么。你也可以在代理循环中使用它来探索混搭想法,并将它们反馈到主项目中。

GitHub - ghuntley/nix-demo at ghuntley.com

使用 Nix 覆盖层一次性修补 git;在 devenv、NixOS 虚拟机测试和 Docker 镜像中使用它 - ghuntley/nix-demo

该想法付诸实践的一个演示

ps. 社交媒体

🗞️ 一种新的开源模式:对拉取请求关闭,对混搭开放。https://t.co/kJAllc39mc pic.twitter.com/DILnyNns42

— geoff (@GeoffreyHuntley) October 14, 2026

阅读显示设置

调整正文排版

当前浏览器记住选择,应用于文章正文。手机上正文宽度以屏幕可用空间为限。

图表完整性提示

普通文章遇到图表保存问题时显示提示。