什么是开源许可证

前言

最近想在公司负责的项目中引入一个开源组件,结果收到法律合规部门的「友好提醒」,说企业项目中,开源组件不是开发人员想用就能随便用的,要先看开源许可证(Open Source License)。这一篇就介绍一下开源许可相关的知识。


开源许可证(Open Source License)

开源许可证是一种针对开源软件使用者的约束,目的在于规范受著作权保护的软件的使用或者分发行为。说人话就是,你使用或修改了我开源的软件,你就必须按我的要求怎样做,否则就不能让你用。

常见的开源许可证(以下简称 License)可以分为两大派:

  • Copyleft License :允许他人使用、传播,但有一些限制。这类许可的开源组件,要谨慎使用。
  • Permissive License: 比较宽松,基本不怎么限制他人使用、传播。这类许可的开源组件,相对放心点。

在哪里可以看到 License 信息?

一般在开源软件官网“关于”部分可以查阅,或者开源仓库(如Github)的 README 文档中查找。

例如著名的加解密类库 bouncycastle 的主页,可以看到其使用的是 MIT license。 MySQL 的 Github 仓库 也专门有 LICENSE 信息。

当我们自己在 Github 上创建一个开源项目时, Github 也提供了一键式生成 License 的功能。


常见开源许可证介绍

第一类:Copyleft license

Copyleft 一词由 理查德·斯托曼 发明,表示 Copyright (版权) 的反义词。Copyright 表示不经许可,用户无权复制,商业软件开发人员通过 Copyright 剥夺了用户的自由。Copyleft 则表示不经许可,用户有权复制,Copyleft 使用版权来给予用户自由,但是,Copyleft License 有诸多限制。

理查德·斯托曼,GUN项目组织者、自由软件运动发起人,写了GBD、GCC等自由软件

  1. GPL(GNU General Public License):衍生代码也必须以 GPL 协议开源,不允许修改后和衍生的代码做为闭源的商业软件进行发布和出售。因为具有衍生性,有人调侃 GPL 协议叫 GPL 病毒。

  2. LGPL(GNU Lesser General Public License):只引用 LGPL 协议的类库,允许不开源商业软件源码,但如果修改了里面的东西,则必须开源。

  3. AGPL:GPL 约束生效前提是该软件“发布”,于是有些人认为只要对外提供云服务而没有发布应用,就可以使用 GPL 协议。AGPL 把这个漏洞堵死了。即云服务用到的代码是该许可证,那云服务的代码也必须开源。

  4. MPL(Mozilla Public License):允许免费重发布、免费修改,但要求修改后的代码版权归软件的发起者

Linux 就采用了 GPL 协议,所以很多基于 Linux 的系统也都是开源的。

第二类:permissive license(non-copyleft)

permissive 顾名思义,就是宽松的,限制少的协议。

  1. BSD(Berkeley Software Distribution):可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。但是必须带有原来代码的许可证,且不能用原作者相关信息去做宣传。

  2. Apache:类似BSD,禁止使用其商标与作者的相关信息进行商业行为,且必须明确指出所有修改过的文件。

  3. MIT(Massachusetts Institute of Technology):作者只想保留版权,无任何其他限制。比 BSD 宽松。


几张帮助理解的图

图片来自阮一峰的网络日志


图片来源见水印


参考链接