Composer license字段怎么写 开源协议配置规范说明【文档】

8次阅读

composer 的 license 字段必须使用 SPDX 官方短标识符,如 “MIT” 或 [“MIT”, “GPL-2.0-or-later”],填错会导致验证失败、合规工具漏报及依赖分析失效;私有项目应使用 “proprietary”,不可用自然语言或非标准写法。

Composer license字段怎么写 开源协议配置规范说明【文档】

Composer 的 license 字段只接受 SPDX 标识符

Composer 不识别自然语言描述(如 "MIT License""apache 2.0"),必须使用 SPDX 官方短标识符。写错会导致 composer validate 报错或依赖分析工具无法识别协议类型。

常见正确写法:

  • "license": "MIT"
  • "license": ["MIT", "GPL-2.0-or-later"](多协议用数组)
  • "license": "proprietary"(闭源项目,SPDX 允许的特殊值)

错误示例:"license": "The MIT License (MIT)""license": "apache-2"(非 SPDX 标准写法)、"license": "BSD"(不明确是 BSD-2-Clause 还是 BSD-3-Clause)。

如何查一个协议对应的 SPDX 标识符

直接访问 https://www.php.cn/link/f164ba76f5fba1522bfbb098c4597aa6,用页面右上角搜索框输入关键词(如 mitapachebsd)。注意区分变体:

  • BSD-2-ClauseBSD-3-Clause 是不同标识符,不能混用
  • GPL-2.0-onlyGPL-2.0-or-later 法律效力不同,选错可能影响下游合规
  • LGPL-3.0-or-later 不等于 LGPL-3.0-only

不确定时,优先查项目原始 LICENSE 文件头 —— 大多数主流开源项目会在第一行注明 SPDX-License-Identifier,例如:SPDX-License-Identifier: MIT

license 字段为空或填错会有什么实际影响

表面上 composer install 可能照常运行,但真实风险在下游:

  • 企业级依赖扫描工具(如 synkFOSSAWhiteSource)会跳过无 license 或非法 license 声明的包,导致合规报告漏报
  • 某些 CI 流程(如 gitHub Actions 中的 composer validate --strict)会直接失败
  • Packagist.org 页面不显示协议类型,降低用户信任度
  • phpStan / Psalm 等静态分析工具在检查许可证兼容性时无法参与推理

私有包和内部组件怎么填 license

私有代码库不等于可以留空或乱填。推荐做法:

  • 内部服务/SDK:用 "license": "proprietary"(SPDX 官方认可,语义清晰)
  • 已签署 NDA 的客户定制包:仍建议写 proprietary,并在 readme.md 补充法律说明路径,例如:See LICENSE-CUSTOMER-A.pdf
  • 禁止写 "license": "unlicensed" —— 这不是 SPDX 合法值,且易被误读为“放弃版权”

真正麻烦的是混合协议场景:比如主代码 MIT,但某 vendor 子模块含 GPL 组件。这种不能靠 license 字段规避,必须在 NOTICE 或文档中单独声明,并考虑是否违反 GPL 传染性。

text=ZqhQzanResources