本帖最后由 却尘 于 2022-9-19 12:03 编辑
第6章 认识开源软件-1 6.1 开源软件基础 在今天的IT产业中,开源软件成为软件领域的重要组成部分,一些成功的开源软件如Linux、Android、Aapche、MySQL、Eclipse、Chrome、Firefox、Git已经成为行业的标准软件,深入地应用到IT的各个领域。 开源软件引领自由、平等、协作的精神,影响和改变着人们使用和开发软件的观念,促进了软件新技术的发展与应用。 开源软件成为闭源软件的一种可行替代方案,加强了市场竞争,也使广大用户多了一种选择的可能。 1. 开源软件的概念 开源软件(Open Source Software)可以理解为用户可以自由获取、修改、重新发布且源代码公开的软件。但需要注意的是并不是所有源代码公开的软件都属于开源软件,开源软件促进会(Open Source Initiative, OSI)对于开源软件有着严格定义。OSI对开源软件的定义包括十个条款 ,具体如下: (1) 自由再发布(Free Distribution):开源软件的许可证不能限制任何个人或团体销售或赠送软件,不能要求对这样的销售收取许可证费用或其它费用。 (2) 源代码(Source Code):开源软件的程序在发布时必须包含源代码。如果没有包含源代码,必须提供一个公开获取源代码的途径。 (3) 衍生作品(Derived Works):允许依照原有软件的许可证的条件下,发布基于原有软件源代码进行修改后的衍生作品。 (4) 作者源代码的完整性(Integrity of The Author's Souce Code):当对原有软件进行修改后,必须以不同的软件名称或版本号来区分,以区别于原有软件。 (5) 不能歧视任何个人或团体(No Discrimination Against Persons or Groups):开源软件不得因性别、团体、国家、族群等进行区别对待。 (6) 不能对程序的应用领域进行区别对待(No Discrimination Against Fields of Endeavor):开源软件不能对软件的应用领域进行限制。 (7) 许可证的发布(Distribution of License):若软件进行再发布,必须以同一许可证发布,无需执行附加的许可证。 (8) 许可证不得专属于特定产品(License Must Not Be Specific to a Product):从特定软件抽取某程序单独发布时,则用户获取的权利与原有软件赋予该部分程序的权利相同。 (9) 许可证不得限制其它软件(License Must Not Restrict Other Software):当某开源软件与其它软件一同发布时,开源软件的许可证不得要求其它软件也遵守开放源代码的授权。 (10) 许可证必须技术中立(License Must Be Technology-Neutral):许可证的条款不能指定任何特定的技术或接口方式。 2. 开源软件的发展 1969年,贝尔实验室的研究员Ken Thompson和Dennis Ritchie开发了一个多任务操作系统——UNIX。 UNIX的第五版就以“仅用于教育目的”的协议提供给各大学作为教学使用,仅收取制作磁盘和手册的成本。 1979年,AT&T意识到UNIX的商业价值,从版本7开始,不再将UNIX源代码授权给学术机构。1984年,AT&T将UNIX从研究性质的项目转变为商业项目。 由于AT&T对UNIX政策的改变,对学术机构和黑客社区产生了较大的反应。荷兰阿姆斯特丹自由大学的Andrew S. Tanenbaum教授为了教授操作系统课程,开发了一个与UNIX兼容的操作系统,命名为Minix,即Mini-UNIX之意。 1991年,Linus Torvalds开发了一个类似于Minix的操作系统——Linux,并将它发布到了Internet上,并很快得到了全世界许多程序员的关注,他们纷纷通过Internet向Linus提出修改意见、错误报告以及新功能的代码。 1984年,Richard Stallman出于对软件的商业化和封闭性的痛恨,发起了GNU(GNU's Not UNIX!)项目,目的是打造一个完全自由且完全兼容UNIX的软件系统。1985年10月,Richard Stallman创立自由软件基金会(Free Software Foundation)来为GNU项目提供技术、法律以及资金的支持。为了防止个人或商业公司将修改后的源代码闭源进行营利,他提出了Copyleft的概念,利用通用公共许可证(General Public License, GPL)来维护开源软件的自由性。GNU项目得到了很多软件爱好者和黑客的拥护,一些工具软件也陆续完成,但整个软件系统还缺少一个操作系统内核。1991年,GNU Hurd项目开始实施,但项目一直处于实验阶段。 1991年,Linus Torvalds开发了一个类似于Minix的操作系统——Linux,并将它发布到了Internet上,并很快得到了全世界许多程序员的关注,他们纷纷通过Internet向Linus提出修改意见、错误报告以及新功能的代码。1994年,Linux 1.0发布,并接受GPL许可证。Linux的出现填补了GNU的一个重要空白,GNU软件集与Linux的结合,就形成了GNU/Linux操作系统。 ...... 3. 开源软件与自由软件、免费软件的区别 自由软件是指任何人可以自由地使用、拷贝、修改以及分发的软件。Richard Stallman认为一个软件是“自由”的,这意味着它尊重用户的基本自由:自由地运行这个软件,学习和修改它,以及重新发布它的原版或修改版。自由软件中“Free”,是自由言论中所说的“自由”,而非免费赠饮中的“免费”。 开源软件是从自由软件中发展而来的,它继承了自由软件的开放和分享的精神,同时避免了GPL许可证中严格的传染性,它在用户自由和商业利益之间进行了平衡,保证了商业公司在参与开源项目项目中保护自身的利益。 免费软件是指不必支付费用就可以免费获得和使用的软件,它强调的是价格的免费。开源软件通常都以免费的方式发行,因此开源软件大部分都是免费软件。但开源软件并不排斥收费行为,只要开源软件的许可人允许或授权,开源软件可以收取一定的费用。 6.2 开源软件许可证 开源软件虽然拥有开放的软件开发和软件发布模式,但软件依然受到版权保护。开源软件即使是免费的,用户也不能随意地使用、修改和分发,必须遵守该开源软件所使用的许可证。软件许可证是软件的创作者与软件的接受者之间的一项合同,它将赋予接受者特定的权利,同时也规定了接受者必须遵守的约束。 目前,通过认证的开源软件许可证有70多种,常用的许可证有九种,分别是Apache许可证2.0(Apache-2.0)、三条款BSD许可证(BSD-3-Clause)、二条款BSD许可证(BSD-2-Clause)、GNU通用公共许可证(GPL)、GNU宽通用公共许可证(LGPL)、MIT许可证(MIT)、Mozilla公共许可证2.0(MPL-2.0)、通用开发和发行许可证1.0(CDDL-1.0)、Eclipse公共许可证2.0(EPL-2.0)。 1. Apache许可证 Apache许可证是Apache软件基金会采用的许可证,是Apache软件基金会维护的项目的默认许可证。Apache许可证的最新版是2.0,发布于2004年。Apache许可证鼓励用户共享代码,尊重原作者的著作权,允许将修改或未修改的软件或衍生作品进行再发布,但必须满足以下条款: (1) 必须在软件或衍生作品中附带一份许可证的拷贝; (2) 如果修改了代码,必须在被修改的文件中进行声明; (3) 必须在衍生作品中保留原有软件的所有版权、专利、商标和归属的声明,与衍生作品任何部分无关的声明除外; (4) 如果原有软件包含一份“NOTICE”文件,那么在衍生作品中必须用以下方式包含此“NOTICE”文件的可读副本:将此“NOTICE”文件作为衍生作品分发的一部分;包含在源代码或文档中;在衍生作品中显示或输出。 2. 三条款BSD许可证 三条款BSD许可证也称为“新版BSD许可证”或“修订版BSD许可证”,它给予使用者较大的自由,可以自由地使用和修改源代码,也可以将修改后的代码开源或者作为专有软件进行再分发。在进行再分发时需要遵守以下三个条款: (1) 源代码的再分发必须保留原著作版权声明、本许可证条款以及以下免责声明; (2) 以二进制形式进行再分发,必须随分发提供的文档和/或其它材料中包含原著作版权声明、本许可证条款以及以下免责声明; (3) 未经事先书面许可,不得使用版权所有者的名称或其贡献者的名称来支持或推广从该软件衍生的产品。 3. 二条款BSD许可证 二条款BSD许可证也称为“简化版BSD许可证”或“FreeBSD许可证”。它对于软件的使用、修改和再分发较为宽松,允许被授权的用户以源代码或者二进制的形式发布修改过的或未修改过的代码,在再分发时只需要遵守三条款BSD许可证中的前两条条款。 4. GNU通用公共许可证 GNU通用公共许可证(GPL)是由自由软件运动的创始人Richard Stallman编写,它是应用最广泛的开源软件许可证。1989年发布第一版,1991年发布第二版,2007年发布第三版,目前主要应用的是第二版和第三版。GPL允许用户免费使用、拷贝、修改以及发布软件,它最大特点是“Copyleft”,用户如果对GPL许可的软件或基于GPL许可的软件修改后进行再分发,必须以不强于GPL许可证限制的条款发行,即必须免费和开源。GPL通过Copyleft机制使得作者赋予用户的权利可以在作品及其衍生作品中一直保留下去,从而保护了用户的自由。 5. GNU宽通用公共许可证 GNU宽通用公共许可证(GNU Lesser General Public License, LGPL)是更宽松的GPL。当一个软件采用GPL许可时,该软件的使用者有权获得该软件的源代码,对该软件进行修改并重新发布。如果使用者在其程序中使用了GPL软件或基于GPL许可的软件,那么使用者的程序也必须公布源代码,允许别人修改、发布并获得源代码。GPL许可证被认为对商业不友好,限制了软件的推广。为了吸引更多的开发者以及商业公司加入进来,在1991年,发布了LGPL许可证。LGPL主要是为类库设计的开源许可证,它允许商业软件通过类库链接的方式来使用LGPL类库,而不需要将该商业软件开源。 6. MIT许可证 MIT许可证也称为X许可证或X11许可证,它是麻省理工学院在1988年提出的。MIT许可证是较为宽松的许可证,它的内容与三条款BSD许可证类似。 MIT许可证允许任何人免费获得本软件和相关文档,并有权使用、复制、修改、合并、出版、发行、再授权以及出售本软件的副本,而只需要在软件和软件的所有副本中都必须包含版权声明和许可声明。 7. Mozilla公共许可证 Mozilla公共许可证(Mozilla Public License, MPL)是1998年网景公司的Mozilla小组为其开源软件项目设计的软件许可证,在2012年发布了MPL 2.0。MPL 2.0比MPL 1.1 更简单、更简短,与Apache和GPL许可证更兼容,使代码的重用和再分发更加容易。MPL协议允许免费重发布、免费修改,但要求修改后的代码版权归软件的发起者。 8. 通用开发和发行许可证 通用开发和发行许可证(Common Development and Distribution License, CDDL)是Sun公司基于MPL 1.1开发的开源许可证书。用户可以使用、修改并重新发布CDDL许可的代码而不需要担心代码开发者的任何技术专利。对CDDL许可的代码及其修改进行再发布必须继续以CDDL许可,但允许其可执行代码和广义软件在遵守CDDL的前提下以其它许可证发布。允许在商业软件中使用CDDL许可的源代码,如果以二进制形式发布,需要遵守CDDL许可,并将相应的源代码发布出去。 9. Eclipse公共许可证 Eclipse公共许可证(Eclipse Public License, EPL)是Eclipse基金会为旗下软件设置的开源软件许可证,它取代了原有的通用公共许可证,并删除了部分有关专利诉讼的条款。2004年发布了EPL 1.0。2017年发布了EPL 2.0。 EPL允许代码贡献者以源代码形式发布程序,但必须遵守EPL开源许可证,而不能用其它许可证,除非得到原“源码”拥有者的授权;如果以目标代码发布程序,则需要声明源代码是可以获取的,并且告知接受者源代码的获取方式。 EPL允许将源代码用于商业产品。可以把EPL许可的源代码与其它私有源代码混合成为一个项目发布,并且可以将此项目以私有的协议发布,但前提是必须声明哪些代码是EPL许可的,且声明的那部分代码需要继续遵守EPL。此外,独立的模块不需要开源。
|