一、先明确你的 4 个核心场景
- 自用 / 内部系统,不对外发布、不做 SaaS
- 打包软件售卖、客户端分发(对外交付二进制)
- 云 SaaS、网页服务、线上 API 对外提供服务
- 开发通用工具库 / SDK,给别人嵌入使用
二、场景匹配推荐(最优→备选)
场景 1:内部项目,不对外分发、不上线 SaaS
需求:随便改、不公开代码、无法律麻烦
- 首选:MIT
- 备选:Apache 2.0
优势:无任何开源强制义务,仅保留版权声明即可
场景 2:商用闭源软件,打包分发客户端 / 安装包
需求:自己产品闭源售卖,依赖第三方开源代码
- 自研独立产品(无第三方库修改)
首选 Apache 2.0(自带专利防护,企业最稳妥)
次选 MIT - 引用开源类库(动态链接 dll/so)
优先 LGPLv3 库,主程序依旧闭源 - 禁止使用:GPLv2/v3(静态打包分发会强制整体开源)
场景 3:开源项目做云 SaaS、网页在线服务
需求:防止别人拿你的代码改改做成付费云服务闭源牟利
- 首选:AGPLv3
规则:只要对外提供线上服务,使用者必须公开全套源码 - 折中方案:MPL 2.0(仅改动文件开源,约束更轻)
场景 4:开发通用底层库、SDK、插件
- 希望厂商可以闭源商用你的库
首选 LGPLv3(动态链接无限制,仅改库源码需开源) - 完全放开无约束,不在乎别人闭源使用
MIT / Apache 2.0
场景 5:想彻底放弃版权,任何人随便用,无需署名
CC0(适合小脚本、工具片段、素材代码)
场景 6:不想纯开源,限时免费商用,后期收费
BSL(商业源码协议,不属于 OSI 标准开源协议)
三、红线避坑清单(绝对不能混用)
- 闭源商业软件 禁止直接静态链接 GPLv2/v3 代码并对外分发
- 做在线 SaaS 产品,若依赖 AGPL 代码,整套业务代码必须开源
- Apache2.0 可兼容 MIT,但 MIT 代码不能自动获得专利豁免
- Linux 内核 GPLv2 有特殊例外,不可照搬普通 GPL 规则
- SSPL、BSL 不属于国际公认开源协议,商用有法律风险
四、极简一句话选型口诀
- 企业闭源商用、怕专利纠纷 → Apache 2.0
- 极简无约束、小型项目 → MIT
- 开发第三方类库,允许别人闭源调用 → LGPLv3
- 开源云服务,防止他人套壳做付费 SaaS → AGPLv3
- 只要求修改文件开源,整体可闭源 → MPL 2.0
- 完全放弃版权无限制 → CC0
- 限制他人商用,阶段性开源 → BSL(非标准开源)
五、快速决策流程图(文字版)
- 是否对外提供线上网页 / SaaS 服务?
是 → AGPLv3
否 → 下一步 - 是否要打包二进制程序对外售卖分发?
是 → Apache2.0 / MIT,避开 GPL
否 → 下一步 - 项目是供别人调用的工具库?
是 → LGPLv3
否 → Apache2.0(企业)/ MIT(个人小项目)
