# 许可选型:为什么是 AGPL-3.0 + MIT(阀门)+ 商业授权 这份文件是给未来的自己看的:当时为什么这么选、被问到时怎么答、想改怎么改。 ## 一、结论(当前生效) | 范围 | 许可 | 文件 | | --- | --- | --- | | 主仓库(除下列文件) | **AGPL-3.0-only** | [LICENSE](../LICENSE) | | 阀门三件套 `lib/gate.js` / `gate.json` / `scope.txt` | **MIT** | [LICENSE-GATE](../LICENSE-GATE) | | 闭源商业使用 | 按合同 | [LICENSE-COMMERCIAL.md](../LICENSE-COMMERCIAL.md) | | 署名 / 来源保留(附加条款,依 AGPL §7) | 强制 | [NOTICE](../NOTICE) | `package.json` 里 `"license": "AGPL-3.0-only"`,`lib/gate.js` 文件头有 `SPDX-License-Identifier: MIT` 覆盖声明。 ## 二、为什么不选 MIT(1.0.0 最初就是这么写的,改掉了) MIT 对**引流**很好,对**生意**是自杀: - 任何人可以 fork → 删掉阀门 → 改个名 → 放进自己的闭源包里卖,**不需要给你任何东西** - 竞品拿走 `lib/live.js` 的请求边界实现,第二天就能宣称「我们首创」 - 你后面的付费高级版一旦被指出「核心和免费版同一份代码」,MIT 让这事完全合法 真正会伤到你的不是「别人用」,是「别人**不署名地**拿去卖」。MIT 连署名都不要求。 ## 三、为什么不选「Apache-2.0 + 商用附加条款」(竞品那条路) `Apache-2.0 + LICENSE-COMMERCIAL.md 里写一句不许转售/不许商用` 是**法律上自相矛盾**的组合:Apache-2.0 §2 明确授予「sublicense 与再分发」的权利,附加条款想收回它,等于在许可证里自打脸。真出事时,被授权人可以直接引用 Apache-2.0 原文主张权利。 - 它拦不住真想抄的人 - 它会让法务出身的人看轻这个项目 - 它让你无法理直气壮地说「我们条款正经、可签、可审」 PK 的时候这一条可以直接说:**「他们是用 Apache 授权、再在附加条款里说不许商用;我们是用 OSI 认可的 AGPL 正经过一遍,商业授权单独签。你让法务看哪一份?」** ## 四、为什么不选 BUSL-1.1 / PolyForm Noncommercial - BUSL-1.1:条款很对(生产使用需授权,N 年后自动转 Apache),但**不是 OSI 认可的开源许可**,GitHub 侧标识是「Other」,`开源` 两个字就站不住,搜索权重和信任度都掉 - PolyForm Noncommercial:同理,且中文用户普遍读成「假开源」,评论区会先用这个词打你 - 而且这两者都解决不了「fork 后删阀门」的问题,AGPL+NOTICE 反而能管 **留作备选**:如果哪天付费版走企业直销、需要一份「生产使用必须买」的硬杠杆,再切 BUSL-1.1,切换方式见第六节。 ## 五、AGPL 到底拦住了什么、没拦住什么 拦住了: 1. 把本仓库代码塞进闭源产品分发 → 要么开源,要么买授权 2. 拿它做对外托管服务还不同步源码 → 同上(AGPL §13 网络条款) 3. 删署名、删阀门、删 SCOPE 后当成自己的项目 → NOTICE 附加条款 + 商标声明 4. 竞品「借鉴」成闭源功能 → 代码层面留下时间戳与提交记录,法务上可追 没拦住(要认清): 1. **抄思路** —— 请求边界注入、九维进化、阀门判定顺序,这些方法层面的东西 AGPL 管不到,只能靠先发、靠评测数字、靠持续更新 2. 合规前提下的**再分发/转售**(给了源码就行)—— 所以你的护城河必须是高级版的功能,不是许可证 3. 别人写一个功能等价的实现 —— 这本来就该允许,也是开源的意义 一句话:**许可证负责不让你的劳动被白拿走;赚钱靠高级版做免费版做不到的事。** ## 六、想改许可证怎么办 ```powershell # 切回 MIT(全仓库) # 1. 用 LICENSE-GATE 内容覆盖 LICENSE # 2. package.json 的 "license" 改成 "MIT" # 3. 删掉 LICENSE-COMMERCIAL.md 与 NOTICE(或降级为建议) # 4. lib/gate.js 头部的 SPDX 行改成 MIT,README/README.en 的许可节同步 # 切 BUSL-1.1 # 1. 从 https://mariadb.com/bsl11/ 取正文,填 Change Date(发布日 +4 年)、 # Additional Use Grant(个人研究 / CTF / 授权红队免费)、Change License(Apache-2.0) # 2. package.json 的 "license" 改成 "BUSL-1.1" # 3. README 里"开源"改成"source-available",别硬说开源 ``` 改许可**必须**同时在 [CHANGELOG.md](../CHANGELOG.md) 记一条,并说明「此前版本仍按旧许可」,否则对已获取副本的人生效存疑。 ## 七、一句话版本(对外统一口径) > base 版 AGPL-3.0:自己用、研究用、授权靶场用,免费。 > 拿它做闭源生意,买商业授权。 > 阀门是 MIT 的,谁都能抄 —— 目标范围校验就该是默认配置,不该是收费功能。