GPL 协议和 LGPL 协议的理解

发布时间 2023-04-06 20:42:10作者: 卑以自牧lq

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