软件发布前 认识OSS(OSS系列 001)
认识OSS(开源组件)
一、认识 OSS:开源软件的魅力与风险
OSS(Open Source Software,开源软件),是指其源代码可被公众获取,且允许用户使用、修改和分发的软件。开源软件凭借其免费、灵活性强、社区支持丰富等特点,成为众多开发者的首选。例如,Linux 操作系统、Apache 服务器软件,以及 Python、Java 等编程语言的诸多框架,都是开源软件的杰出代表,它们极大地推动了技术的发展和创新。
然而,使用 OSS 并非毫无风险。不同开源软件遵循的许可证存在差异,部分许可证对软件的使用、分发和修改有着严格限制。如果未严格遵循许可证要求,可能会引发法律纠纷;此外,开源软件存在安全漏洞的风险,一旦被黑客利用,可能导致数据泄露、系统瘫痪等严重后果。因此,对 OSS 进行全面管理至关重要。
二、OSS 调查:摸清开源软件的 “底细”
(一)识别使用的 OSS 组件
- 工具辅助识别:ScanCode 是一款功能强大的 OSS 扫描工具,支持多种操作系统。以在 Linux 系统中使用为例,首先通过包管理器安装 ScanCode,如在 Debian/Ubuntu 系统中执行sudo apt-get install scancode-toolkit。安装完成后,在终端进入项目代码根目录,使用命令scancode --license --copyright --info --json-pp scancode-results.json.,即可对整个项目进行扫描,扫描结果将以 JSON 格式存储在scancode-results.json文件中。该工具能自动分析项目依赖,识别出其中包含的开源组件,还能提取开源组件的许可证、版权等重要信息,生成详细报告。
- 人工检查:对于复杂的代码结构或 ScanCode 工具难以识别的部分,开发者需要手动检查代码,查看引入的外部库和框架,确保不遗漏任何开源组件。例如,检查自定义的代码模块中是否引用了未被工具识别的开源代码片段。
(二)确定 OSS 许可证
通过查看开源组件的源代码目录,通常会有一个名为 “LICENSE” 或 “LICENCE” 的文件,其中明确记录了该组件所遵循的许可证。若未找到该文件,可前往开源项目的官方网站或代码托管平台(如 GitHub)的项目页面,查找相关许可证信息。常见的开源许可证有 MIT、Apache 2.0、GPL 3.0 等,它们在使用限制、版权声明要求等方面存在明显差异。
(三)评估合规性
将识别出的开源组件及其许可证与项目的使用场景和分发计划进行对比。例如,如果项目计划以闭源形式分发,那么使用遵循 GPL 3.0 许可证的开源组件可能会违反其要求,因为 GPL 3.0 要求基于该开源软件的衍生作品也必须开源。同时,检查是否按照许可证规定正确添加了版权声明等信息。
(四)检查安全性
定期查询国家信息安全漏洞共享平台(CNVD)、美国国家漏洞数据库(NVD)等权威漏洞数据库,输入开源组件名称和版本号,查看是否存在已知安全漏洞。若发现漏洞,可参考开源项目官方提供的补丁或解决方案,评估是否需要升级组件版本或采取其他安全措施。
三、合法使用 OSS:遵循规则,规避风险
(一)遵循许可证要求
严格按照开源组件的许可证规定使用、修改和分发软件。如果许可证要求在软件中保留版权声明,务必在代码、文档等相关位置准确添加;对于一些要求开源衍生作品的许可证,在对开源组件进行修改后,需确保修改后的代码也按照规定开源。
(二)获得法律许可
在企业环境中,将 OSS 调查结果提交给公司法律团队进行审核。法律团队会根据专业知识,评估项目使用开源软件是否存在潜在法律风险,并提供相应的合规建议。对于不确定的许可证条款或复杂的使用场景,及时与法律团队沟通,确保软件发布符合法律要求。
(三)提供许可证声明和致谢
在软件的 README 文件、文档或关于页面中,汇总列出所有使用的开源组件及其许可证信息,向开源社区和用户明确展示软件对开源许可证的遵守情况。同时,对开源项目的开发者表示感谢,增强与开源社区的互动和信任。
四、OSS 管理:持续保障软件质量
(一)制定更新策略
建立定期检查开源组件更新的机制,例如每月或每季度检查一次。关注开源项目的官方公告、版本发布日志,及时了解组件的更新内容,包括功能改进、安全修复等。在更新组件时,先在测试环境中进行充分测试,确保更新不会对软件的稳定性和功能造成影响。
(二)记录和文档化
创建详细的 OSS 使用记录文档,记录每个开源组件的名称、版本、许可证、引入时间、使用场景等信息。该文档不仅有助于项目团队内部了解软件中开源组件的情况,也方便在后续审计、法律审查等场景中快速提供相关信息。
(三)建立风险预警机制
利用开源软件安全监控工具,实时监测已使用开源组件的安全动态。当发现新的安全漏洞或许可证变更等重要信息时,及时通知项目团队,并评估对项目的影响,制定相应的应对措施。

浙公网安备 33010602011771号