## 开源软件开发导论 - 资料

### 开源协议使用常见问题

**问题1**：
如果一个网站的源码是使用GPL协议的，用它的源码部署网站运营赚钱，会违反协议么？

**讨论**：

1. `GPL`协议全文：https://www.gnu.org/licenses/gpl-3.0.en.html 。GPL并不限制赚钱，赚不赚钱不是判断的标准，不是重点。GPL既不限制赚钱，也不限制分发，也没有要求面向公众开源，而是要求说如果你对源码有改动，分发的时候要把改动的代码一起提供给客户，并且不能禁止你的客户把源码再给别人。如果你的客户拿到了你改动的代码，关在家里研究，却不愿意分享给别人，那你和你的客户都没有违背GPL协议。

2. 针对`GPL`在网络服务端使用的问题。有一个新的协议：`AGPL`。`AGPL`的全称为：GNU Affero General Public License，是`GPL`的一个补充，在GPL的基础上加了一些限制。`AGPL`这个协议的制定是为了避免一个`GPL`/`LGPL`协议中的漏洞，称之为Web Service Loopwhole，这主要是由于`GPL`是针对传统的软件分发模式的商业模式(以微软为代表)。如果你使用的`GPL`的代码作为基础完成你自己的软件，如果你要分发你的软件，你的软件必须也是`GPL`的。随着以Google为代表的软件作为服务的互联网公司的兴起，它们的“不分发软件，为客户提供网络服务”的商业模式就不受GPL协议的约束，所以Google公司在构筑他的搜索引擎的时候可以随心所欲的拿现有的GPL协议的开源代码，无需开源他的修改成果。`AGPL`协议就是为了防止这种情况出现，在GPL协议的基础上加了一个约束。`AGPL`协议:http://www.freeoa.net/development/design/detail-intro-agpl-agreement_2012.html

3. 看上去，`AGPL`还是有模糊的地方，MongoDB在`AGPL`的基础上明确对云厂商做了限制，有更严格的`SSPL`协议。`SSPL`协议：https://www.mongodb.com/licensing/server-side-public-license

4. 另一个后续是MariaDB提出了一个延迟开源的`BSL`协议。该协议的介绍请见：https://blog.csdn.net/chupai9888/article/details/100682823