如何选择开源许可证?
最近想开源一部分之前写的小工具代码,发现选择开源协议的时候遇到了困难。搞清楚各种开源协议的区别,选择适合自己的协议还挺难。阮一峰有篇博客翻译了一张图来指导如何选择开源许可证。但是我了解部分细节之后还是跟自己想法有些出入。
开源协议主要对软件使用、修改和分发的场景作出相应约束。
BSD 许可证——特点是可以自由使用、修改、再发布。但是在商用或者个人分发过程中必须带有原来代码的许可证,且不能用原作者相关信息去做宣传。
MIT 许可证——和 BSD 许可证类似,只要在项目的所有副本中包含版权声明和许可声明,就无需承担任何责任。
Apache 许可证——Apache 多了几个限制条件,禁止使用其商标与作者的相关信息进行商业行为,必须明确指出所有修改过的文件。
GPL 许可证—— 主张代码及衍生代码的开源,不允许修改后和衍生的代码做为闭源的商业软件进行发布和出售。如果已发布商业软件源码里含有 GPL 开源软件源码,则必须对该商业软件进行开源或者下架处理。这就是大家说的传染性,之所以设计这样的传染性就是为了防止有人基于开源项目修改后闭源。闭源软件可以利用开源软件的优势,但是又不回馈开源社区。这将导致开源软件的衰落。(本次梳理额外了解到一个以前不知道的知识,GPL 协议并不是要求修改后必须按照 GPL 对所有人开源,而是只对软件的使用者开源。GPL 在国内也有判例,参见罗盒公司案。
AGPL 许可证—— AGPL 是 GPL 的一个补充, 在 GPL 的基础上加了一些限制。GPL 的约束生效前提是该软件"发布",有的公司就使用 GPL 组件编写 web 系统,但是不发布系统,只用这个系统在线提供服务,这样就避免了开源系统代码。而 AGPL 要求如果云服务(即 saas)用到的代码是该许可证,那云服务的代码也必须开源。
LGPL 许可证—— LGPL 允许商业软件通过类库引用的方式使用 LGPL 类库,而不需要开源商业软件源码。很多现实场景是一个大软件用了一个小小的库,但是小小的库是 LGPL 的,就要求大软件开源,显然有点太霸道。所以就有了妥协的 LGPL。
开源的目的
我开源显示我自己牛逼,你们怎么用我完全不管。别打着我的旗号影响到我就行。适合 BSD、MIT、Apache 等宽松的许可协议。
弄出来了一个可能有用的东西,但我自己精力有限,开源出来清大家一起帮忙开发。
弄出来了一个东西,我希望它能够抢占市场,避免别人使用其它方案,为了抢夺话语权,我将它开源,从而打压竞品。
为了给客户查看源代码的权利让客户放心。
允许客户进行二次开发。
允许客户二次开发后自用和销售。
零碎
国内也出了自己的开源协议——木兰许可证:http://license.coscl.org.cn/
CC 协议定制工具: https://chooser-beta.creativecommons.org/
开源协议阅读分析:https://www.tldrlegal.com/