开源经过形成时期、古典时代、移动时代到云开源时代的不断发展,产业链条已经逐渐形成,其中涉及的企业类型包括自发开源企业、开源产品企业和开源用户企业。自发开源企业主动发起开源项目,通过在代码托管平台上公开发布企业内部的代码,使用适当的开源许可证,使其代码能够被公开获取,著名的开源项目如Android、Linux、TensorFlow等,其背后多为谷歌、微软等科技企业;开源产品企业是指基于社区版开源软件对开源用户提供企业版售卖服务,或针对主流社区版开源软件提供服务(如软件选型咨询、软件运维服务支持等)的企业;开源用户企业是指从开源社区获取开源软件或代码,用于自身信息系统构建以辅助实现企业系统业务功能的机构,包括金融、电力、通信、能源等诸多传统行业。根据开源企业黑鸭子(Black Duck,BD)于2019年发布的《2019年开源代码安全和风险分析》报告[1],开源代码与代码库中代码总数的平均比例为3:5,其中物联网、医疗、金融等行业处于平均水平之上,随着开源软件逐渐形成生态,企业用户引入开源已成趋势。开源相关的企业涉及开源代码的引入和输出,受到开源许可证、开源基金会管理办法等要求的限制,需要遵守一定的规则,同时面临一定的风险。全球开源热度持续攀升,根据全球最大的开源代码托管平台GitHub的年度报告数据显示,截至2019年,平台已有超过4000万开发人员,比2018年增长25%;托管仓库突破1亿大关,2019年新增仓库4400万个;创建第一个项目的用户比 2018年增加了44%,130万开发者对开源做出了重大贡献,其中中国的新注册用户数目仅次于美国,排名第二[2]。
热门领域开源项目涌现,企业成为开源的重要贡献者。2019年,JavaScript(前端和后端)、机器学习、移动应用程序开发和容器是贡献最多的领域,其中微软VS Code、Facebook React、谷歌 TensorFlow位列项目活跃度前三甲(按贡献者数目排序)。整体来看,微软、谷歌、红帽、英特尔等顶级科技企业的员工是开源项目的重要贡献者。企业对开源技术的接受程度逐年增高,超过八成的企业认可开源技术,根据中国信息通信研究院的调查显示,在企业内部的信息系统中已经应用了开源软件的比例达到86.7%,正在规划引入开源软件的企业占比10.6%,开源技术已经被企业普遍接受。技术成熟程度和功能丰富度是企业选择开源技术时考虑的重要因素。企业对技术成熟度的关注比例最高,达到68.7%;46.3%的企业在选择开源技术时会考虑功能丰富程度;43.3%的企业因缩短应用部署时间而选择开源技术。缺少适合的解决方案和出于安全性考虑是企业尚未应用开源技术的两个原因。开源软件具有代码公开透明、容易获取等特点,能有效降低边际成本,然而企业在引入开源软件的过程中可能会忽略开源软件的使用规则,具体包括开源许可证的要求、开源基金会管理规范、相关国家的法律条例等,企业在使用开源软件的过程中可能面临许可证合规及知识产权风险、技术和运维风险、安全漏洞和数据泄露风险、管理风险等。开源软件涉及到开源许可证的合规问题,进而可能会诱发一系列潜在风险。目前,经过OSI认证的开源许可证共有87种,根据其是否要求修改的代码在分发时再次公开大致可以分为开放型许可证、弱传染型许可证、传染型许可证、强传染型许可证4类(见表1)。企业在引入开源软件时,因开源许可证的规定或变动,可能面临知识产权及合规风险,一是可能因许可证的传染性规定被迫开源,如根据GPL许可证的规定,引入许可证为GPL的软件并修改其中代码分发给他人,需将修改后的代码开源;二是商业软件是否遵守开源约定未知,如部分商业软件基于开源进行二次开发后以闭源形式提供给用户,却不遵守开源许可证的署名要求;三是知识产权风险易被忽略,如BSD、MIT和GPL 2.0等开源许可证并未包含明确的专利授予条款;四是开源许可证之间可能不兼容,如GPL开源许可证在GNU的网站上详细列出何种开源许可证是否与其兼容[3];五是开源软件的使用规则存在不确定性,如2018年以来多个开源软件开发商(如Redis、MongoDB、Kafka等)已经对其过去使用的开源许可证进行了修改。开源软件在企业中应用的一个重要风险是技术选型风险,企业可能存在选型偏差的风险,选定的技术路线在后续生产乏力,市场应用不足。与此同时,开源存在运维风险,使用开源软件,虽然比购买商业软件节省了购买成本,却在开发阶段需要更强大的团队支撑,运维阶段需要更多的人力支持,在软件的全生命周期管理的各个阶段,都需要不断更新和投入。开源软件具有公开透明的特点,使得其在应用中可能产生安全漏洞和数据泄露的风险。开源软件存在一定的安全漏洞风险,根据安全公司SNYK在2019年发布的《2019年开源安全现状调查报告》,2017—2018年,开源软件的漏洞数量增长了88%[4];根据WhiteSource的研究报告,2019年公开的开源软件漏洞数已激增至6000多个,同比增长了近50%。OpenSSL是一个开源的软件库包,应用程序可以使用这个开源软件进行安全通信,这个开源软件被广泛应用在互联网的网页服务器上,而2014年,这个软件库包却被曝光存在“心脏滴血”漏洞,黑客利用漏洞能够读取系统内存中的敏感信息,如明文口令、密钥等。OpenSSL在Web容器如Apache/Nginx中使用,二者的全球份额超过66%,截止到2020年,仍有上万个系统未修复。开源软件如果使用不当可能发生数据泄露。2019年4月22日,哔哩哔哩公司(B站)后台源码被上传至Github,代码包含很多配置文件、密钥、密码等敏感信息,6000多的Star和Fork在短短6h内就被一个名叫“openbilibili/go-common”的代码仓库获取。对于企业用户而言,是否引入开源软件,以及引入了多少开源软件,难以完全准确统计,而在内部建立一套开源治理机制也是一项复杂的工作,这些情况都会导致开源软件缺乏统一的管理。对企业管理者而言,因为未知,所造成的风险更为严重。针对企业可能面临的开源风险,需要建立一套完整的治理体系,主动进行开源软件管理,摸清企业内部信息系统开源软件应用情况,确定一套开源软件引入和使用规则,具体涉及建立配套的开源治理管理机制,全程跟踪软件生命周期,建立配套的治理平台。企业可以通过建立开源治理组织架构,明确开源软件的管理职责,制定配套的开源治理组织架构或开源治理分工,规划开源治理战略和开源治理流程,统筹推动企业开源治理工作。可以建立企业整体的开源软件治理战略,设立专门人员具体负责统筹企业开源软件管理的相关工作,确立各相关部门对于开源软件的管理职责分工,建立各团队间的沟通、协作机制,针对企业开源管理组织架构、管理制度及相关专业知识等内容开展定期培训,帮助相关人员树立开源软件风险管控意识,提醒分管领导了解企业开源软件组织架构和管理制度。企业应建立配套的开源软件管理制度,对开源软件的引入、使用、更新、退出的全流程管理提出明确规定,在制度中明确要求对开源软件进行统一管理,并规范开源软件全生命周期的风险管控机制。企业在开源软件治理过程中应建立统一的开源软件风险管理机制,统一开源软件信息记录和风险管控,及时识别可能存在的风险点并做相应处置和记录。对企业内部正在使用的开源软件能够识别开源许可证风险、安全风险、第三方代码风险,对于识别的开源软件风险需要进行开源风险处置,可以由专业人员与软件使用人员一起对风险识别中发现的问题进行分析、商议并及时确定风险处置方案,处置之后需要对开源软件的风险识别和处置结果进行记录、反馈,对于已经识别、记录但是暂未处置的风险要进行持续跟踪,当出现版本升级、新补丁包发布等情形时能够及时对以往风险进行处置。企业在引入开源软件前要对其进行测评,可以从实际需求出发对其开展充分的市场调研,从项目活跃度、行业认可度、软件质量和服务支持度等多个角度进行考察,综合评估其是否满足引入需求。企业在使用开源软件时需要对开发者建立一套完整的管理规范,针对系统软件能够开展配置测试、适应性测试等非功能性测试,编制使用手册等配套文档,同时构建源码仓库和制品仓库对开源软件进行统一管理。企业在确认引入开源软件后,需要有一套完整的维护机制,可以合理分工开源软件的技术支持,确保企业内部正在引入的开源软件均有负责人或负责团队支持(或购买付费的运维支持服务),通过建立运维知识库和专家支持机制提高运维管理质量。企业在引入开源软件之后需要定期了解开源软件的情况,能够持续跟踪企业内正在使用的开源软件的社区情况、版本更新情况、开源许可证变更情况、社区发展情况及安全漏洞情况等,定期对相关信息进行分析、评估和处置。如出现开源软件许可证发生变更,尤其由宽松型许可证变更为严格型许可证时,应及时评估许可证变更带来的风险,对已经应用了开源软件的信息系统是否被传染进行评估和判断;对于长期不更新的开源软件应予以重视,评估开源软件的先进性和自身维护成本;对于开源软件漏洞应定期跟踪,及时反馈给软件维护方进行修复和处置。企业在引入开源软件后,根据定期跟踪的结果,需要判断当前开源软件是否适应所应用的场景,对于有风险及“老旧”的开源软件应建立合理的退出机制,依据管理制度对企业内部开源软件的退出操作进行管理,根据实际情况定期制定开源软件退出、替换等规划。企业在建立一套完整的开源治理规范之后,可能面临大量的开源软件治理工作,企业内部的开源软件数量不在少数,因此需要建立一套自动化的开源治理平台辅助企业内部落地开源治理规范。平台可以配套开源组成识别,在开源软件引入前及应用过程中明确开源软件的使用情况及依赖情况,同时对过往库存进行判断,掌握企业内部信息系统的开源软件引入信息,为后续管理和治理打好基础。平台需要支持开源软件管理的工作流,固化执行企业内部开源软件全生命周期的管理流程,通过平台自动化实现企业内部开源软件的引入评测、使用管理、运行维护等,跟踪和记录开源软件全生命周期动态,同时提升开源治理工作效率和准确性。开源引入已经成为信息系统构建的重要途径,自发开源成为科技企业布局市场的重要途径。开源生态需要遵循一定的使用规则,开源风险相对复杂,企业需要建立完善的开源治理体系以规避开源风险。
参考文献
[1] Black Duck. 2019年开源代码安全和风险分析[R], 2019.
[2] GitHub. The state of the octoverse[R/OL]. (2019-09-30)[2020-04-15]. https://octoverse.github.com/.
[3] Free Software Foundation. Various licenses and comments about them[R/OL].(2020-03-16)[2020-04-15].https://www.gnu.org/licenses/license-list.en.html#GPLIncompatibleLicenses.
[4] Liran Tal. The state of open source security -2019[R/OL]. (2019-02-26) [2020-04-15]. https://nyk.io/opensourcesecurity-2019/.
郭 雪
中国信息通信研究院云计算与大数据研究所云计算部副主任,工程师,主要从事开源、云计算方面的研究工作。
孔 松
中国信息通信研究院云计算与大数据研究所云计算部工程师,主要从事云安全方面的研究工作。
王皓月
华东师范大学数据科学与工程学院xlab实验室硕士研究生。
《信息通信技术与政策》是工业和信息化部主管、中国信息通信研究院主办的专业学术期刊。本刊定位于“信息通信技术前沿的风向标,信息社会政策探究的思想库”,聚焦信息通信领域技术趋势、公共政策、 国家/产业/企业战略,发布前沿研究成果、焦点问题分析、热点政策解读等,推动5G、工业互联网、数字经济、人工智能、区块链、大数据、云计算等技术产业的创新与发展,引导国家技术战略选择与产业政策制定,搭建产、学、研、用的高端学术交流平台。