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