目录

开源组织之FSF与OSI,开源协议之BSDGPLAPACHE

开源组织之FSF与OSI,开源协议之BSD、GPL、APACHE

开源软件非常多(举例),而且功能功能强大,许多开源软件都是牛人编写的,对于一名程序员,通过采用别人的开源软件,再构建自己的项目,就像站在巨人的肩膀上,能达到事半功N倍的效果。但是开源软件不是说无视任何协议地随意使用,因为正规的开源软件,都会携带一份License许可证,使用开源代码的任何人都必须遵循该许可,否则可能给自己带来一些麻烦。

在了解开源协议(License)之前必须先了解一下当前的主流开源组织。

一、开源组织

目前,业界有两大开源阵营名声比较显赫,地位比较权威,它们分别是FSF与OSI。

1.1、FSF(Free Software Foundation,自由软件基金会)

https://i-blog.csdnimg.cn/blog_migrate/714b0de45515b7de7f609cf40e6d370a.png

自由软件基金会是在1985年10月由理查德·斯托曼建立的美国民间非营利组织,并提出“自由软件”的概念,即要尊重用户自由,为了该自由提出了Copyleft(自由)概念,就是Copyright(版权)的反义词,该自由包含如下几点要求:

https://i-blog.csdnimg.cn/blog_migrate/02ce7aa1a9ec9ced917f68fa28163d81.png

因此,自由软件是必须100%提供源码,但是“自由软件”并不是完全免费,发布“自由软件”的作者可以选择适当的收费(收费价格需合理),也可以免费。

https://i-blog.csdnimg.cn/blog_migrate/fc3b916dc20f0cdcb6b24792275e7762.png

Free是自由

FSF发布的License许可证协议被广泛使用的就是GPL协议与LGPL协议,目前最新版本是3.0,GPL协议对使用自由软件源码再开发的人基本要求是:如果再发布新软件,必须公开源代码;而LGPL会宽松一些,不需要完全公开源代码。

https://i-blog.csdnimg.cn/blog_migrate/66c6bb59f43b5a83c479c8ce252873e2.png

备注:理查德·马修·斯托曼(Richard Matthew Stallman, RMS),于1953年出生,自由软件运动的精神领袖、GNU计划以及自由软件基金会(Free Software Foundation)的创立者、著名黑客。

1.2、OSI(Open Source Initiative,开源计划组织)

https://i-blog.csdnimg.cn/blog_migrate/8a27d07c8913700116c60b76bcfd9d57.png

在1998年OSI正式成立,因为FSF提出的“自由软件”很容易给人带来免费自由的误解,同时“自由软件”对于个人开发者来说很喜欢,但是对于企业来说想继承发展“自由软件”会有一些顾忌,因为使用了“自由软件”的源码,新的项目的源码也需要公开,许多商业公司是不愿意的。基于此机会,在资深黑客Eric Raymond和Bruce Perens发起下,聚集了业界大牛进行“头脑风暴”,Christine Peterson想到了“开源(Open Source)”一词,得到大家的认可,并且“开源软件”这个词还得到Linus Torvalds(Linux之父)和Richard Stallman(自由软件fsf之父)的认可。

https://i-blog.csdnimg.cn/blog_migrate/60bdfd20f72029bf7255d081cf308f7f.png

图:Tim O’Reilly与自由软件之父Richard Stallman

经过Tim O’Reilly的推动, OSI成为一个权威的开源标准组织,开源协议如果要获得OSI组织的认可,需要首先满足该组织的10项OSD要求(即Open Source Definition,开源定义),如下表10条:

https://i-blog.csdnimg.cn/blog_migrate/ff22c5dd4edc37a3930902b863b67b07.png

目前被OSI组织批准的开源协议有BSD协议、MIT协议、Apache协议等接近上百种协议,许多协议的内容差别并不大,因此常用主流的协议如下几种:

https://i-blog.csdnimg.cn/blog_migrate/ab87ad2228530e4285b855cc68732a9c.png

FSF自由软件基金会发布的GPL协议也得到OSI组织的认可,进入OSI组织的大名单中,通过官方网站可以查看各个协议的英文原版:

1.3、Apache软件基金会(Apache Software Foundation,简称为ASF)

ASF是专门为运作一个开源软件项目的 Apache 的团体提供支持的非盈利性组织,这个开源软件项目就是 Apache 项目。它所发行的软件产品都遵循 Apache许可证(Apache License),目前最新的许可证版本为Apache-2.0。

二、主流开源协议许可

开源协议许可证很多,甚至许多开源协议(如BSD、GPL)比OSI组织成立的时间还早,OSI的出现有利于对所有协议进行规范管理,将重复或过时的协议,可以决定不再使用。

在了解开源许可协议前,需要先了解一下什么是开源许可证。

2.1、什么是开源许可证

https://i-blog.csdnimg.cn/blog_migrate/f4aa8e75cb41c7702f2b355bb6475f78.png

开源许可证是一种法律许可,源码拥有者可以在开源许可证上指明其它用户的权利,比如用户可以免费地使用、修改、共享该软件。

如果没有开源许可证,用户使用的源码,就会侵犯的原作者的版权。因此软件开源时,必须明确地授予用户开源许可证;用户使用开源代码开发新的软件,必须按开源许可证的约定执行。

https://i-blog.csdnimg.cn/blog_migrate/55a41d233497706c295d80ff900087ae.jpeg

如果开源许可证要求新的软件也需要免费开源时(如GPL协议),则必须开放新软件源码;如果开源许可证没有明确要求,则用户可以选择性的开放(如BSD)。

https://i-blog.csdnimg.cn/blog_migrate/48c9184979b762f2bb7c8a9748fd2588.jpeg

国际公认的开源许可证中,共同的特性都是允许用户使用、修改、共享源码,但是使用的限制条件会有些不一样,根据限制条件严格程度,可分为宽松式(permissive)许可证和Copyleft许可证。

宽松式(permissive)许可证 :用户限制比较少,用户修改代码后可以闭源,常见的宽松许可证如BSD、MIT、Apache2等。

https://i-blog.csdnimg.cn/blog_migrate/3f3c73eacfccdf1bb3206e52551d4486.png

Copyleft许可证 :允许随意复制、修改代码,但是修改后的代码需要开源,不得闭源,常见的Copyleft许可证如GPL,LGPL等。

https://i-blog.csdnimg.cn/blog_migrate/6578839919bf25698cdd6708851d26c9.png

2.2、BSD与GPL许可证

开源代码发布时,除了包含开源文件外(如.c文件等),还需要至少包含2个信息来说明该软件是开源软件。

其一、一份license文件(通常以COPYING做文件名),来说明基于哪个开源协议,如下图gcc-11.2.0版本源码目录所示(gcc基于GPL-3.0版本协议):

https://i-blog.csdnimg.cn/blog_migrate/0764c20ad769a33569d78ee830be8864.png

https://i-blog.csdnimg.cn/blog_migrate/b328317720a811dce4817410d58376fd.png

其二、在各个源代码文件头需要说明发布时间及用户权利与免责条款等。

https://i-blog.csdnimg.cn/blog_migrate/03471998b031d2207c14977505f24b1b.png

https://i-blog.csdnimg.cn/blog_migrate/34c52ea1f5472206e82632dac6f29ee7.png

有些开源协议可能需要包含更多的文件。开源许可证很多,分别从宽松式和Copyleft式许可证中各举一例来说明许可证的使用条件,比如BSD协议与GPL协议。

2.2.1、BSD许可证

BSD许可证是随着加州大学伯克利分校发布BSD UNIX发展起来的 “宽容自由软件许可证”,有4个版本被OSI批准收录(0BSD、BSD-1、BSD-2、BSD-3)。

https://i-blog.csdnimg.cn/blog_migrate/3c48eca191bbaa7f53e8c381b88f454f.png

其中BSD-3是目前最新的一个协议,协议内容比较少,OSI官网上可下载:

1、BSD-3协议内容

https://i-blog.csdnimg.cn/blog_migrate/5d26c004990af05135ddc4d7754e729b.png

https://i-blog.csdnimg.cn/blog_migrate/1f3a39cca94b45288a801f06eda011ca.png

https://i-blog.csdnimg.cn/blog_migrate/c0093ea2760e763d90ceb59c3c560fcb.png

其中3个使用条件大概的意思如下表描述:

https://i-blog.csdnimg.cn/blog_migrate/695914211278230278a7d0494b0be189.png

从以上条款可知,遵循BSD协议可以复制、修改源代码,也可以再次发布软件,并没有说再发布需要公开源码,因此是否需要公开由使用者决定。

2、BSD-3协议使用举例

假设有一个基于BSD-3协议的开源代码A.c,现在使用A.c进行开发新的软件B.c,则B.c可以开源发布,也可以作为闭源软件生成二进制文件进行发布。

https://i-blog.csdnimg.cn/blog_migrate/8be899a97089be721daef95c040b5619.png

代码A.c

https://i-blog.csdnimg.cn/blog_migrate/e4801a3710c7c927c598c76820f07a97.png

软件B.c

因此宽松式开源协议,对于商业公司来说是很友好的,既可以使用成熟优秀的开源代码,又可以闭源自己公司的代码。

Apache 2.0、MIT协议在开源代码的使用限制方面与BSD-3差不多,只是在专利许可等部分条款略有区别。

2.2.2、GPL许可证

GPL是由FSF自由基金会发布的通用性公开许可证,主流使用的有两个版本GPL-2.0和GPL-3.0,其中3.0版本中增加了一部分条款,如专利授权方案、违规终止方案等等。

https://i-blog.csdnimg.cn/blog_migrate/a91d133177a93cf518debfd4306639a5.png

对于使用GPL发布的开源代码,需要遵循其开源协议要求,以GPL-3.0为例,重点关注TERMS AND CONDITIONS的第4-6点要求。

条款链接:https://opensource.org/licenses/GPL-3.0

1、第4点,描述拷贝源代码再发布的条件

https://i-blog.csdnimg.cn/blog_migrate/f65f1d1ab6ed31773488421b8c167ad5.png

大意是随意发布完整源码副本,源码文件头需要保留作者版权信息及免责声明信息;同时需要附上一份本协议的副本(即COPYING文件名的GPL-3.0协议文件)。

可以免费或收费转发,也可以选择提供技术支持或品质担保以换取收入(可以收取服务费)。

2、第5点,描述修改开源代码再发布的条件

https://i-blog.csdnimg.cn/blog_migrate/bb501ffa0e15e807ee92038b939e2437.png

https://i-blog.csdnimg.cn/blog_migrate/e846532617f0fd493e78781f72c71704.png

https://i-blog.csdnimg.cn/blog_migrate/7d173b0cf46dc6f79e1efcf529b3a62f.png

大意是修改的源码可以再发布,条件是必须注明修改了哪里和修改日期,按原有GPL协议发布授权,不允许私自增加授权条款,如果使用该软件的产品有界面或打印信息,需要显示这些授权信息等。

3、第6点,描述修改或使用开源代码,然后以二进制文件再发布的条件

https://i-blog.csdnimg.cn/blog_migrate/274e76bc3c9a060c4fdaeb5faa5cc74d.png

https://i-blog.csdnimg.cn/blog_migrate/655d31c19ac5f58193a2f539be810130.png

https://i-blog.csdnimg.cn/blog_migrate/c6c1350930d88c7382b8e295fca23a69.png

这点就是详细说明了如果不是以源码形式再发布,而是以目标码(可执行文件形式,如.exe文件),则需要以相应的方式提供开源代码,包括光盘、ftp服务器下载等等,总之,使用者需要有途径可以获取源代码。

从以上3点可知,GPL协议,无论如何都需要公开源代码的。

4、GPL-3.0协议使用举例

假设有一个基于GPL-3.0协议的开源代码A.c,现在使用A.c进行开发新的软件B.c,则B.c源码必须开源,如果生成二进制文件B.exe进行发布,必须通过各种渠道给用户下载B.c源码。

https://i-blog.csdnimg.cn/blog_migrate/92d4632f87505c01f691b9aa4ea3bf97.png

代码A.c

https://i-blog.csdnimg.cn/blog_migrate/7ce809a9c9e2764971ec2aa6cb711537.png

软件B.c

5、LGPL协议

因为GPL协议对商业公司来说是很矛盾的,想用又不敢用,因为使用了就要公开自己的源代码,对于商业公司来说是不太愿意的,因此LGPL协议诞生。

https://i-blog.csdnimg.cn/blog_migrate/323f4d0c0c4fb18caaca8ee61b5f8b1e.png

LGPL协议代码使用举例:

https://i-blog.csdnimg.cn/blog_migrate/c2ea65779556f9f87271085c2a99adde.png

库文件A.h

https://i-blog.csdnimg.cn/blog_migrate/8634c08479bcc09c8ffabd7af36dfec5.png

代码B.c