1. 开源许可证生态全景
在讨论“能不能把这段开源代码放进商业产品”之前,必须先回答一个更基础的问题:什么算开源。很多人把“源码公开可见”等同于开源,这是最常见的误解。按照开放源代码促进会(OSI)的定义,一个许可证只有同时满足十项条件,才配得上“开源许可证”这个称号,其中最关键的几条是:允许任何人自由再分发、必须提供源代码或可获取源代码的途径、允许修改和派生作品、不得歧视任何个人或群体、不得限制衍生作品的使用领域。换句话说,“能看见源码”只是必要条件,不是充分条件;一份只允许阅读、禁止商用的“源码可见许可证”,在 OSI 口径下并不属于开源许可证。
理解这一点后,再看整个许可证生态,就不会被五花八门的名字迷惑。业界通常用两条主轴来给许可证分类:一是传染性(copyleft)的强弱,二是是否修改后必须开源。宽松型许可证(Permissive)几乎不限制衍生作品的授权方式,典型代表是 MIT、BSD、Apache-2.0;弱传染型(Weak Copyleft)只要求被修改的那部分库本身保持开源,典型是 LGPL、MPL-2.0;强传染型(Strong Copyleft)则要求整个衍生作品都以相同许可证发布,典型是 GPL-2.0、GPL-3.0、AGPL-3.0。下面这张图把常见许可证按“传染强度—商用友好度”两个维度铺开,并标出它们对商业项目最直接的影响点。
图中最需要商业项目警惕的是右侧红色区域。GPL 系列的核心逻辑是“以开源换开源”:只要你分发的作品构成了 GPL 程序的衍生作品,整个作品就必须以 GPL 发布并提供完整源码。AGPL 更进一步,把“通过网络提供服务”也视为分发,这意味着把 AGPL 组件放进 SaaS 后端,也可能触发向用户提供源码的义务。而 SSPL、BSL 这类许可证虽然源码可见,却因附加了商用限制,并不被 OSI 认可为开源许可证,使用前必须单独评估授权条款。
接下来要厘清一个常被混用的概念:自由软件(Free Software)与开源软件(Open Source)的区别。两者在“用户可以自由使用、研究、修改、分发”这一实践层面高度重叠,绝大多数许可证同时被自由软件基金会(FSF)和 OSI 认可。但它们的出发点不同:自由软件运动由 FSF 发起,强调这是关乎用户自由的伦理问题,因此 FSF 明确反对 DRM、反对软件专利、反对把“开源”当作纯粹的开发方法;而 OSI 的开源定义更偏向工程与商业协作,强调开放开发流程能带来更高质量的软件。这一差异直接体现在许可证态度上:FSF 推荐 GPL 系列,认为宽松许可证无法保护用户自由;OSI 则对宽松与传染型一视同仁。对商业团队而言,理解这层差异的意义在于——不要用“它是开源的”来推断“它没有使用限制”,具体义务永远以许可证原文为准。
那么,许可证选择到底如何影响一个商业项目?可以从三个真实决策点来看。
第一,分发方式决定义务触发点。如果公司只是内部使用某 GPL 工具、不对外分发,通常不触发 GPL 的源码提供义务;但一旦把包含 GPL 代码的固件烧进硬件出货,或把 GPL 库静态链接进对外发布的 App,就必须提供对应源码。这也是为什么很多企业在引入 GPL 组件前,会先确认“是否会分发”。
第二,链接方式影响传染范围。以 LGPL 为例,动态链接调用 LGPL 库时,主程序可以保持闭源,但必须允许用户替换该库的新版本;若改为静态链接,则往往需要提供目标文件或采用其他方式让用户能够重新链接。这个区别在嵌入式与客户端项目中尤为关键。
第三,许可证兼容性决定能否混用。不同许可证的义务可能互相冲突。例如把 GPL-2.0-only 代码与 Apache-2.0 代码合并,就可能因专利条款与版本条款的冲突而无法合法分发;而 GPL-3.0 与 Apache-2.0 则通常兼容。下表给出一个简化的兼容性速查示例,实际项目仍应以许可证原文和法务意见为准。
| 组件 A 许可证 | 组件 B 许可证 | 能否合并分发 | 关键原因 |
|---|---|---|---|
| MIT | GPL-3.0 | 可以 | 宽松型可被更强义务吸收 |
| Apache-2.0 | GPL-2.0-only | 通常不可以 | 专利与版本条款冲突 |
| Apache-2.0 | GPL-3.0 | 可以 | GPL-3.0 明确兼容 Apache-2.0 |
| GPL-2.0-only | GPL-3.0 | 不可以 | only 版本不授权升级 |
| MPL-2.0 | GPL-3.0 | 可以 | MPL 允许次级许可 |