浅谈开源软件许可证1:MIT 与 Apache 许可证

背景

作为程序员,每天的工作都在和开源软件打交道,但很少有机会了解开源项目背后的运作方式。

最近脑子里冒出来一些问题,比如:为什么有这么多不同的开源软件许可证?如果我开源一个自己的小项目,应该选择哪种许可证?谁来监督许可证法律效力的执行?等等。

打算抽空研究一下这些问题,不如从两个目前最流行的许可证开始吧:MIT 许可证和 Apache 许可证。

开源软件许可证

开源软件许可证有很多种,但在 GitHub 上逛了一圈发现,如今很大一部分流行的开源项目都采用了 MIT 或者 Apache 许可证。

MIT 许可证

比如,使用 MIT 许可证的包括下面这些鼎鼎有名的项目。说前端领域有“半壁江山”在其中都是非常保守了:

Apache 许可证

使用 Apache 许可证的项目也不少,其中一个重要原因是,作为 Apache 许可证的提出者,Apache 软件基金会(Apache Software Foundation,简称 ASF)在其项目中认使用该许可证。目前 ASF 旗下的开源项目有超过 300 个,其中一些比较流行且使用 Apache 许可证的项目包括

当然,也有很多非 ASF 的项目采用了Apache 许可证,比如下面这些如雷贯耳的项目:

至少从上面的例子中看来,与 MIT 许可证下前端项目扎堆的情况不同,采用 Apache 许可证的项目似乎更多涵盖了前端、后端、DevOps、移动 UI、大数据处理、深度学习等各种类型的系统、框架和工具。

其他许可证

当然,也有很多项目使用了其他类型的许可证,比如 Linux 使用 GPL 许可证、Redis 使用 BSD 3-Clause 许可证,还有很多项目使用的是自定义许可证,包括很多编程语言(Node.js、Python、Go)、数据库MysqL)在内。但不得不说,MIT 和 Apache 这两个许可证加起来,就囊括了很大一部分我们耳熟能详的项目了。

那么这些各式各样的许可证之间有什么区别呢?感觉这件事不容易一下子全搞清楚,那就不如从这两个最流行的许可证—— MIT 和 Apache 入手吧!

MIT 许可证 vs Apache 许可证

总的来说,Apache 许可证比 MIT 许可证略微严格一些,不过两者差异不大。

共同点:宽松软件许可证

首先来说一下这两种许可证的共同点。MIT 和 Apache 许可证都属于同一个许可证类型:宽松软件许可证(Permissive Software License)

正如名称所暗示的,这种许可证的特点就是:对软件的使用、修改和分发等行为只进行了最低程度的限制

与之相对的则是另一种许可证类型:copyleft 许可证(copyleft License),这种许可证则在相对较大的程度上限制了软件的使用、修改和分发等行为。

举例来说,对于一个采用了宽松软件许可证的开源项目(比如上面提到的所有使用 MIT / Apache 许可证的项目),你可以在它源码的基础上做一些修改,然后在不开放修改后源码的情况下把打包后的二进制文件拿出去卖钱(换句话说就是变成了商业软件);对于一个采用copyleft 许可证的项目(比如使用 GPL 许可证的 Linux)来说,这种行为则不被允许。

这么看来, MIT 和 Apache 许可证成为最流行的许可证应该不是偶然,因为限制越少,自然就越容易传播。

说完共同点,再来看看这两种许可证之间的几点区别。

区别 1:是否要求明确声明修改部分

MIT 许可证没有这个要求。也就是说,对于一个使用 MIT 许可证的项目,你可以在它源码的基础上做一些修改,发行修改后的版本而不需要明确声明你修改了哪些部分(但需要保留原有的许可证)。

而 Apache 许可证则要求明确标注修改的部分。也就是说,你可以在原有代码的基础上修改并重新发行,但必须明确声明你修改了哪些文件

区别 2:是否明确限制商标使用权

Apache 许可证明确限制了商标使用权。例如,Spring Boot 采用了 Apache 许可证,你可以在 Spring Boot 源码基础上做一些修改,然后作为你自己的产品发行,但你的这个产品就不能叫做 “Spring Boot” 之类的名字了。

这个要求十分合理。一个非常著名的真实案例是,在 2006 年,Debian Linux 发行版不得不将其平台上的 Mozilla Firefox、Mozilla Thunderbird 和 SeaMonkey 三款应用分别更名为 Iceweasel、Icedove 和 Iceape,其原因正是商标使用权:Debian 在 Mozilla Thunderbird 的源码基础上做了一些修改,但 Mozilla 基金会并不认同这些修改,于是要求 Debian 更改产品商标。

而 MIT 许可证则没有明确进行限制。

但是注意!MIT 许可证没有明确限制,并不意味着你可以随意使用其商标。举例来说,React 使用 MIT 许可证,这是否意味着你可以在 React 的源码上做一些修改,然后作为你自己的产品发行,并且在产品名称中包含 “React” 呢?尽管 MIT 许可证没有明确禁止这一行为,但这样做应该也是不行的。

所以说,这个区别其实并没有看上去那么重要。只能说,Apache 许可证的描述更为精确。

区别 3:许可证长度

事实上,不光是商标相关的部分,Apache 许可证在整体上的描述都比 MIT 许可证精确很多。

但精确的描述也是有代价的:Apache 许可证的文本长度一般是 MIT 许可证的 10 倍左右(你可以点开我上面放的各个项目的许可证链接,对比一下)。

MIT 许可证大概是所有这些开源软件许可证里最简洁的一个了吧!总共只有 20 行,且使用时除了需要替换版权方署名之外,不需要做任何修改

这也是 MIT 许可证如此流行的一个重要原因!

小结

总的来说,MIT 和 Apache 许可证的差异并不大,且都属于宽松软件许可证,这也是它们如此流行的重要原因。

先写到这里,之后有机会再继续研究!

参考链接

Permissive software license
What’s the difference between permissive and copyleft licenses?
MIT License
Apache License
Apache Projects Directory
Mozilla software rebranded by Debian

相关文章

可以认为OpenFeign是Feign的增强版,不同的是OpenFeign支持S...
为进一步规范小程序交易生态、提升用户购物体验、满足用户在...
云原生之使用Docker部署Dashdot服务器仪表盘
本文主要描述TensorFlow之回归模型的基本原理
1.漏洞描述Apache Druid 是一个集时间序列数据库、数据仓库和...
内部类(当作类中的一个普通成员变量,只不过此成员变量是cl...