过去几年,开源界一片火热,开源软件技术已全面进军操作系统、云原生、人工智能、大数据、半导体、物联网等行业领域。
数据显示,我国超九成企业在使用或正计划使用开源技术。
与此同时,全球各大开源组织相继兴起,头部科技企业均投入大量人力进行开源生态建设。
然而,随着开源软件的发展,其数量和影响力在不断的上升,开源风险也随之而来。
不恰当地使用开源软件,可能会给企业造成负面舆论甚至经济损失的风险。
2021年12月,抖音海外版TikTok上线了一款名为TikTok Live Studio的APP,但不久其下载页面就被删除。
TikTok官方对此事做出回应,原因是该APP违反GPL许可证,使用了GPL许可证下的开源软件源码,却没有按照GPL许可证要求开源。
近年来,类似抖音因违规使用开源软件而引发开源合规风险的案例屡有发生。
但开源软件的风险并不止于此,看似免费使用的开源代码之下,暗藏着多重风险。
1.开源软件的风险
一般来说,开源软件的风险可能来自四个方面:
- 安全风险
其中又分为开源软件本身的安全漏洞导致的风险,和目前关注度很高的软件供应链攻击的风险。
根据Sonatype 2021年的报告,29%的流行项目包含了已知的第三方库安全漏洞,也就是说接近1/3的软件项目都包含了已知安全漏洞,足以可见安全漏洞的普遍性。
而软件供应链方面的安全问题,是比较难以发现的。
例如Log4Shell与Spring4Shell是2021-2022年影响非常广泛的两个安全漏洞。
这类安全漏洞的特点在于,通过对供应链上游软件进行攻击,进而可以影响大量下游使用的软件。
在这种情况下,开源软件来源的安全把控非常重要,但目前开源软件供应链面临的最大挑战,就是企业自己都不知道用了哪些开源软件,大公司已经开始关注到开源合规治理的内容,但是很多小公司还没有这个意识。
- 法律风险
其中又分为许可证协议和专利方面的风险。
常见的许可证主要有GPL、LGPL、AGPL、MPL、MIT、BSD、Apache,各个许可证还包含不同版本。根据使用条件不同,可以将这些许可证大致分为两类:Copyleft 许可证和宽松许可证(permissive license),主要对使用、修改和分发的场景作出相应约束。
由于目前很多的开源项目里面嵌套着其他开源项目,那么可能存在内部许可证上的冲突。对于代码组件的分析,以及对组件背后相应许可证是否冲突,需要专业的分析。
如果未按照开源许可证的规定,履行开源合规义务,可能会造成侵权而遭到索赔、诉讼、产品下架、商誉受损等风险。
在专利方面,一种是本身的创建者/贡献者实现的专利,有可能预埋专利陷阱,另一种是第三方专利维权风险。此外,还有商标侵权及出口管制方面的风险。
- 运维风险
如果企业自己没有能力支撑,或没有商业公司帮忙的话,开源项目的维护成本也很高。
- 断供风险
俄乌事件后,GitHub不允许俄罗斯开发人员下载代码,甚至把俄罗斯账号的代码提交删掉,这一“断供”事件为全球开发者敲响了警钟。
此外,2022年1月,Faker.js 的作者主动恶意破坏自己的项目后“删库跑路”,甚至还注入了导致程序死循环的恶意代码,引起众多应用程序崩溃,瞬间引发了开源圈“震动”。
2.直面开源软件的风险
面对开源软件的种种风险,企业和开发者应如何安全合规地使用开源技术,合理“避坑”呢?
事实上,无论是开源还是闭源,本质上都是软件,都会存在安全漏洞,不能因为害怕风险而拒绝使用开源软件。
因此,业内专家提出了一些应对开源安全风险问题的办法,从多个角度来提升开源软件的安全性。
首先,针对整个开源软件供应链安全加大关注,去寻找供应链中相对来说比较薄弱的风险点,并在这个风险点上加大投入。
中国信通院云大所开源和软件安全部副主任郭雪认为,在企业侧有三个重要的关键动作:
- 建立相应的开源安全管理的流程机制;
- 勇于盘点软件资产,建立SBOM软件物料清单,对所有的组件一目了然。
- 建立预警机制、维护团队和维护机制。例如,长期追踪开源软件最近是否有更新和版本发布,并检查目前使用的版本是否有安全漏洞等。安全漏洞发生后的第一时间,及时去打相应的补丁等。
其次,在使用开源软件时,需要谨慎选择开源软件,关注其开源许可证的内容及相关条件,避免潜在的法律风险。
对此,企业应当建立一个完善机制,识别企业中所使用的开源软件清单,明确对应的开源许可证及权利约束,及时规避相关合规风险。
同时,通过隔离机制避免开源许可证传染。
例如,对于MPL许可证下代码的使用,应把该许可证的代码放在单独的文件内避免许可证传染;LGPL下的代码,可采用动态链接调用该许可证的库实现隔离。
目前,国内很多大中型公司已经成立了专门的开源治理办公室,以应对开源合规问题。
据上海安势信息技术有限公司资深解决方案架构师朱贤曼介绍,在实际业务中,对商业应用比较友好的是Apache,法务风险相对较低,而AGPL、SSPL一般很多公司会直接禁用。
企业在对外发布开源项目时,如果希望商业化之后保留一个商业版本、一个社区版本,可能会选择类似GPL的许可,一方面可以收集到用户意见,也就是开源的反馈意见,用于改进商业版,同时也不希望被直接白嫖。
此外,国家层面也在慢慢重视开源合规,出台了开源技术相关的法律法规。
例如,2021年,中国人民银行、中央网信办等五部门联合发布了《关于规范金融业开源技术应用与发展的意见》,对金融机构安全可控、合规使用开源技术进行了指导和规范。
其中,《意见》明确提出:推动金融机构建立健全评估体系;支持金融机构对开源技术版权、专利、商标、声明等进行事前合规审查,梳理开源技术间依赖性等,避免法律纠纷;支持金融机构制定应急处置预案;支持金融机构加强开源技术供应链管理,通过合同或协议条款,明确开源技术提供商义务和责任等。
第三,如果企业自己没有支持开源软件的能力,建议选择有商业背景的公司,可以购买公司提供的服务。
企业可以与其签订法律合同,提出SLA或问题修复时效相关的承诺,这些开源软件背后的公司扮演了一个让供应链更牢固的角色。
最后,断供事件不可避免,中国企业还需未雨绸缪。
开源本身不限制地域,但是承载开源这件事情的通常是一个商业实体,商业实体会受到所在地区的出口管制法,或者其他制裁条例的限制。
目前,几乎所有著名的开源软件团体都位于美国,且有的许可证规定了管辖法院为美国法院,且适用法律为美国法。
这些事实无不在提醒我们,开源软件受到美国出口管制的影响。
从这个角度来看,企业内部可以建内部代码库,所依赖的东西可以将其放在内部代码库上,万一有一天访问不了国外的开源托管平台,也有备份的源码池可以获得这些代码。
从更长远的角度看,开源世界是彼此相互依赖的,在一个生态当中,谁在生态位的高端,谁就具备抵御相互依赖的打击能力。
目前,在开源代码的贡献率上,中国已经位居全球第二。
中国科技公司成为美国开源代码托管平台的重要客户,中国的GitHub用户已居全球第二,仅次于美国。
中国作为最大的开源技术受惠者之一,并正在成为最大的反哺者之一,因话语权的不断扩大也将降低开源断供的风险。
同时,国家层面也在主导建设自己的开源社区和开源平台,开展“开源生态培育”专项行动,统筹推进建设高水平基金会,打造优秀开源项目,建设我国自己的开源生态体系。
3.结语
开源风险从来不是一个简单的问题,对于开源软件的风险管理,其实是一个软件生态式的管理,涉及软件开发使用过程中的各种角色。
无论是哪一方,都需要尽快提升开源安全合规意识,并遵循国际上的开源风险治理最佳实践,尽量将开源风险扼杀在源头。