liangsheng 发表于 2018-10-1 00:00:00

GPL - GNU General Public License 软件开源 通用公共许可协议

GPL - GNU General Public License 软件开源 通用公共许可协议
GPL 是 General Public License 的缩写,是 GNU 通用公共许可协议。并非由自由软件基金会所发表,亦非使用 GNU 通用公共授权的软件的法定发布条款;只有 GNU 通用公共授权英文原文版本才具有此等效力。
GPL 由理查德·斯托曼 (Richard Stallman) 撰写,用于 GNU 计划。它以 GNU Emacs、GDB、GCC 许可协议的早期版本为蓝本。这些许可协议都包含有一些 GPL 的版权思想,但仅只针对特定程序。理查德·斯托曼 (Richard Stallman) 的目标就是创造出一种四海之内皆可使用的许可协议,这样就能为许多源代码共享计划带来福音。GPL V1.0 就这样,在 1989 年 1 月诞生。
到 1990 年时,因为一些共享库而出现了相比 GPL 更宽松的许可协议需求。所以当 GPL V2.0 在 1991 年 6 月发布时,另一许可协议 —— 库通用许可协议(Library General Public License,简称LGPL)也随之发布,并记作 “V2.0” 以表示对 GPL 的补充。版本号在 LGPL 版本 2.1 发布时不再相同,而 LGPL 也被重命名为 GNU 宽通用公共许可协议(Lesser General Public License)以体现 GNU 哲学观。

概述
大多数软件的许可协议会剥夺您共享和修改软件的自由。相比之下,GNU 通用公共许可协议试图保证您共享和修改自由软件的自由 —— 保证自由软件对所有用户是自由的。GPL 适用于大多数自由软件基金会的软件,以及由使用这些软件而承担义务的作者所开发的软件。(自由软件基金会的其他一些软件受 GNU 库通用许可协议的保护)。你也可以将它用到您的程序中。当我们谈到自由软件(free software)时,我们指的是自由而不是价格。
GNU 通用公共许可协议会保证您有发布自由软件的自由(若您愿意,还可对此项服务收取一定的费用);保证您能收到源程序或者在您需要时能得到它;保证您能修改软件或将它的一部分用于新的自由软件;而且还保证您知道您能做这些事情。
10 倍以上效率提升 智能GUI文档翻译 Python Qt/C++ HTML5 网站站群 "数字 IDE 专业版" 开发工具http://idepro.digitser.cn/http://forum.digitser.cn/thread-2342-1-1.html
百度网盘https://pan.baidu.com/s/1jIzOgzs

软件仓库
https://github.com/digitser
https://digitser.sourceforge.io/https://pan.baidu.com/s/1TV70__Be1ta0ney1-tudFQ
为了保护您的权利,我们需要作出规定:禁止任何人不承认您的权利,或者要求您放弃这些权利。如果您修改了自由软件或者发布了软件的副本,这些规定就转化为您的责任。
譬如:如果您发布这样一个程序的副本,不管是收费的还是免费的,您必须将您具有的一切权利给予您的接受者;您必须保证他们能收到或得到源程序;并且将这些条款给他们看,使他们知道他们有这样的权利。
http://forum.digitser.cn/data/attachment/forum/201809/30/232058fb002uk0eslljdc2.jpgGPL LPGL Mozilla BSD MIT Apache Licence 许可协议
我们采取 2 项措施来保护您的权利:1、给软件以版权保护。
2、给您提供许可协议。它会给你复制、发布和修改这些软件的法律许可。
同样,为了保护每个作者和我们自己,我们需要清楚地让每个人明白,自由软件没有担保(no warranty)。如果由于其他某个人修改了软件,并继续加以传播。我们需要它的接受者明白:他们所得到的并不是原来的自由软件。由其他人引入的任何问题,不应损害原作者的声誉。
最后,任何自由软件不断受到软件专利的威胁。我们希望避免这样的风险,自由软件的再发布者能以个人名义获得专利许可。事实上,就是将软件私有化。为防止这一点,我们必须明确:任何专利必须以允许每个人自由使用为前提,否则就不准许有专利。条款
01、此许可协议适用于任何包含版权所有者声明的程序及其他作品,版权所有者在声明中明确说明程序和作品可以在 GPL 条款的约束下发布。下面提到的 “程序” 指的是任何这样的程序或作品。而 “基于程序的作品” 指的是程序或者任何受版权法约束的衍生作品。也就是说包含程序或程序的一部分的作品。可以是原封不动的、或经过修改的 “和/或” 翻译成其他语言的(程序)。在下文中,翻译包含在修改条款中。每个许可协议接受者用您来称呼。许可协议条款不适用于复制、发布、修改以外的活动。这些活动超出这些条款的范围。运行程序的活动不受条款的限制。仅当程序的输出构成基于程序作品的内容时,这一条款才适用(如果只运行程序就无关)。是否普遍适用取决于程序具体用来做什么。
02、只要您在每一副本上明显和恰当地出示版权声明和不承担担保声明,保持此许可协议的声明和没有担保的声明完整无损,并和程序一起给每个其他的程序接受者一份许可协议的副本,您就可以用任何媒体复制和发布您收到的原始程序的源代码。您可以为转让副本的实际行动收取一定费用。您也有权选择提供担保以换取一定的费用。
03、您可以修改程序的一个或几个副本或程序的任何部分,以此形成基于程序的作品。只要您同时满足以下所有条件,您就可以按前面第 02 款的要求复制和发布这一经过修改的程序或作品。 a) 您必须在修改文件中附有明确说明:您修改了这一文件及具体修改日期。
b) 您必须使您发布或出版的作品(它包含程序的全部或一部分,或包含由程序的全部或部分衍生的作品)允许第 3 方作为整体按许可协议条款免费使用。
c) 如果修改的程序在运行时以交互方式读取命令,您必须使它在开始进入常规交互使用方式时打印或显示声明;包括:适当的版权声明和没有担保的声明(或者您提供担保的声明);用户可以按此许可协议条款重新发布程序的说明;并告诉用户如何看到这一许可协议副本。(例外情况:如果原始程序以交互方式工作,并不打印这样的声明,您的基于程序的作品也就不用打印声明)。
这些要求适用于修改作品整体。如果能够确定作品的一部分并非程序的衍生产品,可以合理地认为这部分是独立的,是不同的作品。当您将它作为独立作品发布时,它不受此许可协议及其条款的约束。但是当您将这部分作为基于程序作品的一部分发布时,作为整体它将受到许可协议条款的约束。准予其他许可协议持有人的使用范围将扩大到整个产品。也就是每个部分,不管它是谁写的。因此,本条款的意图不在于索取权利或剥夺全部由您写成的作品的权利。而是履行权利来控制基于程序的集体作品或衍生作品的发布。此外,将与程序无关的作品和该程序或基于程序的作品一起放在存储体或发布媒体的同一卷上,并不会导致将其他作品置于此许可协议的约束范围内。
04、您可以以目标码或可执行形式复制或发布程序(或符合第 03 款基于程序的作品);只要您遵守前面的第 2、3 款,并同时满足下列 3 条中的 1 条。
a) 在通常作为软件交换的媒体上,和目标码一起附有机器可读的完整源码。这些源码的发布应符合上面第 2、3 款的要求;或者
b) 在通常用作软件交换的媒体上,和目标码一起,附有给第三方提供相应机器可读的源码的书面报价。有效期不少于 3 年,费用不超过实际完成源程序发布的实际成本。源码的发布应符合上面的第 2、3 款的要求;或者
c) 和目标码一起,附有您收到的发布源码的报价信息。(这一条款只适用于非商业性发布,而且您只收到程序的目标码或可执行代码和按 b 款要求提供的报价)。作品源码指的是对作品进行修改最优先择取的形式。对可执行的作品而言,完整源码包括:所有模块的所有源程序、加上有关接口的定义、加上控制可执行作品的安装和编译的 Script。特殊例外,发布的源码不必包含任何常规发布的供可执行代码在上面运行的操作系统的主要组成部分(譬如:编译程序、内核等)。除非这些组成部分和可执行作品结合在一起。如果采用提供对指定地点访问和复制的方式发布可执行码或目标码,那么,提供对同一地点的访问和复制的源码可以算作源码的发布,即使第三方不强求与目标码一起复制源码。
05、除非您明确按许可协议提出的要求去做,否则您不能复制、修改、转发许可协议和发布程序。任何试图用其他方式复制、修改、转发许可协议和发布程序都是无效的。而且将自动结束许可协议赋予的权利。然而,对那些从您那里按许可协议条款得到的副本和权利的人们,只要他们继续全面履行条款,许可协议赋予他们的权利仍然有效。
06、您没在许可协议上签字,因而您没有必要一定接受这一许可协议。然而,也就没有任何其他东西可赋予您修改和发布程序及其衍生作品的权利。如果您不接受许可协议,这些行为就是法律禁止的。因此,如果您修改或发布程序(或任何基于程序的作品),就表明您已接受这一许可协议以及它的所有有关复制、发布、修改程序或基于程序的作品的条款和条件。
07、每当您重新发布程序(或任何基于程序的作品)时,接受者就自动从原始许可协议颁发者那里接受到这些条款和条件支配的复制、发布或修改程序的许可协议。您不可以对接受者履行这里赋予他们的权利强加其他限制。您也没有强求第三方履行许可协议条款的义务。
08、如果由于法院判决或违反专利的指控或任何其他原因(不限于专利问题)的结果,强加于您的条件(不管是法院判决、协议或其他)和许可协议的条件有冲突。他们也不能用许可协议条款为您开脱。在您不能同时满足本许可协议规定的义务及其他相关义务时,作为结果,你可以根本不发布程序。譬如:如果某一专利许可协议不允许所有那些直接或间接从您那里接受副本的人们在不付专利费的情况下重新发布程序,唯一能同时满足两方面要求的办法是停止发布程序。
如果本条款的任何部分在特定环境下无效或无法实施,就使用条款的其余部分。并将条款作为整体用于其他环境。本条款的目的不在于引诱您侵犯专利或其他财产权的要求,或争论这种要求的有效性。本条款的主要目的在于保护自由软件发布系统的完整性。它是通过通用公共许可协议的应用来实现的。许多人坚持应用这一系统,已经为通过这一系统发布大量自由软件作出慷慨贡献。“作者/捐献者” 有权决定 “他/她” 是否通过任何其他系统发布软件。许可协议持有人不能强制这种选择。

09、如果由于专利或者由于有版权的接口问题使程序在某些国家的发布和使用受到限制,将此程序置于许可协议约束下的原始版权拥有者可以增加限制发布地区的条款,将这些国家明确排除在外。并在这些国家以外的地区发布程序。在这种情况下,许可协议包含的限制条款和许可协议正文一样有效。
10、自由软件基金会可能随时出版通用公共许可协议的修改版或新版。新版和当前版本在原则上保持一致,但在提到新问题时或有关事项时,在细节上可能出现差别。
每一版本都有不同版本号。如果程序指定适用于它的许可证版本号以及 “任何更新版本”。您有权选择遵循指定版本或自由软件基金会以后出版的新版本,如果程序未指定许可协议版本,您可选择自由软件基金会已经出版的任何版本。
11、如果您愿意将程序的一部分结合到其他自由程序中,而它们的发布条件不同。请写信给作者,要求准予使用。如果是自由软件基金会加以版权保护的软件,请写信给自由软件基金会。我们有时会作为例外情况处理。我们的决定受两个主要目标的指导。这两个主要目标是:a) 我们的自由软件的衍生作品继续保持自由状态。
b)从整体上促进软件的共享和重复利用。
12、由于程序准予免费使用,在适用法律准许范围内,程序没有担保。除非另有书面说明,版权所有者“和/或” 其他提供程序的人们 “一样” 不提供任何类型的担保。不论是明确的,还是隐含的。包括但不限于隐含的适销和适合特定用途的保证。全部风险,如程序的质量和性能问题都由您来承担。如果程序出现缺陷,您承担所有必要服务、修复和改正的费用。
13、除非适用法律或书面协议的要求,在任何情况下,任何版权所有者或任何按许可协议条款修改和发布程序的人们都不会对您的损失负有任何责任。包括由于使用或不能使用程序引起的任何一般的、特殊的、偶然发生的、或重大的损失(包括但不限于数据的损失、或者数据变得不精确、或者您或第三方的持续损失、或者程序不能和其他程序协调运行等)。即使版权所有者和其他人提到这种损失的可能性也不例外。

使用
如果您开发了新程序,而且您需要它得到公众最大限度的利用。要做到这一点的最好办法是,将它变为自由软件。使得每个人都能在遵守协议条款的基础上,对它进行修改和重新发布。
为了做到这一点,请给程序附上下列声明。最安全的方式是将它放在每个源程序的开头,以便最有效地传递拒绝担保的信息。每个文件至少应有 “版权所有” 行以及在什么地方能看到声明全文的说明。

<用一行空间给出程序的名称和它用来做什么的简单说明>
版权所有(C) 20XX <作者姓名>
这一程序是自由软件,你可以遵照自由软件基金会出版的 GNU 通用公共许可协议条款来修改和重新发布这一程序。或者使用许可协议第 2 版,或者(根据您的选择)使用任何更新版本。
发布这一程序的目的是希望它有用,但没有任何担保。甚至没有适合特定目的的隐含担保。更详细的情况请参阅 GNU 通用公共许可协议。
您应该已经和程序一起收到一份 GNU 通用公共许可协议副本。如果还没有,
请写信给:
The Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA02139, USA

还应加上如何和您保持联系的信息。
如果程序以交互方式进行工作,当它开始进入交互方式工作时,使它输出类似下面的简短声明:

Gnomovision 第69 版, 版权所有(C) 20XX, 作者姓名,
Gnomovision 绝对没有担保。要知道详细情况,请输入 ‘show w’。

这是自由软件,欢迎你遵守一定的条件重新发布它,要知道详细情况,请输入 ‘show c’。
假设命令 ‘show w’ 和 ‘show c’ 应显示通用公共许可协议的相应条款。当然,您使用的命令名称可以不同于 ‘show w’ 和 ‘show c’。根据您程序的具体情况,也可以用菜单或鼠标选项来显示这些条款。
如果需要,您应该取得您上司(如果你是程序员)或您学校签署放弃程序版权的声明。下面是一个例子,您应该改变相应名称:
Yoyodyne 公司以此方式放弃 James Harker 所写的 Gnomovision 程序的全部版权利益。

1989.4.1

Ty coon 副总裁

这一许可协议不允许您将程序并入专用程序。如果您的程序是一个子程序库。
您可能认为用库的方式和专用应用程序连接会更有用。如果这是您想做的事,请使用 GNU 库通用公共许可协议代替本许可协议。
历史
GPL1GPL1 即最初版本,发布于 1989 年 1 月;其目的是避免那些阻碍自由软件的行为,而这些阻碍软件开源的行为主要有以下 2 种:1、软件发布者只发布可执行二进制代码而不发布源代码;
2、软件发布者在软件许可加入限制性条款。
因此按照 GPL1,如果发布可执行二进制代码;就必须同时发布可读源代码,且在发布任何基于 GPL 许可的软件时,不能添加任何限制性条款。
GPL2理查德·斯托曼在 GPL2 中所做的最大的改动就是增加 “自由还是死亡”("Liberty or Death")这章条款,即第 七 章 liberty-or-death Presentation。这章中申明:如果哪个人在发布源于 GPL 的软件时,同时添加限制性条款,以在一定程度上保障和尊重其它一些人的自由和权益 (也就是说在一些国家里,人们只以二进制代码的形式发布软件,以保护开发软件者的版权);那么,他将根本无权发布该软件。
到了 1990 年,人们普遍认为一个限制性弱的许可协议对于自由软件的发展是有战略意义上的好处的;因此,当 GPL 的第 2 版(GPL2)在 1991 年 6 月发布时,与此同时第 2 个许可协议程序库 GNU 通用公共许可证 (LGPL,the Lesser General Public License) 也被发布出来。且一开始就将其版本定为第 2 版以表示其和 GPL2 的互补性。这个版本一直延续到 1999 年,并分支出一个派生的 LGPL 版本号 2.1;并将其重命名为轻量级通用公共许可证(又称宽通用公共许可协议)(Lesser General Public License)以反映其在整个 GNU 哲学中的位置。
GPL3
理查德·斯托曼 (Richard Stallman) 起草了第一份 GNU GPL3 草案,在美国麻州剑桥市的 MIT 大学。

到 2005 年,GPL3 由斯托曼起草,由伊本·莫格林和软件自由法律中心 (Software Freedom Law Center) 提供法律咨询。
斯托曼在 2006 年 2 月 25 日自由及开源软件开发者欧洲会议的演讲上说。在所有的改动中,最重要的是以后下 4 条:1、解决软件专利问题;
2、与其他许可协议的兼容性;
3、源代码分区和组成的定义;
4、解决数位版权管理 (DRM) 问题。
2006 年,自由软件基金会针对 GPL 可能的修改开始了 12 个月的公共咨询。
在公众咨询过程中,有 962 条评论被提交给第一稿草案。 最终总共有 2,636 条评论被提交。
GPL3 草案于2006 年 1 月 16 日起开始可用。
2007 年 3 月 28 日正式启用。
2007 年 6 月 29 日自由软件基金会正式发布 GPL 第 3 版。
Source Code 和 Object Code
Source Code 指的是,以各种编程语言写成的源代码,通过 Source Code 结合文档,可了解整个软件的体系结构及具体到某个功能函数的实现方法等。
Object Code 指的是 Source Code 经编译后,生成的类似于 "类库",提供各种接口供他人使用的目标码,也就是常见的 *.dll *.so *.pyd 等格式文件。
区分这两个概念的目的,在于:有些开源只发布 Object Code,当然,大多数发布的是 Source Code。很多开源协议也对 "发布哪种 Code 时应怎样" 有明确约束。
Contributors 和 Recipients
Contributors 指的是,对某个开源软件或项目提供了代码 (包括最初的,或修改过的) 的人或实体 (团队、公司、组织、等)。
Contributors 按参与开源软件的时间先后顺序,可分为 an initial Contributor 和 subsequent Contributors。
Recipients 指的是,开源软件或项目的获取者,显然,subsequent Contributors 也属 Recipients 之列。

Derivative Module 和 Separate Module
Derivative Module 指的是,依托或包含 "最初的" 或 "从别人处获取的" 开源代码而产生的代码,是原 "源代码" 的增强 (不等于增加)、改善和延续的模块,译为 "衍生模块"。
Separate Module 指的是,参考或借助原 "源代码",开发出的独立的、不包含、不依赖于原 "源代码模块",译为 "独立的模块"。
理解这两个概念的目的,在于:很多协议对涉及商业发布时,会有哪些是衍生的,哪些是独立的,有着明确的商业发布规定。
http://forum.digitser.cn/data/attachment/forum/201605/19/132155fevczeyds5e5y1wy.jpg"长按二维码" 或 "扫一扫" 关注 "德云社区" 微信公众号
版权声明:
本文为独家编译稿件,版权归 德云社区,未经许可不得转载;否则,将追究其法律责任。

页: [1]
查看完整版本: GPL - GNU General Public License 软件开源 通用公共许可协议