【开源合规】开源许可证风险场景详细解读

embedded/2024/10/18 19:27:09/

文章目录

  • 前言
  • 弱互惠型许可证
    • 举个例子
      • 具体示例
    • LGPL系列
      • LGPL-2.0-only
      • LGPL-2.0-or-later
      • LGPL-2.1-only
      • LGPL-2.1-or-later
      • LGPL-3.0-only
      • LGPL-3.0-or-later
    • MPL系列
      • MPL-1.0
      • MPL-1.1
      • MPL-2.0
    • EPL系列
      • EPL-1.0
      • EPL-2.0
  • 互惠型许可证
    • GPL系列
      • GPL-1.0
      • GPL-2.0
      • GPL-3.0
    • EUPL系列
      • EUPL-1.0
      • EUPL-1.1
      • EUPL-1.2
    • CECILL系列
      • CeCILL 1.0
      • CeCILL 2.0
      • CeCILL-B
      • CeCILL-C
  • 强互惠型许可证
    • AGPL系列
      • AGPL 1.0
      • AGPL 3.0
    • SSPL系列
      • SSPL 1.0
  • 总结

前言

接上篇文章所讲,使用开源组件,忽略开源许可证问题是存在合规风险的,但是关于什么场景下真实存在风险,以及什么样的风险?很多文章也没有讲的很明白,这些内容大部分都隐藏在晦涩难懂的许可证原文里面。通过一段时间的接触,包括收集资料、翻译许可证原文等学习,特此整理了一部分……

BlackDuck_3">关于BlackDuck许可证风险对比图

在这里插入图片描述不知道你是否跟我一样看到仅汇总、实施标准、先决条件……,是不是一脸懵😳,还是不清楚导致这是组件的什么用法,知名SCA工具对于许可证这一点做的似乎并不是特别友好,不知道扫出来一大堆许可证,安全部门或者法务(有些公司许可证合规问题是由法务部门处理)是不是也是一脸懵。
下面进行一些许可证风险场景整理,以及再总结一张较为口语化的风险对比图……

弱互惠型许可证

允许代码与闭源软件结合使用,但要求对许可证下的代码修改部分保持开源
即许可证允许你将开源代码与闭源代码一起使用,但如果你修改了开源部分的代码,那么你必须将这些修改也开源

举个例子

假设有一个闭源的图像处理软件,使用了一个LGPL许可的图像处理库(例如libpng)来处理PNG文件。有以下两种场景:

  1. 直接结合使用:
    直接将libpng库集成到该闭源软件中,并发布软件,这种情况下不需要将整个软件开源。
    只需在软件文档中包含libpng的LGPL许可证文本和版权声明。
  2. 修改部分保持开源:
    如果你发现libpng库中有个错误或者你需要一个新的功能,你对libpng库进行了修改。
    根据LGPL许可证,你必须将修改后的libpng代码开源,并以LGPL许可证发布。
    这意味着你需要提供修改后的libpng源代码,并在文档中注明这些修改。

具体示例

假设你修改了libpng库中的一个函数,以提高它的性能:

// libpng 修改后的函数
void improved_png_function() {
// 改进的代码
}

在这种情况下,你需要将修改后的libpng代码开源,并确保任何人都可以获得这些修改后的源代码。这可以通过在你的软件发布页面提供一个下载链接,或者将代码提交到公共代码库(如GitHub)上。同时,你的闭源图像处理软件依然可以保持闭源。

提供修改后的libpng库源代码
下载链接:<提供修改后的libpng库代码的链接>
修改说明:<简要说明你对libpng库所做的修改>

LGPL系列

LGPL(Lesser General Public License)是GNU许可证家族的一部分,旨在为开源软件提供一种更灵活的共享方式。不同版本和变体的LGPL许可证在细节和要求上有所不同。
运行环境:
LGPL 许可的核心要求在所有语言中都是一致的,即允许动态链接库而无需开源应用程序代码,但静态链接库时需要提供重新链接的机制和开源对库的修改部分。

LGPL-2.0-only

许可证原文
特点:
修改和分发:允许用户修改和分发修改后的版本,但必须以LGPL-2.0许可证发布。
链接要求:允许与闭源软件链接,但要求修改后的库本身必须开源。
分发源代码:在分发修改后的版本时,必须提供相应的源代码。
适用场景:适用于需要确保库保持开源,但允许其与闭源软件结合使用的项目。
版本变化:首次发布:这是LGPL的第一个版本,旨在提供更宽松的条件,以促进自由软件库的使用。

LGPL-2.0-or-later


http://www.ppmy.cn/embedded/58480.html

相关文章

持久化存储与设备环境查询的最佳实践

ArkUI框架中的PersistentStorage和Environment 在ArkUI框架中&#xff0c;持久化存储和设备环境查询是应用开发中不可或缺的两个重要功能。在本文中&#xff0c;我们将深入了解框架提供的PersistentStorage和Environment&#xff0c;它们的用途、限制条件以及在应用开发中的使…

大模型日报|12 篇必读的大模型论文

大家好&#xff0c;今日必读的大模型论文来啦&#xff01; 1.斯坦福、谷歌团队推出首个视频自训练方法 Video-STaR 大型视觉语言模型&#xff08;LVLM&#xff09;的性能取决于其训练数据集的规模和质量。现有的视频指令微调数据集是通过用视频字幕提示大语言模型&#xff08…

力扣之有序链表去重

删除链表中的重复元素&#xff0c;重复元素保留一个 p1 p2 1 -> 1 -> 2 -> 3 -> 3 -> null p1.val p2.val 那么删除 p2&#xff0c;注意 p1 此时保持不变 p1 p2 1 -> 2 -> 3 -> 3 -> null p1.val ! p2.val 那么 p1&#xff0c;p2 向后移动 p1 …

android 居中对齐

在 Android 中&#xff0c;要使 LinearLayout 中的内容居中对齐&#xff0c;你可以通过设置 android:gravity 属性或使用 android:layout_gravity 属性来实现。这两个属性的使用取决于你希望对齐的内容是 LinearLayout 内部的子视图还是 LinearLayout 本身相对于其父布局的对齐…

数据结构初阶 遍历二叉树问题(一)

一. 链式二叉树的实现 1. 结构体代码 typedef int BTDateType; typedef struct BinaryTreeNode {BTDateType data;struct BinaryTreeNode* left;struct BinaryTreeNode* right; }BTNode; 大概的图形是这样子 2. 增删查改 我们这里要明确的一点的 二叉树的增删查改是没有意…

【MySQL】事务四大特性以及实现原理

事务四大特性 原子性&#xff08;Atomicity&#xff09; 事务中的所有操作要么全部完成&#xff0c;要么全部不执行。如果事务中的任何一步失败&#xff0c;整个事务都会被回滚&#xff0c;以保持数据的完整性。 一致性&#xff08;Consistency&#xff09; 事务应确保数据库…

Stable Diffusion【ControlNet】:tile模型预处理器详解

今天我们重点对tile模型的预处理器进行一个详细的讲解。 一. Tile模型预处理器介绍 点击ControlNet插件Tile模型下的预处理下拉菜单&#xff0c;会看到Tile模型对应的预处理器有几个选项。 blur_gaussian&#xff1a;高斯模糊&#xff0c;主要用于调整景深用的 tile_colorfi…

昇思25天学习打卡营第10天|基于MindSpore实现BERT对话情绪识别

基于MindSpore实现BERT对话情绪识别 模型简介数据集模型构建模型验证模型推理自定义推理数据集 模型简介 BERT全称是来自变换器的双向编码器表征量&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;&#xff0c;它是Google于2018年末开发并发…