从事Linux开发的朋友一定听说过GPL,那么什么是GPL呢?它有什么作用?本文将为您详细讲解。一、GNU/GPL在讲解GPL之前,我们首先要了解什么是GNU?1.什么是GNUGNU:GNU不是unix。也称为Genu项目。GNU的创始人理查德·马修·斯托曼(RichardMatthewStallman)。GNU是一个自由操作系统,其内容软件完全在GPL下发布。这个操作系统是GNU工程的主要目标,它的名字来源于**GNU'sNotUnix!**的缩写!【这种递归的命名方式只有程序员才能记住】可以说GNU也是一个集合的软件,如:Emas、gcc、bash、gawk等。因为没有内核(可以理解为实验室淘汰GNU系统)。因为GNU的设计类似于Unix,但它不包含受版权保护的Unix代码。2.GNU历史二战结束后(1939-1945),计算机行业刚刚兴起,闭源软件的概念还没有诞生。那是一个所有代码都可以自由共享,可以随意修改和重新发布的时代。后来,人们开始只分发闭源程序,这些程序通常是二进制文件,其原始代码几乎无法纯粹破译。1983年,IBM成为大型企业中第一家发布闭源软件的公司;AT&T紧随其后,原来免费的Unix更新后要上万美元……平日里用的Unix突然开始收费了,还贵到让很多人难以接受。其中,一位名叫理查德·斯托曼(RichardStallman,简称RMS)的男子站了出来。他发起了GNU项目,希望有一天,从操作系统到各种应用软件,都可以免费开源,供大家使用。具体方法是在发布软件的同时包含我们今天说的GPL许可。3、什么是GPLGPL许可协议(GNUGeneralPublicLicense):只要软件中包含其他GPL协议的产品或代码,该软件也必须采用GPL许可协议,并且是开源免费的。具有以下特点:自由复制:允许将软件复制到任何人的电脑上,并且不限制复制次数。通讯自由:允许各种形式的通讯。有偿传播:允许在各种媒体上销售软件,但需要提前让购买者知道软件可以免费获取,并说明收费原因(一般来说可以为用户提供某种服务,以技术服务形式收费)。修改自由:允许开发者增加或删除软件功能,但仍需根据GPL许可协议获得授权。4.通俗地说,GPL的作用是什么?一句话总结,修改后,必须在GPL授权下发布。只要在你的代码中加上这个叫做GPL的许可证,你就可以保证软件的用户可以自由运行、研究、分享和修改你的代码。此外,从您的软件派生的所有修改版本都必须遵守本许可协议。有趣的一点是,谁拥有代码,谁就有权使用代码开发软件并赚钱。但是,有人花钱购买了软件之后,这个人可以自由地与他人分享所购买的软件,而不用担心侵权,甚至被告上法庭——因为没有遵守开源协议的软件。“盗版”的概念。可见,开源协议大大提高了软件用户的权益。理解了GNU的精神,也就理解了GPL讲的什么,其实就是开源。在现实生活中,我们有很多地方可以从GPL中获益。几乎所有的操作系??统,除了windows,几乎都是基于linux开源代码重写的。5、实例下面是Linux内核中网卡DM9000驱动程序的版权声明:DM9000是Davicom公司生产的一款非常流行的网卡芯片。第一个红框声明代码版权归作者StenWang所有。第二个红框表示用户需要遵守GPL协议(GNUGeneralPublicLicense)。2.GPL和LinuxLinusTorvalds认为GPL是Linux成功的重要组成部分。虽然不是每个开源软件都喜欢GPL,但是如果没有GPL,或许就没有今天的Linux和整个开源世界。以下是LinusTorvalds自传的节选《知识为了好玩》当时的演讲者是RichardStallman。此人是自由软件的倡导者。1983年,他开始研究UNIX的替代方案,称之为GNU系统,意思是“GUNisnotUNIX”(GNU是“GNUisNotUNIX”的首字母缩写——译注)。更重要的是,RMS(RichardStallman喜欢这样称呼)也是《自由软件宣言》和自由软件许可证GPL的作者。他最先提出的开源代码的概念完全是有意而为,并非偶然,与UNIX最初开放开发的理念是一致的。后来我使用了Linux的GPL。就这样,我又一次走到了自己的面前。事实是,为了让Linux有用,我依靠了很多网上免费下载的工具——我把自己放在了巨人的肩膀上。这些免费软件中最重要的是GCC编译器,它是RichardStallman的作品,并在公共许可协会(GPL)下享有版权。在GPL的条款下,钱不是问题,只要有人愿意买,你可以卖到100万。但是,您必须提供软件的来源。获得或购买您的资源的人将拥有与您一样多的程序。这真是一个非常巧妙的技巧。我同意GPL的原则,但与那些顽固的GPL信徒认为所有的软件创新都应该在GPL下向全世界开放不同,我相信发明人自己有权决定如何处置他的发明。于是,我舍弃了旧的版权声明,采用了GPL的内容,这是一份Stallman还和他的律师签署的文件(因为有律师的参与,文件乱了好几页)。我担心,实际上,如果美国人侵犯了我的版权,我不能起诉他们。这仍然是我现在关心的问题。起诉某人侵权很容易,我担心有些人即使被起诉也会继续从事这种侵权行为,除非采取某种强制性法律行动,否则他们不会停止。同时,我一直担心在中国这样的地方,公司不承认GPL的有效性,从而不会尊重我的版权。事实上,当时这些地方的法律制度并没有有效地制止版权侵权(中国已经签署了一系列国际公约,Linus在这里说的是1991年的情况——注解),而且,要防止非法投资在这些地方活动被认为是不值得的。大型软件公司和唱片公司已经尝试过,但收效甚微。不过,事实打消了我的顾虑。有些人确实暂时侵犯了我的版权,但他们往往是尊重版权,反馈改进,让系统更好运行的人。它们将成为系统升级过程的一部分。总的来说,我从两个方面来看版权。例如,如果一个人一个月挣五十美元,他可能会花两百五十美元买一个软件吗?花一点钱买盗版软件,花五个月的工资吃饭,我觉得他一点都不道德。这种侵犯在道德上是可以接受的。追捕这样的“侵权者”是不道德的,更不用说彻头彻尾的愚蠢了。就Linux而言,如果只是出于个人目的使用它,谁会在乎它是否真的遵循GPL?那些想从中赚大钱的人是真正不道德的人,无论是在美国还是非洲,无论是什么程度。贪婪从来都不是好事。随着开源在1998年引起全世界的关注,其中最大的争议之一就是名称本身。在此之前,有“自由软件”,比如GPL许可,我们会提到软件共享现象,笼统地讲“自由软件运动”。这种用法源于自由软件基金会,该基金会由理查德·斯托曼于1985年创立,旨在推广他发起的GUN和FreeUNIX等自由软件项目。很有可能,像埃里克·雷蒙德这样的新教徒会发现记者们都错了。“免费”一词真的意味着免费吗?“免费”真的意味着没有任何限制吗?“自由”真的意味着自由吗?经过几个星期的私人通信,我们终于达成一致,我们更愿意使用“开放”而不是“免费”这个词。从那时起,自由软件运动变成了开放软件运动。对于那些愿意称之为运动的人来说,我猜它就是一个运动。自由软件基金会仍然叫自由软件基金会,理查德斯托曼在心理上仍然是幕后黑手。三、其他开源协议(BSD、Apache、LGPL、MIT)与其他开源协议的比较1、BSD开源协议(originalBSDlicense,FreeBSDlicense,OriginalBSDlicense)BSD开源协议是一种协议,它给用户自由度高。基本上,用户可以“为所欲为”,自由使用和修改源代码,或者将修改后的代码重新发布为开源或专有软件。但“为所欲为”的前提当你使用BSD协议发布代码,或者基于BSD协议代码重新开发自己的产品时,需要满足三个条件:如果重新发布的产品包含源代码,那么源代码必须在原代码中携带BSD协议。如果重新分发的只是一个二进制类库/软件,则需要在类库/软件文档和版权声明中的原始代码中包含BSD协议。不得使用开源代码的作者/机构名称和原创产品名称进行营销。BSD代码鼓励代码共享,但需要尊重代码作者的版权。BSD是一个对商业集成非常友好的协议,因为它允许用户修改和重新分发代码,也允许在BSD代码上使用或开发商业软件进行分发和销售。而很多公司和企业在选择开源产品时更喜欢BSD协议,因为他们可以完全控制这些第三方代码,必要时可以修改或重新开发。2.Apache(ApacheLicense,Version2.0,ApacheLicense,Version1.1,ApacheLicense,Version1.0)ApacheLicense是著名的非营利性开源组织Apache采用的协议。该协议类似于BSD,同样鼓励代码共享并尊重原作者的版权,也允许代码修改和重新发布(作为开源或商业软件)。需要满足的条件也和BSD类似:需要给代码的使用者一份ApacheLicense,如果修改了代码,需要在修改后的文件中说明。扩展代码(由源代码修改派生)中,原作者指定的许可证、商标、专利声明和其他描述都需要包含在原始代码中。如果重新分发的产品中包含通知文件,则Apache许可证必须包含在通知文件中。您可以在通知中添加您自己的许可,但不能表示为对ApacheLicense的更改。ApacheLicense也是一种对商业应用友好的许可证。用户还可以在需要时修改代码以满足他们的需求,并将其作为开源或商业产品发布/销售。3.LGPL(GNULesserGeneralPublicLicense)LGPL是GPL的开源协议,主要为类库的使用而设计。它不同于GPL要求任何使用/修改/派生GPL类库的软件都必须采用GPL协议。LGPL允许商业软件通过类库引用(链接)使用LGPL类库,而不需要开源商业软件的代码。这使得使用LGPL协议的开源代码可以作为类库被商业软件引用、发布和销售。但是,如果修改了LGPL协议的代码或派生代码,所有修改后的代码、附加代码和涉及修改部分的派生代码都必须采用LGPL协议。因此,LGPL协议的开源代码非常适合作为第三方库被商业软件引用,但不适合商业软件想以LGPL协议代码为基础通过修改进行二次开发和衍生品。GPL/LGPL都保护原作者的知识产权,防止有人利用开源代码复制开发类似产品。4.MIT(麻省理工学院)MIT是一个与BSD一样广泛的许可协议。作者只想保留版权,没有其他限制。也就是说,您必须在您的分发中包含原始许可协议的声明,无论您是将其分发为二进制文件还是源代码。4、著名的Android内核是Linux,那么他是如何规避GPL的呢?下图是一个完整的Android软件系统中使用的所有协议的分布情况。与Android关系最密切的主要包括两个方面:driver和glibc1。glibcglibc是linux上主流的c运行时库,几乎每个linux程序都会短暂依赖c运行时库。由于glibc是gpl授权的,如果用glibc作为crt,根据上述问题的第二项,这些程序必须是开源的。因此,Android使用bionic作为c运行时库而不是glibc,以避免gpl2。驱动和驱动程序,Android是基于Linux内核开发的,受GPL授权。传统驱动程序作为内核模块添加到内核中。内核模块是Linux内核的衍生产品,需要在GPL协议下发布。Android由开放手机联盟共同完成。为了保护联盟内手机厂商的利益,驱动不能完全开源。因此,Android引入了HAL,给Linux内核开了一个后门,增加了一些系统调用。内核中的HAL部分是按照GPL的要求开源的。驱动开发者可以使用这些新的系统调用在用户态完成驱动开发。从而在驱动程序方面规避了GPL。进一步理解:Android的硬件抽象层,简单来说就是对Linux内核驱动的封装,向上提供接口,屏蔽下层的实现细节。也就是说,对硬件的支持分为两层,一层放在用户空间(UserSpace),另一层放在内核空间(KernelSpace)。其中,硬件抽象层运行在用户空间,Linux内核驱动程序运行在内核空间。为什么这样安排?在内核空间把硬件抽象层和内核驱动集成在一起不可行吗?从技术实现的角度来说,是可以的。但是从业务的角度来说,对于硬件的支持逻辑都放在了内核空间,这可能会损害厂商的利益。我们知道Linux内核源代码的版权遵循GNULicense,而Android源代码的版权遵循ApacheLicense。前者在发布产品时必须发布源代码,而后者则不需要发布源代码。如果硬件支持的所有代码都放在Linux驱动层,就意味着驱动发布时应该公开源代码,公开源代码意味着硬件的相关参数和实现被披露。在竞争激烈的今天,这对厂商来说是非常不利的。因此,Android想到将对硬件的支持分为硬件抽象层和内核驱动层。内核驱动层只提供对硬件逻辑的简单访问,比如读写硬件寄存器的通道。至于从硬件读取什么值,写什么值,硬件中有什么值的逻辑放在硬件抽象层,这样就可以隐藏商业秘密。正是因为这种分层,Android才被踢出Linux内核主线代码树。想想看,放在Android内核空间的驱动程序,硬件支持不完善。当Linux内核移植到其他机器上时,由于缺乏硬件抽象层支持,硬件完全无法使用。这就是为什么Android是一个开放系统而不是开源系统的原因。五、其他几个与软件相关的版权概念1.版权版权即俗称的著作权,也称著作权。著作权,又称著作权,用来表示创作者因其文学艺术作品而享有的权利。版权的获取有两种方式:自动获取和注册获取。在中国,根据著作权法的规定,作品完成即自动拥有著作权(百度百科)。简单来说,著作权只是规定了作品的权利归谁所有,具体享有的权利需要参照当地法律。例如,一种定义是:按照规定,作者享有下列权利:保护作品的完整性;修改已发表的作品;因观点改变或者其他正当理由撤回已发表作品的,应当对出版单位的损失给予适当补偿;通过合法途径以出版、复制、播放、表演、展览、拍摄、翻译、改编等形式使用作品;他人使用该作品的经济报酬。如侵犯上述权利,作者或其他著作权人有权要求停止侵权并赔偿损失。2.许可在此基础上,作者还可以制定许可协议(license)来具体定义用户的权利。也就是说,作者的特定权利=当地法律规定的著作权+自己在作品上附加的授权协议(license)。即权利=版权+许可协议(license),例如商业许可协议(license)可能会倾向于强调用户的哪些行为是侵权行为,以保护自己的商业利益。3.Copyleft与这种商业授权方式相反的是,由RMS等引领的copyleft思潮。这种想法不仅保护了作者的基本版权,还允许作者通过在作品中加入开源许可证来放大用户的权力。比如我们今天的主角,RMS在198年为GNU项目起草了GLP协议,允许用户自由运行、研究、分享和修改源代码。本文转载自微信公众号“一口Linux”
