平时我们在日常开发生活都在大量和开源软件打着交道,例如安卓、Linux、Github、Docker等,而其中开源协议比如MIT、Apache也是耳熟能详,但是真正对开源协议的了解相信对大部分人来说都是一知半解。而近来频繁冒出一些事件让我们对开源协议产生了更大的疑问。
大家的疑惑都是,这些不都是开源的嘛?为什么还能受到影响?接下来,我将为大家详细介绍开源协议的种类和这些事件背后的真正原因。
首先开源许可证可以分为两大类:Copyleft和Permissive。
Copyleft中文可以理解为著作传、著佐权,它是一种利用Copyright(版权)体制来保障用户软件自由使用权利的许可方式,可以了解为允许他人使用、传播但加了一些少规则。
不知道是什么?Copyleft的标志就是一个反写的C套上圆圈(即反转的著作权标志©)。
Copyright(版权)是可以通过法律的形式授予,一般在网站上使用会搭配All Rights Reserved(保留所有相关著作权利)来使用,而Copyleft则是在基于Copyright的基础之上表达自由和免费。
Permissive License(宽松式许可证)允许用户不经许可可以随意复制、修改和发布,但是并不要求分发时必须使用相同的许可证,用户可以在修改代码后选择闭源,常见的Apache、BSD、MIT属于Permissive许可证。
一句话说:这种类型的许可证,在你拿到源码后,基本上可以为所欲为。
MIT是许多软件许可条款中,被广泛使用的其中一种。与其他常见的软件许可协议相比,MIT是相对宽松的软件许可协议。MIT许可协议之名源自麻省理工学院(Massachusetts Institute of Technology),MIT内容与三条款BSD许可协议内容颇为近似,但是赋予软件被许可人更大的权利与更少的限制。
一句话说:只用申明一下,想怎么用怎么用。
案例:PuTTY、Ruby on Rails、Lua、jQuery
BSD也被称为伯克利Unix或Berkeley Unix和MIT类似,1970年代由伯克利加州大学的学生比尔·乔伊创建。BSD许可证非常宽松,它允许无限制地重用全部或部分软件,以集成到自由软件或所有者中。1979年加州大学伯克利分校发布了BSD Unix,被称为开放源代码的先驱,BSD许可证就是随着BSD Unix发展起来的。
BSD 代码鼓励代码共享,但需要尊重代码作者的著作权。BSD 由于允许使用者修改和重新发布代码,也允许使用或在BSD 代码上开发商业软件发布和销售,因此是对 商业集成很友好的协议。而很多的公司企业在选用开源产品的时候都首选BSD 协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。
案例:FreeBSD、Nginx、Chromium、Django
Apache许可证是由Apache软件基金会(ASF)发布的开源软件许可证。这是一个由强大社区支持的流行且广泛部署的许可证。Apache许可证允许您自由使用,修改和分发任何Apache许可产品。但是,在这样做时,您需要遵循Apache许可的条款,Apache 协议也是个相对宽松与 MIT 类似的协议,但它简单指明了作品归属者对用户专利上的一些授权。
一句话说:可以保护你专利的一些权力,同时让别人免费使用你代码中的专利。
案例:Android Open Source Project (AOSP)、Apache、Swift、Hadoop、SVN、Kubernetes、OpenOffice、Hadoop、Spark、Docker
GPL是被广泛使用的自由软件许可证,给予了终端用户运行、学习、共享和修改软件的自由。GPL允许自由地“使用、复制、修改和发布”,但修改和发布后的软件也必须是可以自由“使用、复制、修改和发布”的。因此 GPL 大大限制了商业软件使用GPL授权的软件,如果非法使用,将面临起诉的风险。
由于不允许修改后或者衍生的进行发布和销售,所以如果用了它,该产品也必须采用也就是开源和免费。
GPL 分为两个版本一个是 V2,一个是 V3,作品带上这个协议之后,别人想分享的话也得加上这个协议,对代码作出比较大的更改也是需要附带说明。
一句话说:基于GPL组件编写的任何软件都必须以开源的方式进行发布。
案例:Linux内核、MySQL、GCC,Emacs
AGPL是对GPL的补充,如果使用了AGPL代码的软件是一个网络应用,那么这个软件的所有源码和修改代码也必须开源,除非购买了该AGPL代码的商业授权。
案例:MongoDB
LGPL它对作品的使用保留了更少的权利,适合一些代码库或者框架使用。
通常,LGPL 适用于一些类库,它允许这些类库能够被非GPL或非开源软件引用。
案例:7-Zip
MPL自由、开源、详细的软件许可证,由Mozilla基金会开发并维护。该协议融合了BSD许可证和GNU通用公共许可协议的特性,追求平衡专有软件和开源软件开发者之间的顾虑。
MPL许可证出现的最重要原因就是,Netscape公司认为GPL许可证没有很好地平衡开发者对源代码的需求和他们利用源代码获得的利益。
案例:Mozilla Firefox、 Apache Flex
了解完这些开源协议的基本概念之后,我们可以回头来看文章开头提到的几个案例的原因了。
去年,谷歌母公司Alphabet停止与华为相关的业务和服务,涉及硬件、软件和技术服务方面,包括旗下智能手机操作系统安卓。可是上面我们提到安卓系统是Apache2.0开源协议的,这是怎么回事?
安卓系统分为开源、不开源两部分:
第一,开源版安卓系统。即AOSP(Android Open-Source Project),意为Android 开放源代码项目,是免费使用的,但不内嵌GMS,华为等手机厂商都用AOSP。AOSP提供了安卓底层架构,手机厂商可以修改和定制。
第二,不开源的GMS移动服务(Google Mobile Service),GMS需要谷歌认证,并向其缴纳授权费,GMS包含常用的谷歌套件,如谷歌商店、搜索、地图等应用,这些应用与Google签订商业协议,同样不开源。
而谷歌暂停合作的是GMS移动服务,并非开源版本的安卓系统。
Docker 是一个虚拟环境容器,可以将你的开发环境、代码、配置文件等一并打包到这个容器中,并发布和应用到任意平台中。它与虚拟机类似,但 Docker 容器更加轻量级,能够更高效地利用服务器。
实体清单是什么?1997年2月,美国商务部首次发布实体清单,以此明确告知美国出口商,在未得到许可证时,不得帮助这些实体获取受本条例管辖的任何物项。而有关许可证的申请应按照《美国出口管制条例》(Export Administration Regulations,EAR)第744部分规定的审查标准接受审查,且向此类实体出口或再出口有关物项不适用任何许可例外的规定。
此外,根据EAR规定,实体清单内容的增加、删除和更改都必须经“最终用户审查委员会”投票决定。该委员会由美国商务部牵头,包括国务院、国防部、财政部等部门代表。确定增加实体清单需要多数委员会成员投票通过,而确定删除或更改实体清单则需要全体成员投票通过。
因此受限制的是 Docker 商业版及 Docker 的其它服务,比如 Docker Hub。
但是我们又产生了疑问,开源协议如果还受到国家管控,那么开源的精神还有什么价值?其实不然,开源项目一般来说有3个约束。
我们可以从最后一条看到,开源许可证保护的是知识产权,其自身与出口管制和司法管辖权并无关联!也就是说Docker案例也是属于正常范畴。
长期以来,中国用户以使用开源为主,对开源社区贡献较少。但近年来,国内开源社区对国际开源项目的贡献已经日趋瞩目,华为、阿里、百度、腾讯等公司为首的公司和个人已经在国际各开源项目中占据了越来越重要的角色。