当前位置: 首页 > news >正文

科技云报道:开源真的香,风险知多少?

科技云报道原创。

过去几年,开源界一片火热,开源软件技术已全面进军操作系统、云原生、人工智能、大数据、半导体、物联网等行业领域。

数据显示,我国超九成企业在使用或正计划使用开源技术。

与此同时,全球各大开源组织相继兴起,头部科技企业均投入大量人力进行开源生态建设。

然而,随着开源软件的发展,其数量和影响力在不断的上升,开源风险也随之而来。

不恰当地使用开源软件,可能会给企业造成负面舆论甚至经济损失的风险。

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 日&#xff0c;Apache 软件基金会 (ASF) 官方正式宣布Apache bRPC 正式毕业&#xff0c;成为 Apache的顶级项目。 我听到这个消息是挺开心的&#xff0c;毕竟是又一款由国人主导的apche顶级项目&#xff0c;再次证明国内在开源界正在发挥越来越重要的作用。 …...

多数据库学习之GBase8s查询数据库表元信息常用SQL

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

Jetpack之Lifecycle应用与源码分析

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

Python序列类型之集合

&#x1f490;&#x1f490;&#x1f490;欢迎来到小十一的博客&#xff01;&#xff01;&#xff01; &#x1f3af;博客主页&#xff1a;&#x1f3af;程序员小十一的博客 &#x1f680;博客专栏&#xff1a;&#x1f680;Python入门基础语法 &#x1f337;欢迎关注&#xff…...

java 自定义json解析注解 复杂json解析

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

Vue3配置路由(vue-router)

文章目录前言一、配置路由&#xff08;vue-router&#xff09;1、安装路由2、新建页面3、创建路由配置文件4.特殊报错&#xff01;前言 紧接上篇文章&#xff0c;vue3的配置与vue2是有所差别的&#xff0c;本文就讲述了如何配置&#xff0c;如果本文对你有所帮助请三连支持博主…...

【代码随想录二刷】Day9-字符串-C++

代码随想录二刷Day9 今日任务 28.找出字符串中第一个匹配项的下标 459.重复的子字符串 字符串总结 双指针总结 语言&#xff1a;C KMP 链接&#xff1a;https://programmercarl.com/0459.重复的子字符串.html#kmp 用处&#xff1a;当出现字符串不匹配时&#xff0c;可以利…...

google colab上如何下载bert相关模型

首先要知道模型的地址 tensorflow版本的模型&#xff1a; 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)

预期效果&#xff1a;&#xff08;借助iview-ui的在线体验页面示意一下&#xff09; 项目中只有一部分页面需要缓存&#xff0c;且存在多级路由的页面。每打开一个菜单&#xff0c;就会新增一个 Tab标签&#xff0c;只要 Tab标签不关闭&#xff0c;对应的页面就会被缓存&#x…...

C++STL剖析(四)—— stack和queue的概念和使用

文章目录1. stack的介绍2. stack的构造3. stack的使用&#x1f351; push&#x1f351; top&#x1f351; pop&#x1f351; empty&#x1f351; size&#x1f351; swap&#x1f351; emplace4. queue的介绍5. queue的构造6. queue的使用&#x1f351; push&#x1f351; size…...

流浪地球 | 建筑人是如何看待小破球里的黑科技的?

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

软中断在bottom-half中调用

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

GEE遥感云大数据在林业中的应用

近年来遥感技术得到了突飞猛进的发展&#xff0c;航天、航空、临近空间等多遥感平台不断增加&#xff0c;数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量猛增&#xff0c;遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇&#xf…...

Apollo架构篇 - 客户端架构

前言 本文基于 Apollo 1.8.0 版本展开分析。 客户端 使用 Apollo 支持 API 方式和 Spring 整合两种方式。 API 方式 API 方式是最简单、高效使用使用 Apollo 配置的方式&#xff0c;不依赖 Spring 框架即可使用。 获取命名空间的配置 // 1、获取默认的命名空间的配置 C…...

JVM调优最全面的成长 :参数详解+垃圾算法+示例展示+类文件到源码+面试问题

目录1.优秀的Java开发者1.1 什么是Java&#xff1f;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驱动常用函数

以下为一些常见用户态函数在内核中的替代&#xff0c;包括头文件和函数声明&#xff1a;1、动态申请内存&#xff1a;linux/vmalloc.hvoid *vmalloc(unsigned long size);void vfree(const void *addr);2、字符串操作&#xff1a;linux/string.hvoid * memset(void *,int,__ker…...

Flowable进阶学习(九)数据对象DataObject、租户Tenant、接收任务ReceiveTask

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

C语言实现五子棋(n子棋)

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

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一&#xff1a;使用Read()读取文件2.3、方式二&#xff1a;bufio读取文件2.4、方式三&#xff1a;os.ReadFile读取2.5、写…...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC&#xff1f; WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing

Muffin 论文 现有方法 CRADLE 和 LEMON&#xff0c;依赖模型推理阶段输出进行差分测试&#xff0c;但在训练阶段是不可行的&#xff0c;因为训练阶段直到最后才有固定输出&#xff0c;中间过程是不断变化的。API 库覆盖低&#xff0c;因为各个 API 都是在各种具体场景下使用。…...