给 sing-box 提交 XHTTP 实现后 PR 被关闭且账号被 Block,想请教是哪里做错了

发布于

先说明一下,发这个帖子不是想挂人,也不是要求项目必须合并我的代码。

我只是第一次遇到这种情况:花时间实现了一个功能、补测试和文档、修完 CI ,随后 PR 在没有任何评论的情况下被关闭,之后发现自己的 GitHub ID 似乎也被该项目 Block 了。

因为没有收到原因,所以想把时间线和技术背景完整写出来,请有开源项目维护经验的 V 友帮我看看,问题可能出在哪里。

项目:SagerNet/sing-box
PR:[https://github.com/SagerNet/sing-box/pull/4326](https://github.com/SagerNet/sing-box/pull/4326)
PR 标题:feat(xhttp): add XHTTP transport

### 时间线:
1. 7 月 17 日开始实现 sing-box 的 XHTTP transport 。
2. 7 月 22 日 14:34 左右整理并提交主要实现,包括:
- XHTTP 客户端和服务端
- stream-one 、stream-up 、packet-up 等模式
- HTTP/1.1 、HTTP/2 、h2c
- Xray 兼容配置字段
- xmux 、padding 、download settings 等功能
3. 14:35 左右补充生命周期测试、协议测试以及与外部 Xray-core 可执行文件的互操作测试。
4. 14:37 创建 PR #4326 。
5. PR 创建后发现 CI/Lint 有格式问题,于是根据 CI 输出修正并重新推送。
6. 14:58 推送 lint 修复。之后 GitHub Actions 中 Linux 、Windows 、macOS 、Android 各平台的 Lint 和 Test 都通过了。
7. 15:23 ,PR 被项目维护者直接关闭。
8. PR 页面没有 review 、没有 comment ,也没有说明不接受该功能的原因。之后我发现自己的账号似乎也无法再与该项目正常互动,表现像是被 Block 。

这里也把可能有争议的技术背景说清楚。
XHTTP 最初来自 Xray-core 。Xray-core 使用 MPL 2.0 ,sing-box 使用 GPLv3-or-later 。
我的实现参考过 Xray-core 的公开源码和协议行为,并不是严格意义上的 clean-room implementation 。这一点我愿意如实披露。
但实现本身使用的是 sing-box 的 Dialer 、TLS 、transport handler 和 Go net/http 架构,没有导入或链接 Xray-core 。互操作测试也是把 Xray 当成外部程序运行。

事后检查新增代码和 Xray splithttp 源码,没有发现明显的连续代码块复制。不过我确实在 config.go 里写过一句:
“ The implementation is independent from Xray-core.”
现在回头看,这句话不够准确。虽然代码是按 sing-box 架构重新实现的,但既然开发时阅读和参考过 Xray 源码,就不应该把它描述成完全独立或 clean-room 。我愿意修改这句话,也愿意根据要求补充来源说明、版权声明或 MPL 文件级许可信息。

据我目前查到的资料,MPL 2.0 是文件级 copyleft ,而且在没有 Exhibit B 排除的情况下可以通过 MPL 2.0 §3.3 与 GPLv3 项目组合。也就是说,即使部分文件被认定为 Xray 的派生实现,通常也应该是对相关文件补充 MPL 来源和许可义务,而不是整个 sing-box 被“污染”。

当然,许可证理解如果有错误,也欢迎指出。

我能想到 PR 被拒绝的原因包括:
- 上游根本不准备支持 XHTTP ;
- PR 体量太大,提交前应该先开 issue 讨论;
- 维护者不接受参考其他项目源码的实现;
- 对代码来源、AI 辅助或许可证存在疑虑;
- 实现方式不符合项目方向;
- 我之前的 “independent” 表述让维护者对来源产生了不信任;
- 还有我没有注意到的社区规则或历史问题。

这些理由中的任何一个,如果维护者明确说明,我都可以理解:项目是维护者的,他们当然没有义务合并任何 PR 。

我真正困惑的是,在 CI 已经通过、PR 没有争吵、没有 review 对话的情况下,为什么会直接关闭并疑似 Block ,而没有留下一句原因。

所以想请教大家:
1. 阅读其他 MPL 2.0 项目的源码后,使用 GPL 项目自身架构重新实现兼容协议,通常应该怎样声明来源?
2. 这种规模的功能是否应该先开 issue ,得到维护者确认后再实现?
3. PR 中那句 “independent from Xray-core” 是否严重到足以让维护者直接失去信任?
4. 从维护者角度看,还有哪些常见原因会导致无评论关闭 PR 并 Block 提交者?

再次说明,我发帖不是要求维护者必须合并,也不希望大家去 PR 下留言或打扰项目。
如果确实是我的提交方式、来源说明或者许可证处理有问题,我愿意承认并改正。我只是希望弄明白原因,避免以后再次踩同样的坑。

---

原文链接:[点击查看](https://www.v2ex.com/t/1229097)

评论(17)

现在这类代理项目早就变成一家独大的中心化项目了,你能想象到吗?哪怕只是去隔壁给 Xray 提交一个文档更新的 PR,都会直接被他们拒绝。

· 0 个赞

回复

你懂的,就 Xray 作者那脾气和各种公开发言,平时遇到这种事太正常了。说白了,这两个软件虽然开源,但所谓“开源”并不代表去中心化治理,还是作者一个人说了算。不过有一说一,他们对翻墙社区的贡献还是值得肯定的,只能说别对这种个人主导的开源项目抱有太理想的期待吧。

· 0 个赞

sing-box 现在根本不欢迎社区参与代码贡献,你只要蹲守观察一段时间它的 issue 和 PR 区就能看出来了。本质上这已经变成了一个排他性极强的项目。至于 Xray 那边我也不想吐槽了,社区氛围简直像邪教一样。

· 0 个赞

直接 fork 一份代码,自己维护自己的分支不就行了嘛。

· 0 个赞

回复

嗯,其实我也不太在意合不合并的,既然能自己实现,那以后就自己 fork 一份自己用就行了。

· 0 个赞

有需求的话还是自己 fork 一份自己用吧。代理圈的项目想提 PR 被接受太难了,很多时候不是你代码写得达不达标的问题,纯粹看作者想不想要。更何况 Xray 和 sing-box 的作者之间本来就积怨已久。

· 0 个赞

这就是 sing-box 作者的一贯臭毛病,习惯就好,不用太往心里去。

· 0 个赞

其实就像以前破娃酱说的那个暴论:一堆小白围着大佬转,大佬靠小白的吹捧获得满足感,然后小白吃喝拉撒全靠大佬解决。这套逻辑放在这些代理软件上一样适用,他们只是把代码放开源了,并不是真的想开放社区参与。

· 0 个赞

回复

纠正一下,这句关于“小白和大佬”的暴论其实是 clowwindy 以前说的。

· 0 个赞

顺便补充一句,如果有兄弟需要用 XHTTP,可以去看看这个社区 Fork 版本:https://github.com/shtorm-7/sing-box-extended ,里面加的功能还挺多的。

· 0 个赞

见怪不怪了,个人主导的项目基本都这毛病。我之前在 Angular 的 PR 里吐槽他们现在不思进取,结果评论直接被折叠了,哈哈哈。

· 0 个赞

1. Xray 和 Sing-box 这俩项目在各种意义上都挺“神”的,不必太在意。
2. 其实给这种项目提大 Feature 之前,最好先发个 Issue 跟作者沟通一下,免得白费功夫。

· 0 个赞

啊?我以前给 sing-box 提过几个 PR 都顺利合并了啊,现在风评已经变成这样了吗?

· 0 个赞

Xray 和 Sing-box 两边作者好像一直有历史恩怨吧。

· 0 个赞

估计维护者是觉得你专门来挑刺或者搞事的,所以直接关了。

· 0 个赞

不引战,其实搞代理模块和搞梯子的这帮人都一个样:戾气重,极度以自我为中心。代码是开源了,但人家并没有打算把社区也开放给你。

· 0 个赞

+1,这俩项目圈子的魔幻事挺多的,开发者也经常在推特上发一些让人无语的暴论,习惯就好。

· 0 个赞