作者简介
冯才效,SEAL 安全工程师,拥有6年云计算领域经验,先后参与 Rancher, Harvester 等开源项目。现致力于编写开发者友好型的软件供应链安全检修工具。
开源软件运动兴起于上个世纪,近几年在国内愈发活跃,各类开源项目如雨后春笋般涌现。与此同时,大部分企业开始拥抱开源。开源软件的使用避免重复造轮子,提升了产品研发效率,但同时也可能会带来隐藏的风险。
开源软件和商业软件不同,开源软件是面向公众开放软件源代码,代码的获取者享受在其许可证授权范围内操作开源软件的权利。不同许可证之间,具体条款可能存在冲突。因此,开源许可证合规是风险防控的重要考虑因素之一。
开源软件合规风险
知识产权纠纷
开源软件并不意味着用户可以自由使用,而是通过许可证规定使用者使用、修改和发布软件的权利。大多数现代软件都集成了大量的开源组件,它们使用的许可证在具体的条款上存在差异,不遵守许可证规定使用,将可能造成侵权,严重时可能会面临法律诉讼,产品召回等风险。
许可证冲突
不同许可证的条款各不相同,开发软件的过程中也将多个不同的开源组件合并成新软件,若使用的开源软件许可证条款之间存在冲突,将可能使得合并成的新软件不合法。Ruby Rails 团队就曾遇到该问题。GPLv2 许可证的 mimemagic 使用了 MIT 许可证的 shared-mime-info 软件,这两种许可证是不兼容的。mimemagic 的作者在被告知后将最新版的 0.4.0 和 0.3.6 移动到 GPLv2 下。但是 Ruby on Rails 和其他使用了该包的软件都受到了影响,成千上万的团队都可能要做出调整,最终 Rails 用 Marcel 替换了 mimemagic。
私有软件开源
在引入使用了传染型许可证的开源软件时,依据该许可证的要求,可能使得私有软件必须也继承该许可证,进而被要求公开私有源代码。
企业如何进行合规检查?
制定开源合规策略
开源合规策略是基于开源软件许可证的基础条款、现行政策并结合使用者自身情况,制定的一系列使用开源软件的条件。构建开源合规策略是合规检查的基础。
- 梳理开源许可证条款
梳理开源软件常用许可证相关条款,构建易读快捷查询的手册。
- 构建许可证分组策略
对常用许可证进行分组。自由使用许可证组,需要审查许可证组,禁止使用许可证组。初级的分类支持开发人员快速做出选择,避免合规问题同时兼顾开发效率。
- 构建许可证兼容策略
许可证兼容性是指许可证间是否兼容。实际开发中,会使用大量开源软件,可以参考许可证兼容性矩阵构建许可证兼容性策略,检查同一个项目中集成的组件之间是否存在许可证冲突。
许可证的兼容矩阵
制定合规的软件开发流程
一个软件的生命周期包括需求分析、设计、实现、测试、部署、运维7个阶段,将开源合规流程纳入软件开发生命周期管理,能有效避免合规风险。
- 需求分析阶段,除了确立软件需求规范,同时需要和所有利益相关方明确软件所需的合规策略,合规流程,共同确立使用的软件成分清单标准,确保能获取清晰的软件成分,完整的成分依赖关系,便于后续进行合规检测。SBOM 是软件成分清单标准的一种实现,理想情况下,在软件供应链中参与的各方,每一环节都将输出 SBOM 提供给下一环节,根据 SBOM 可检测是否违反合规策略,使用统一的 SBOM 格式将有助于后续构建自动化检测机制。
- 软件设计阶段,根据合规策略选择合适的开源软件。
- 软件实现阶段,实际开发中可能使用大量的开源软件,可借助工具扫描项目,获取项目直接,间接使用的开源软件,以及其软件许可证等信息,生成软件成分清单文件与物料清单(SBOM),可以更加简单,高效的解决软件成分和许可证的识别问题。确保 SBOM 中使用到的开源软件的许可证属于自由使用许可证组,或经审批允许使用;不存在安全风险,或引入的安全风险在可控范围内。
- 软件测试阶段,检查生成的 SBOM 是否符合标准,信息是否完备,根据 SBOM 检查使用的开源软件是否违反合规策略。
- 部署阶段,通过最终测试后,构建完整的软件 SBOM,包含软件基本信息,依赖关系等,并确保最终输出的软件不存在合规风险,输出软件的同时为下游用户提供 SBOM。
- 运维阶段,持续跟进合规策略库和软件的更新,定期生成最新的 SBOM 进行检测,及时发现合规风险,对因变化引起违反合规策略的情况,及时修复。
总结
开源在软件领域已经势不可挡,随之而来的风险也不容忽视。企业在采用开源软件的同时,也应时刻注意悬在头顶上方的达摩克利斯之剑,积极制定开源合规策略和流程,定期进行合规检查,在享受开源带来的便利的同时,规避其风险。
参考链接:
Comparison of free and open-source software licenses:
https://en.wikipedia.org/wiki...
Fulfilling Open Source license obligations Can checklists help?:
https://events19.linuxfoundat...
Rails waves goodbye to mimemagic, welcomes Marcel to fix GPL MIME drama:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。