开源许可现状
开发人员经常在软件中引入开源的代码片段、函数、方法和操作代码。因此,软件代码中经常会包含各种声明不同许可证的子组件。这些子组件的许可证条款和条件与项目整体主许可证的条款和条件冲突时,就会产生许可证合规风险。
Synopsys 2023 Open Source Security and Risk Analysis(《2023开源安全和风险分析(OSSRA)》)报告显示,在2022年审计的所有代码库中,54%的代码库包含与主许可证冲突的开源内容。
Creative Commons ShareAlike 3.0(CC BY-SA 3.0)是今年最常见的引发许可证冲突的许可证。该许可证要求署名、非商业性使用及相同方式共享。在开发人员中很流行的在线问答平台Stack Overflow对这一许可证的流行起到了很大的助推作用。
从行业角度来看,去年,计算机硬件和半导体行业中93%的代码库存在开源许可证冲突;今年这一数字下降到了75%。总体而言,全行业的许可证冲突情况都有类似的改善。今年,冲突比例最高的是物联网行业(78%)。
许可证合规风险
软件产品默认受版权保护;未经创作者/作者以许可形式授予的明确许可,任何人不得非法使用、复制、分发或修改该软件。即使是相对宽松友好的开源许可证也规定了用户使用、修改和分发开源软件的一些行为准则。
当代码库中包含的开源代码的许可证与代码库的整体许可证相冲突时,就会产生潜在的许可证风险。GPL许可证族是开源项目中比较常见的许可证,当使用GPL许可证的代码被包含在商业或闭源软件中时,很大概率会产生许可证合规风险。
此外,通用开源许可证的变体可能会对代码的授权提出附加要求。例如,JSON许可证就是在MIT许可证的基础上增加了“软件仅限用于善意用途,严禁用于恶意用途”的限制。但这一表述在实际情况中又过于模糊,可能需要进一步法律专业层面的评估。
按风险划分的开源许可证
下表列出了过去一年(2022-2023)被使用最多的开源许可证及它们在合规问题上的风险等级以供参考(整理自《2023开源安全和风险分析(OSSRA)》)。
*包括组件声明公开但未声明具体的公共许可的情况,如Unlicense或CC。
开源安全共建
感谢每一位开源社区成员对OpenSCA的支持和贡献。OpenSCA的代码会在GitHub和Gitee持续迭代,欢迎Star和Fork,也欢迎向我们提交ISSUE和PR,参与我们的开源安全共建计划,与社区成员共同建设充满可能性的开源解决方案。