编程进阶网 编程进阶网
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接

杨充

专注编程 · 终身学习者
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接
  • README
  • 质量保障

  • 产品思考

  • 软实力

  • 开发流程

  • Git应用

  • 技术模版

  • 技术规范

  • markdown

  • mermaid

  • license

    • 开源协议完全指南
    • MIT开源协议详解 协议详解
    • Apache开源协议详解 2.0 协议详解
    • GPL与LGPL协议详解 与 LGPL 协议详解
    • BSD与MPL协议详解
    • 开源协议企业实战与常见误区
      • 一、企业引入第三方库:合规清单
        • 1.1 检查清单
        • 1.2 实操:扫描 npm 项目
        • 1.3 实操:Go 项目
        • 1.4 GitHub Actions 自动化
      • 二、企业开源自己的项目:选型流程
        • 2.1 CLA 与 DCO
      • 三、常见误区
        • 误区一:GitHub 上公开的代码就可以随便用
        • 误区二:MIT 协议不需要署名
        • 误区三:修改 GPL 代码但没发布就不违规
        • 误区四:用了 MIT 库,作者负责 bug 导致的损失
        • 误区五:Apache 2.0 和 GPL v2 兼容
        • 误区六:修改了一行 GPL 代码,可以用 MIT 重新发布
        • 误区七:选择 CC 协议适用于代码
      • 四、云服务的协议漏洞与对策
        • 4.1 GPL 的 SaaS 漏洞
        • 4.2 如何堵漏洞
        • 4.3 MongoDB 的教训
      • 五、快速决策矩阵
      • 六、总结
  • 博客部署

  • 技术招聘

  • 测试经验

  • 技术
  • license
杨充
2025-06-06
目录

开源协议企业实战与常见误区

# 企业实战与常见误区

# 一、企业引入第三方库:合规清单

在项目里 npm install 或 go get 之前,先问三个问题:

# 1.1 检查清单

步骤 做什么 工具
1 扫描所有依赖的协议类型 license-checker / FOSSA
2 标记 GPL/AGPL 依赖(高风险) 人工审查
3 检查协议兼容性 SPDX 兼容矩阵
4 创建 NOTICE 文件汇总(Apache 要求) 手动
5 CI 中加入协议检查步骤 GitHub Actions

# 1.2 实操:扫描 npm 项目

# 安装工具
npm install -g license-checker

# 查看所有依赖的协议
license-checker --summary

# 输出示例:
# ├─ MIT: 423
# ├─ Apache-2.0: 87
# ├─ ISC: 56
# ├─ BSD-2-Clause: 23
# ├─ GPL-3.0: 1        ← 🔴 高风险!人工审查这个
1
2
3
4
5
6
7
8
9
10
11
12

# 1.3 实操:Go 项目

# 安装 govulncheck 或使用 go-licenses
go install github.com/google/go-licenses@latest
go-licenses report ./...
1
2
3

# 1.4 GitHub Actions 自动化

# .github/workflows/license-check.yml
name: License Check

on: [push, pull_request]

jobs:
  check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: '18'
      - run: npm ci
      - run: npx license-checker --summary --failOn "GPL;AGPL"
        # 有 GPL 依赖就直接 CI 失败
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 二、企业开源自己的项目:选型流程

Step 1:确定归属
├── 个人项目 → 选 MIT 或 GPL(凭个人偏好)
└── 公司项目 → 通常要求 Apache 2.0(法务要求)

Step 2:确定目标
├── 最大化使用率 → MIT
├── 需要专利保护 → Apache 2.0
├── 防止竞品白嫖 → GPL v3
└── 云服务 → AGPL

Step 3:补充文件
├── LICENSE      → 必选
├── NOTICE       → Apache 2.0 必选
├── CONTRIBUTING → 推荐(贡献指南)
├── CODE_OF_CONDUCT → 推荐(行为准则)
└── CLA/DCO      → 大项目需要(贡献者协议)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 2.1 CLA 与 DCO

CLA(Contributor License Agreement) DCO(Developer Certificate of Origin)
是什么 法律文件,需要签署 git commit -s 加一行
复杂度 高,需要律师 低,自动化
代表项目 Google、Apache 基金会 Linux 内核、K8s
目的 确保贡献者授权公司/基金会使用其代码 证明贡献者有权利贡献

# 三、常见误区

# 误区一:GitHub 上公开的代码就可以随便用

错。 没有 LICENSE 文件的代码默认"All Rights Reserved"——保留所有权利。GitHub 公开 ≠ 开源。

2017 年,有人从 GitHub 无 License 项目中复制代码用于商业项目,原作者起诉侵权,胜诉。

# 误区二:MIT 协议不需要署名

错。 MIT 明确要求保留版权声明。"署名"不是"必须在产品上写名字",而是你必须保留 LICENSE 文件。

# 误区三:修改 GPL 代码但没发布就不违规

对。 GPL 传染只在分发时触发。内部使用不需要开源。但一旦分发给外部,触发传染。

例外:AGPL 下,即使通过 SaaS 提供服务也算分发。

# 误区四:用了 MIT 库,作者负责 bug 导致的损失

错。 几乎所有开源协议都包含"AS IS"免责声明。MIT 写得最直白:

"THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND"

# 误区五:Apache 2.0 和 GPL v2 兼容

错。 Apache 2.0 和 GPL v2 不兼容。但 Apache 2.0 和 GPL v3 兼容。

兼容性速查:

MIT Apache 2.0 GPL v2 GPL v3 MPL 2.0
MIT ✅ ✅ ✅ ✅ ✅
Apache 2.0 ✅ ✅ ❌ ✅ ✅
GPL v2 ✅ ❌ ✅ ❌ ❌
GPL v3 ✅ ✅ ❌ ✅ ✅
MPL 2.0 ✅ ✅ ❌ ✅ ✅

# 误区六:修改了一行 GPL 代码,可以用 MIT 重新发布

错。 GPL 的传染性要求衍生作品也必须用 GPL。修改一行 = 衍生作品。

# 误区七:选择 CC 协议适用于代码

错。 Creative Commons(CC)协议是为图片、文档、音视频等非软件作品设计的。软件请用 MIT/Apache/GPL 等专用软件协议。


# 四、云服务的协议漏洞与对策

# 4.1 GPL 的 SaaS 漏洞

你的产品用 GPL 代码做了个服务,部署在自己服务器上
→ 客户通过网络访问你的服务
→ 你没有"分发"软件给客户
→ GPL 传染不触发 ✅(法律上你赢了)
→ 你可以闭源你的整个服务
1
2
3
4
5

# 4.2 如何堵漏洞

如果你希望即使以 SaaS 形式提供,别人也必须开源:
→ 用 AGPL(Affero GPL)

如果你希望云厂商不能把你的开源软件做成云服务卖钱:
→ 用 SSPL(Server Side Public License,MongoDB 的选择)
  或 BSL(Business Source License)
1
2
3
4
5
6

# 4.3 MongoDB 的教训

2018 年,AWS 基于 MongoDB 社区版(AGPL)推出了 DocumentDB——一个兼容 MongoDB 的云服务。AWS 没有修改 MongoDB 代码,只是做了兼容层,合法避开了 AGPL。

MongoDB 随后将协议改为 SSPL(Server Side Public License):如果你提供该软件的服务,你必须开源整个服务栈(包括管理软件、API、监控等)。 这比 AGPL 更激进,但因此被 OSI 拒绝认定为"开源协议"。


# 五、快速决策矩阵

你的情况 推荐协议
个人小工具,无所谓 MIT
公司项目,需专利保护 Apache 2.0
基础库,希望最大化使用 MIT / Apache 2.0
核心产品,防竞品白嫖 GPL v3
云服务,防云厂商白嫖 AGPL
混合开源/闭源 MPL 2.0
学术机构 BSD 3-Clause
完全放弃 Unlicense
不确定 MIT

# 六、总结

原则 说明
默认选 MIT 90% 场景够用
公司项目选 Apache 2.0 法务更喜欢
GPL 是武器,也是枷锁 你用 GPL,别人也用 GPL,生态兼容性是问题
没有 License ≠ 开源 别人不能合法使用
LICENSE + NOTICE Apache 2.0 的两个必备文件
做一次依赖扫描 别等被告了才发现依赖里有 GPL
#开源协议#企业合规
上次更新: 2026/06/07, 21:36:05
BSD与MPL协议详解
CloudBase 一键部署博客

← BSD与MPL协议详解 CloudBase 一键部署博客→

最近更新
01
信号崩溃快速排查
06-15
02
CoreDump破案
06-15
03
perf火焰图实战
06-15
更多文章>
Theme by Vdoing | Copyright © 2019-2026 杨充 | MIT License | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式