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

科技云报道:开源真的香,风险知多少?
科技云报道原创。 过去几年,开源界一片火热,开源软件技术已全面进军操作系统、云原生、人工智能、大数据、半导体、物联网等行业领域。 数据显示,我国超九成企业在使用或正计划使用开源技术。 与此同时,全球各大开源组织相继兴…...
国产化适配迁移记录
国产化适配迁移记录 本项目基于RuoYi-Vue的框架进行迁移。目前已完成覆盖测试暂无其他问题。 国产化环境 名称版本达梦数据库DmJdbcDriver18 8.1.2.144通用mapper – tk.mybatismapper-spring-boot-starter 4.2.5<!-- 达梦数据库--><dependency><groupId>…...

又一国产开源项目走向世界,百度RPC框架Apache bRPC正式成为ASF顶级项目
2023 年 1 月 26 日,Apache 软件基金会 (ASF) 官方正式宣布Apache bRPC 正式毕业,成为 Apache的顶级项目。 我听到这个消息是挺开心的,毕竟是又一款由国人主导的apche顶级项目,再次证明国内在开源界正在发挥越来越重要的作用。 …...

多数据库学习之GBase8s查询数据库表元信息常用SQL
多数据库学习之GBase8s查询数据库表元信息常用SQL简介常用SQL创建用户创建数据库及模式获取表元数据其他参考链接简介 背景介绍 GBase 8t是基于IBM informix源代码、编译和测试体系自主研发的交易型数据库产品。 南大通用安全数据库管理系统(简称 GBase 8sÿ…...

Jetpack之Lifecycle应用与源码分析
Build lifecycle-aware components that can adjust behavior based on the current lifecycle state of an activity or fragment. 上面是源于官网的定义,简单翻译就是说Lifecycle的作用就是基于当前的Activity或者Fragment的生命周期当前状态构建可感知生命周期的…...

Python序列类型之集合
💐💐💐欢迎来到小十一的博客!!! 🎯博客主页:🎯程序员小十一的博客 🚀博客专栏:🚀Python入门基础语法 🌷欢迎关注ÿ…...

java 自定义json解析注解 复杂json解析
java 自定义json解析注解 复杂json解析 工具类 目录java 自定义json解析注解 复杂json解析 工具类1.背景2、需求-各式各样的json一、一星难度json【json对象中不分层】二、二星难度json【json对象中出现层级】三、三星难度json【json对象中存在数组】四、四星难度json【json对象…...

Vue3配置路由(vue-router)
文章目录前言一、配置路由(vue-router)1、安装路由2、新建页面3、创建路由配置文件4.特殊报错!前言 紧接上篇文章,vue3的配置与vue2是有所差别的,本文就讲述了如何配置,如果本文对你有所帮助请三连支持博主…...
【代码随想录二刷】Day9-字符串-C++
代码随想录二刷Day9 今日任务 28.找出字符串中第一个匹配项的下标 459.重复的子字符串 字符串总结 双指针总结 语言:C KMP 链接:https://programmercarl.com/0459.重复的子字符串.html#kmp 用处:当出现字符串不匹配时,可以利…...
google colab上如何下载bert相关模型
首先要知道模型的地址 tensorflow版本的模型: https://storage.googleapis.com/bert_models/2018_10_18/cased_L-12_H-768_A-12.zip https://storage.googleapis.com/bert_models/2018_11_03/chinese_L-12_H-768_A-12.zip pytorch版本的模型 ‘bert-base-cased’: …...

Vue2.0页面缓存机制联合页面标签的交互(keep-alive + router)
预期效果:(借助iview-ui的在线体验页面示意一下) 项目中只有一部分页面需要缓存,且存在多级路由的页面。每打开一个菜单,就会新增一个 Tab标签,只要 Tab标签不关闭,对应的页面就会被缓存&#x…...

C++STL剖析(四)—— stack和queue的概念和使用
文章目录1. stack的介绍2. stack的构造3. stack的使用🍑 push🍑 top🍑 pop🍑 empty🍑 size🍑 swap🍑 emplace4. queue的介绍5. queue的构造6. queue的使用🍑 push🍑 size…...

流浪地球 | 建筑人是如何看待小破球里的黑科技的?
大家好,这里是建模助手。 想问问大家今年贺岁档,都跟上没有,今天请允许我蹭一下热点表达一下作为一个科幻迷的爱国之情。 抛开大刘的想象力、各种硬核科技&以及大国情怀不提,破球2中的传承还是让小编很受感动,无…...

软中断在bottom-half中调用
https://www.bilibili.com/read/cv20785285/简介软中断可以在两个位置得到机会执行:硬中断返回前 irq_exit中断下半部 Bottom-half Enable后情景分析情景1spin_unlock_bh__raw_spin_unlock_bh__local_bh_enable_ip 打开Bottom-half,并让softirq有机会…...

GEE遥感云大数据在林业中的应用
近年来遥感技术得到了突飞猛进的发展,航天、航空、临近空间等多遥感平台不断增加,数据的空间、时间、光谱分辨率不断提高,数据量猛增,遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇…...
Apollo架构篇 - 客户端架构
前言 本文基于 Apollo 1.8.0 版本展开分析。 客户端 使用 Apollo 支持 API 方式和 Spring 整合两种方式。 API 方式 API 方式是最简单、高效使用使用 Apollo 配置的方式,不依赖 Spring 框架即可使用。 获取命名空间的配置 // 1、获取默认的命名空间的配置 C…...

JVM调优最全面的成长 :参数详解+垃圾算法+示例展示+类文件到源码+面试问题
目录1.优秀的Java开发者1.1 什么是Java?1.2 编程语言1.3 计算机[硬件]能够懂的语言1.3.1 计算机发展史1.3.2 计算机体系结构1.3.3 计算机处理数据过程1.3.4 机器语言1.3.5 不同厂商的CPU1.3.6 操作系统1.3.7 汇编语言1.3.8 高级语言1.3.9 编译型和解释型1.3.9.1 编译…...
linux驱动常用函数
以下为一些常见用户态函数在内核中的替代,包括头文件和函数声明:1、动态申请内存:linux/vmalloc.hvoid *vmalloc(unsigned long size);void vfree(const void *addr);2、字符串操作:linux/string.hvoid * memset(void *,int,__ker…...

Flowable进阶学习(九)数据对象DataObject、租户Tenant、接收任务ReceiveTask
文章目录一、数据对象DataObject二、租户 Tenant三、接收任务 ReceiveTask案例一、数据对象DataObject DataObject可以⽤来定义⼀些流程的全局属性。 绘制流程图,并配置数据对象(不需要选择任意节点) 2. 编码与测试 /*** 部署流程*/ Test…...

C语言实现五子棋(n子棋)
五子棋的历史背景: 五子棋起源于中国,是全国智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏。双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成五子连珠者获胜。五子棋容易上手,…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...

动态规划-1035.不相交的线-力扣(LeetCode)
一、题目解析 光看题目要求和例图,感觉这题好麻烦,直线不能相交啊,每个数字只属于一条连线啊等等,但我们结合题目所给的信息和例图的内容,这不就是最长公共子序列吗?,我们把最长公共子序列连线起…...

机器学习复习3--模型评估
误差与过拟合 我们将学习器对样本的实际预测结果与样本的真实值之间的差异称为:误差(error)。 误差定义: ①在训练集上的误差称为训练误差(training error)或经验误差(empirical error&#x…...
软件工程教学评价
王海林老师您好。 您的《软件工程》课程成功地将宏观的理论与具体的实践相结合。上半学期的理论教学中,您通过丰富的实例,将“高内聚低耦合”、SOLID原则等抽象概念解释得十分透彻,让这些理论不再是停留在纸面的名词,而是可以指导…...
codeforces C. Cool Partition
目录 题目简述: 思路: 总代码: https://codeforces.com/contest/2117/problem/C 题目简述: 给定一个整数数组,现要求你对数组进行分割,但需满足条件:前一个子数组中的值必须在后一个子数组中…...