对于软件产品,无论是免费发布还是出售,制定一份许可协议都非常有用。否则,对于前者,你相当于放弃了自己所有的权利,任何人都没有义务表明你的原始作者身份,对于后者,你将不得不花费比开发更多的精力用来逐个处理授权问题。许可,就是提供给使用你产品的人有一定的权限,不过你仍然拥有版权和专利(如果申请了的话)。开源许可证使得我们发布开源软件产品变得简单。
现今存在的开源许可证很多,多数人搞不清楚他们之间的区别。很多程序员在开源代码的时候不知如何选择开源许可证,或者使用别人的开源代码时未遵循其原始许可证。如何选择开源许可证,这是一个问题。
通过OSI(Open Source Initiative)组织批准的许可证目前有78种。当前流行的6种GPL,LGPL,Apache,MIT,BSD和MPL都是OSI批准的许可证。GitHub建了一个很赞的网站Choose an open source license,提供了各主流许可证的协议文本,并对它们作了详细的介绍和比较。国内阮一峰的BLOG也提供了一张简洁的分析图(GPL,LGPL和MPL许可证描述有误)。
MIT许可证
MIT许可证是一个简短、宽松的许可证,唯一的要求就是保留原始版权和许可声明。你可以:
- 商业使用。软件及衍生产品可以用于商业目的。
- 自由地修改、发布。软件可以被自由地拷贝、修改、发布。
BSD许可证
BSD许可证是一个给予使用者很大自由的许可证。使用者可以自由的使用、修改源代码,也可以将修改后的代码作为开源或专有软件再发布,只须满足:
- 如果再发布的产品是源代码,则在源代码中必须包含原始版权和许可声明。
- 如果再发布产品是二进制形式,则需要在其文档和版权申明包含原始版权和许可声明。
- 未经事先书面许可,不得使用原作者/机构的名字和原产品名字进行衍生产品的推广。
Apache许可证
Apache许可证是一个宽松且专业的许可证,相比于其他许可证,软件产品可以自由修改、发布和商用,该许可证还为用户提供专利许可,只须满足以下条件:
- 包含一份原始许可声明和版权声明
- 如果修改了源代码,包含一份代码修改说明。
- 不得使用其原始商标
GPL许可证
GPL(GNU General Public License)许可证是一个开放源码许可证,只要在软件产品中使用(“使用”指类库引用,修改后的代码或者衍生代码)GPL许可证的产品,则该软件产品也必须采用GPL许可证发布,并且不论以何种形式发布,都必须同时附上源代码。这就是所谓的“传染性”。其他细节与Apache许可证类似,如:
- 软件及衍生产品可以用于商业目的。
- 产品可以被自由地分发、修改。
- 同时提供额外的专利授权。
- 产品再发布时包含一份原始许可声明和版权声明。
- 如果修改了源代码,包含一份代码修改说明。
LGPL许可证
LGPL( GNU Lesser General Public License)许可证是一个主要为类库使用设计的开源协议。和GPL要求任何使用/修改/衍生之GPL类库的的软件必须采用GPL协议不同。LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。但是如果修改LGPL协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL协议。因此LGPL协议的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以LGPL协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。其他细节与GPL许可证类似,如:
- 同时提供额外的专利授权。
- 产品再发布时包含一份原始许可声明和版权声明。
- 如果修改了源代码,包含一份代码修改说明。
MPL许可证
MPL(Mozilla Public License)许可证是1998年初Netscape的 Mozilla小组为其开源软件项目设计的软件许可证。MPL许可证出现的最重要原因就是,Netscape公司认为GPL许可证没有很好地平衡开发者对源代码的需求和他们利用源代码获得的利益。MPL同著名的GPL许可证和BSD许可证相比。MPL在许多权利与义务的约定方面与它们相同,但是,相比而言MPL还有以下几个显著的特点:
- MPL虽然要求对于经MPL许可证发布的源代码的使用、修改也要以MPL许可证的方式再许可出来(开源),以保证其他人可以在MPL的条款下共享源代码。但是,在MPL许可证对于衍生代码没有要求,这就意味着MPL允许一个企业在自己已有的源代码库上加一个接口,除了接口程序的源代码以MPL许可证的形式对外许可外,源代码库中的源代码就可以不用MPL许可证的方式强制对外许可。这些,就为借鉴别人的源代码用做自己商业软件开发的行为留了一个豁口。
- 软件产品再发布时包含一份原始许可声明和版权声明。
- 提供快速的专利授权。
- 不得使用其原始商标。
- 如果修改了源代码,包含一份代码修改说明。
注:以上所有许可证都支持私有使用,即使用和修改软件但不对外发布。
The Unlicense
The Unlicense是一个放弃所有权利的许可证,没有任何限制,它一般用在致力于公有领域的产品。
注:开源许可证也可用于非软件产品,尤其是那些能够被当做源码编辑和管理的产品,如开源硬件设计等。
如果你的产品不是软件产品(数据、多媒体等),也有一些开源许可证可供选择。
Creative Commons许可证
Creative Commons简称CC,中国大陆正式名称为知识共享。传统的著作权通常为两种极端,一种是”保留所有权利”,另一种是“不保留任何权利”(即公有领域,public domain)。知识共享则试图在两者中间广大的灰色地带保有弹性,使创作者可以“保留部分权利”。创作者可与大众分享创作,授予其他人再散布的权利,却又能保留其他某些权利。知识共享一般用于设计,摄影,图片作品的开放式分享,并提供多种可供选择的授权形式及条款组合:
- 署名(Attribution,简写为BY):必须提到原作者。
- 非商业用途(Noncommercial,简写为NC):不得用于盈利性目的。
- 禁止演绎(No Derivative Works,简写为ND):不得修改原作品,不得再创作。
- 相同方式共享(Share Alike,简写为SA):允许修改原作品,但必须使用相同的许可证发布。
注:许可协议不能同时包含“相同方式共享”和“禁止演绎”许可要素,“相同方式共享”要素仅适用于演绎作品。
这些授权形式可以结合起来用,如CC BY,CC BY-NC-SA等。
参考: