Skip to content

主流开源许可证对比

以下是当前主流开源许可证的对比总结,涵盖 MIT、Apache-2.0、BSD(2/3-Clause)、GPLv3、LGPLv3、AGPLv3 六种最常用协议,从自由度、商业友好性、传染性、专利条款等维度进行清晰对比,便于开发者和企业做合规决策。


📊 主流开源许可证核心特性对比表

特性 / 协议MITBSD (2/3-Clause)Apache-2.0GPLv3LGPLv3AGPLv3
类型宽松型宽松型宽松型强 Copyleft弱 Copyleft强 Copyleft(+网络)
✅ 允许商用
✅ 允许修改
🔒 要求衍生作品开源?(整个项目)仅对库本身(含 SaaS 场景)
🧬 传染性(Copyleft)弱(文件/模块级)极强(含网络使用)
📜 需保留版权声明是(+ NOTICE 文件)
⚖️ 明确专利授权❌ 否❌ 否✅ 是✅ 是✅ 是✅ 是
🛡️ 专利报复条款❌ 否❌ 否✅ 是✅ 是✅ 是✅ 是
™️ 商标使用限制❌ 否✅ 3-Clause 有限制✅ 禁止使用项目商标❌ 通常无❌ 通常无❌ 通常无
💼 可用于闭源软件?✅ 是✅ 是✅ 是❌ 否(若分发)动态链接可❌ 否(若通过网络提供服务)
☁️ SaaS 使用是否需开源?✅ 是(必须提供源码)
🔗 静态链接 GPL 库后果触发整个项目开源可能触发(建议动态链接)触发
🌐 兼容 GPLv3?✅ 是✅ 是✅ 是自身✅ 是自身

📌 各协议适用场景建议

协议适合场景不适合场景
MIT快速传播、小工具库、希望被广泛集成(如前端框架 React、jQuery)涉及专利风险或需要法律严谨性的项目
BSD学术项目、系统级软件(如 FreeBSD)、苹果/macOS 部分组件对品牌保护要求高(3-Clause 可缓解)
Apache-2.0企业级项目、AI/大数据平台(如 TensorFlow、Kafka)、需专利保障极简项目(嫌 LICENSE + NOTICE 太繁琐)
GPLv3希望确保所有衍生作品永远开源(如 Linux 内核注:实际用 v2、GCC、Bash)商业闭源产品、SaaS 平台(除非愿意开源)
LGPLv3开源库作者希望被闭源软件使用,但保护库本身(如 Qt、GTK)应用程序整体开源意愿强(不如直接用 GPL)
AGPLv3SaaS 场景下防止“白嫖”(如早期 MongoDB、Rocket.Chat)任何不希望因网络访问而强制开源的项目

注:Linux 内核使用的是 GPLv2 only,未升级到 v3。


🔍 关键概念解释

  • 传染性(Copyleft):指许可证是否“传染”到使用它的衍生作品。

    • 强 Copyleft(GPL/AGPL):整个项目必须开源。
    • 弱 Copyleft(LGPL/MPL):仅修改的部分需开源。
    • 无 Copyleft(MIT/Apache/BSD):随便用,不开源也行。
  • SaaS 与 AGPL
    GPLv3 不要求 SaaS 开源(因为未“分发”软件),但 AGPLv3 明确规定:只要用户通过网络与软件交互,就必须提供源代码。

  • 动态链接 vs 静态链接(LGPL)
    LGPL 允许闭源程序动态链接其库而不触发开源;但静态链接可能被视为衍生作品,存在法律风险。


✅ 总结:如何选择?

你的目标推荐许可证
最大化采用率,简单自由MIT
需要专利保护 + 企业信任Apache-2.0
发布一个希望被闭源软件使用的库LGPLv3MPL-2.0
确保所有改进都回馈社区GPLv3
防止云厂商“免费使用不开源”AGPLv3
学术或系统底层项目BSD

如需合规审查,建议:

  1. 避免混用强 Copyleft 与闭源代码
  2. 记录所有依赖的许可证类型
  3. 咨询法务或使用 SPDX 工具扫描(如 FOSSA、Black Duck)。

开源不是“免费使用”,而是“自由使用 + 责任承担”。选对许可证,才能既保护自己,又促进生态。


如果你需要开发闭源商业软件(即不开源自己的代码),那么在选择第三方开源库时,最安全、最推荐的确实是 MIT 和 Apache License 2.0 的库。但不仅如此——还有其他几个宽松型许可证也可以安全使用。

下面为你系统梳理:

✅ 可以安全用于闭源商用的许可证(推荐使用)

这些许可证属于 “宽松型”(Permissive Licenses),不要求衍生作品开源,只需满足少量条件(如保留声明):

许可证 是否可用于闭源商用? 注意事项


MIT ✅ 是 必须保留原始版权声明和许可文本 Apache-2.0 ✅ 是 保留 LICENSE + NOTICE(如有);修改文件需标注;禁止用项目商标推广 BSD 2-Clause ✅ 是 保留版权声明 + 免责声明 BSD 3-Clause ✅ 是 额外禁止使用原作者名义做背书/推广 ISC ✅ 是 与 MIT 几乎等价,更简洁 Unlicense / CC0 ✅ 是 相当于“放弃版权”,可任意使用(但法律效力因国家而异) 🔹 这些许可证都 无 Copyleft(无传染性),你可以将它们集成到闭源商业产品中,无需公开你自己的源代码。

⚠️ 谨慎使用或禁止用于闭源商用的许可证

许可证 能否用于闭源商用? 风险说明


GPLv2 / GPLv3 ❌ 不能(若分发) 一旦静态/动态链接并分发,整个项目必须以 GPL 开源 AGPLv3 ❌ 不能(即使 SaaS) 只要用户通过网络访问你的服务,就可能触发开源义务 LGPLv2.1 / LGPLv3 ⚠️ 有条件可以 - 动态链接通常安全
- 静态链接或修改库本身可能触发开源
- 建议咨询法务 MPL-2.0 ⚠️ 部分可以 仅要求修改过的 MPL 文件开源,其他代码可闭源(适合模块化项目) 🔸 举例: 用 LGPL 库 → 如果只是动态调用(如 .dll / .so),且未修改库源码,一般可闭源。 用 GPL 库 → 即使只改一行代码并打包分发,整个产品必须开源!

🛡️ 闭源商用选型最佳实践

  1. 优先选择 MIT / Apache-2.0 / BSD 类库 ——法律风险最低,社区接受度高,大厂广泛使用。

  2. 避免直接依赖 GPL/AGPL 项目 ——除非你愿意开源整个产品,或能通过进程隔离 + 网络通信(如独立微服务)规避“链接”关系。

  3. 使用依赖扫描工具 ——如 FOSSA、Snyk、Black Duck、scancode-toolkit,自动检测项目中的许可证风险。

  4. 保留合规证据 ——在产品文档或 About 页面中列出使用的开源组件及其许可证(尤其是 Apache-2.0 的 NOTICE 内容)。

📌 总结 闭源商业软件开发,推荐使用以下许可证的库: ✅ MIT、✅ Apache-2.0、✅ BSD(2/3-Clause)、✅ ISC 应避免或极度谨慎使用: ❌ GPL、❌ AGPL(除非你准备开源) ⚠️ LGPL / MPL(需评估集成方式)

因此,你的理解基本正确:MIT 和 Apache-2.0 是闭源商用最主流、最安全的选择,但 BSD、ISC 等同样可用。关键在于 避开强 Copyleft(传染性)许可证。

如需构建长期合规的商业产品,建议建立开源许可证白名单机制,并定期审计依赖项。


这是一个非常重要且常被忽视的问题:在 Web 网站(尤其是前端或全栈项目)中,是否需要为使用的第三方开源包(如 npm、pip、Go modules 等依赖)声明版权和许可证信息?

✅ 简短回答

是的,在大多数情况下,你需要为使用的开源包进行合规声明——
尤其是当这些包采用 MIT、Apache-2.0、BSD 等宽松许可证时,声明是许可证的明确法律要求。


一、为什么需要声明?

几乎所有主流开源许可证都包含 “保留原始版权声明和许可文本” 的义务。例如:

许可证相关条款
MIT“The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.”
Apache-2.0必须在分发时包含 LICENSE 文件,并在 NOTICE 文件存在时一并包含
BSD必须保留版权声明、条款列表和免责声明

📌 关键点:“分发”(distribution)包括将代码打包后部署到用户浏览器(前端)或服务器(后端)供公众访问。

对于 Web 网站:

  • 前端代码(JS/CSS)被打包后发送给用户浏览器 → 属于“分发”
  • 后端服务虽不直接暴露源码,但若使用了 GPL/AGPL 等强 Copyleft 协议,则可能触发更严格义务

二、什么情况下必须声明?

✅ 需要声明的情况

  1. 你的网站前端使用了开源 JS 库(如 React、Vue、Lodash、Axios 等);
  2. 你修改了这些库的源码
  3. 你将这些库打包进生产环境代码并提供给用户(几乎所有现代 Web 应用都如此)。

❌ 可能不需要(但仍有争议)

  • 仅通过 <script src="https://cdn.jsdelivr.net/npm/vue@3/dist/vue.global.js"> 引用 CDN(未“复制分发”),部分观点认为无需声明,但保守做法仍建议注明
  • 后端仅内部调用开源库且不对外提供源码(如 Python/Django 服务),对 MIT/BSD/Apache 通常无强制公开义务,但仍建议保留 LICENSE(用于审计合规)。

⚠️ 注意:GPL/AGPL 有更严格要求,即使间接使用也可能触发开源义务,需特别谨慎。


三、如何正确声明?(最佳实践)

方式 1:在网站页脚或“关于”页面添加“开源许可证”链接

  • 创建独立页面:/oss-licenses/third-party-notices
  • 列出所有使用的开源包及其许可证

示例页面结构

html
<h2>Third-Party Licenses</h2>
<p>This website uses the following open source software:</p>

<ul>
  <li>
    <strong>React</strong> – MIT License<br>
    Copyright (c) Facebook, Inc. and its affiliates.<br>
    <a href="/licenses/react-license.txt">View License</a>
  </li>
  <li>
    <strong>Lodash</strong> – MIT License<br>
    Copyright (c) JS Foundation and other contributors.<br>
    <a href="/licenses/lodash-license.txt">View License</a>
  </li>
  <!-- 更多... -->
</ul>

方式 2:自动生成许可证清单(推荐)

使用工具自动收集依赖的许可证信息:

前端(npm/yarn)

bash
# 生成 licenses.html
npx license-checker --summary --out licenses.html

# 或使用更美观的工具
npx @angular/cli generate license-report  # Angular
npx webpack-license-plugin            # Webpack 插件

后端(Python)

bash
pip-licenses --format=html --output-file=third_party_licenses.html

方式 3:将 LICENSE 和 NOTICE 文件打包到部署资源中

  • public/licenses/ 目录下存放各项目的 LICENSE 文件;
  • 确保 Apache-2.0 项目的 NOTICE 文件也被包含(如有)。

四、常见误区

误区正确理解
“我只是用了 npm install,没改代码,不用声明”❌ 错!只要分发(用户下载 JS),就必须保留版权和许可声明
“我的网站是闭源的,所以不用管开源许可证”❌ 错!闭源 ≠ 免除许可证义务,MIT/Apache 要求的是“保留声明”,不是“开源你的代码”
“CDN 引用就不用管”⚠️ 有争议,但为规避风险,建议至少在“致谢”或“技术栈”页面提及

五、企业级合规建议

  1. 建立开源依赖清单(SBOM, Software Bill of Materials);
  2. 使用自动化工具扫描许可证(如 Snyk, FOSSA, WhiteSource);
  3. 禁止引入 GPL/AGPL 依赖(除非法务批准);
  4. 在 CI/CD 流程中加入许可证检查
  5. 在网站提供清晰的“第三方软件声明”页面

✅ 总结

场景是否需要声明?如何做?
前端使用 MIT/Apache/BSD 的 npm 包必须在网站提供许可证页面,列出包名、版权、许可证全文
后端使用开源库(未分发源码)⚠️ 建议保留 LICENSE(用于审计)在代码仓库或部署包中包含 LICENSE 文件
使用 GPL/AGPL 库极高风险避免使用,或准备开源整个项目

🌐 一个专业的网站,不仅要有隐私政策,也应尊重开源社区的劳动成果——合规声明既是法律要求,也是技术素养的体现。

如需快速生成,可参考 GitHub 上的模板项目,如 google/third-party-notices

Released under the ISC License.