我最近在搓一个自动化知识库处理工具,用来处理飞书收集群里的增量消息。起因很简单:平时习惯睡前刷技术博客,顺手把链接丢进微信或飞书——但忙起来根本没空整理;偶尔读完会随手记几句想法,一旦拖着就全忘了。所以就想做个工具,自动帮我汇总内容、归纳知识、顺带把那些随手写下来的东西也存住。
有些时候这些内容会包含 PDF 文件,需要能自动提取里面的内容。调研之后,发现 MinerU 比较合适,可以从 PDF 里自动提取文本。我最开始是在 B 站上刷到这个工具的,然后从评论区注意到有位用户提到它用的是传染性开源协议——也就是用了这个项目,就必须开源自己的代码。不过我发现最新的项目 README 里写着:
2026/04/18 3.1.0 Released
This release focuses on licensing openness, parsing accuracy, and full-format native support. The main updates include:
License upgrade MinerU has officially moved from AGPLv3 to the MinerU Open Source License, a custom license based on Apache 2.0. This change significantly reduces adoption friction for both community users and commercial deployments, making MinerU easier to integrate into real-world workflows.
正是这个事情,让我打算了解一下各个常见的开源协议,以及它们的区别和联系,避免以后在用开源项目时因为协议问题踩坑。
常见开源协议的理解
理解开源协议,核心不是"能不能看代码",而是拿来之后能不能改、能不能商用、改完之后要不要公开、需不需要带上原作者声明、有没有专利授权。很多纠纷其实不是因为代码本身,而是因为把协议条款想得太简单了。
如果只是粗粗地分类,可以分成下面几类:
- 宽松型协议(Permissive License)
- 弱传染型协议(Weak Copyleft)
- 强传染型协议(Strong Copyleft)
- 自定义协议(Custom License)
其中真正最容易踩坑的,往往是后两类,因为它们对"修改后怎么分发"“是否需要开源"“是否涉及网络服务"这些问题限制更强。
速记表
| 协议 | 商用 | 修改 | 闭源集成 | 修改后是否可能要求开源 | 专利条款 |
|---|---|---|---|---|---|
| MIT | 可以 | 可以 | 可以 | 通常不要求 | 弱 |
| Apache 2.0 | 可以 | 可以 | 可以 | 通常不要求 | 强,写得较清楚 |
| BSD | 可以 | 可以 | 可以 | 通常不要求 | 一般 |
| GPL | 可以 | 可以 | 风险高 | 分发衍生作品时要求较强 | 一般 |
| LGPL | 可以 | 可以 | 相对可以 | 主要针对库本身修改 | 一般 |
| AGPL | 可以 | 可以 | 风险更高 | 对网络服务场景也要求较强 | 一般 |
| MPL 2.0 | 可以 | 可以 | 可以 | 文件级开源要求 | 一般 |
这个表只能拿来做第一层筛选,不能直接代替正式合规判断,因为真正有争议的地方往往在"是否构成衍生作品"“只是调用还是深度集成"“是否发生分发"“SaaS 是否触发条款"等边界问题上。
1. MIT License
MIT 应该算是 GitHub 上最常见、也最好理解的协议之一。
它的核心特点可以概括为:
- 允许商用
- 允许修改
- 允许再分发
- 允许闭源使用
- 只要求保留原始版权声明和许可声明
如果一个项目是 MIT,通常可以比较放心地集成进自己的系统里,哪怕是商业项目也一般问题不大。它的优点就是简单、传播阻力小,很多库作者选 MIT,就是希望别人尽量少受限制地使用。
不过 MIT 也不是"完全没要求”,至少原作者的版权和许可文本不能删。另外它一般不强调专利条款,所以如果项目涉及比较强的专利风险,通常会更倾向于看 Apache 2.0。
2. Apache License 2.0
Apache 2.0 也是非常常见的宽松型协议,但比 MIT 更完整一些。
它的关键点可以记成:
- 允许商用
- 允许修改
- 允许闭源分发
- 要保留版权声明和 License
- 如果项目里有 NOTICE 文件,分发时通常也要一起带上
- 明确给出了专利授权和专利终止条款
所以 Apache 2.0 可以理解成"更工程化的 MIT”。
如果一个项目来自大公司、基金会或者成熟社区,看到 Apache 2.0 往往会更安心,因为它把专利问题写得更清楚。
像这次 MinerU 从 AGPLv3 切到一个基于 Apache 2.0 的自定义协议,这件事本身就说明了一个问题:项目如果想让更多企业和真实业务接得进来,通常会尽量降低协议阻力,而 Apache 2.0 这类协议就比较适合作为基础。
3. BSD License
BSD 也属于宽松型协议,常见的有 BSD 2-Clause 和 BSD 3-Clause。
对 BSD 的粗略理解是:
- 和 MIT 很像
- 也是允许商用、修改、闭源
- 主要义务还是保留版权声明和许可文本
- 3-Clause 比 2-Clause 多一个"不能用原作者或组织名义做背书宣传"的限制
从实际使用角度看,BSD、MIT、Apache 2.0 经常可以归到一组里理解:整体都比较宽松,适合做基础组件、工具库、SDK 之类的东西。
4. GPL License
GPL 是典型的强传染型协议,也是很多人口中"病毒式协议"“传染性协议"的来源。不过"传染性"这个说法虽然好记,但也容易让人理解过度,更准确的说法是:它要求衍生作品在特定分发条件下继续以 GPL 开源。
GPL 的理解重点是:
- 允许使用、修改、分发、商用
- 但如果把基于 GPL 的程序修改后再分发,通常也必须以 GPL 方式开放源码
- 不能把 GPL 代码拿进去改一改,然后整体闭源卖掉
所以 GPL 的核心思想不是"禁止商业化”,而是"商业化可以,但你不能把自由重新收回去”。
这类协议适合那些希望社区贡献持续回流、不希望别人拿去闭源包装的项目。
5. LGPL License
LGPL 可以看成比 GPL 更宽松一些,常见于类库场景。
LGPL 的理解是:
- 如果只是动态链接一个 LGPL 库,自己的主程序通常不一定需要整体开源
- 但如果直接修改了这个 LGPL 库本身,修改部分通常仍然要按 LGPL 公开
- 它比 GPL 更适合做"希望被广泛调用,但又不想完全放弃回馈要求"的基础库
所以 LGPL 经常被看作"弱一点的 GPL”。
对使用者来说,它比 GPL 友好,但也不像 MIT/Apache 那么随意。
6. AGPL License
AGPL 是这次最关注的一个,因为它跟 SaaS/在线服务的关系很大。
AGPL 的核心理解是:
- 它基本继承了 GPL 的强 Copyleft 思想
- 但它额外补上了"网络服务"这个场景
- 如果我修改了 AGPL 程序,并通过网络向用户提供服务,那么通常也需要向这些用户提供对应的源码
这就是为什么很多人一听到 AGPL 就很紧张。
对传统 GPL 来说,有些公司可能不"分发软件”,而是只把它部署成在线服务,从而绕开开源义务;AGPL 就是专门堵这个洞的。
所以如果一个项目是 AGPL,通常会特别关注:
- 是只在内部研究使用,还是要对外提供服务
- 有没有修改原项目
- 整体系统是否会因此被认定为衍生作品
对于打算商业化部署的工具链来说,AGPL 的采用门槛确实会明显更高。
7. MPL 2.0
MPL 2.0 是一个很值得记住的中间路线。
它属于弱传染型协议,可以这样理解:
- 允许商用
- 允许和闭源代码一起组合
- 但如果修改了 MPL 覆盖的那个文件,这些被修改的文件通常要继续开源
- 它的开源义务通常是"文件级"的,而不是像 GPL 那样容易扩展到整个项目
所以 MPL 2.0 比较适合那种既想保留一定回馈机制、又不想把限制放得像 GPL/AGPL 那么重的项目。
如果以后自己做工具,希望"别人能商用,但改了核心文件最好回传",MPL 其实是一个可以重点考虑的方向。
8. The Unlicense
The Unlicense 可以理解成一种非常极端的宽松态度,接近于把代码直接放进公有领域。
对它的印象是:
- 几乎不设限制
- 允许任意使用、修改、分发
- 对某些法域下"公有领域让渡是否绝对成立"可能存在理解差异
所以它虽然很自由,但在一些正式商业场景里,可能不如 MIT/Apache 2.0 那么常见和稳妥。
9. 自定义协议 — 以 MinerU 为例
前面分类里提到了"自定义协议",MinerU 的新协议就是一个现成的例子,可以拿来具体看看。
自定义协议的常见做法是:在 MIT 或 Apache 2.0 这类宽松协议上,叠加一些附加条款,针对特定场景补充约束。MinerU 的协议底层是 Apache 2.0,但额外加了两条:
条款一:商业规模门槛
免费商用默认可以,但如果你和你的关联公司合并计算,达到以下任一条件,就需要单独向 MinerU 团队获取商业授权才能继续使用:
- 月活用户(MAU)超过 1 亿;或
- 单月总收入超过 2000 万美元
换句话说,对于大多数使用场景——个人研究、内部工具、中小规模商业部署——这个门槛根本不会触发,用起来跟 Apache 2.0 几乎没有区别。只有真正达到平台级体量的公司,才需要单独谈。
条款二:在线服务署名义务
如果把 MinerU 做成面向第三方用户的在线服务,需要在产品界面或公开文档里明确标注使用了 MinerU。
另需注意:部分依赖模型仍是 AGPL
MinerU 里集成的一些模型组件(如基于 YOLO 的检测模型)本身使用的是 AGPL 协议,并不随主协议变化。如果最终部署的服务用到了这部分模型,AGPL 的在线服务开源义务仍然适用。所以使用前,最好把依赖链也一起查清楚。
和 AGPLv3 相比,这个协议温和很多:
- 不要求公开源代码,闭源商用也没问题
- 做成 SaaS 也不需要开源,只需要标明"使用了 MinerU"
- 只有极少数超大规模场景才需要另行授权
这类"宽松协议 + 商业规模限制"的组合,在 AI 工具和数据处理领域越来越常见——作者希望社区可以自由使用,但不想让大公司直接拿去做亿级用户的产品却没有任何回馈或沟通。
这也说明了开头那个分类里"自定义协议"存在的意义:当标准协议不能完全表达作者的意图时,自定义一个反而更直接。
几个关键区别
1. “开源"不等于"随便用”
只要作者没有明确给出许可证,哪怕代码放在 GitHub 上公开可见,也不代表别人就可以随便复制、修改和商用。
所以看到仓库的第一件事,不应该先看 star 数,而应该先看 License。
2. GPL 和 AGPL 的差别,关键在网络服务
这两个很容易混。速记方法:
- GPL:更关注"分发"软件时的开源义务
- AGPL:在 GPL 基础上,进一步覆盖"通过网络提供服务"的场景
如果一个工具未来可能做成 Web 服务、SaaS 平台、在线 API,那 AGPL 的影响通常比 GPL 更敏感。
3. 宽松型协议更适合基础设施传播
MIT、BSD、Apache 2.0 之所以流行,一个很大的原因就是它们太适合做生态底座了。
别人拿来就能用,商业公司也容易接,阻力小,扩散快。
4. Copyleft 协议更强调社区回流
GPL、AGPL、MPL、LGPL 这类协议背后的思想,不只是"限制",更像是在设计一种回馈机制:
你可以拿去用,但你不能只拿走好处、不把改动回馈回来。
所以不能简单说哪种协议更"好",更多还是取决于项目作者想要什么。
如果以后自己选协议,可以怎么想
目前大概可以这样粗分:
- 如果希望别人尽量广泛使用,包括公司直接接入商业系统,可以优先考虑 MIT 或 Apache 2.0
- 如果担心专利问题,或者希望条款更完整,可以更偏向 Apache 2.0
- 如果希望改动能回流,但又不想强制整个项目一起开源,可以考虑 MPL 2.0 或 LGPL
- 如果非常强调"改了再分发就必须继续开源",可以考虑 GPL
- 如果连 SaaS 场景也想覆盖,不希望别人改完部署成在线服务却完全不回馈,可以考虑 AGPL
一个排查清单
以后在用一个开源项目之前,至少先问下面几个问题:
- 这个仓库到底有没有明确 License?
- 它是 MIT/Apache 这种宽松协议,还是 GPL/AGPL 这种 Copyleft 协议?
- 是只在内部研究,还是要集成到商业项目里?
- 是单纯调用,还是会直接修改它的源代码?
- 会不会把它做成对外提供服务的在线系统?
- 项目里除了代码 License 之外,还有没有 NOTICE、商标、专利、模型权重、数据集等额外限制?
一个很重要的认识
以后看开源项目,不能只盯着"功能强不强",还得把"协议带来的接入成本"也一起算进去。
有些项目技术上非常合适,但协议不一定适合当前业务形态;有些项目虽然功能略弱,但协议更宽松、接入成本更低,在工程上反而更现实。
所以协议本身,其实也是技术选型的一部分。
备注
以上内容主要适合拿来做技术选型和日常避坑时的第一轮判断,不适合直接替代正式法律意见。真遇到商业化、融资、闭源分发、对外 SaaS 或者二次授权这类场景,还是应该认真看原协议文本,必要时找专业法务确认。