想要查看前面的笔记请翻阅我的CSDN博客,作者码字不易,喜欢的话点赞,加个关注吧,后期还有很多干货等着你!
最近一直在研究开源项目,发现对开源项目的开源许可有一些模糊,现在记录下来算是一个巩固
1.走进开源
「开源」一词对应英文 Open Source,最初起源于软件开发领域,因此也称为「开放源代码」,对应的软件则称为开源软件(Open Source Software)。除了我们熟知的开源软件以外,开源的表现形式还有开源硬件(Open Source Hardware)、开放设计(Open Design)、开放文档(Open Document)。
那是不是公开源代码的软件就是开源软件呢?
实际上并不是。按照 OSI 组织(Open Source Initiative Association)的 OSD 定义,除了公开源代码,开源软件的发行条款还必须符合以下十个条件:
序号 | 条款 | 简单说明 |
---|---|---|
1 | Free Redistribution | 允许自由地再发布软件 |
2 | Source Code | 程序必须包含所有源代码 |
3 | Derived Works | 可以修改和派生新的软件 |
4 | Integrity of The Author’s Source 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 | 许可证必须是技术中立的 |
你可以通过查阅OSI官方许可证的目录 Open Source Initiative 认可的开源许可证 ,了解常见的开源许可证。
通过了解这些条件约束,我们可以得出开源软件的定义:开源软件是一种技术和立场中立的使用许可证约束的开放源代码的软件。
开源软件需要保持开放的心态,对任何技术和立场都保持客观公正的态度,而且在开放源代码时,还需要遵循开源许可协议,允许任何人使用、拷贝、修改以及重新发布。开源许可协议主要分为宽松许可协议(Apache、BSD、MIT 等)和严格许可协议(GPL、GPL v3、LGPL、Mozilla 等)两大类。除此之外,一个优秀的可持续发展的开源软件,还需要公开发布项目技术文档和其他材料、二进制文件(可选)等,以及拥有一个开放性的社区,接收用户和开发者的反馈,共同探讨开源软件的发展。
2.走进开源许可![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/249cc794fb165c8a71b4d198689ccd59.png#pic_center)
GNU通用公共许可证(GNU GPL,GNU General Public License)是目前被广泛使用的开源软件许可协议之一,用户享有运行、学习、共享和修改软件的自由,一般简写为GPL即可。GPL最初是自由软件基金会创始人Richard Stallman编写的,目前已经发展到了第三版许可协议。目的是保证开源社区程序员的工作是对整个世界有益的,并且软件也是自由的,极力避免开源程序被私有化以及被无良软件公司所剥削。
现在,只要软件中包含了遵循GPL许可证的代码,该软件就必须也开源和免费,因此这个许可证并不太适合商业收费软件。遵循该证的开源软件数量极其庞大,包括Linux内核在内的大多数的开源软件都是基于GPL许可证的,它赋予了用户著名的五大自由:
使用自由:允许用户根据需要自由使用这个软件;
复制自由:允许把软件复制到任何人的电脑中,并且不限制复制的数量;
修改自由:允许开发人员增加或删除软件的功能,但软件修改后必须依然基于GPL许可协议;
衍生自由:允许用户深度定制化软件后,注册成自己的新商标,再发行衍生品的自由;
收费自由:允许在各种媒介上出售该软件,但必须提前让买家知道这个软件是可以被免费获得的;因此,一般来讲,开源软件都是通过为用户提供有偿服务的形式来盈利,小节末尾一会细聊。
LGPL宽松通用公共许可证(Lesser GPL)是GPL的一个主要为保护类库权益而设计的开源协议,与标准GPL许可证相比,LGPL允许商业软件通过类库引用的方式使用开源代码,而不用将其产品整体开源化,因此普遍被商业软件引用类库代码时使用。简单来说,就是如果使用了基于LGPL许可证的开源代码,那么所涉及到的这部分代码,以及修改过的,或者衍生出的代码都必须继续采用LGPL协议,而除此以外的其他代码则不强制要求。
如果您现在感觉LGPL许可证更多的是关注对类库文件的保护,而不是软件整体,其实就对了,因为许可证最早的名字就是Library GPL,即GPL类库开源许可证。保护对象例如Glibc, GTK widget toolkit等类库文件。
BSD伯克利软件发布许可证(Berkeley Software Distribution license)同样也是被广泛使用的开源软件许可协议,相比于GPL许可证来说,BSD更加的宽松,适合于商业。用户可以使用、修改和重新发布遵循该协议的新软件,并且可以将软件作为商业产品进行销售,只需要满足3个条件即可:
1:如果再发布的软件中包含开源代码,则必须继续遵循BSD许可证;
2:如果再发布的软件中只有二进制程序,则需要在相关文档或版权文件中声明原始代码遵循了BSD许可证;
3:不允许用原始软件的名字、作者名字或机构名称进行市场推广。
Apache许可证(Apache License),顾名思义是由Apache软件基金会负责发布和维护的开源许可协议。作为当今世界上最大的开源基金会,不仅因此协议而出名,Apache还因是市场占有率第一的Web服务器软件而享誉行业。目前使用最广泛的是2004年发行的2.0版本,它在帮助开发人员提供版权及专利许可的同时,还允许用户拥有修改代码再发布的自由,并且非常适合于商业软件——现在热门的Hadoop、Apache HTTP Server、MongoDB等项目都是基于该许可证研发的。程序开发人员在开发软件时,要严格遵守下面的4个条件:
1:该软件及其衍生品必须继续使用Apache许可证;
2:如果修改了程序源代码,需要在文档中进行声明;
3:若软件是基于他人的源代码编写而成的,则需要保留原始代码的许可证、商标、专利声明及其他原作者声明的内容信息;
4:如果再发布的软件中有声明文件,则需在此文件中注明基于了Apache许可证及其他许可证。
MIT许可证(Massachusetts Institute of Technology)源于麻省理工学院,又称为X11协议。是目前限制最少的开源许可证之一,用户不仅可以使用、复制、修改、再发布,而且只要程序的开发者在修改后的源代码中保留原作者的许可信息即可,因此普遍被商业软件所使用——例如jQuery与Node.js。也就是说,MIT许可证宽松到一个新境界,用户只要在代码中声明了MIT协议和版权信息,就可以去做任何事情,而你也无需承担任何责任。
Mozilla公共许可证(MPL,Mozilla Public License)是1998年初由Mozilla小组编写的,原因是他们认为GPL和BSD许可证不能很好的解决开发人员对源代码的需求和收益之间的平衡关系,因此便融合了这两个协议。2012年初,Mozilla基金会发布了MPL 2.0版本,后续被用在火狐浏览器(FireFox)、雷鸟邮局(Thunderbird)等诸多产品上。最新的MPL公共许可证有以下特点:
1:使用基于MPL许可证的源代码内容后,只需要继续开源这部分特定代码即可,而新研发的软件不用完全被协议控制;
2:开发人员可以将基于MPL、GPL、BSD等多种许可证的代码一起混合使用;
3:开发人员在发布新软件时,必须附带一个专门对该程序说明的文件,内容要有对原始代码的修改时间和修改方式;
别急别急!估计已经有同学在看完上面琳琅满目的许可证后,在心里默默吐槽一句:“不是都差不多吗?到底该选哪个呢?”。写到这里,刘遄老师也是一脸无助,到底该怎么让同学们选择呢?搜肠刮肚之际突然眼前一亮,由乌克兰程序员Paul Bagwell创作的一幅流程图正好把我们刚刚讲过的这六款开源许可证做了个汇总归纳,基于CC-BY-NC-SA 3.0知识分享协议翻译并整理如下图: