Java基础、中级、高级、架构面试资料

一文看懂 GPL 2.0 协议!

业余杂谈 xmt_herman_gcy 11196浏览
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog2,发送下载链接帮助你免费下载!
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云

GPL协议在我心中,一直是一块丰碑,简直让人敬而畏之。

但真正读过GPL的人,少之又少,甚至绝大多数程序员,都没有见过GPL的真身。

原因很简单,一是不关心,二是懒得看,三是觉得看了也看不懂。

其实没有那么难的,看完这篇人话版,你就克服这个心理障碍了。

我们早该读GPL的。

我们早该理解GPL的。

本文的目的,是让人读起来不要那么费劲。

阅读时,你需要一个软件不断流转的概念,就是软件由最初作者写好后,发给了别人,别人又发给了你,你改了改,又发给其他人,所以开源软件有上下游之说,上游把软件分发给你,你又分发给下游,软件就是这样不断传播散布开来。

由于说人话,本文难免会有一些演绎的成分,但总体上是严格对应原文精神的。

不可以用本文去打官司。

GPL 2.0全文分为三个部分,第一部分是导言(主要讲了一些自由软件的理念);第二部分是条款和条件,里面有13个条款(section 0~12),其中最后两条是免责声明;第三部分是指导人们如何使用GPL,严格地说,这部分算附录。

下面开始。

注:

1、GPL是FSF制定的,文中的“我们”,指的就是FSF,如果说“我”,有可能是Richard Stallman,也有可能是“本程序”的作者,请用你的智慧来判断。

2、关于概念,很多人喜欢说“A可不是B”,不过我最喜欢说“A就是B”,所以:

在本文里,“程序”、“软件”、“作品”是一样的,“发布”就是“分发”,“授权”就是“许可”,“协议”就是“许可证”,“担保”就是“保证”,“无担保”就是“免责”。

4、毕竟是人话,不可避免会有一些演绎,有的地方我标注了译者注,有些地方并没有。

5、我说的是人话,不代表别人说的不是人话。


GPL 2.0许可证(人话版)

版本 2, 1991年6月

版权 (C) :1989, 1991 Free Software Foundation, Inc.

51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA

你可以复制、发布本许可证,但不能修改本许可证。一个字都不能动。

开场白

我们设计GPL协议,目的很简单,就是给程序员自由,给用户自由!

我们FSF的软件大都用这个协议,但并不是说只有我们能用,任何人都可以用这个协议!

我们认为,人应该有这样的自由:

每个人都有分发软件的自由,而且可以为此收费。

(译者注:先讲下“分发”的概念,分发就是有人把软件卖给你、寄给你、发给你、拷给你、让你下载、帮你安装等等,只要你从他那儿搞到软件,就算他分发给你了。有时候会用“发布”一词,请视为等同。)

(译者注:本文所讲的“程序”、“软件”、“作品”、“东西”、“玩意”,在绝大多数情况下,指的都是一个东西:自由软件,尤指使用GPL的软件。)

每个人有获取源码的自由,人们要能得到软件的源码!

为什么要有源码?

因为源码让程序员更自由,源码让用户更自由!

如果你懂,你就会懂的。

不懂,我也没有时间说服你。

每个人有改动源码的自由!

就好比你娶个美女,只能看,不能动,那叫什么自由?

每个人都应该知道这些理念,所以,本许可证带着这个开场白,而使用GPL的软件,都带着本许可证,就是为了让你看见。

GPL协议的目的就是要确保做到上面这些。

每个分发GPL软件的人,都要按照GPL的要求做。

记住:我们给了你自由,你要把这个自由传递下去。

最基本的就是要把源码公开!

每个人都应该知道,程序可不是其他商品,写程序已经够费精神了,而且作者也没有收你钱,所以GPL的程序是AS IS的,也就是说作者不会负责任的。如果你修改了别人的程序,你要说明你修改了,这样,你带来的bug,不会影响人家原作者的声誉。

我们绝不允许将自由软件专有化,你如果基于本程序做了修改,并对修改申请了专利,你就要把这个专利让所有人免费使用,要么你就不要发布。

条款和条件

0.先定义一下:如果一个作品包含本程序的全部或者部分,或者是对本程序做了修改,或者将本程序翻译成其他语言,那么,这个作品就是基于本程序的,也称衍生程序或衍生作品。

(译者注:注意,本文中的“本程序”,就是使用了GPL的程序,本程序发布时是带着本许可证的。)

本协议管的是对本程序的复制、修改和分发。其他的事我不管。比如执行本程序是不受限制的,程序的输出也不受限制,除非输出内容的本身就是本程序的衍生作品。

(译者注:事实上,只要你不分发,只是自己用用,都不会管的,比如你可以随便复制1000份放在你的硬盘上,你也可以随便改,只要你不拿出来传播就好。但如果你哪怕只是发给了小伙伴张三,那就要注意了,你要按GPL的要求做,否则就会违规。除非这个小伙伴和你一个公司而你们正在受公司之命使用或修改本程序。)

(译者注:关于程序输出,可以考虑一下这些情景:你使用受GPL保护的软件LibreOffice写了一本书(这就是输出),这本书不受GPL限制;你用Emacs编辑器(GPL的)写了个程序(这就是输出),这个程序不受GPL限制;你用mysql(受GPL保护)做数据库并搭了个网站,这也不受GPL限制。但如果你用LibreOffice、Emacs编辑的是本程序的源码,或者用mysql数据库存储了本程序的源码,那就另当别论了,这你懂吧。)

1. 如果你要分发的是一字未改的本程序(你从别人那儿搞到手的),记着必须要在明显的地方,带上本程序的版权声明、免责声明(或称无担保声明)、以及本许可证。而且必须是原封不动的本许可证和免责声明。

(你应该知道为什么带这些吧,前面我已经大致说过了,这里再说一遍:第一,你要给原作者留名,人家写自由软件图啥?至少要给人家个名吧!第二,人家也没有收维保费,不能说有点bug还找人家算账,软件不好使,大家自己想办法。第三,要带上我这个GPL协议,要让所有人知道他的权利和义务,更重要的是,让他们看看我的开场白,理解我的初心。)

你可以因为分发软件的具体行为收成本费。(比如你可以收制作光盘的费用,邮寄的费用,拷贝的费用,但你不能收研发费!你更不能收许可费!总之,你收的钱要说得过去!)

你要是能提供维保服务,你可以收维保费。

(译者注:所谓维保,也就是用户软件出故障了,你给人家解决bug,需要版本升级了,你给人家升级,发现安全漏洞了,你给人家补丁,用户不会用了,你给人家培训,这些活,都属于维保。原作者一般是不会干这个的,他更喜欢开发软件。)

2. 如果你要分发的是修改后的本程序(或曰衍生程序),除了上面第1条的要求外,你还要满足以下条件。

a) 对于你修改了的文件,你必须在那个文件上带上明显的修改声明,并附上日期信息。

b) 哪怕你的软件有一点点含有或来自我的程序,你分发时,就要按照GPL,授权所有人都可免费使用、复制、修改、再分发你这个软件。

c) 如果你修改后的程序在运行时和用户以命令的方式交互,你必须在程序运行的开始,显示版权声明、无担保声明(如果你有担保你就显示担保声明),你要告诉用户分发你程序时的条件,告诉用户如何读取本许可证。(如果本程序不显示这些,那你不需要专门改成这样)。

(译者注:比如gdb运行时就会出来一堆这些声明。命令式交互并不仅限于“命令行”交互,完全可以是图形界面的命令式交互甚至是音频的交互,比如用户说:“小某小某”,程序说“在呢”,用户说:“你的许可是什么”,程序说:“我使用GPL许可……”)

这些要求是对修改后作品的整体适用的,如果你的作品有一部分可以独立出来并且不是基于本程序的,那你单独发布这部分的时候,不需要遵守本许可证要求。但如果你要放到一块作为整体发布,那就得遵守规定。

本条的意图,并不是掠夺你写的那部分程序,而是对基于本程序的软件整体,实施控制权。(因为这样,才能给人更多自由!)

当然,如果一个程序仅仅是和本作品放在同一张光盘上、同一个U盘上、同一块活动硬盘上,而它本身不基于本程序,我们不会要求该程序遵守GPL的。(我们没有这么变态,也不会有人真以为能这样“传染”吧?!)

3. 如果你要分发本程序(或衍生程序)的目标代码或可执行文件,除了满足前面第1条和第2条,还必须满足以下其中一条。

a) 伴随这个目标代码或可执行文件,你必须提供机器可读的源代码。(要是你给我一本印在书上的源代码,可别怪我不客气。)而且你要使用拷贝软件常用的方式。(你别给我弄到纸带上,你是穿越来的吗?)总之,别耍花样,老老实实交出源码。

b) 或者你这样做,你附上一个书面的报价单,有效期至少三年,收费不能超过成本费。(比如收费只是你制作光盘、制作U盘的费用。这样,用户在这几年内,想买的时候可以买。)

c) 或者,如果你只是转一下手,把你收到的又转给别人,而且不是商业行为(比如只是发给朋友玩玩),那你带上获取源码的信息就可以了(如果是商业行为,你就得给源码,或者弄书面报价单了)。

所谓源代码形式,就是那种最便于修改的形式。对于一个可执行程序,完整的源代码包括其所有模块的源代码、接口定义文件、编译程序的脚本、安装程序的脚本。但是,不包括内核、编译器这些操作系统主要部件的源码,这不是该你负责的部分,除非你的程序就是干这些事的。

(总之,提供源码就要提供完整的,而且是便于编译的,即便是编程菜鸟,能应该能按照指示,简单几步就能把源码弄成可执行文件,如果你只是扔来一堆源码,而故意隐藏一些信息或制造一些编译上的难度,那只能说你道德低劣。)

如果可执行文件(目标代码)的分发是在特定的地点完成的,那么,在同一地点也应该提供对源码的拷贝。当然,来拷贝可执行文件的人,完全可以选择不拷源码,不能强迫人家非要拷源码。

4. 除了本许可明确允许的方式,你不能复制、修改、分发和再许可本程序。如果你试图干这些事,本许可证授予你的权利将自动终止。但已经从你这里获得了拷贝的人,只要他们遵守规定,他们的授权并不会自动终止。

(译者注:事实上,如果你不分发,只是自己用用,复制、修改的自由还是有的。)

5. 你可以不接受本许可证,但不接受你就不能修改和分发本程序(及衍生程序)。所以,你只要干了这些事,就表明你接受了本许可证。

6. 每当你发布本程序(或衍生程序)时,收到本程序的人,自动获得本程序原始授权人依本许可证所赋予的权利,你不能添加任何额外的限制。你也不用负责别人是不是按照本许可做。(译者注:由此可知,一旦一个GPL的程序诞生,它的子子孙孙都会是GPL的。)

7. 不管是哪种情况,比如法院判决、专利指控或其他情况,导致你无法遵从本许可证的条件,那也不代表你就可以搞特殊,如果你无法求得两全,那你就只能放弃发布。比如:如果一个专利许可要求那些从你这儿直接或间接收到程序的人,不能再免费地发布,这就和本许可冲突了。为了避免这种问题,你唯一能做的,就是不发布该程序。(译者注:此即著名的“自由或死亡”条款,“Liberty or Death”)

不管在什么场景下,如果本条款的任何一部分不能执行或者被判定无效,其他部分也是有效的,且条款整体在其他场景下仍是有效的。

本条的目的不是诱使你侵犯专利或知识产权,也不是让你去和别人争执更应该执行谁的条件,本条的唯一目的,就是保护GPL的完整性,而不是让它被支离破碎地执行,正是通过GPL的一致执行,很多人在相当广泛的软件领域里,做出了显著的贡献。

原创作者有权利使用其他协议发布他的作品,我们任何人不能强迫原创作者必须使用GPL协议。

本条试图彻底解释清楚其他条款所带来的可能后果。

8. 如果在某些国家因为专利或版权的问题难以分发,那么版权所有人在分发时,可以对分发的地区加以明确限制,以排除那些国家。在这种情况下,这些限制不认为是对本协议的修改。(译者注:算一种例外吧。)

9. FSF会不定时发布GPL的新版本,精神上应该不会大变,主要是细节上的变化,以及增加一些对新情况的规定。每一版都会有新的版本号,如果一个软件说使用“GPL 2.0 and later version”,这表示你可以用2.0,或者其后的某个版本,如果只说使用GPL 2 .0,那就只能用2.0,如果说使用GPL但没有指定版本号,那就可以任意选择一个FSF发布过的版本。

10. 如果你希望将本程序的一部分纳入采用其他许可证的自由软件中(译者注:注意自由软件有很多许可证,比如MIT、Apache),你要征得本程序作者的书面同意。如果他同意,那就可以。如果本程序的版权归FSF,那你得问我们,一般来说,我们的作品以及衍生作品都必须要用GPL的,但是,我们有时候也同意一些例外。(译者注:决策权当然是在作者这里的,作者想用什么许可就用什么许可。)我们的决策主要考虑两个目标,一是保证自由软件的子子孙孙都是自由的,二是促进软件的普遍共享和复用。

无担保声明

11. 由于本程序是免费提供的,所以在法律许可范围内,本程序是没有担保的。除非有书面说明。本程序是“AS IS”的,没有任何明示或暗示的保证,比如默认的适销性、适用性这些保证都没有,关于本程序的功能和性能导致的风险都由用户自己承担,(你单位用我作品出了事,你可别想拉我当垫背的,大公司都不背这锅,你让我一个不挣你钱的背?)如果我这作品真有缺陷,你自己想办法搞定,你可以花钱买服务,这种公司又不是没有。

12. 除非是法律要求或者书面同意,否则在任何情况下,本程序的版权所有者,或者修改和重新发布本程序的其他人,都不会对你的任何损失负责,不管这个损失是一般的还是特殊的,不管是偶然的还是间接的,不管是本程序自己的问题,还是因为你不会用导致的,不管是数据丢失还是数据不准确,不管是你导致的,还是其他人导致的,亦或是本程序和其他程序共同导致的。即便版权所有者或修改人已经被告知有危险,他们也不会对此负责。总之一句话,出事了你自己兜着。

条件和条款就这么多了!

你的新程序如何使用本许可证?

如果你开发了一个新程序,并且想最大程度造福人类,我向你保证,最好的办法就是使用我们的GPL,把它变成自由软件,让任何人都可以修改它、分发它。

怎么使用GPL呢,把下面的声明放在程序的头部。

先来个英文版:

[one line to give the program’s name and an idea of what it does.]

上面这行应该替换成你程序的名字和它的用途,一行搞定。

Copyright (C) yyyy name of author 这里应该替换年份和作者姓名

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

Also add information on how to contact you by electronic and paper mail.

下面是中文版的:

[你程序的名字,你程序的用途,最好一行搞定。]

Copyright (C) 年份, 作者名字

本程序是一个自由软件,你可以重新分发它,可以修改它,但要遵守GPL 2.0版本或者后续其他版本。

我们希望本程序是有用的,但是我们不保证它能用,不保证它好用,我们不提供任何保证。

更多请见GPL全文,如果理解不了,找人话版看看。

按道理你在得到本软件时,应该已经得到一份GPL,如果你没找到,写信给自由软件基金会(FSF):

51 Franklin Street, Fifth Floor, Boston, MA 02110‐1301, USA

同时附上你的电子邮件地址和纸质件邮寄地址。

如果你的程序是交互式的(运行时用户可以输入指令并得到反应 ),那么,请在交互式运行的一开始,输出版权、免责及许可信息,下面是个例子:

Gnomovision v69,版权 (c) 1988 steven

Gnomovision没有任何保证,了解更多请输入’show w’。

这是一个自由软件,欢迎再次分发本程序,但要满足一定条件,欲知详情请输入’show c’。

这里的’show w’和’show c’只是例子,你可以用别的指令,还可以是鼠标点击或菜单形式,只要显示GPL的相应条款即可。

若你是在工作场景下写的这程序,如果必要,你可能需要让你的公司或学校,签署一个“版权放弃书”。

范例如下,修改其中的名字即可:

Yoyodyne公司声明放弃James Hacker所写的’Gnomovision’程序的版权权益。

Ty Coon签字,1989年4月1日

Ty Coon公司,副总裁

我们不允许一个GPL的程序集成到私有程序(或称专用程序)中。如果你的程序是一个函数库,而且你认为让私有程序链接这个库更有利于自由的力量,那你可以使用LGPL,而不是GPL。

参考资料

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!

本文原文出处:业余草: » 一文看懂 GPL 2.0 协议!