前言
💡 根据阮一峰老师的教程学习开源协议🌹
同时结合知乎专栏的文章进行一些补充;
文章标题:技术分享 | 如何为你的代码选择一个合适的开源协议?
作者:卢文双 资深数据库内核研发 🌹
如果你足够细心,很容易注意到即使是一小段代码,优秀的作者都在文件开头附上一段关于版权的声明,比如 Licensed under the MIT license
。同时,一些博客也会标明”此文章采用 CC BY 4.0 CN
协议“。
如果我们拷贝了别人的代码或文章却没注意版权问题,在国外法律意识特别强的环境下(国内版权意识也在逐步加强),那么我们的作品会因触犯别人的权益而违法。即使是最开放的开源协议,最低要求也是保留原作者对代码的声明,所以开源不等于免费,也不等于没有约束
。
何为 LICENCE?
LICENCE 是软件的授权许可,详细说明了获得代码后拥有的权利,哪些操作是允许的,哪些操作是禁止的。软件的版权许可证可有很多方式,本文仅限于讨论开源软件协议 Open Source License。
对于大多数人来说,没必要花大把时间去写许可协议,选择一种比较流行的开源协议就足够了,省时省力,更便于自己作品的传播,于人于己都有利。
说句题外话,很多国外开发者在尊重他人劳动成果方面做得很好,如果 A 的作品是因为 B 的作品的启发而来,A 甚至都没有使用 B 任何一句代码,但 A 会在他的作品里面指明是受到了 B 的启发:
```text
Inspired by XXX link: http://www.xxxx.com
```
正文
作为一个开发者,如果你打算开源自己的代码,千万不要忘记,选择一种开源许可证(license)。 许多开发者对开源许可证了解很少,不清楚有哪些许可证,应该怎么选择。本文介绍开源许可证的基本知识,主要参考了 OpenSource.com
一、什么是开源许可证
开源许可证是一种法律许可。通过它,版权拥有人明确允许,用户可以免费地使用、修改、共享版权软件。
版权法默认禁止共享,也就是说,没有许可证的软件,就等同于保留版权,虽然开源了,用户只能看看源码,不能用,一用就会侵犯版权。所以软件开源的话,必须明确地授予用户开源许可证。
二、开源许可证的种类
目前,国际公认的开源许可证共有80 多种。它们的共同特征是,都允许用户免费地使用、修改、共享源码,但是都有各自的使用条件。
如果一种开源许可证没有任何使用条件,连保留作者信息都不需要,那么就等同于放弃版权了。这时,软件可以直接声明进入"公共领域"(public domain)。
根据使用条件的不同,开源许可证分成两大类。
宽松式(permissive)许可证 Copyleft 许可证
三、宽松式许可证
3.1 特点
宽松式许可证(permissive license)是最基本的类型,对用户几乎没有限制。用户可以修改代码后闭源。
它有三个基本特点。
(1)没有使用限制
用户可以使用代码,做任何想做的事情。
(2)没有担保
不保证代码质量,用户自担风险。
(3)披露要求(notice requirement)
用户必须披露原始作者。
3.2 常见许可证
常见的宽松式许可证有四种。它们都允许用户任意使用代码,区别在于要求用户遵守的条件不同。
(1)BSD(二条款版)
分发软件时,必须保留原始的许可证声明。
(2) BSD(三条款版)
分发软件时,必须保留原始的许可证声明。不得使用原始作者的名字为软件促销。
BSD 可证
BSD可证也来源于大学,与MIT差不多,也非常简单、慷慨。
BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用、修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。前提是当你发布使用了BSD协议的代码,或者以BSD协议代码为基础开发自己的产品时,需要满足三个条件:
1. 如果再发布的产品中包含源代码,则在源代码中必须带有原代码中的BSD协议。
2. 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。
3. 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。
BSD 开源协议鼓励代码共享,但需要尊重代码作者的著作权。BSD 开源协议允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布、销售,是对商业集成很友好的协议。因此,很多公司在选用开源产品的时候都首选BSD协议。
(3)MIT
分发软件时,必须保留原始的许可证声明,与 BSD(二条款版)基本一致。
MIT 开源协议是史上最为简洁、慷慨的开源协议之一。作者只想保留版权,而无任何其他了限制。也就是说,你必须在你的发行版里包含原许可协议的声明,无论你是以二进制发布的还是以源代码发布的。
特点:
- 用户可以拿你的代码做任何想做的事情。
- 用户在项目副本中要包含版权声明和许可声明。
- 你无需承担任何责任。
(4)Apache 2
分发软件时,必须保留原始的许可证声明。凡是修改过的文件,必须向用户说明该文件修改过;没有修改过的文件,必须保持许可证不变。
Apache Licence 是著名的非盈利开源组织 Apache 采用的协议。该协议和 BSD 类似,同样鼓励代码共享和尊重原作者的著作权,同样允许修改代码、再发布(作为开源或商业软件)。需要满足的条件也和 BSD 类似:
- 需要为使用代码的用户提供一份 Apache Licence 。
- 如果你修改了代码,需要在被修改的文件中说明。
- 在延伸的代码中(修改和由源代码衍生的代码中)需要带有原来代码中的协议、商标、专利声明和其他原作者规定需要包含的说明。
- 如果再发布的产品中包含一个
Notice
文件,则在 Notice 文件中需要带有 Apache Licence 。你可以在Notice
中增加自己的许可,但不可对 Apache Licence 构成更改。
Apache Licence 也是对商业应用友好的许可,使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。
四、Copyleft 许可证
4.1 Copyleft 的含义
Copyleft 是理查德·斯托曼发明的一个词,作为 Copyright (版权)的反义词。
Copyright 直译是"复制权",这是版权制度的核心,意为不经许可,用户无权复制。作为反义词,Copyleft 的含义是不经许可,用户可以随意复制。
但是,它带有前提条件,比宽松式许可证的限制要多。
如果分发二进制格式,必须提供源码修改后的源码,必须与修改前保持许可证一致不得在原始许可证以外,附加其他限制
上面三个条件的核心就是:修改后的 Copyleft 代码不得闭源。
4.2 常见许可证
常见的 Copyleft 许可证也有四种(对用户的限制从最强到最弱排序)。
(1)Affero GPL (AGPL)
如果云服务(即 SAAS)用到的代码是该许可证,那么云服务的代码也必须开源。
(2)GPL
如果项目包含了 GPL 许可证的代码,那么整个项目都必须使用 GPL 许可证。
GPL(GNU GENERAL PUBLIC LICENSE)来源于自由软件联盟 GNU,GPL/LGPL 侧重于代码及衍生代码的开源与免费使用。
GPL 协议的主要内容是只要在一个软件中使用(”使用”指类库引用,修改后的代码或者衍生代码)GPL 协议的产品,则该软件产品必须也采用 GPL 协议,既必须也是开源和免费。这就是所谓的”传染性”。
由于 GPL 严格要求使用了 GPL 类库的软件产品必须使用 GPL 协议,对于使用 GPL 协议的开源代码,商业软件或者对代码有保密要求的部门就不适合集成/采用作为类库和二次开发的基础。
我们很熟悉的 Linux 就是采用了 GPL。GPL 协议和 BSD, Apache Licence 等鼓励代码重用的许可很不一样。GPL 的出发点是代码的开源/免费使用/引用/修改
和衍生代码的开源/免费使用
,但不允许
修改后和衍生的代码做为闭源
的商业软件发布和销售。
其它细节和 BSD/Apache 等协议类似。
(3)LGPL
如果项目采用动态链接调用该许可证的库,项目可以不用开源。
LGPL(GNU LESSER GENERAL PUBLIC LICENSE)来自于自由软件联盟 GNU,可以翻译为更宽松的 GPL 协议,也属于传染性开源协议。
LGPL 是 GPL 的一个主要为类库使用设计的开源协议。和GPL要求任何使用/修改/衍生之GPL类库的的软件必须采用GPL协议
不同,LGPL 允许商业软件通过类库引用(link)方式使用 LGPL 类库而不需要开源商业软件的代码。这使得采用 LGPL 协议的开源代码可以被商业软件作为类库引用并发布和销售。
但是如果修改 LGPL 协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用 LGPL 协议,因此,LGPL 协议的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以 LGPL 协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。
GPL/LGPL 都保障原作者的知识产权,避免有人利用开源代码复制并开发类似的产品。
(4)Mozilla(MPL)
只要该许可证的代码在单独的文件中,新增的其他文件可以不用开源。
五、常见问题
本节回答一些开源许可证的常见问题。
5.1 什么叫分发(distribution)?
除了 Affero GPL (AGPL) ,其他许可证都规定只有在"分发"时,才需要遵守许可证。换言之,如果不"分发",就不需要遵守。
简单说,分发就是指将版权作品从一个人转移到另一个人。这意味着,如果你是自己使用,不提供给他人,就没有分发。另外,这里的"人"也指"法人",因此如果使用方是公司,且只在公司内部使用,也不需要遵守许可证。
云服务(SaaS)是否构成"分发"呢?答案是不构成。所以你使用开源软件提供云服务,不必提供源码。但是,Affero GPL (AGPL) 许可证除外,它规定云服务也必须提供源码。
5.2 开源软件的专利如何处理?
某些许可证(Apache 2 和 GPL v3)包含明确的条款,授予用户许可,使用软件所包含的所有专利。
另一些许可证(BSD、MIT 和 GPL v2)根本没提到专利。但是一般认为,它们默认给予用户专利许可,不构成侵犯专利。
总得来说,除非有明确的"保留专利"的条款,使用开源软件都不会构成侵犯专利。
5.3 什么是披露要求?
所有的开源许可证都带有"披露要求"(notice requirement),即要求软件的分发者必须向用户披露,软件里面有开源代码。
一般来说,你只要在软件里面提供完整的原始许可证文本,并且披露原始作者,就满足了"披露要求"。
5.4 GPL 病毒是真的吗?
GPL 许可证规定,只要你的项目包含了 GPL 代码,整个项目就都变成了 GPL。有人把这种传染性比喻成"GPL 病毒"。
很多公司希望避开这个条款,既使用 GPL 软件,又不把自己的专有代码开源。理论上,这是做不到的。因为 GPL 的设计目的,就是为了防止出现这种情况。
但是实际上,不遵守 GPL,最坏情况就是被起诉。如果你向法院表示无法履行 GPL 的条件,法官只会判决你停止使用 GPL 代码(法律上叫做"停止侵害"),而不会强制要求你将源码开源,因为《版权法》里面的"违约救济"没有提到违约者必须开源,只提到可以停止侵害和赔偿损失。
总结和致谢
下方表格中出现的用词的解释:
-
协议和版权信息(License and copyright notice):在代码中保留作者提供的协议和版权信息。
-
声明变更(State Changes):在代码中声明对原来代码的重大修改及变更。
-
公开源码(Disclose Source):代码必需公开。
-
库引用(Library usage):该库可以用于商业软件中。
-
责任承担(Hold Liable):代码的作者承担代码使用后的风险及产生的后果。如果禁止,那么作者将不会承担责任,可以理解为免责条款。
-
商标使用(Use Trademark):可以使用作者的姓名,作品的 Logo,或商标。
-
附加协议(Sublicensing):允许在软件分发传播过程中附加上原来没有的协议条款等。
参考链接
- https://github.com/github/choosealicense.com
- https://opensource.org/licenses
- https://www.cnblogs.com/Wayou/p/how_to_choose_a_license.html
- https://zhuanlan.zhihu.com/p/87
💡 写在最后:开源能够非常便利地促进知识共享和数据优化,但是开源并不等于劳动成果不需要被尊重。我们在拥抱知识的时候,也需要给传授我们知识的前辈致以崇高的敬意。
感谢您能看到最后,这是送给您的小彩蛋
最后我还想介绍一下 CC BY 4.0 CN 协议 文章参考哔哩哔哩专栏,作者:靈雲 Reign🌺🌺🌺
CC 协议(A Creative Commons License)的中文叫做知识共享许可协议,是允许他人分发作品的公共版权许可之一。2002 年 12 月 16 日,美国非盈利性组织 Creative Commons 首次发布了 CC 协议。4.0 版本发布于 2013 年 11 月 25 日。
署名(英语:Attribution,by)您(用户)可以复制、发行、展览、表演、放映、广播或通过信息网络传播本作品。您必须按照作者或者许可人指定的方式对作品进行署名。
您(用户)必须给出适当的署名,并提供指向本许可协议(指你使用的 CC 协议)的链接,同时标明是否(对原始作品)作了修改。您可以用任何合理的方式来署名,但是不得以任何方式暗示许可人为您或您的使用背书。
通常情况下的 CC 协议必有这条,所以也就是必须进行署名,尊重原作者劳动成果。并且还要提供 CC 协议的链接,注明是否有所修改。其中最奇怪的一点在于“不得以任何方式暗示许可人为您或您的使用背书”,这里的“背书”来源于银行的票据业务,是指使用人不能明示或暗示观众:“我使用了许可人的作品,许可人支持我的创作,并且可以用许可人的声誉确保我的使用行为可信可靠”。
具体可以查看知乎上王若枫的解释,原网址 https://www.zhihu.com/question/20930001/answer/133964332
背书是指票据转让时原持有人在票据背面加盖自己的印鉴证明该票据真实有效、如果有问题就找我。它不是担保(票据就是他的,他不能为自己担保),而是证明或声明的意思。
背书用于社会事务,一般是指【声明支持某人或某事、为某人或某事发声】,一个单位或个人对另一个单位或个人的行为表示支持,以自身的信誉度来证明另一个单位或个人也同样可信可靠。而不是为另一单位或个人的行为进行担保的意思。万一那个人的行为真的出了问题,你不能从经济或法律上追究这个人的责任。这是跟银行业务有所区别的地方。
具体的,署名需要包括以下内容:
包含任何版权声明(如适用)。如果作品自身带有作者的版权声明,版权声明必须保持不变,或在一种合理的方式下重新分发给媒介。
引用作者的名字,网名或用户 ID 等。如果作品发布在互联网上,如果存在作者的个人档案页面,应附上页面的链接。
引用作品的标题或名称(如适用),前提是存在标题或名称。如果作品发布在互联网上,应在重新分发时应附上原作品的标题或者名称。
引用作品的 CC 许可协议。如果作品发布在互联网上,应引用作者的 CC 许可协议,且应附有到 CC 网站的链接。(网址和跳转链接均可)
如果作品是一个派生作品或改编作品,除了以上几点外,还应该说明这是一个派生作品,如“这是[作者]的[作品]的芬兰语翻译版本”或“剧本在[作者]的[原作品]基础上改编”。
相同方式共享(英语:ShareAlike,sa)您可以自由复制、散布、展示及演出本作品;若您改变、转变或更改本作品,仅在遵守与本作品相同的许可条款下,您才能散布由本作品产生的派生作品。
带有 SA 的协议要求传播时也要遵循同样的 CC 协议进行,比如原作者注明了 NC 非商业性,则你在使用其作品进行内容创作时也当注明请其他人遵循 CC 协议中的 NC 规定,并且要带有 SA 标记以告诉其他人也应当遵循此 CC 协议。
非商业性使用(英语:Noncommercial,nc)您可以自由复制、散布、展示及演出本作品;您不得为商业目的而使用本作品。
这个很好理解,带有 NC 的均不能用于商业目的。但在原创者允许的情况下,仍然可以用于商业目的。例如:小明在他的网站上以包括“非商业性运用”要素的答应协议发布了他的拍摄著作。在这种情况下,小红能够打印格斯的这幅相片欣赏。但是,如果没有小明的答应,小红不得贩卖这张打印的相片。
禁止演绎(英语:No Derivative Works,nd)您可以自由复制、散布、展示及演出本作品;您不得改变、转变或更改本作品。
也就是只能原原本本地传播本作品,不得对其内容进行任何修改。例如:小明在自己的一首歌曲上使用包括“制止演绎”要素的答应协议。小刚想要截取小明的歌曲片段,混合在他的著作中而产生出全新的歌曲。在这种情况下,没有小明的答应,小刚就不能这么做(除非他的歌曲构成合理运用)。
混合搭配这些条例可产生 11 种有效组合(ND 和 SA 互斥,还有 1 种没有包括任何条款),因为 98%的使用情况均要求署名,其中的 5 种缺乏 BY 的条款不再使用。
💡 故一共有 6 种常用的版权规定组合
CC BY:署名标示(BY)CC BY-SA:署名标示(BY)- 相同方式共享(SA)
CC BY-NC:署名标示(BY)- 非商业性使用(NC)
CC BY-NC-SA:署名标示(BY)- 非商业性使用(NC)- 相同方式共享(SA)
CC BY-ND:署名标示(BY)- 禁止演绎(ND)
CC BY-NC-ND:署名标示(BY)- 非商业性使用(NC)- 禁止演绎(ND)
这些组合的权利与要求都写在上面的具体组成条例之中,将不同条例的权利与要求组合起来即为对应的协议权利与要求。如果组合中没有该条例,则表明组合的权利与要求内容与该条例相反。例如没有表明 NC 即为可商用,没有表明 ND 即为可二次创作。
对于之前提到的没有包括任何条款的组合,称为不受限制地在全球范围内发布内容,即 CC0。CC0 相当于是放弃以上四种条例的 CC 授权,成为 Public Domain(公有领域)的素材。
适用范围 在创作共享许可下的作品在著作权法中生效。包括:书籍,戏剧,电影,音乐,文章,图片,博客和网站。不建议软件在 CC 许可下发布。
该协议不光规定了使用者的义务,也同样赋予了使用者应有的权利。如:在创作共享许可下应用的作品不得修改所允许的合理使用或公平交易的权利或施加限制(因为其违反著作权例外)。此外,创作共享许可非独占及不可撤销。任何作品或在创作共享许可下获得的作品副本可根据该许可继续使用。
也就是说创作者一旦根据此协议发布作品,就应当遵循此协议一视同仁的条款,不能增设任何法律限制或是技术限制,来限制他人进行本许可证已经允许的行为。
由多种创作共享许可保护的作品,用户可以自行选择一种许可。
采用 CC 协议的意义或效果? 对于网络创作者而言,采用 CC 协议可以进行主动声明以应对未来创作公开到网络上后可能产生的转载问题。主动提供授权协议,有利于提醒转载者应按照相关协议进行,尽管目前咱们这的版权领域的现象一直都不让人称道,但是随着人们的相关意识的不断增强,也越来越自发地尊重创作者的版权,CC 协议的作用也越来越明显。在发生协议以外的转载行为时,于法于理上也有依据。目前在中国大陆内似乎还未有基于 CC 协议的诉讼。
难以否认的是,使用范例里小明的主动约定和小红的守约是一个非常理想化的状况。在实际运用中,可能更多的人会直接使用创作者公开的素材而不去管所谓的授权或者协议。而 CC 协议在当下的网络环境中也近乎一种自律型的规约。但是,当使用、提及的次数多了,相比也能够提高更多人在这方面的意识。尽管前进步伐还很缓慢,但一步步一步步向前,总能改变。