Linux必知词汇:GNU通用公共许可证 GPL(GNU General Public License)

简介: Linux必知词汇:GNU通用公共许可证 GPL(GNU General Public License)

GNU通用公共许可协议(英语:GNU General Public License,缩写GNU GPL 或 GPL),是被广泛使用的自由软件许可证,给予了终端用户运行、学习、共享和修改软件的自由。许可证最初由自由软件基金会的理查德·斯托曼为GNU项目所撰写,并授予计算机程序的用户自由软件定义(The Free Software Definition)的权利。 GPL是一个Copyleft许可证,这意味着派生作品只能以相同的许可条款分发。 这与宽松自由软件许可证有所区别 ,如BSD许可证和MIT许可证就是其中被广泛使用的例子。 GPL是第一个普遍使用的Copyleft许可证。

历史上,GPL许可证系列一直是自由和开源软件领域最受欢迎的软件许可之一。根据GPL许可的优异自由软件程序的例子有Linux内核和GNU编译器集合(GCC)。大卫·A·惠勒认为,GPL提供的Copyleft对于基于Linux的系统的成功至关重要,给予向内核贡献的程序员保证他们的工作将有益于整个世界并保持自由,而不至于被不提供反馈给社群的无良软件公司所剥削。

2007年,发布了第三版许可证(GNU GPLv3),以解决在长期使用期间发现的第二版(GNU GPLv2)所发生的一些困扰。 为了使许可证保持最新状态,GPL许可证包含一个可选的“并延伸到未来版本”条款,允许用户在FSF更新的原始条款或新版本之间进行选择。 有些开发人员在软件许可使用时,选择省略它; 例如,Linux内核已经在GPLv2下获得许可,就不需包括“并延伸到未来版本”的声明。

GPL授予程序接受人以下权利,或称“自由”,或称“copyleft”:

基于任何目的,按你的意愿运行软件的自由(自由之零)。
学习软件如何工作的自由,按你的意愿修改软件以符合你的计算的自由(自由之一)。可访问源代码是此项自由的先决条件。
分发软件副本的自由,因此你可以帮助你的好友(自由之二)。
将你修改过的软件版本再分发给其他人的自由(自由之三)。这样可以让整个社区有机会共享你对软件的改动。可访问源代码是此项自由的先决条件。[16]
相反地,随著作权所有软件的最终用户许可证几乎从不授予用户任何权利(除了使用的权利),甚至可能限制一些法律允许的行为,比如逆向工程。

GPL与其他一些更“许可的”自由软件许可证(比如BSD许可证)相比,主要区别就在于GPL寻求确保上述自由能在复制软件及派生作品中得到保障。它通过一种由斯托曼发明的叫Copyleft的法律机制实现,即要求GPL程序的派生作品也要在GPL之下。相反,BSD式的许可证并不禁止演绎作品变成专有软件。

GPL是自由软件和开源软件的最流行许可证[17]。到2004年4月,GPL已占Freshmeat上所列的自由软件的约75%,SourceForge的约68%。类似的,2001年一项关于Red Hat Linux 7.1的调查显示一般的代码都以GPL发布。著名的GPL自由软件包括EMACS,Linux核心(并非所有Linux发行版的核心都是开源的)和GCC。

参考资源:

  1. 维基百科: https://zh.wikipedia.org/wiki/GNU%E9%80%9A%E7%94%A8%E5%85%AC%E5%85%B1%E8%AE%B8%E5%8F%AF%E8%AF%81
  2. GPLv1 https://www.gnu.org/licenses/old-licenses/gpl-1.0.html
  3. GPLv2 https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
  4. GPLv3 https://www.gnu.org/licenses/gpl-3.0.html
目录
相关文章
|
2月前
|
存储 缓存 监控
Linux 系统 内存通用指标以及查询方式
Linux 系统 内存通用指标以及查询方式
21 0
|
7月前
|
JavaScript Linux 开发工具
百度搜索:蓝易云【如何在 GNU Linux 上通过 Nvm 安装 Node 和 Npm?】
现在,你已经成功在GNU Linux上通过Nvm安装了Node.js和Npm。你可以使用Nvm来管理和切换不同版本的Node.js,以满足你的项目需求。
153 0
|
11月前
|
Linux 网络安全
【Linux通用】Centos系列跳过首次登陆新建用户
【Linux通用】Centos系列跳过首次登陆新建用户
1441 0
|
Java Linux Shell
Linux下启动java程序的通用脚本
Linux下启动java程序的通用脚本
343 0
|
存储 安全 算法
【GNU/Linux kernel源码分析】刨根问底,速览,对初学者友好的底层理解,让你对内核不再迷茫
【GNU/Linux kernel源码分析】刨根问底,速览,对初学者友好的底层理解,让你对内核不再迷茫
384 0
【GNU/Linux kernel源码分析】刨根问底,速览,对初学者友好的底层理解,让你对内核不再迷茫
|
Ubuntu Linux iOS开发
GNU 项目之父:苹果把 Mac 变“监狱”|Ubuntu 并非免费 GNU/Linux 发行版不建议用
GNU 项目之父:苹果把 Mac 变“监狱”|Ubuntu 并非免费 GNU/Linux 发行版不建议用
146 0
GNU 项目之父:苹果把 Mac 变“监狱”|Ubuntu 并非免费 GNU/Linux 发行版不建议用
Daz
|
Unix Linux Shell
GNU/Linux下实现一个简易shell,支持多重管道
简易shell,支持多重管道
Daz
500 0
Daz
|
存储 程序员 Linux
GNU/Linux下进程与虚拟内存
对进程与虚拟内存的简单理解
Daz
162 0
GNU/Linux下进程与虚拟内存
|
4月前
|
NoSQL 编译器 开发工具
006.gcc编译器
gcc是什么?
47 0
006.gcc编译器
|
5月前
|
存储 NoSQL 算法
从一个crash问题展开,探索gcc编译优化细节
问题分析的过程也正是技术成长之路,本文以一个gcc编译优化引发的crash为切入点,逐步展开对编译器优化细节的探索之路,在分析过程中打开了新世界的大门……
439 1