简介
现在互联网上有很多开源软件项目,我们可以在例如 GitHub 或者 Gitee 上搜索到不同类型的开源软件项目。很多大公司也都拥抱开源,并且开源了很多项目,利用开源社区来完善他们的代码,同时也反哺开源社区,达到双赢。这些项目对于中小型科技公司也特别有用,可以避免重复造轮子,节省产品的开发周期,提高产品的质量。但是为了保护开源软件作者的权益,同时也会规定一些使用限制,这就需要开源软件许可协议了。在开源软件盛行的今天,懂一点开源软件的许可协议还是有必要的。
常用开源软件许可协议
世界上的开源许可证(Open Source License)大概有上百种,而我们常用的开源软件许可协议有Apache、GNU GPL、BSD、MIT、Mozilla 和 GNU LGPL。
Apache License
Apache License 是 Apache 软件基金会发布的一个自由软件许可证。Apache 是著名的非盈利性的开源组织,各个领域均有该组织发布的开源软件且被广泛使用。该协议鼓励代码共享和最终原作者的著作权,同样允许源代码修改和再发布。
使用这个协议的好处是:
- 永久权利 一旦被授权,永久拥有
- 全球范围的权利 在一个国家获得授权,适用于所有国家
- 授权免费,且无版税 无任何费用
- 授权无排他性 任何人都可以获得授权
- 授权不可撤消 一旦获得授权,没有任何人可以取消
- 对商业应用友好 使用者可以在需要的时候修改代码来满足并作为开源或商业产品发布/销售
但是也需要遵循以下条件:
- 需要给代码的用户一份 Apache Licence
- 如果修改了代码,需要在被修改的文件中说明
- 在衍生的代码中(修改的代码和由源代码衍生的代码中)需要保留原来代码中的协议、商标、专利声明和其他原来作者规定需要包含的说明
- 在发布的产品中的 Notice 文件中需要带有 Apache Licence
- 可以在 Notice 中增加自己的许可,但是不可以更改 Apache Licence 内容
GNU GPL
GNU General Public Licence (GPL) 有可能是开源界最常用的许可模式,Linux 就采用了 GPL。
GPL 保证了所有开发者的权利,同时为使用者提供了足够的复制、分发、修改的权利:
- 可自由复制 没有任何限制
- 可自由分发 提供下载等
- 可以用来盈利 但必须提供产品的 GNU GPL 许可协议及收费的理由
- 可自由修改 如果你想添加或删除某个功能,没问题,如果你想在别的项目中使用部分代码,也没问题,唯一的要求是,使用了这段代码的项目也必须使用 GPL 协议。
GNU LGPL
GNU 的另外一种协议 LGPL(Lesser General Public Licence)。
LGPL 协议允许商业软件通过类库引用(link)方式使用 LGPL 类库,而不需要开源商业软件的代码。这样就绕过了 GPL 协议的限制,使得采用 LGPL 协议的开源代码可以被商业软件作为类库引用并发布和销售。
但是如果修改 LGPL 协议的代码或者衍生出代码,那这些代码就都必须采用 LGPL 协议。因此 LGPL 协议的开源代码很不适合希望以 LGPL 协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。
BSD
BSD(Berkeley Software Distribution)意思就是"伯克利软件发行版"。
BSD 开源协议是一个给予使用者很大自由的协议,允许使用者修改和重新发布代码,也可以将修改后的代码作为开源或者专有软件再发布。很多公司在选用开源产品的时候都首选 BSD 协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。
但是当你发布使用了 BSD 协议的代码,或者以 BSD 协议代码为基础做二次开发自己的产品时,需要满足以下三个条件:
- 如果在发布的产品中包含源代码,则在源代码中必须带有原来代码中的 BSD 协议。
- 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的 BSD 协议。
- 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。
MIT
MIT 源自麻省理工学院(Massachusetts Institute of Technology, MIT),使用 MIT 的软件项目 jquery、Node.js。MIT 协议可能是几大开源协议中最宽松的一个,该软件及其相关文档对所有人免费,可以任意处置,包括使用、复制、修改、合并、发表、分发、再授权或者销售。唯一的限制是必须包含许可声明外,此外再无任何限制。
总结
这里就简单介绍这五种,其余还有MPL(Mozilla Public License)、EPL (Eclipse Public License)、QPL(The Qt Public License)、IBM(IBM Public License)等很多很多。可以看得出都是为了尽可能地保障原作者的知识产权,避免有人利用开源代码复制并开发类似的产品。使用规则看起来也比较复杂,但是其实早就有大神给我们做了很好的总结,乌克兰程序员 Paul Bagwell 画了一张分析图,下图为阮一峰汉化的版本,图片应该是说的很明确了的,通俗易懂,这里像两位大牛致敬。希望大家有所收获,在使用开源软件的时候也可以关注软件的开源协议使用。