开源协议概述和SCA解决方案
一、什么是开源协议?
开源因其惊人的优势在开发人员中得到了广泛的应用。数据表明,97%的软件应用程序依赖于开源组件,而且根据GitHub的调查统计,目前每一个项目的平均依赖项高达203个之多。
简单的来说,开源协议(许可证)就是将代码(项目)转化为开源软件的东西。开源协议基本上可以看作是开源依赖项的作者和使用服务的客户之间合法的绑定契约,约束的内容就是开源代码。开源协议往往会制定一些特定的条款,只有在满足这些条款的前提下,该软件才能用于商业分发。
作为一名开发人员,你不能只是使用、复制、修改或分发开源依赖项。为了在你的软件中正确且合法的使用开源组件,必须了解你在代码中使用的每个开源依赖项的协议的权限、限制与使用条件。
二、开源协议有哪些类型?
每个开源软件都包含一个(或多个)协议,而且现在各种协议的数量甚至达到了上百个之多。但这些协议大致上都可以分为两大类:宽松的(Permissive)和严格的(Copyleft)。
- Permissive:顾名思义,这种开源协议提供了更多的自由权限来使用、复制、修改和分发开源代码。这些限制对于第三方软件的使用只有很小的限制,并且允许在专有派生项目中进行使用。
- Copyleft:这些类型的协议就不那么宽松了,它们通常包含种种对于开源依赖项的限制。在这种类型的协议下,我们可以将代码视为开源依赖项作者的知识产权,你需要得到“批准”才能进一步使用。因此,使用这种依赖项最明显的限制之一就是使用者有义务且必须完全开源他们的代码,这对于一些个人和企业来说是很难接受的。
以下是一些最流行的许可证及其类型:
举例比较:
- GPL:由Richard Stallman创建,目的是保护GNU软件不被侵犯。这个协议属于Copyleft类型,它要求任何使用GPL许可证的开源依赖项的人必须以开源的方式发布他们的代码。
- Apache:由Apache软件基金会创建,目的是允许免费试用、修改和发布Apache许可的产品。Apache2.0属于Permissive类型的许可,但是为了合法的使用其产品,还是有一些基础的限制和许可条件。
在下表中,我们可以看到这两种许可证之间的具体细节比较:
(在GPL 3.0中,GNU组织将专利使用方面添加到了权限列表中,允许开发者添加本地免责声明,并扩展了开发选项。所有这些妥协都是为了在全球范围内扩大GPL的使用。)
三、为什么开源协议很重要?
毫无疑问,编写和发布一个不合规的软件可能会使你的业务处于危险之中。一个不符合协议要求的企业所面临的风险不仅仅是诉讼,还可能被迫对一些项目进行开源。这会损害你在开源社区和客户中的商业声誉,并阻碍某些产品的商业销售。
- 法律诉讼案例
有一个近期的诉讼案例,Elastic VS Amazon。Elastic不得不将其协议更改为一个不同的、限制性的类型,以防止Amazon使用其服务分发来自Amazon Web Services的Elastic构建的软件。
“阻止用户从Amazon Web Services购买Elastic内置软件,并转而使用限制性的软件许可证。这一举措为两家公司之间长达数年的争端画上了句号。这场争端始于2015年,当时Amazon的云部门推出了自己基于Elasticsearch代码的竞争产品,并将其命名为Amazon Elasticsearch Services。这导致人们对哪家公司开发了这款软件产生了困惑,并使Elastic的用户产生了分流。 ”
Elastic将他们的许可证从Apache2.0更改为SSPL,官方解释是:“我们的许可证更改旨在防止公司采用我们的Elasticsearch和Kibana产品,并在没有与我们合作的情况下直接提供相关的服务。”
四、如何解决?
每个组织都必须合法且正确的管理他们的开源许可风险,但这实际上是一个非常乏味且富有挑战性的工作,因为:
- 公司项目内的代码存在大量开源依赖项
- 收集他们正在使用的每个开源协议
- 将这些协议分类
- 优先考虑这些协议可能存在的风险
- 修复合规性问题
行业内对于解决开源安全问题其实已经有了一个共识,那就是SCA工具。市场上现在存在不少专业的SCA工具与平台,但基本上都是国外厂商,如新思科技、checkmarx等等。这些舶来的SCA工具我相信他们的质量都很好,但如果我们国内没有可以替代的国产化软件,只会面临更加严峻的“卡脖子”危机,毕竟谁也不想“微软黑屏”事件再次发生。
此时,我们不禁想问,在此严峻的行业背景之下难道就没有一款国产本地化代码审查工具/平台吗?
是泛联新安的CodeAnt开发安全平台就是其中较好的一款产品,CodeAnt采用SaaS模式,试用方便使用成本低,做到完全本地化的同时尊重不同语言用户需求,具备专业响应及时的中文客服团队。从能力上来说,CodeAnt能自动识别软件代码组成成分(如开源组件、商用组件、自研代码)和代码漏洞,自动分析溯源二进制样本中包含的恶意代码家族、APT组织、恶意代码类型等信息,清晰展示相关数据。最重要的是,CodeAnt核心代码均为自主研发,拥有完全自主知识产权。
国产基础软件自主可控任重道远,开源组件和代码安全问题不容忽视。仅仅知道开源协议还远远不够,如果规避开源风险才是摆在每个企业面前最重要的问题。
开源协议概述和SCA解决方案相关推荐
- RapidIO协议概述(一)
[SRIO]1.RapidIO协议概述 目录 一.RapidIO背景介绍 二.RapidIO协议概述 2.1 包与控制符号 2.2 包格式 2.3 事务格式与类型 2.4 消息传递 2.5 全局共享存 ...
- 【流媒體】jrtplib—VS2010 下RTP开源协议库JRTPLIB3.9.1编译
[流媒體]jrtplib-VS2010下RTP开源协议库JRTPLIB3.9.1编译 SkySeraph Apr 7th 2012 Email:skyseraph00@163.com 一.JRTPLI ...
- Jabber 协议 概述
Jabber 协议概述 Peter Saint-Andre stpeter@jabber.org 1.4版Jabber服务协议的概述 1. 介绍 Jabber是一个由开源社区发起并领导开发的即时消息和 ...
- ipad 开源协议_开源iPad替代品,创用CC满12岁,甚至更多
ipad 开源协议 在本周的开放源代码新闻摘要中,我们介绍了开放源iPad的替代品,Creative Commons即将满12岁! 开源新闻让您阅读愉快. 2014年11月22日至28日 Jolla的 ...
- 物联网标准和协议概述(postscapes)
物联网标准和协议概述 本篇文章是物联网设备和应用程序中涉及协议的概述.帮助澄清IoT层技术栈和不同的协议对比. 物联网涵盖了众多行业和用例,从单一受限设备扩展到嵌入式技术和实时连接的云的大规模跨平台部 ...
- 开源软件的各大开源协议是什么含义,你知道嘛?
开源软件的各大开源协议是什么含义,你知道嘛? 这张图只供参考,不完全准确. MIT 麻省理工学院协议 被授权人权利 被授权人有权利使用.复制.修改.合并.出版发行.散布.再授权及贩售软件及软件的副本. ...
- 【SRIO】1、RapidIO协议概述
目录 一.RapidIO背景介绍 二.RapidIO协议概述 2.1 包与控制符号 2.2 包格式 2.3 事务格式与类型 2.4 消息传递 2.5 全局共享存储器 2.6 流量控制 2.7 串行物理 ...
- 五、南向接口协议概述(一)
文章目录 1 南向接口协议概述 1.1 什么是南向接口协议 1.2 南向接口协议的设计目标 1.3 南向接口协议有哪些 1.3.1 OpenFlow协议 1.3.2 OF-Config协议 1.3.3 ...
- 常见版权协议介绍,什么的License许可证,eula,开源协议
LISENCE(许可证),一般在软件.项目.文件的目录里,指此软件使用哪个许可证,也代表了我们应该怎么使用软件 License的许可证的协议有很多种,比如常见的Apache许可证 Apache Lic ...
最新文章
- 程序员千万不要选全栈开发
- linux启动程序api编程,Linux编程中关于API函数与系统调用间关系
- 如何用python画圆形的代码-简单实现python画圆功能
- 推荐的 CSS 书写顺序
- python telnet 交互_用Python怎么telnet到网络设备
- PCA的数学原理(非常值得阅读)!!!!
- Redis(七)Redis的噩梦:阻塞
- 关于ZipOupputStream添加压缩包常见问题
- 三态输出门实验报告注意事项_数电基础知识:各种IO输出的类型
- python常用包及其用法_Python 使用的部分常用包以及数据分析pandas及工具jupyter使用...
- 1.高性能MySQL --- MySQL 架构
- 角谱 matlab,关于角谱法实现数字全息 - 程序语言 - MATLAB/Mathematica - 小木虫论坛-学术科研互动平台...
- 每周一荐:《盗梦空间》《不能承受的生命之轻》
- buuctf刷题记录(6)
- 【python游戏】新的一年快来变身兔兔战士打败獾守护兔兔吧~
- 如何在网页里插入3D模型并进行互动展示?
- 怎样录制gif动态图
- 机器自动翻译古文拼音 - 十大宋词 - 如梦令·昨夜雨疏风骤 李清照
- 11月VR AR投资现状,游戏开发和行业应用受资本青睐
- PyMongo 常见问题