# 开源许可证教程

> 原文出处：[开源许可证教程](http://www.ruanyifeng.com/blog/2017/10/open-source-license-tutorial.html)
>
> 创建日期：2018-06-26

作为一个开发者，如果你打算开源自己的代码，千万不要忘记，选择一种开源许可证（license）。

许多开发者对开源许可证了解很少，不清楚有哪些许可证，应该怎么选择。本文介绍开源许可证的基本知识，主要参考了 OpenSource.com （[1](https://opensource.com/article/17/9/9-open-source-software-rules-startups)，[2](https://opensource.com/article/17/9/open-source-licensing)）。

![img](http://www.ruanyifeng.com/blogimg/asset/2017/bg2017101101.jpg)

## 一、什么是开源许可证

开源许可证是一种法律许可。通过它，版权拥有人明确允许，用户可以免费地使用、修改、共享版权软件。

版权法默认禁止共享，也就是说，没有许可证的软件，就等同于保留版权，虽然开源了，用户只能看看源码，不能用，一用就会侵犯版权。所以软件开源的话，必须明确地授予用户开源许可证。

## 二、开源许可证的种类

目前，国际公认的开源许可证共有[80多种](https://opensource.org/licenses/alphabetical)。它们的共同特征是，都允许用户免费地使用、修改、共享源码，但是都有各自的使用条件。

如果一种开源许可证没有任何使用条件，连保留作者信息都不需要，那么就等同于放弃版权了。这时，软件可以直接声明进入"公共领域"（public domain）。

根据使用条件的不同，开源许可证分成两大类。

> * 宽松式（permissive）许可证
> * Copyleft 许可证

## 三、宽松式许可证

### 3.1 特点

宽松式许可证（permissive license）是最基本的类型，对用户几乎没有限制。用户可以修改代码后闭源。

它有三个基本特点。

**（1）没有使用限制**

用户可以使用代码，做任何想做的事情。

**（2）没有担保**

不保证代码质量，用户自担风险。

**（3）披露要求（notice requirement）**

用户必须披露原始作者。

### 3.2 常见许可证

常见的宽松式许可证有四种。它们都允许用户任意使用代码，区别在于要求用户遵守的条件不同。

**（1）BSD（二条款版）**

分发软件时，必须保留原始的许可证声明。

**（2） BSD（三条款版）**

分发软件时，必须保留原始的许可证声明。不得使用原始作者的名字为软件促销。

**（3）MIT**

分发软件时，必须保留原始的许可证声明，与 BSD（二条款版）基本一致。

**（4）Apache 2**

分发软件时，必须保留原始的许可证声明。凡是修改过的文件，必须向用户说明该文件修改过；没有修改过的文件，必须保持许可证不变。

## 四、Copyleft 许可证

### 4.1 Copyleft 的含义

Copyleft 是[理查德·斯托曼](http://www.ruanyifeng.com/blog/2005/03/post_112.html)发明的一个词，作为 Copyright （版权）的反义词。

Copyright 直译是"复制权"，这是版权制度的核心，意为不经许可，用户无权复制。作为反义词，Copyleft 的含义是不经许可，用户可以随意复制。

但是，它带有前提条件，比宽松式许可证的限制要多。

> * 如果分发二进制格式，必须提供源码
> * 修改后的源码，必须与修改前保持许可证一致
> * 不得在原始许可证以外，附加其他限制

上面三个条件的核心就是：修改后的 Copyleft 代码不得闭源。

### 4.2 常见许可证

常见的 Copyleft 许可证也有四种（对用户的限制从最强到最弱排序）。

**（1）Affero GPL (AGPL)**

如果云服务（即 SAAS）用到的代码是该许可证，那么云服务的代码也必须开源。

**（2）GPL**

如果项目包含了 GPL 许可证的代码，那么整个项目都必须使用 GPL 许可证。

**（3）LGPL**

如果项目采用动态链接调用该许可证的库，项目可以不用开源。

**（4）Mozilla（MPL）**

只要该许可证的代码在单独的文件中，新增的其他文件可以不用开源。

## 五、常见问题

本节回答一些开源许可证的常见问题。

### 5.1 什么叫分发（distribution）？

除了 Affero GPL (AGPL) ，其他许可证都规定只有在"分发"时，才需要遵守许可证。换言之，如果不"分发"，就不需要遵守。

简单说，分发就是指将版权作品从一个人转移到另一个人。这意味着，如果你是自己使用，不提供给他人，就没有分发。另外，这里的"人"也指"法人"，因此如果使用方是公司，且只在公司内部使用，也不需要遵守许可证。

云服务（SaaS）是否构成"分发"呢？答案是不构成。所以你使用开源软件提供云服务，不必提供源码。但是，Affero GPL (AGPL) 许可证除外，它规定云服务也必须提供源码。

### 5.2 开源软件的专利如何处理？

某些许可证（Apache 2 和 GPL v3）包含明确的条款，授予用户许可，使用软件所包含的所有专利。

另一些许可证（BSD、MIT 和 GPL v2）根本没提到专利。但是一般认为，它们默认给予用户专利许可，不构成侵犯专利。

总得来说，除非有明确的"保留专利"的条款，使用开源软件都不会构成侵犯专利。

### 5.3 什么是披露要求？

所有的开源许可证都带有"披露要求"（notice requirement），即要求软件的分发者必须向用户披露，软件里面有开源代码。

一般来说，你只要在软件里面提供完整的原始许可证文本，并且披露原始作者，就满足了"披露要求"。

### 5.4 GPL 病毒是真的吗？

GPL 许可证规定，只要你的项目包含了 GPL 代码，整个项目就都变成了 GPL。有人把这种传染性比喻成"GPL 病毒"。

很多公司希望避开这个条款，既使用 GPL 软件，又不把自己的专有代码开源。理论上，这是做不到的。因为 GPL 的设计目的，就是为了防止出现这种情况。

但是实际上，不遵守 GPL，最坏情况就是被起诉。如果你向法院表示无法履行 GPL 的条件，法官只会判决你停止使用 GPL 代码（法律上叫做"停止侵害"），而不会强制要求你将源码开源，因为《版权法》里面的"违约救济"没有提到违约者必须开源，只提到可以停止侵害和赔偿损失。

（完）
