引言:根据Synopsys发布《2023年开源安全和风险分析报告 》中指出,在Black Duck审计服务团队今年分析的1,703个代码库中,有96%包含开源代码。开源软件风险和供应链安全密不可分,正确认识开源软件才能识别其风险,并对其进行规范化管理。
在这里插入图片描述

1. 什么是开源软件?

RedHat官方给出这样的解释如下,
开源软件是通过特定类型的许可证发布的软件,这种许可证能让最终用户合法地使用其源代码。此类许可证有许多种,但通常开源软件必须符合以下条件:

  • 以源代码形式提供,无需额外费用: 这意味着用户可以查看组成该软件的代码并对其进行所需的任何更改。
  • 源代码可重新用于其他新软件: 这意味着任何人都可以获取源代码并利用它来分发自己的程序。

2. 开源软件的三个关键要素

  • License:创造性的工作(包括软件)默认受专有版权的保护,未经创作者/作者以授权许可证的形式明确允许,任何人对该等软件的使用、复制、分发或修改均不合法。即使最友好的开源许可证也会规定用户在使用软件时需要承担的义务。
  • 社区开发:社区是组织的一种形式,用户充分参与、经常不定期发布版本;
  • 商业模式:主要有捐赠、提供技术服务、广告及引流等,以下章节会详细介绍常见的商业模式。

2.1. 常见License及其特点

类别License名称关键点使用建议
BSD类Apache-2.0Tomcat允许链接,无开源义务,允许修改,但需要软件所有人授予专利许可属于商业友好型许可证,推荐使用
BSDFreeBSD允许链接,无开源义务,允许修改,无专利规定
MITlombok允许链接,无开源义务,允许修改,无专利规定
MPL类CPL-1.0JUnit允许链接,无开源义务,允许修改,片断引用、与私有代码混用会被视为对源软件的修改从而导致私有代码开源,软件所有人授予专利许可可以使用,但关注修改后对应的开源义务
EPL-1.0 、EPL-2.0Eclipse
MPL-1.0、MPL-2.0certifi
GPL类LGPL-2.0xz-compat-libs动态链接无开源义务,静态链接需要开放与之链接私有软件的.o文件和makefile慎重使用,允许动态链接方式使用
GPL-2.0、GPL-3.0ltrace允许链接,但链接的整个产品需要开源;允许修改,但修改部分及整个产品需开源慎重使用,可能导致产品整体开源
AGPLBerkeley DB在GPL的基础上加了一条限制,即不对外分发,只要在网络服务器上使用AGPL提供服务就要履行其开源义务,典型的如慎重使用

以上10种License覆盖了90%以上的场景。GPL V2对于开发者的义务要求最多,使用时应慎重!

2.2. 开源社区组织的类型

公司控制型:属于伪社区,如Android;
公司主导型:公司控制力较强,无明确的升级机制,如Mysql;
基金会主导型:有明确的组织和升级机制,管理也比较透明。如Linux、OpenStack。

3. 常见的组织

  • OSI: OSI(Open Source Initiative)是一个旨在推广开源软件的非营利组织,它制定了一套开源软件的定义和准则,像BSD、MIT和Apache协议就被OSI收录。
  • FSF:FSF(Free Software Foundation)也是一个非营利组织,致力于推广自由软件理念,并维护用户权益;
  • SPDX:SPDX(Software Package Data Exchange)是一个旨在标准化软件组件和许可证信息的组织。

联系:

  • 他们都关注软件的开放和自由传播,以促进软件创新和发展。
  • 他们在开源和自由软件领域有不同的侧重点,但共同推动着软件产业的进步。

区别:

  • OSI 关注开源软件的定义和推广,制定了一套广泛认可的开源准则,例如开源许可证的分类;
  • FSF 主张软件的自由和用户权益,提倡 GNU 项目及其衍生产品(如 Linux 内核),并维护自由软件的价值观;
  • SPDX 致力于建立一个标准化的软件组件和许可证信息交换格式,以便于简化合规性分析和软件供应链管理。

总结:OSI、FSF 和 SPDX 三个组织在开源和自由软件领域有不同的关注点和任务,但都为软件产业的发展和创新做出了贡献。

3.1. 常见商业模式

模式说明举例
企业版开源版本免费,企业版本获得License和服务费用,通过开源向企业版本引流如OpenSCA、CodeQL、Docker
高级功能收费可靠性、安全性、定制功能及技术服务等收费如JumperServer
订阅服务开源声明免除了开源社区对软件质量和缺陷修复的责任,由OSS厂商提供软件订阅服务RedHat
云服务通过公有云提供基于开源软件的云服务,通过开源向云服务引流ELK
应用和流量变现通过开源促成应用,形成行业事实或标准,并与应用生态形成绑定,进而变现(广告、应用市场等方式)Android

4. 开源软件主要特点及风险

特点风险
代码公开同一软件可能来自多个渠道,如不细心区分,可能会被植入恶意代码。
漏洞公开开源软件漏洞一经公开,传播极快,影响较大
社区喜新厌旧老版本基本无人维护,漏洞无人修复,容易被利用
License约束除了一般声明义务,部分不有强制开源义务,若未履行可能引发维权诉讼
引用灵活支持片断引用、组件级引用、软件包引入会导致同步社区升级困难,加大了维护成本

5. 开源软件的认识误区

  • 免费等于无价值:很多人认为开源软件是免费的,因此认为它没有价值。实际上,开源软件的 value 体现在其开放性、透明度和社区支持上。许多开源软件在功能和稳定性上并不逊色于商业软件。
  • 安全问题:有人认为开源软件存在安全漏洞,因为源代码公开,容易被恶意攻击。实际上,许多开源软件在安全性上做得比商业软件更好,因为它们的社区成员会积极审查和修复漏洞。
  • 质量不稳定:有人认为开源软件的质量不稳定,因为缺乏专业团队的维护。实际上,许多开源软件经过长时间的社区维护和迭代,质量已经非常可靠。
  • 缺乏技术支持:有人认为开源软件缺乏技术支持,实际上,许多开源软件拥有庞大的社区和贡献者,可以为用户提供丰富的技术支持和资源。
  • 许可证问题:部分人担心使用开源软件会违反许可证,实际上,开源软件的许可证大多宽松,只要遵守许可证规定,使用开源软件是合法的。
  • 性能问题:有人认为开源软件性能较差,实际上,许多开源软件在性能上已经相当出色,甚至优于同类商业软件。

避免这些误区,正确认识开源软件,可以让我们更好地利用这些优秀的资源,提高工作效率和产品质量。

6. 开源软件与FOSS的区别

开源软件(Open-source software)是指允许用户查看、修改和重新分发源代码的软件。它强调的是代码的开放性和透明度,让用户有机会了解软件的内部工作原理,并对其进行改进。

FOSS(Free and Open-source Software)指的是自由和开源软件,它包括两部分:自由软件和开源软件。自由软件强调的是用户的自由权利,包括使用、修改和分发软件的自由。而开源软件则关注的是源代码的开放性。

总的来说,开源软件和FOSS的区别在于侧重点不同。开源软件主要关注源代码的开放,而FOSS则更强调用户的自由权利。实际上,开源软件是FOSS的一部分,因为它们都涉及到源代码的开放和透明。

7. 参考

what-is-open-source-software

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐