GPL前世今生,什么是GPL/GNU?为什么如此重要?_gnu gpl-程序员宅基地

技术标签: 娱乐  原创  linux  bash  gnu  

从事Linux开发的朋友一定都听过GPL,那么到底什么是GPL呢?他有什么作用呢?本文给大家做详细讲解。

一、GNU/GPL

在讲解GPL之前,我们必须先了解什么是GNU?

1. 什么是GNU

GNU:GNU’s not unix。也叫革奴计划。

GNU的创始人,理查德·马修·斯托曼。

GNU是一个自由的操作系统,其内容软件完全以GPL方式发布。

这个操作系统是GNU计划的主要目标,名称来自**GNU’s Not Unix!**的缩写
【这种递归式命名方法也只有程序猿大神才能想起来】

可以说GNU也是一个软件集合,如:Emas,gcc,bash,gawk等。

由于没有内核(可以理解成还在实验室里就GNU系统就被淘汰了)。

因为GNU的设计类似Unix,但它不包含具著作权的Unix代码。

2. GNU历史

在二战(1939-1945)结束后,计算机产业刚刚兴起的时候,闭源软件的概念还未出生。那是个一切代码都免费共享,可以随意修改、再发行的时代。

后来,开始有人只发行闭源的程序,这通常是一种原始代码几乎不可能被单纯地破译的二进制文件。1983年,IBM成为大型企业中第一个发行闭源软件的公司;AT&T公司紧随其后,原本免费的Unix在更新后要价数万美元…

平日使用的Unix突然开始收费,还如此昂贵,这让很多人难以接受。

其中,有一个叫Richard Stallman(人称 RMS)的人站出来了。他推出了 GNU计划 ,希望有朝一日,从操作系统到各式应用软件,都能免费开源得让大家使用。

而具体的办法,就是在发布软件的同时包括我们今天提到的 GPL 许可证。

3. 什么是GPL


GPL许可协议(GNU General Public License):
只要软件中包含有其他GPL协议的产品或代码,那么该软件就必须也采用GPL许可协议且开源及免费。

具有以下特点:

  • 复制自由:允许将软件复制到任何人的电脑中,并且不限制复制的数量。
  • 传播自由:允许以各种形式进行传播。
  • 收费传播:允许在各种媒介上出售该软件,但必需提前让买家知道这个软件是可以免费获得的,并解释收费的理由(一般来讲都是能够为用户提供某种服务,以技术服务的形式来收费)。
  • 修改自由:允许开发人员增加或删除软件的功能,但必须依然基于GPL许可协议授权。

4. 通俗的讲下GPL到底有什么作用?

总结成一句话,修改后必须以GPL授权开源发布

只要在代码中加入这个名叫GPL的许可证,你就能保证软件的用户能够自由地运行、研究、分享和修改你的代码了。

而且,从你的软件衍生出的一切修改版本,都必须遵守这个许可协议。

一个有意思的地方是,拥有代码的人有权利用代码开发软件并盈利。

但是,在有人花钱买走软件之后,这个人可以随意把买到的软件分享给其他人,而不必担心侵权,甚至是被告上法庭——因为对于遵守开源协议的软件来说,压根不存在“盗版”的概念。

由此可见,开源协议大大地提高了软件使用者的权利。

理解了GNU的精神,也就能理解GPL在说些什么,其实就是开源。

在现实生活中,我们受益于 GPL的地方,其实很多,几乎所有的操作系统,除了windows,其他的几乎都是基于linux开源代码改写的。

5. 举例

以下是Linux内核中网卡DM9000的驱动程序版权声明:
 DM9000是Davicom公司生产的一款非常流行的网卡芯片。

第一个红框声明了代码的版权属于作者 Sten Wang 。
第二个红框则是说使用者需要遵守 GPL协议(GNU General Public License)。

二、GPL与Linux

Linus Torvalds 认为 GPL 是 Linux 成功的重要部分

虽然不是每个开源软件都喜欢 GPL,但是如果没有 GPL ,或许不会有如今的 Linux 和整个开源世界。

以下节选自Linus Torvalds自传《知识为了好玩》
 后台回复:linus 即可获得这么自传的电子书。

当时的演讲者是理查德·斯多曼(Richard Stallman) 。 此人是自由软件的鼓吹者。
1983年, 他开始研究UNIX的一个替代物, 将其称作GNU系统, 其含义是“GUN不是
UNIX”(GNU是“GNU is Not UNIX”的字首缩略语--译注) 。 这

更重要的是, RMS(理查德·斯多曼希望别人这样称呼他) 还撰写了《自由软件宣
言》 和自由软件产权证书, 即GPL。 他首先提出的关于开放源代码的概念完全是有意的,
而并非出于偶然, 和UNIX最初的开放发展理念是相吻合的。

我后来为Linux使用的就是GPL。 就这样, 我再一次走在了自己的前面。
事实是, 为了使Linux有用, 我曾依赖过很多在网上免费下载的工具――我把自己
放到了巨人的肩膀上。 

这些免费软件中最重要的是GCC编译器, 它是理查德·斯多曼的杰
作, 并且已经在公共执照协会(GPL)上注册了版权。 在GPL条款之下, 钱不是问题, 只要
有人愿意买, 你可以卖一百万美元。 但是, 你必须提供软件来源。 而得到或买到你的来源
的人, 将拥有和你一样多的对于该程序的。 

这实在是很高明的一招。 我认可GPL的原则,
但是和那些认为所有的软件创新都应该在GPL下向全世界公开的顽固的GPL信仰者不同,我认为发明者本人有决定如何处置自己的发明的权利。
于是, 我抛弃了自己旧有的版权声明, 采纳了GPL的内容, 一个斯多曼也曾经和他的
律师一道签署过的文件(因为有律师的参与, 该文件被搞得洋洋洒洒有好几页)。

 我担心, 在现实中, 如果有个美国人侵犯了我的版权, 我无法对其提起诉讼。 现在
这仍是我的担心。 状告某人侵权很容易, 而我的担心是, 有的人会即使被起诉也继续从事
这种违法行为, 除非加诸某种强制执行的法律行动他们才会停止。 同时我也不断地担心,
在像中国这样的地方, 企业并不承认GPL的效力, 从而也不会尊重我的版权。

事实上, 这些地方的法律体系对侵犯版权的制止在当时并不得力(中国已经签署了一
系列的国际公约, 林纳斯在这里谈的是1991年的情况――译注), 而且, 为防止违法行为
的投入在这些地方被认为是不划算的。 大软件公司和唱片公司曾作过努力, 但是成效不
大。

不过, 事实减轻了我的担忧。 有的人确实会暂时侵犯我的版权, 但是他们往往也是那
些尊重版权、 反馈改进意见、 使系统功能得以提高的人。 他们将是系统升级过程中的一分
子。 

总的来说, 我从两个方面看版权。 比如一个每月挣五十美元的人, 他可能会为一个软
件花费二百五十美元吗? 如果花一点钱买非法拷贝软件, 而把五个月的工资用于吃饱肚
子, 我一点不觉得他不道德。 这种侵权是道义上可以接受的。 去追捕这种“侵权者”是不道
德的, 更不要说简直就是愚蠢的。 就Linux而言, 谁在乎如果只将其用于个人目的时, 一
个人是否真正遵循了GPL呢? 那些想藉此赚大钱的人们, 才是真正不道德的, 不管他们是
在美国还是非洲, 也不管程度如何。

贪欲从来就不是善的。

正如开放源代码在1998年吸引了全世界的目光, 最大的争议之一就在于其名字本身。 在此
之前, 已有了诸如GPL所许可的“自由软件”, 我们会提到软件共享现象, 以及通常所谈论
的“自由软件运动”。 这一用法源于“自由软件基金会”(Free Software Foundation) , 该基
金会由理查德·斯多曼于1985年为促进自由软件工程而创立, 比如GUN和由他发起的FreeUNIX。
没准, 像艾立克·雷蒙德这样的新教徒会发现新闻记者们全搞错了。 

“free”一词真的意
味着免收任何费用吗? “free”真的意味着没有任何限制吗? “free”真的意味着自由自在吗?
经过几周私人信函的往来, 我们最终达成了一致意见: 比起“free”来, 我们更愿意使
用“open”(开放) 一词。 从此, 自由软件运动变成了开放软件运动。 对于那些乐意将此一
场运动的人来讲, 我猜这的确是一场运动。 自由软件基金会仍然被称之为自由软件基金
会, 而理查德·斯多曼也仍旧是幕后在心理上进行策划的人。

三、其他开源协议(BSD,Apache,LGPL,MIT)

其他开源协议比较

1. BSD开源协议(original BSD license、FreeBSD license、Original BSD license)

BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。

但”为所欲为”的前提当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己的产品时,

需要满足三个条件:

  1. 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。
  2. 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。
  3. 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。

BSD代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对商业集成很友好的协议。而很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在
必要的时候可以修改或者二次开发。

2. Apache(Apache License, Version 2.0、Apache License, Version1.1、Apache License, Version 1.0)

Apache Licence是著名的非盈利开源组织Apache采用的协议。

该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。

需要满足的条件也和BSD类似:

  1. 需要给代码的用户一份Apache Licence,如果你修改了代码,需要在被修改的文件中说明。
  2. 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。
  3. 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。

你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。

Apache Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需
要并作为开源或商业产品发布/销售。

3. LGPL(GNU Lesser General Public License)

LGPL是GPL的一个为主要为类库使用设计的开源协议。

和GPL要求任何使用/修改/衍生之GPL类库的的软件必须采用GPL协议不同。

LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。

这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。

但是如果修改LGPL协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL协议。

因此LGPL协议的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以LGPL协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。

GPL/LGPL都保障原作者的知识产权,避免有人利用开源代码复制并开发类似的产品

4. MIT(MIT)

MIT是和BSD一样宽范的许可协议,作者只想保留版权,而无任何其他了限制。

也就是说,你必须在你的发行版里包含原许可协议的声明,无论你是以二进制发布的还是以源代码发布的。

四、 大名鼎鼎Android内核是Linux,那他是如何规避GPL的

下图是一个完整的Android软件系统所用到的所有协议分布。

与Android关系最为密切的主要包括两个方面:驱动和glibc

1. glibc

glibc是linux上的主流的c运行时库,几乎每个linux程序都会简介的依赖c运行时库。

由于glibc是gpl授权的,因此如果采用glibc作为crt,按照前述问题的第二条,这些程序必须开源。

因此安卓采用bionic作为c运行时库替代glibc来规避gpl

2. 驱动

再说驱动,Android是基于Linux 内核开发的,Linux内核是GPL授权。

传统的驱动是要作为内核模块被加入到内核中的。

而内核模块属于Linux内核的衍生产品,需要遵守GPL协议开源发布。

Android是由开放手机联盟共同完成的,为了保护联盟中手机生产商的利益,驱动不能被完全开源。

因此安卓引入HAL,给linux内核开了个后门,增加了一些系统调用。

HAL在内核的部分按照GPL的要求开源。

驱动开发者可以在用户态使用这些新增的系统调用完成驱动的开发。从而在驱动方面规避了GPL。

进一步了解:

Android的硬件抽象层,简单来说,就是对Linux内核驱动程序的封装,向上提供接口,屏蔽低层的实现细节。
也就是说,把对硬件的支持分成了两层,一层放在用户空间(User Space),一层放在内核空间(Kernel Space),
其中,硬件抽象层运行在用户空间,而Linux内核驱动程序运行在内核空间。为什么要这样安排呢?把硬件抽象层和内核驱动整合在一起放在内核空间不可行吗?
从技术实现的角度来看,是可以的,然而从商业的角度来看,把对硬件的支持逻辑都放在内核空间,可能会损害厂家的利益。
我们知道,Linux内核源代码版权遵循GNU License,而Android源代码版权遵循Apache License,前者在发布产品时,必须公布源代码,而后者无须发布源代码。如果把对硬件支持的所有代码都放在Linux驱动层,那就意味着发布时要公开驱动程序的源代码,而公开源代码就意味着把硬件的相关参数和实现都公开了,在手机市场竞争激烈的今天,这对厂家来说,损害是非常大的。
因此,Android才会想到把对硬件的支持分成硬件抽象层和内核驱动层,内核驱动层只提供简单的访问硬件逻辑,例如读写硬件寄存器的通道,至于从硬件中读到了什么值或者写了什么值到硬件中的逻辑,都放在硬件抽象层中去了,这样就可以把商业秘密隐藏起来了。
也正是由于这个分层的原因,Android被踢出了Linux内核主线代码树中。大家想想,Android放在内核空间的驱动程序对硬件的支持是不完整的,把Linux内核移植到别的机器上去时,由于缺乏硬件抽象层的支持,硬件就完全不能用了,这也是为什么说Android是开放系统而不是开源系统的原因。

五、软件其他几个相关的版权概念

1. copyright

copyright就是俗称的版权,也叫著作权。

版权又称著作权,用来表述创作者因其文学和艺术作品而享有的权利。版权的取得有两种方式:自动取得和登记取得。在中国,按照著作权法规定,作品完成就自动有版权(百度百科)。

简单来说,版权(copyright)只是规定是谁对作品享有权利,而具体享有哪些权力,需要参照当地法律。

比如一种定义是:

根据规定,作者享受下列权利:

  1. 以本名、化名或以不署名的方式发表作品;
  2. 保护作品的完整性;
  3. 修改已经发表的作品;
  4. 因观点改变或其他正当理由声明收回已经发表的作品,但应适当赔偿出版单位损失;
  5. 通过合法途径,以出版、复制、播放、表演、展览、摄制片、翻译或改编等形式使用作品;
  6. 因他人使用作品而获得经济报酬。上述权利受到侵犯,作者或其他版权所有者有权要求停止侵权行为和赔偿损失。

2. license


在此基础上,作者还可以制定授权协议(license),来具体地界定使用者的权利。

也就是说,

作者的具体权利 = 当地法律规定的版权(copyright) + 自己在作品中添加的授权协议(license)

权利 = 版权(copyright) + 授权协议(license)

比如,商业化的授权协议(license)可能会倾向于强调,使用者的哪些行为是侵权行为,从而保护自己的商业利益。

3. copyleft


而与这一商业化的授权风格相对的是,RMS等人引领的copyleft的思潮。这一思想在保护作者的基本版权之余, 可以让作者通过在作品中添加开源协议(license),从而放大用户的权力。

比如我们今天的主角,RMS在198为GNU项目拟定的 GLP 协议,允许用户自由地运行、研究、分享和修改源代码。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/daocaokafei/article/details/119065474

智能推荐

前端开发之vue-grid-layout的使用和实例-程序员宅基地

文章浏览阅读1.1w次,点赞7次,收藏34次。vue-grid-layout的使用、实例、遇到的问题和解决方案_vue-grid-layout

Power Apps-上传附件控件_powerapps点击按钮上传附件-程序员宅基地

文章浏览阅读218次。然后连接一个数据源,就会在下面自动产生一个添加附件的组件。把这个控件复制粘贴到页面里,就可以单独使用来上传了。插入一个“编辑”窗体。_powerapps点击按钮上传附件

C++ 面向对象(Object-Oriented)的特征 & 构造函数& 析构函数_"object(cnofd[\"ofdrender\"])十条"-程序员宅基地

文章浏览阅读264次。(1) Abstraction (抽象)(2) Polymorphism (多态)(3) Inheritance (继承)(4) Encapsulation (封装)_"object(cnofd[\"ofdrender\"])十条"

修改node_modules源码,并保存,使用patch-package打补丁,git提交代码后,所有人可以用到修改后的_修改 node_modules-程序员宅基地

文章浏览阅读133次。删除node_modules,重新npm install看是否成功。在 package.json 文件中的 scripts 中加入。修改你的第三方库的bug等。然后目录会多出一个目录文件。_修改 node_modules

【】kali--password:su的 Authentication failure问题,&sudo passwd root输入密码时Sorry, try again._password: su: authentication failure-程序员宅基地

文章浏览阅读883次。【代码】【】kali--password:su的 Authentication failure问题,&sudo passwd root输入密码时Sorry, try again._password: su: authentication failure

整理5个优秀的微信小程序开源项目_微信小程序开源模板-程序员宅基地

文章浏览阅读1w次,点赞13次,收藏97次。整理5个优秀的微信小程序开源项目。收集了微信小程序开发过程中会使用到的资料、问题以及第三方组件库。_微信小程序开源模板

随便推点

Centos7最简搭建NFS服务器_centos7 搭建nfs server-程序员宅基地

文章浏览阅读128次。Centos7最简搭建NFS服务器_centos7 搭建nfs server

Springboot整合Mybatis-Plus使用总结(mybatis 坑补充)_mybaitis-plus ruledataobjectattributemapper' and '-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏3次。前言mybatis在持久层框架中还是比较火的,一般项目都是基于ssm。虽然mybatis可以直接在xml中通过SQL语句操作数据库,很是灵活。但正其操作都要通过SQL语句进行,就必须写大量的xml文件,很是麻烦。mybatis-plus就很好的解决了这个问题。..._mybaitis-plus ruledataobjectattributemapper' and 'com.picc.rule.management.d

EECE 1080C / Programming for ECESummer 2022 Laboratory 4: Global Functions Practice_eece1080c-程序员宅基地

文章浏览阅读325次。EECE 1080C / Programming for ECESummer 2022Laboratory 4: Global Functions PracticePlagiarism will not be tolerated:Topics covered:function creation and call statements (emphasis on global functions)Objective:To practice program development b_eece1080c

洛谷p4777 【模板】扩展中国剩余定理-程序员宅基地

文章浏览阅读53次。被同机房早就1年前就学过的东西我现在才学,wtcl。设要求的数为\(x\)。设当前处理到第\(k\)个同余式,设\(M = LCM ^ {k - 1} _ {i - 1}\) ,前\(k - 1\)个的通解就是\(x + i * M\)。那么其实第\(k\)个来说,其实就是求一个\(y\)使得\(x + y * M ≡ a_k(mod b_k)\)转化一下就是\(y * M ...

android 退出应用没有走ondestory方法,[Android基础论]为何Activity退出之后,系统没有调用onDestroy方法?...-程序员宅基地

文章浏览阅读1.3k次。首先,问题是如何出现的?晚上复查代码,发现一个activity没有调用自己的ondestroy方法我表示非常的费解,于是我检查了下代码。发现再finish代码之后接了如下代码finish();System.exit(0);//这就是罪魁祸首为什么这样写会出现问题System.exit(0);////看一下函数的原型public static void exit (int code)//Added ..._android 手动杀死app,activity不执行ondestroy

SylixOS快问快答_select函数 导致堆栈溢出 sylixos-程序员宅基地

文章浏览阅读894次。Q: SylixOS 版权是什么形式, 是否分为<开发版税>和<运行时版税>.A: SylixOS 是开源并免费的操作系统, 支持 BSD/GPL 协议(GPL 版本暂未确定). 没有任何的运行时版税. 您可以用她来做任何 您喜欢做的项目. 也可以修改 SylixOS 的源代码, 不需要支付任何费用. 当然笔者希望您可以将使用 SylixOS 开发的项目 (不需要开源)或对 SylixOS 源码的修改及时告知笔者.需要指出: SylixOS 本身仅是笔者用来提升自己水平而开发的_select函数 导致堆栈溢出 sylixos

推荐文章

热门文章

相关标签