开
开源许可证合规
作者:鹿Sir法律合规v2
开源许可证合规与 SPDX 标准管理:许可证分类(宽松/弱版权/强版权/网络版权)、兼容性矩阵、依赖许可证审计(license-checker)、SBOM 生成(CycloneDX/SPDX)、CI 集成、第三方声明(NOTICES)与风险评估。当用户提到许可证合规、SPDX、GPL/MIT/Apache、许可证兼容性、copyleft、SBOM 或审计依赖许可证时触发。触发词:许可证合规、SPDX、License 审计、copyleft、SBOM、第三方声明。
下载量
355
点赞
89
价格
¥1.49
精选
技能文档
---
name: claude-dev-suite-license-compliance
title: 开源许可证合规
description: 开源许可证合规与 SPDX 标准管理:许可证分类(宽松/弱版权/强版权/网络版权)、兼容性矩阵、依赖许可证审计(license-checker)、SBOM 生成(CycloneDX/SPDX)、CI 集成、第三方声明(NOTICES)与风险评估。当用户提到许可证合规、SPDX、GPL/MIT/Apache、许可证兼容性、copyleft、SBOM 或审计依赖许可证时触发。触发词:许可证合规、SPDX、License 审计、copyleft、SBOM、第三方声明。
category: 法律合规
---
# 开源许可证合规
管理项目的开源许可证合规:理解许可证类型与兼容性、审计依赖许可证、生成 SBOM、维护第三方声明,避免版权违规。
> 注意:本技能不处理依赖安全漏洞(另用供应链安全技能)与代码质量问题。
## 官方参考
| 资源 | 地址 |
|------|------|
| SPDX 许可证列表 | https://spdx.org/licenses/ |
| SPDX 规范 | https://spdx.github.io/spdx-spec/ |
| OSI 认可许可证 | https://opensource.org/licenses/ |
| Choose a License | https://choosealicense.com/ |
| license-checker | https://www.npmjs.com/package/license-checker-rseidelsohn |
## 许可证分类(按宽松程度)
| 类别 | 许可证 | 商用 |
|------|--------|------|
| 公共领域 | Unlicense, CC0-1.0 | 无限制 |
| 宽松型 | MIT, Apache-2.0, BSD-3-Clause, ISC | 允许 |
| 弱版权(Copyleft) | LGPL-3.0, MPL-2.0, EPL-2.0 | 允许(附条件) |
| 强版权 | GPL-3.0, AGPL-3.0 | 必须开源 |
| 网络版权 | AGPL-3.0, SSPL-1.0 | 网络使用即触发 |
常用 SPDX 标识:`MIT`、`Apache-2.0`、`BSD-3-Clause`、`ISC`、`GPL-3.0-only`、`GPL-3.0-or-later`、`LGPL-3.0-only`、`MPL-2.0`、`AGPL-3.0-only`、`Unlicense`。
## 兼容性要点
| 你的项目许可证 | 可引入的依赖 |
|----------------|--------------|
| MIT | MIT, BSD, ISC, Unlicense, CC0 |
| Apache-2.0 | MIT, BSD, ISC, Apache-2.0, Unlicense |
| LGPL-3.0 | MIT, BSD, ISC, Apache-2.0, LGPL, GPL(作为库) |
| GPL-3.0 | 多数许可证(产物须以 GPL 发布) |
| 专有软件 | MIT, BSD, ISC, Apache-2.0(注意署名) |
**典型不兼容**:GPL-2.0-only × Apache-2.0(专利条款冲突);GPL-3.0 × GPL-2.0-only;AGPL-3.0 × 闭源 SaaS(网络条款);SSPL-1.0 未经 OSI 认可。
## 技能工作流
### 步骤1:审计依赖许可证(NPM)
```bash
npm install -g license-checker-rseidelsohn
license-checker --summary # 汇总
license-checker --production --json # 仅生产依赖,JSON 输出
# 白名单校验:只允许指定许可证
license-checker --onlyAllow "MIT;Apache-2.0;BSD-3-Clause;ISC;0BSD"
# 遇到 copyleft 许可证直接失败
license-checker --failOn "GPL-3.0;AGPL-3.0;GPL-2.0"
```
也可用 `@onebeyond/license-checker`(`scan --allowOnly ...`、`check "MIT OR Apache-2.0"`)或 `license-compliance`(`--production --allow ... --report licenses.csv`)。
### 步骤2:生成 SBOM
```bash
# CycloneDX
npm install -g @cyclonedx/cyclonedx-npm
cyclonedx-npm --output-file sbom.json
cyclonedx-npm --output-format XML --output-file sbom.xml
# SPDX(Syft)
syft . -o spdx-json > sbom-spdx.json
syft validate sbom-spdx.json
```
### 步骤3:接入 CI 流水线
```yaml
name: License Compliance
on: [push, pull_request]
jobs:
license-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: '20' }
- run: npm ci
- name: 许可证检查
run: |
npx license-checker-rseidelsohn --production \
--onlyAllow "MIT;Apache-2.0;BSD-3-Clause;BSD-2-Clause;ISC;0BSD;Unlicense;CC0-1.0" \
--excludePrivatePackages
- name: 生成 SBOM
run: npx @cyclonedx/cyclonedx-npm --output-file sbom.json
- uses: actions/upload-artifact@v4
with: { name: sbom, path: sbom.json }
```
也可在 `package.json` 加本地钩子:
```json
{
"scripts": {
"license:check": "license-checker --production --onlyAllow 'MIT;Apache-2.0;BSD-3-Clause;ISC'"
}
}
```
### 步骤4:维护第三方声明(NOTICES)
| 许可证 | 署名要求 |
|--------|----------|
| MIT / BSD-3-Clause / ISC | 保留版权声明 + 许可证文本 |
| Apache-2.0 | 版权 + 许可证 + NOTICE 文件(如有) |
| LGPL-3.0 | 提供修改部分的源码 |
| GPL-3.0 | 提供完整源码 |
自动生成:
```bash
license-checker --production --customFormat '{"name": "", "version": "", "license": "", "repository": ""}' \
| jq -r '.[] | "- \(.name)@\(.version) - \(.license)\n \(.repository)\n"' \
> NOTICES.md
```
## 风险评估
**高风险(专有软件避免使用)**:GPL-3.0(强版权,改用 LGPL 版本或替代品)、AGPL-3.0(网络版权,SaaS 产品避免)、SSPL-1.0(服务限制)、CPAL-1.0(UI 署名要求)。
**中风险(谨慎评审)**:LGPL-3.0(确保动态链接)、MPL-2.0(修改文件单独分离)、EPL-2.0(审查专利条款)。
**低风险(一般安全)**:MIT、Apache-2.0(附 NOTICE)、BSD-3-Clause、ISC——保留版权与许可证声明即可。
## 合规检查清单
**初始配置**:选定项目许可证;仓库加入 LICENSE 文件;package.json 填 license 字段;CI 配置 license-checker。
**持续合规**:新增依赖前先审计;PR 评审拒绝不兼容许可证;发版生成 SBOM;维护 NOTICES;关注依赖升级中的许可证变更。
**发布**:分发包含 LICENSE;第三方声明已生成;发布物附带 SBOM;无 copyleft 违规。
## 常见反模式与排错
| 问题 | 原因 | 解决 |
|------|------|------|
| 加依赖前不查许可证 | 法律风险、copyleft 违规 | CI 中集成 license-checker |
| 专有软件引入 GPL | 整个应用必须开源 | 改用 MIT/Apache 或以 LGPL 库方式隔离 |
| 无 NOTICES 文件 | 违反许可证条款 | 从依赖自动生成 |
| 升级后许可证变化未察觉 | 新版本可能换许可证 | 审查 Dependabot PR 中的许可证字段 |
| 使用无许可证的包 | 法律状态不明 | 只用许可证明确的包 |
| license-checker 安装即失败 | package.json 缺 license 字段 | 补 `"license": "MIT"` |
| 同一包多许可证 | 双许可 | 选择兼容的一份(通常 MIT/Apache) |
| SPDX 校验失败 | 标识符不合法 | 使用 spdx.org/licenses 上的精确 ID |使用说明
# 开源许可证合规 开源许可证合规与 SPDX 标准管理:许可证分类、兼容性检查、依赖审计、SBOM 生成与第三方声明。 ## 功能 - 许可证分类速查(宽松/弱版权/强版权/网络版权)与兼容性矩阵 - NPM 依赖许可证审计:license-checker 白名单/黑名单校验 - SBOM 生成:CycloneDX 与 SPDX(Syft) - CI 集成示例(GitHub Actions)与 NOTICES 自动生成 - 风险分级评估与合规检查清单 ## 最简用法 ```bash # 审计当前项目依赖,仅允许宽松许可证 npx license-checker-rseidelsohn --production --onlyAllow "MIT;Apache-2.0;BSD-3-Clause;ISC" ``` 或直接对 Agent 说: ```text 帮我审计项目的依赖许可证,生成 SBOM 和 NOTICES 文件 ```
支持平台:Qoder · QoderWork · Claude · Codex 等 AI 编程助手