github这个网站,我想大家肯定都逛过,这里面汇聚了人类的智慧结晶,各种各样的开源软件涵盖了几乎所有计算机语言以及开发场景
但在我们开心地使用开源软件时,其实它们是存在一定使用限制的,而这些限制就来源于每一个开源软件所遵循的 许可证,即所谓的 开源许可证。不要以为这些许可证无足轻重,如果我们将开源软件用于商用并且不遵循其许可证所规定的使用限制,那么很大可能就会惹上麻烦
因此本文就准备聊聊 开源许可证 的相关内容,从而避免今后“惹麻烦”,废话不多说,开搞!
什么是开源许可证
简单来说,开源许可证就是为开源软件规定其 使用限制与范围
最开始它只是一个君子协议,但是随着软件行业的发展,开源许可证逐渐成为了一种具有法律效力的协议,也就是说人们在使用开源软件时,越来越应该注意其遵循的许可证,防止惹上不必要的麻烦
开源许可证的种类
开源许可证其实存在上百种,我们不需要了解每一种,只需要了解最主要的几种就可以了
从大的类别上可以分为两类:copyleft许可证 和 permissive许可证,这两种类别下的子类罗列如下:
- permissive许可证
- BSD:特点是可以自由使用、修改、再发布,但是在商用或者个人分发过程中必须带有原来代码的许可证,且不能用原作者相关信息去做宣传
- MIT:源自麻省理工学院(Massachusetts Institute of Technology, MIT),是使用最广泛的一种开源许可证。其特点和 BSD 许可证类似,只要在项目的所有副本中包含版权声明和许可声明,就无需承担任何责任
- Apache:作为 permissive license 中的一员,Apache多了几个限制条件,禁止使用其商标与作者的相关信息进行商业行为,必须明确指出所有修改过的文件
- copyleft许可证
- GPL:GPL和BSD区别还是很大的,GPL主张代码及衍生代码的开源,不允许修改后和衍生的代码做为闭源的商业软件进行发布和出售。如果已发布商业软件源码里含有GPL开源软件源码,则必须对该商业软件进行开源或者下架处理
- AGPL:AGPL是GP 的一个补充, 在GPL的基础上加了一些限制。GPL 的约束生效前提是该软件”发布”,有的公司就使用GPL组件编写web系统,但是不发布系统,只用这个系统在线提供服务,这样就避免了开源系统代码。而 AGPL要求如果云服务(即saas)用到的代码是该许可证,那云服务的代码也必须开源
- LGPL:LGPL允许商业软件通过类库引用的方式使用LGPL类库,而不需要开源商业软件源码
- MPL:在商业软件中,如果含有MPL许可证的代码在单独的文件内,其他新增的文件就可以避免开源
如何记住种类繁杂的许可证
面对如此多的许可证,我想每个看到的人都会抓狂吧,庆幸的是,我从阮一峰大佬的 这篇文章 里看到了一个能高效记忆这些许可证内容的方式,这里我贴个原图供你参考
结语
我认为作为一个程序员,是很有必要了解这些非编码的“软知识”的,因为软件领域不止有算法和数据结构,而是包含了许多内容,比如许可证就是其中一员,所以我们一定要拓展自己的眼界,这样才能成为一名全面综合型的人才