开源软件指南

news2024/11/15 23:23:21

目录

什么是开源软件

开源软件的历史和哲学

什么是开源许可证

开源许可证的类型

​编辑

开源合规性

版权和知识产权合规性

安全合规性

什么是开源软件政策

开源软件安全

库存和软件物料清单(SBOM)

依赖项更新

开源漏洞扫描

二进制存储库管理器

开源软件的当前趋势

开源为我而生,不为你而生

政府对开源软件的兴趣


什么是开源软件

开源软件(OSS)是原作者已授予明确版权和使用权限的软件,允许所有用户以他们认为合适的方式访问、查看和修改这些程序的源代码,而无需支付版税。

这与专有、闭源软件形成对比,专有、闭源软件通常需要付费许可,并且除软件版权所有者外,任何人都不能添加、修改或分发。

事实证明,使用开源软件的成本效率是不可抗拒的。如今,开源组件通常占新应用程序代码库的80%或更多。供应链中几乎没有产品不依赖OSS。

OSS有着悠久的历史和丰富多彩的社区,他们奉献自己的时间(通常是无偿的)为所有人免费提供数百万个有用的库和程序。

开源软件的历史和哲学

在“开源软件”出现之前,只有“免费软件”,而谈到免费软件的历史,就不能不提免费软件之父理查德·斯托曼。

斯托曼是自由软件基金会(FSF)的创始人,也是GNU公共许可证的作者,以使用版权法以“病毒式”方式强制实施自由而闻名。

自1980年代以来,斯托曼一直是免费软件的坚定倡导者。他至今仍是FSF的负责人,并撰写有关免费软件的文章。

我们大多数人认为免费软件是不需要花钱就能获得的软件,但“自由是指言论自由,而不是免费啤酒”是免费软件倡导者的口头禅。

斯托曼认为“开源”和“免费”软件之间存在区别。虽然自由和开源应用程序的维恩图基本上是一个圆圈,但他认为这两个术语强调的是不同的理念。

自由软件基金会的四项基本自由是自由软件运动的支柱——他们并不特别关心自由软件给企业带来了多少自由。

开放源代码促进会(OSI)成立于1998年,由BrucePerens和EricRaymond创立,OSI对自由软件持更务实的看法。

对于Perens和Raymond而言,“开源”一词消除了“自由软件”的政治包袱,并邀请企业使用和贡献越来越多的免费向所有人开放的库和应用程序。

OSI可能对企业参与OSS更为友好,但它仍然以自由主义哲学为基础。斯托曼的四大自由中的许多都反映在他们对OSS的十点定义中。

正如政治通常所表现的那样,大多数开发人员对“自由”与“开源”软件并没有强烈的感觉。

您可能会看到更中性的首字母缩略词“FOSS”,代表“自由和开源软件”,甚至“FLOSS”,代表“自由自由和开源软件”,其中“免费”又回到了“不花任何钱”的常见含义。

在21世纪初之前,许多公司对其开发人员使用OSS持怀疑甚至完全敌视的态度,但使用现成的开源组件而不是花费开发人员的时间重新发明轮子所带来的成本节省变得不可忽视。

什么是开源许可证

开源许可证详细说明了使用或修改软件组件的条款和条件。许可证文本将包含在开源项目的发行版中,可以是源代码文件的注释,也可以是单独的README文件中。

世界上有200多个开源许可证,但很多都是多余的。OSI只承认大约80个独特且真正开源的许可证。绝大多数开源项目只属于8个许可证。

开源许可证的类型

所有开源许可证分为三类:

强版权左派:这些许可证要求任何来自开源项目的代码,即使原始代码未经修改就使用,也必须继承其许可条款。流行的版权左派许可证包括GNU和AfferoGNU公共许可证(GPL和AGPL)。

弱版权左派:这些许可证通常允许使用未经修改的开源组件,而无需新项目继承其许可证。但是,对开源组件的任何修改都必须获得原始许可证的许可。流行的弱版权左派许可证包括较宽松的GNU公共许可证(LGPL)、Microsoft公共许可证(MsPL)和Eclipse公共许可证(EPL)。

宽松许可证:这些许可证允许开发人员使用甚至修改开源组件,而无需最终应用程序遵循任何特定许可证。流行的宽松许可证包括MIT许可证、伯克利软件分发许可证(BSD)和Apache2.0许可证。

开源合规性

使用开源代码的组织必须注意遵守知识产权(IP)法,并降低恶意行为者利用OSS漏洞进行违规和攻击的风险。

版权和知识产权合规性

IP合规性和政策在很大程度上取决于兼容性:开源组件的许可证是否彼此兼容,以及许可证是否与项目的整体业务目标兼容。

许可证之间的兼容性。宽松的开源许可证适用于所有人,但强版权许可证和弱版权许可证通常彼此不兼容。

例如,即使打算根据开源许可证发布最终项目,GPL下的组件也不能与MsPL下的组件一起使用,因为这两个许可证都要求衍生作品的源代码在同一许可证下获得许可,没有双重许可的空间。

与业务目标兼容。组织经常在本身不开源的项目中采用开源组件。宽松许可证允许这样做,而强版权许可证则不允许。弱版权许可证的组件通常可以在闭源项目中使用,但必须按照许可证中规定的特定方式使用或链接。

安全合规性

并非所有OSS项目在质量和安全性方面都一样。幸运的是,通过使用自动化工具,开发人员通常可以在将某个开源软件包添加到他们的项目之前了解其中存在多少严重漏洞。

许多组织制定了规则,以阻止开发人员使用存在太多问题的组件。我们将在后面的部分中深入探讨开源安全性。

什么是开源软件政策

OSS政策为团队或整个组织提供了正确使用开源组件的标准。目标是最大限度地发挥使用这些组件的好处和影响,同时解决可能出现的技术、业务和法律风险。

OSS政策首先要选择对于特定项目或所有开发团队始终允许、有时允许(通过升级过程)或永远不允许的许可证。

OSS政策还需要包含根据漏洞风险允许或不允许哪些组件的规则。这通常是通过根据漏洞的严重程度决定引入项目的开源组件可能存在的漏洞数量来实现的。

100%无漏洞的开源组件确实很少见。OSS政策通常不允许任何具有高或严重漏洞的组件,但允许一些中、低严重漏洞。

开源软件安全

使用OSS而不是从头编写代码并非没有缺点。OSS质量参差不齐,许多组件存在缺陷、不安全且更新不一致。以下是解决开源软件安全问题的一些重要工具和注意事项。

库存和软件物料清单(SBOM)

不可能留意您甚至不知道的产品中的漏洞。软件清单和SBOM对于全面了解软件依赖关系以及编制需要监控和更新的事项列表都很重要。

依赖项更新

专有软件供应商通常会推出更新,而开源项目则不一定如此。开源项目的支持有限,并且会根据项目社区的规模而有很大差异。因此,使用开源组件的组织需要主动监控漏洞和更新,以确保及时修补和修复所有组件。

自动化依赖性健康工具大大减轻了开发人员跟踪和安排更新的压力。

开源漏洞扫描

软件组合分析(SCA)是一种应用程序安全测试工具,可帮助管理开源组件。SCA工具会自动扫描您的源代码以识别开源组件、许可数据和已知漏洞。

SCA工具提供对开源组件的可见性,并提供优先级和自动补救措施来帮助修复漏洞。

工作原理如下:

漏洞优先级排序是通过权衡多种因素而自动完成的,例如漏洞是否已被广泛利用(KEV和公开漏洞)、漏洞是否可能在不久的将来被利用(EPSS)、漏洞被利用的严重性(CVSS)以及特定于供应商的见解。

漏洞修复通常使用工具提供的信息(例如漏洞位置)手动完成。某些工具还可能提供有关修复如何影响您的构建的建议。高级工具提供根据漏洞政策启动的自动漏洞修复工作流程。这些政策根据漏洞检测和严重程度、CVSS评分和新版本发布触发。

理想情况下,您应该寻找能够无缝集成到软件开发生命周期中的SCA工具。这样做有助于在早期阶段解决漏洞,因为在早期阶段,问题更容易、更便宜地得到解决。

SCA通常用于软件开发生命周期的构建过程中。代码部署后,DAST和IAST等漏洞扫描程序有助于测试应用程序是否存在常见漏洞。

二进制存储库管理器

以下是使用二进制存储库的主要好处:

👉缓存开源代码的本地副本,以确保您仅使用干净且经过验证的组件。

👉避免受到源代码更新或不同副本更改的影响。

👉有效地管理、批准和跟踪组件。

开源软件的当前趋势

虽然OSS的许可证和理念自1990年代以来基本保持不变,但OSS和开源许可证所涵盖的技术的普及情况已发生巨大变化。以下是近年来出现的两种趋势。

开源为我而生,不为你而生

根据OSI和Stallman的观点,要被视为真正的开源或免费软件许可证,软件的任何特定用途或使用该软件的人员类型都不能受到禁止。但是,这并不能阻止开发人员活动家编写他们称之为开源但实际上并非开源的许可证。

这在AI模型的许可证中变得尤为常见,因为担心不道德地使用强大的技术,一些作者创建了“负责任”的许可证,但这种限制实际上并不新鲜。

JSON许可证写于2002年,是一个MIT许可证,附加了一条条款,即“软件应用于善,而非恶”。此条款限制了努力,不符合OSIOSS定义的第6条标准。

因此,JSON许可证不是开源许可证,尽管该软件可供所有人免费使用,并且源代码是公开提供的。

政府对开源软件的兴趣

过去几年,美国政府已经注意到开源软件的普及和重要性。拜登总统的网络安全行政命令包括改善软件供应链的指导方针,包括创建SBOM和修复OSS中发现的漏洞。

CISA开源软件安全路线图详细说明了政府组织协助开源社区的计划。

开源软件已从社区驱动的举措发展成为软件开发的行业标准方法。开源生态系统提供了各种好处,包括灵活性、成本节约和开发中的集体智慧。

理解和实施开源政策对于风险管理至关重要,因为它为合规和安全使用开源组件奠定了基础。

开源漏洞扫描和软件组成分析工具对于识别和补救安全风险至关重要。这些做法使组织能够从开源软件中获益,同时有效地管理潜在的缺陷。

因此,开源模式不仅仅涉及自由访问代码,还涉及建立负责任的使用和对社区贡献的框架。通过遵守许可证合规性、安全性和代码贡献的标准化程序,组织可以营造一个强大的开源环境,从而促进创新并有效解决软件挑战。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2091020.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#语言实现最小二乘法算法

最小二乘法(Least Squares Method)是一种常用的拟合方法,用于在数据点之间找到最佳的直线(或其他函数)拟合。以下是一个用C#实现简单线性回归(即一元最小二乘法)的示例代码。 1. 最小二乘法简介…

【kubernetes】金丝雀部署

概念: 金丝雀发布(又称灰度发布、灰度更新):金丝雀发布一般先发1台,或者一个小比例,例如2%的服务器,主要做流量验证用,也称为金丝雀 (Canary) 测试 (国内常称灰度测试&a…

一文读懂Linux用户密码管理

目录 前言1. 基本知识2. 命令行 前言 作为全栈人员,对于Linux的账号密码管理也要熟知 下述文章直奔主题,直接讲解知识点 1. 基本知识 修改密码、查看密码哈希值、管理密码到期时间等 用户的密码和相关信息主要存储在两个文件中: /etc/pa…

随笔九、SARADC按键程控测试

目录 1. 泰山派环境 2. 按键3分析 3. 编程测试 1. 泰山派环境 泰山派开发板上有3个按键 按键1是电源按键PWRON,实测按几下会导致开发板重启 按键2是复位按键RESET,按下立马复位重启 按键3是升级按键RECOVER,配合RESET按键可以使开发板进…

现在做项目不看能力!

有人还在执着于能力,但当你多接触一些高手之后,你会发现他们想问题想得很透彻,什么能力,其实不重要。能力是辅助的,在互联网赚钱机会是更重要的,能力不是重点,优先的是执行力。执行力才是第一生…

泛微E9开发 获取浏览按钮的显示值

获取浏览按钮的显示值 1、显示效果2、实现方法3、标准API3.1.获取浏览按钮的显示值3.1.1.格式3.1.2.参数说明3.1.3.案例 3.2. 获取选择框字段的显示值3.2.1.获取选择框字段的显示值3.2.2.格式3.2.3.参数说明3.2.4.案例 1、显示效果 2、实现方法 <script>debugger;var tb…

IO练习:用信号实现司机和售票员问题

【1】问题描述 1&#xff09;售票员捕捉SIGINT&#xff08;代表开车&#xff09;信号&#xff0c;向司机发送SIGUSR1信号&#xff0c;司机打印&#xff08;lets gogogo&#xff09; 2&#xff09;售票员捕捉SIGQUIT&#xff08;代表停车&#xff09;信号&#xff0c;向司机发送…

x-cmd pkg | lazydocker - Docker 和 docker-compose 的 Terminal UI

目录 简介快速上手功能特点竞品和相关项目进一步探索 简介 lazydocker 是由 Jesse Duffield 用 Go 语言开发的 Docker 和 docker-compose 的 Terminal UI 管理工具。它提供 docker 的终端图形界面&#xff0c;支持鼠标操作和键盘快捷键&#xff0c;能实时监控 docker 容器&…

python简介及开发环境配置总结

参考&#xff1a;Python 基础教程 | 菜鸟教程 (runoob.com) Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。 Python 由 Guido van Rossum 于 1989 年底发明&#xff0c;第一个公开发行版发行于 1991 年。像 Perl 语言一样, Python 源代码同样遵循 GPL(GNU G…

国风高铁站可视化:传统文化与现代科技的融合

图扑国风高铁站可视化系统展示了浓厚的传统文化元素&#xff0c;结合现代科技&#xff0c;使旅客在便捷出行的同时体验独特的文化风情。高铁站可视化管理系统通过实时监控和数据分析&#xff0c;为车站运营人员提供全面、直观的管理工具&#xff0c;提升决策效率。

物联网架构之HBase

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

06.登录页面开发

1. 前言 前面已经完成了一些基础的配置&#xff0c;接下来开始进入真正的开发阶段。开发过程中会涉及到一些其它插件的集成&#xff0c;这里用到什么就记录一下使用的心得体会。 这里需要交代一下&#xff0c;项目里的文件命名规则&#xff0c;以及文件结构&#xff0c;views…

数学建模之入门篇

目录 什么是数学建模 建模、编程、写作 一、初步建模选择模型 二、进阶熟练掌握 1. 数学模型 线性规划 图与网络模型及方法 插值与拟合 灰色预测 动态规划 层次分析法 AHP 整数规划 目标规划模型 偏最小二乘回归 微分方程模型 博弈论 / 对策论 排队论模型 存…

Java笔试面试题AI答之面向对象(5)

文章目录 25. Java 包装类的实例是否可变&#xff1f;不可变类&#xff08;Immutable Classes&#xff09;特殊情况总结 26. 简述Java什么是自动装箱和自动拆箱&#xff1f;自动装箱&#xff08;Autoboxing&#xff09;自动拆箱&#xff08;Unboxing&#xff09;注意事项 27. J…

[译] APT分析报告:12.APT29利用spy软件供应商创建的IOS、Chrome漏洞

这是作者新开的一个专栏&#xff0c;主要翻译国外知名安全厂商的技术报告和安全技术&#xff0c;了解它们的前沿技术&#xff0c;学习它们威胁溯源和恶意代码分析的方法&#xff0c;希望对您有所帮助。当然&#xff0c;由于作者英语有限&#xff0c;会借助LLM进行校验和润色&am…

秒杀抢券很难吗?oneCoupon带你成为面试中的王牌

秒杀抢券很难吗&#xff1f;oneCoupon带你成为面试中的王牌 如果你在为简历上找不到亮眼的项目发愁&#xff0c;oneCoupon牛券可能就是你的救星。这个系统不仅高性能&#xff0c;还能承受十万次查询和分发请求。本文将带你走进oneCoupon牛券的世界&#xff0c;看看它是如何助力…

【C++】容器vector常用接口详解

目录 一.vector基本介绍 二.vector的构造&#xff08;constructor&#xff09; 三.vector迭代器&#xff08;iterator&#xff09; 四.vector的三种遍历 1.for循环 2.范围for 3.迭代器&#xff08;正向、反向&#xff09; 五. vector扩容操作 1.reserve 2.resize 六.…

自动化邮件发送:结合SMTP协议使用Python发送包含报表或数据附件的邮件

目录 引言 SMTP协议简介 Python中的smtplib模块 基本使用 发送带附件的邮件 自动化邮件发送系统设计 需求分析 系统架构 实现步骤 1. 准备数据源 2. 创建邮件模板 3. 编写邮件发送引擎 4. 设置调度器 5. 异常处理 示例应用&#xff1a;自动化发送报表邮件 总结…

6种有效的时间序列数据特征工程技术(使用Python)

在商业分析中&#xff0c;"时间"是一个核心概念。我们基于时间组件来分析销售数据、收入、利润、增长&#xff0c;甚至进行预测。然而&#xff0c;对于初学者来说&#xff0c;这可能是一个复杂的主题。在处理时间敏感的数据集时&#xff0c;需要考虑时间序列数据的多…

Vue3其他Api

1.shallowRef与shallowReactive <template><div class"app"><h2>求和为:{{ sum }}</h2><h2>名字为:{{ person.name }}</h2><h2>年龄为:{{ person.age }}</h2><button click"sum 1">sum1</butto…