首页 > 其他分享 >GPL 协议和 LGPL 协议的理解

GPL 协议和 LGPL 协议的理解

时间:2023-04-06 20:45:55浏览次数:171  
标签:GPL 协议 LGPL 许可 自由软件 软件 源代码

GPL 协议的解释

GPL(GNU通用公共许可证)是一种自由软件许可证,由自由软件基金会(Free Software Foundation,简称FSF)创建并维护。它是一种开源许可证,旨在保护软件用户的自由,并确保软件的自由传播和共享。

GPL 协议的主要原则如下:

  1. 自由使用:用户有权以任何目的运行、研究、复制、修改和分发被授权的软件。

  2. 源代码的访问:如果在 GPL 许可的软件中进行了修改或衍生工作,那么这些修改和衍生工作的源代码必须向用户提供,并保留原始版权和许可证信息。

  3. 进一步的分发:如果在 GPL 许可的软件中进行了修改或衍生工作,并且将这些软件分发给其他人,那么这些人也必须遵循 GPL 协议,即他们也可以自由使用、复制、修改和分发这些软件。

  4. 公开许可证:如果将 GPL 许可的软件用作部分或全部用于在线服务,那么用户访问该服务时,必须可以自由获取该软件的源代码。

  5. 禁止添加限制:GPL 协议不允许在 GPL 许可的软件上添加额外的限制,例如禁止商业使用、限制访问等。

GPL 协议的目标是确保软件的自由传播和共享,防止闭源和专有软件的限制。它强调用户的权利和自由,同时保护软件的原始作者的版权。任何使用 GPL 许可的软件的人都必须遵循协议的要求,并将其传递给后续用户。这种方式促进了自由软件社区的合作和共享,使得开发者和用户能够共同从自由软件的优势中受益。

关于衍生的理解

在 GPL(GNU通用公共许可证)中,衍生工作指的是在 GPL 许可的软件基础上进行修改或创作的新软件。

GPL 协议要求,如果在 GPL 许可的软件上进行了修改或创作了新的软件,这些修改或新软件也必须遵循 GPL 协议,并以 GPL 许可进行分发。这意味着,如果你在一款使用了 GPL 许可的软件上进行了修改,或者在其基础上创作了新的软件,那么你必须将这些修改或新软件也发布为自由软件,并遵循 GPL 许可的要求。

衍生工作的范围较广,包括但不限于以下情况:

  1. 修改源代码:对 GPL 许可的软件的源代码进行修改,包括添加、删除、更改代码等。

  2. 编译链接:将 GPL 许可的软件与其他软件编译链接,生成一个新的可执行程序。

  3. 扩展功能:在 GPL 许可的软件上添加新的功能或模块。

  4. 翻译:将 GPL 许可的软件进行翻译成其他语言。

  5. 衍生作品:在 GPL 许可的软件上进行创作,生成一个新的软件,例如基于 GPL 许可的代码进行开发的应用程序。

需要注意的是,GPL 协议对衍生工作的要求是强制性的,即如果你在 GPL 许可的软件上进行了修改或创作了新的软件,你必须遵循 GPL 协议的规定,并将这些修改或新软件以 GPL 许可进行分发,从而保持软件的自由和共享的特性。

网上的回答:

传染性看的是你的程序是否是一个「 derivative work 」衍生作品,或者说你的程序是否依赖了原始作品的功能。
比如你的软件 A 引用了类库 B。类库 B 实现了软件 A 中的某个需要的功能,缺少了类库 B 会让软件 A 无法正常使用,那么一般认为软件 A 是类库 B 的一个衍生作品。

不管他们是静态编译的,还是动态编译的,还是通过操作系统的其他手段调用的,都没有关系。

比如有一命令行程序 A 是 GPL 的,你为 A 编写了一个图形界面 B。显然 B 必须要 A 才能正常使用,那么 B 就是 A 的衍生作品,也受 GPL 约束。(实际的例子,比如你为 GPL 许可证下的 ffmpeg 写了一个 GUI,那么你的 GUI 受 GPL 约束。)

又比如有一命令行程序 A 是 GPL 的,你写了一个很复杂的软件 B,其中一个功能可以调用 A,但没有 A 也能实现主要功能,用户可以自行下载软件 A 与你的软件 B 一起工作,那么一般认为 B 不是 A 的衍生作品,不受 GPL 约束。(实际的例子,比如你为 Adobe Premiere 写了一个开源的视频导入插件,调用了 GPL 许可证下的 ffmpeg,那么你的插件受 GPL 约束但是 Adobe 软件不受。)

LGPL 协议

LGPL(GNU Lesser General Public License)是一种自由软件许可证,由自由软件基金会(Free Software Foundation, FSF)发布。LGPL 是 GPL(GNU General Public License)的一个变种,旨在对使用于共享库(或称为动态链接库)的软件进行授权。

LGPL 允许在 LGPL 许可证的软件中使用 LGPL 许可的库(或称为共享库或动态链接库),并允许将这些库链接到非自由软件中。这意味着,如果你使用了 LGPL 许可的库开发了一个软件,并将这个库以共享库的形式提供,那么你可以将这个软件链接到非自由软件中,而不需要将整个应用程序的源代码开放。

LGPL 的主要特点包括:

  1. 动态链接:LGPL 适用于共享库(动态链接库)的使用,允许在非自由软件中链接到 LGPL 许可的库,而不需要开放整个应用程序的源代码。

  2. 派生工作:对于对 LGPL 许可的库进行修改或创作的派生工作,必须遵循 LGPL 许可的要求,并将修改后的库以 LGPL 许可进行分发。

  3. 非共享库链接:如果将 LGPL 许可的库静态链接到应用程序中(即将库的代码直接包含在应用程序中),那么应用程序的整个源代码必须遵循 LGPL 许可的要求,并开放源代码。

  4. 保留二进制模块:LGPL 允许将应用程序与 LGPL 许可的库进行链接,并将应用程序作为二进制文件发布,而不需要提供应用程序的源代码。

需要注意的是,LGPL 许可的软件可以自由使用和分发,但在对 LGPL 许可的库进行修改或创作派生工作时,必须遵循 LGPL 许可的要求,并在满足相应的许可证要求的前提下,享受 LGPL 许可带来的灵活性和自由。对于使用 LGPL 许可的库进行开发的应用程序,使用者需要仔细阅读和遵循 LGPL 许可的规定,以确保合法合规地使用和分发软件。

用 Qt 开发商业软件

Qt 有两个许可证:LGPL 和商业协议。

基于以上理解,只要在开发过程中,非动态的引用了 Qt 的库,项目就自动传染为 LGPL 协议。在向用户发布二进制文件时,要提供程序的源代码。

或者可以购买商业版的 Qt

标签:GPL,协议,LGPL,许可,自由软件,软件,源代码
From: https://www.cnblogs.com/AngleLin/p/17294100.html

相关文章

  • 管理WEB服务器文件的WebDAV协议&HTTP大跃进--QUIC与HTTP30&WEB安全攻击概述
    管理WEB服务器文件的WebDAV协议WebADV协议    WEBDAV追加方法  WeDAV请求示例  HTTP大跃进--QUIC与HTTP30 QUIC&HTTP3.0   HTTP2.0的问题队头阻塞建立连接的握手延迟大QUIC的特性0RTT   没有队头阻塞的多路复用 ......
  • HTTP协议的瓶颈&双工通信的WebScocket与HTTP
    HTTP协议的瓶颈影响HTTP网络请求的因素1.带宽2.延迟 HTTP协议的瓶颈1.一条连接只可发送一个请求2.请求只能从客户端开始,客户端不可以接受除响应以外的指令3.请求/响应头部不经压缩就发送4.每次互相发送相同的头部造成的浪费较多5.非强制压缩发送 双工通信的WebScock......
  • “当高启强遇到陈书婷”与TCP协议
    大家是否经常听别人提起TCP协议的三次握手和四次挥手呢?......
  • 浅析 HLS 流媒体协议
    一、前言在最近工作中接触到了视频点播和直播业务,也了解到了一些流媒体的后端技术,这段时间希望将了解到的一些知识总结下来,这篇文章主要介绍HLS流媒体协议的基础知识。二、常见流媒体协议常用的流媒体协议主要有HTTP渐进下载和基于RTSP/RTP的实时流媒体协议,这两种协议是完......
  • HTTPS协议概述&HTTPS使用成本&HTTPS对性能的影响&HTTPS常见问题
    HTTPS协议概述 HTTPS可以认为是HTTP+TLSTLS是传输层加密协议,它的前身是SSL协议  HTTPS功能介绍内容加密1、非对称密匙交换2、对称内容加密身份认证1、数字证书数据完整性HTTPS使用成本证书费用以及更新维护HTTPS降低用户访问速度消耗CPU资源,需要增加大量......
  • 网页端WebRTC推流转换为RTMP/GB28181等其他直播流协议
    网页端WebRTC推流转换为RTMP/GB28181等其他直播流协议WebRTC是一个在WEB浏览器端广泛应用的流媒体引擎,通过点对点的方式实现音视频数据的传输,以完成视频会议等功能。但是考虑到WebRTC主要是为有限人数情况下的点对点视频会议服务,在做其他直播应用的时候,或者接入现有流媒体网络的......
  • 从1写TCPIP协议栈7:TCPIP协议!!!!!
    前言  本次课程练习的重点来啦!!TCP(TransmissionControlProtrol)协议,存在于传输层,面向字节流、带有确认与累计的滑动窗口协议。TCP可以是说IP子协议中最基础的、最完备的前辈协议,它首次实现了差错修正,弥补了IP协议与UDP协议的缺点。、TCP协议简介(初步)滑动窗口   1、我们......
  • ZooKeeper数据和集群特点,ZAB协议和选主过程解析
    前言本文讲述ZooKeeper集群架构特点、数据结构、事务ID、选主和ZAB协议具体执行过程。服务保证ZooKeeper非常快速且非常简单。由于它的目标是构建更复杂的服务(如同步)的基础,因此它提供了一组保证:【顺序一致性】来自客户端的更新将按发送顺序执行,因为只有唯一的主节点负责写......
  • Raft协议及伪码解析
    跟着Martin大神学习Raft协议,带上讲解和伪码确实给人深入浅出的感觉,英音听起来十分优雅,也是一种享受了~视频地址:DistributedSystems6.2:Raft整篇主要包括了十张Slide:节点的状态转换首先需要明确,节点只有三种状态:followercandidateleaderfollower当一个节点刚启动的......
  • Modbus协议
    概念Modbus属于应用层协议,主要用于设备之间的网络通信存储区、存储区代号、范围制定不同的存储区的目的是存储不同类型的数据存储区:输入布尔(布尔也叫线圈)输出布尔输入寄存器输出寄存器存储区代号:输入布尔:1区输出布尔:0区输入寄存器:3区输出寄存器:4区存储区范围:......