属于我们的Compliance & Regulation系列
阅读完整指南开源许可证合规性:软件公司实用指南
平均商业应用程序包含 77% 的开源代码,分布在 500 多个依赖项中。 每个依赖项都有自己的许可证和特定义务。违反这些义务将使您的公司面临诉讼、强制代码披露和声誉受损。然而,大多数公司没有跟踪或遵守开源许可证的流程。
本指南为开源许可证合规性提供了一个实用的框架,从许可证分类到自动扫描和 SBOM 生成。
要点
- 并非所有开源许可证都是相同的:宽松许可证几乎允许任何内容,copyleft 许可证要求您共享修改
- 软件物料清单 (SBOM) 正在成为政府采购的法律要求(美国行政命令 14028)
- CI/CD 中的自动许可证扫描可防止不合规的依赖项进入您的代码库
- Copyleft“感染”风险是真实存在的:一项 GPL 依赖项可能会迫使您开源整个应用程序
许可证类别
许可许可证(低风险)
|许可证|义务|商业用途|改装|分销| |--------|---------|----------------|------------||------------| |麻省理工学院 |包括版权声明+许可|是的 |是的 |是的 | | BSD 2 条款 |包括版权声明+许可|是的 |是的 |是的 | | BSD 3 条款 |相同+无代言声明|是的 |是的 |是的 | |阿帕奇2.0 |包括通知+许可+状态变更+专利授予 |是的 |是的 |是的 | |国际标准委员会 |包括版权声明+许可|是的 |是的 |是的 |
可安全用于商业用途。 在您的分发中包含许可文本和版权声明。 Apache 2.0 还要求注明对原始代码的任何更改,并包含专利许可。
弱 Copyleft(中等风险)
| 许可证 | 义务 | 关键限制 |
|---|---|---|
| LGPL v2.1/v3 | 分享对 LGPL 代码的修改;如果动态链接,您的代码将保持专有 | 静态链接可能会触发copyleft |
| MPL 2.0 | 共享对 MPL 文件的修改;新文件可以是专有的 | 文件级 Copyleft |
| 英超2.0 | 共享修改;提供辅助许可证选项 | 模块级 Copyleft |
谨慎使用。 将 LGPL 库保留为共享(动态)库,而不是静态链接。将 MPL 许可的代码与您的专有代码保存在单独的文件中。
强 Copyleft(高风险)
| 许可证 | 义务 | 关键限制 |
|---|---|---|
| GPL v2 | 衍生作品必须获得 GPL 许可 | 链接创造衍生作品 |
| GPL v3 | 与v2相同+反tivoization+专利授权 | 更广泛的版权左 |
| AGPL v3 | 与 GPL v3 相同 + 网络使用触发 Copyleft | 服务器端使用计数 |
| SSPL | 整个“服务”堆栈必须开源 | 最广泛的版权 |
商业软件的风险最高。 在应用程序中使用 GPL 代码可能需要您根据 GPL 发布整个应用程序。 AGPL 将其扩展到服务器端软件——即使您从不分发二进制文件,将软件作为 Web 服务提供也会触发 Copyleft 义务。
合规工作流程
第 1 步:生成 SBOM
# For Node.js projects (using CycloneDX)
npx @cyclonedx/cyclonedx-npm --output-file sbom.json --spec-version 1.5
# For Python projects
pip install cyclonedx-bom
cyclonedx-py environment --output sbom.json
# For multi-language projects (using Syft)
syft . -o cyclonedx-json > sbom.json
Step 2: Scan for License Compliance
# Using license-checker for Node.js
npx license-checker --production --json --out licenses.json
# Using scancode-toolkit (comprehensive, all languages)
scancode --license --copyright --output-json scan-results.json .
第 3 步:分类并批准
创建批准的许可证列表:
{
"approved": [
"MIT", "BSD-2-Clause", "BSD-3-Clause", "Apache-2.0",
"ISC", "0BSD", "Unlicense", "CC0-1.0"
],
"conditional": [
"LGPL-2.1", "LGPL-3.0", "MPL-2.0", "EPL-2.0"
],
"prohibited": [
"GPL-2.0", "GPL-3.0", "AGPL-3.0", "SSPL-1.0",
"EUPL-1.2", "OSL-3.0"
]
}
步骤 4:CI/CD 集成
# .github/workflows/license-check.yml
name: License Compliance
on: [pull_request]
jobs:
check-licenses:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: pnpm install --frozen-lockfile
- name: Check licenses
run: |
npx license-checker --production --excludePackages "" \
--failOn "GPL-2.0;GPL-3.0;AGPL-3.0;SSPL-1.0" \
--summary
SBOM(软件物料清单)
为什么 SBOM 很重要
- 美国行政命令 14028 要求出售给美国政府的软件具有 SBOM
- 欧盟网络弹性法案将要求在欧盟销售的软件具有 SBOM
- 供应链安全:SBOM 可实现快速漏洞响应(当 log4j 发生时,您知道自己是否受到影响)
- 客户信任:企业买家在采购过程中越来越多地要求 SBOM
SBOM 标准
| 标准 | 格式 | 维护者 | 领养 |
|---|---|---|---|
| 旋风DX | JSON、XML | OWASP | 成长(npm 默认) |
| SPDX | JSON、RDF、标签值 | Linux 基金会 | 成立(ISO/IEC 5962:2021) |
| SWID | XML | 美国国家标准技术研究院 | 政府 |
建议:CycloneDX 适用于大多数软件公司。它更简单,具有更好的工具支持,并且正在成为行业默认设置。
常见合规场景
场景 1:Node.js Web 应用程序
典型的 node_modules 目录包含 500-2,000 个包。绝大多数使用 MIT 或 ISC 许可证。常见问题:
- 使用 GPL 的传递依赖项(您没有直接添加它们)
UNKNOWN需要手动调查的许可证字段- 单个软件包上的多个许可证(例如“MIT OR Apache-2.0”)
行动:每周运行 npx license-checker --production。调查任何非许可许可证。 Replace GPL dependencies with permissive alternatives.
场景 2:Odoo 模块开发
Odoo 社区版是 LGPL v3。 Odoo Enterprise 是专有的。您的自定义模块:
- 社区模块:必须是 LGPL v3 或兼容(如果已分发)
- 私有内部模块:未分发,因此 LGPL 不适用
- 企业附加组件:必须遵守 Odoo Enterprise 许可条款
场景 3:具有 AGPL 依赖项的 SaaS
如果您的 SaaS 应用程序使用 AGPL 许可的代码(例如,切换到 SSPL 之前的 MongoDB),您必须:
- 在 AGPL 下发布您的整个应用程序源代码
- 删除 AGPL 依赖项并使用替代方案
- 获得AGPL项目的商业许可(如果有)
即使您从不“分发”二进制文件,服务器端使用 AGPL 代码也会触发 Copyleft 义务。
常见问题
在我们的 API 中使用 GPL 库是否会迫使我们开源 API?
这取决于你如何使用它。如果 GPL 库链接到您的应用程序(静态或动态),FSF 的立场是您的应用程序是“衍生作品”,必须根据 GPL 获得许可。如果您通过网络 API(例如,使用 GPL 许可的数据库服务器)与 GPL 软件进行通信,则通常不被视为衍生作品。针对您的具体案件咨询律师。
如果依赖项更改其许可证怎么办?
您受获得代码时所依据的许可证的约束,而不是未来许可证更改的约束。但是,如果您使用新许可证更新到新版本,则新许可证适用于该版本。这就是为什么具有版本固定功能的 SBOM 很重要——它们准确记录了您正在使用的版本(和许可证)。
我们如何处理“未知”许可证的依赖关系?
检查包的存储库中是否有许可证文件。如果未指定许可证,则该代码在技术上受到完全版权保护——您无权使用、修改或分发它。要么找到许可证(它可能位于非标准位置),请求作者添加许可证,要么用明确许可的替代方案替换依赖项。
我们需要为 MIT 许可的软件包提供归属吗?
是的。麻省理工学院和大多数宽松的许可证要求您在分发软件时包含版权声明和许可证文本。对于 Web 应用程序,这通常意味着包含第三方通知文件或列出所有开源组件及其许可证的页面。
建立合规计划
季度合规审查
- 为所有项目重新生成 SBOM
- 扫描自上次审核以来添加的新依赖项
- 检查更新包中的许可证更改
- 查看出现的任何“未知”许可证
- 如果遇到新许可证,则更新批准的许可证列表
- 存档 SBOM 快照以进行审计跟踪
合规角色
| 角色 | 责任 |
|---|---|
| 工程主管 | 审查 PR 中的依赖项添加 |
| 法律/合规 | 维护批准的许可证列表,审查边缘案例 |
| 安全 | 与许可证扫描一起扫描易受攻击的依赖项 |
| 产品负责人 | 决定产品是否接受有条件许可证 |
对于小团队来说,轻量级合规计划每季度需要 2-4 小时,并且可以避免在产品发布后或尽职调查期间发现合规问题而付出更大的成本。
接下来会发生什么
许可证合规性是软件治理的一方面。将其与针对您自己的代码的IP 保护、针对供应商软件的SaaS 协议要点 以及针对安全合规性的网络安全监管要求 相结合。
联系 ECOSIRE 以获取开源合规性审计和 SBOM 生成服务。
由 ECOSIRE 发布——帮助企业负责任地使用开源。
作者
ECOSIRE TeamTechnical Writing
The ECOSIRE technical writing team covers Odoo ERP, Shopify eCommerce, AI agents, Power BI analytics, GoHighLevel automation, and enterprise software best practices. Our guides help businesses make informed technology decisions.
相关文章
化工行业 ERP:安全、合规性和批量处理
ERP 系统如何管理化学品公司的 SDS 文件、REACH 和 GHS 合规性、批量处理、质量控制、危险品运输和配方管理。
适用于进出口贸易的 ERP:多货币、物流与合规性
ERP 系统如何为贸易公司处理信用证、海关文件、国际贸易术语解释通则、多币种损益表、集装箱跟踪和关税计算。
十大开源 ERP 系统比较(2026 版)
2026年排名前10的开源ERP系统综合比较:Odoo、ERPNext、iDempiere、Tryton、Dolibarr、Metasfresh、Axelor、Flectra、LedgerSMB、Crater。
更多来自Compliance & Regulation
电子商务网络安全:2026 年保护您的业务
2026 年完整电子商务网络安全指南。PCI DSS 4.0、WAF 设置、机器人防护、支付欺诈预防、安全标头和事件响应。
化工行业 ERP:安全、合规性和批量处理
ERP 系统如何管理化学品公司的 SDS 文件、REACH 和 GHS 合规性、批量处理、质量控制、危险品运输和配方管理。
适用于进出口贸易的 ERP:多货币、物流与合规性
ERP 系统如何为贸易公司处理信用证、海关文件、国际贸易术语解释通则、多币种损益表、集装箱跟踪和关税计算。
使用 ERP 进行可持续发展和 ESG 报告:2026 年合规指南
通过 ERP 系统在 2026 年实现 ESG 报告合规性。涵盖 CSRD、GRI、SASB、范围 1/2/3 排放、碳追踪和 Odoo 可持续性。
审核准备清单:准备好您的书籍
完整的审计准备清单,涵盖财务报表准备情况、支持文件、内部控制文件、审计员 PBC 清单和常见审计结果。
澳大利亚电子商务企业商品及服务税指南
完整的澳大利亚电子商务企业 GST 指南,涵盖 ATO 注册、75,000 美元门槛、低值进口、BAS 申报和数字服务 GST。