前一阵子我说过,我想造一个 GitHub 的替代品。
重要的领悟是:我并不需要再造一个 GitHub。
Git 已经把代码分发出去了。
它没有分发的,是围绕着代码的协作。
Issue。评审。CI 结果。决定。治理。身份。智能体记忆。
这些东西,至今通常还困在别人的服务器里。
所以我造了 Hubnot。
命名小注:这个项目本来叫别的名字。我的欧洲朋友们非常好心,指出它在好几种语言里自带不该有的含义,所以我从善如流,在发布前改了名。哎呀,我的锅。(这就是为什么搞创意命名是个坏主意)。😅
https://github.com/LynnColeArt/hubnot
Git 里的签名事实
Hubnot 把协作跟 Git 仓库本身一起分发。
没有 Hubnot 服务器。
没有 Hubnot 数据库。
没有任何 SaaS 账号握着项目的状态。
一个普通的 Git remote,同时承载代码,和存在 refs/hn/* 之下的签名协作事实。
也就是说:提案、评审、CI 请求与结果、治理决定、合并事实、设备身份、政策修订、有意写下的智能体记忆,全都可以跟着仓库走。
而且它们是签名的。
这个协议围绕不可变的事实设计,而不是可变的网站状态。
一条评审说:「这个 actor 批准的,就是这一份提案。」
一条 CI 结果说:「这个 runner 测的,就是这一版候选。」
一条决定说:「这位维护者依照这版政策,接受了这一版修订。」
提案一变,旧的证据不会奇迹般地套用到新的上。
你建一版新修订,重新收集证据。
这话大声说出来,听着像废话。
但大多数软件协作系统,偏偏不是这么建模的。
实战 alpha
Hubnot 已经跨过了它第一个重要的里程碑:实战 alpha (operational alpha) 完成。
更重要的是,Hubnot 已经用自己的协议,对它自己公开的主分支完成了修订、独立沙盒测试、批准、接受,并把变更合并了进去。
没错,它已经开始吃自家的狗粮了。
或者,吃自家的 Git 对象。
项目仍是 alpha。协议还没稳定,要造的东西还很多。
但核心想法是成立的。
Git 已经给了我们分布式版本控制。
Hubnot 是一个实验:把这件事干完。
软件协作里,不该只有代码属于干活的人。
MIT 许可。
随便 clone、随便搞坏、随便改进、随便争论、随便往上盖楼。
现在去吧,你这美丽的发光小生命,去弄坏点什么!