本篇教程由作者设定使用 CC BY-NC-SA 协议。
引子
在mod开发或者百科资料编辑,我们难免会遇到各种各样的开源许可证,不禁令人头大,不去仔细阅读协议很难理解其条款。
随着百科许可协议栏位的增加,各种协议也开始进入我们的视野,而本篇教程就主要介绍常见的开源许可证。
什么是开源许可证
简单来说,开源许可证是作者在保留版权的前提下,依法授予他人使用、修改和分发软件权利并规定相应义务的法律协议。
往往我们把符合开放源代码促进会(OSI)撰写的《开源定义》(The Open Source Definition, OSD)的十项标准的许可证叫做开源许可证,当然,从更加严苛狭义的层面讲,只有被OSI认证的许可证为开源许可证为开源许可证。当然没人会限制这么死。
常见的开源许可证
宽松型许可证
宽松型许可证指不对复制、修改、再分发进行过多限制的开源许可证。
MIT License
MIT License,即MIT,几乎是开源社区最流行的许可证之一。
MIT授予了几乎无限制的权利,比如商业使用、专有化、再授权以及基础的使用、修改、复制和再分发。
而其要求的义务也极其简单,即"在软件的所有副本或重要部分中,必须包含原始的版权声明和许可声明"。
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
需要注意的是,MIT无专利授权(没有明确的专利授权条款),无商标授权(不得使用原作者的商标、商号进行宣传)也无担保(很好理解,几乎所有开源协议都有,即作者不为你负责,下文对此不会再过多赘述)
Apache License 2.0
Apache License 2.0,即Apache2.0,又臭又长的文本,著名的安卓系统就是在此之下开源的(
以法律严谨性与清晰性著称的协议,拥有明确的专利条款(专利报复条款zzz)
Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You
a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to
make, have made, use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed
by their Contribution(s) alone or by combination of their Contribution(s) with the Work to
which such Contribution(s) was submitted.
If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that
the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement,
then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
(每位贡献者自动授予用户使用相关专利的权利。若用户发起专利诉讼,则其获得的专利授权自动终止)
以及标志性的NOTICE 文件机制
(d) If the Work includes a "NOTICE" text file as part of its distribution,
then any Derivative Works that You distribute must include a readable copy of
the attribution notices contained within such NOTICE file,
excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places:
within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation,
if provided along with the Derivative Works; or within a display generated by the Derivative Works,
if and wherever such third-party notices normally appear.
The contents of the NOTICE file are for informational purposes only and do not modify the License.
You may add Your own attribution notices within Derivative Works that You distribute, alongside or
as an addendum to the NOTICE text from the Work, provided that such
additional attribution notices cannot be construed as modifying the License.
(如果原始作品包含 NOTICE 文件,分发衍生作品时必须包含其中归属声明的可读副本,且NOTICE仅为信息目的,不构成对许可证条款的修改或补充)这个文件主要是用来添加额外的归属声明(如致谢、第三方组件声明)
除此之外,协议还有修改标记义务(对原始文件的修改必须在被修改的文件中添加显著的变更声明,便于追踪代码来源),商标隔离(明确声明不授予任何商标权)。
使用义务主要就是保留上游NOTICE文件,提供许可证副本,保留版权、专利、商标和归属声明,以及标注你的更改。
BSD-3-Clause&BSD-2-Clause
两兄弟十分类似,在这里我们就放到一起讲罢(
BSD2与前文所述的MIT在使用上几乎完全等价,无论是许可还是义务,主要区别在于措辞。
BSD2的二进制分发要求做了显式区分源码/二进制两种场景,免责声明格式更加传统严谨。
当然谁用的时候会在意这些啊喂!
而BSD3相比于MIT和BSD2这两个小朋友,显得明显成熟,多了一层品牌保护(或者说'防背书条款')
3 Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
(未经事先书面许可,不得使用版权方或贡献者的名称为衍生产品进行背书或推广)
而其他的又和BSD2完全一样(划掉)
CC0 1.0 Universal
即CC0,此许可即为将作品投放到公有领域,此许可证未获OSI承认,但在全球范围具有法律有效性。
说一句题外话,CC0是CC系列唯一适用于代码的许可证,请勿使用CC-BY等进行代码分发,它们没有专门的专利条款等代码分发所需的条款,Creative Commons 官方同样不建议使用CC-BY系列分发代码。
CC0在法律措辞上相当严谨,采用权利放弃 + 兜底许可双重结构。
核心条款为声明人在法律允许的最大范围内,公开、完全、永久、不可撤销、无条件地放弃著作权财产权、著作人身权、邻接权、数据库权利、反不正当竞争权等等。
放弃范围覆盖:全球地域 + 法律规定的最长存续期间 + 任何现行或未来媒介 + 任何目的(含商业、广告、促销)。
但当然,使用者仍然不得暗示背书、第三方权利不受影响和要求作者负责。
请注意,CC0 声明仅能由作品的创作者或合法版权持有人作出,一旦作出即永久不可撤回,声明人需充分确认后再适用!
Do What The Fuck You Want To Public License
即WTFPL,目前主流版本为v2,授予了使用者全部权利。
真正意义的没有任何限制,无 Copyleft、无署名要求、无 SaaS 触发条款。
0. You just DO WHAT THE FUCK YOU WANT TO.
(唯一条款,害怕被重生打回就不翻译了OwO)
但因为言辞过于激烈以及免责声明不完善,可能在某些严谨场合不被接纳。
此许可证从未被OSI承认,但社区普遍认可其有效性,在某些不支持放弃版权的地域,其'授予全部权利'也可作为投放公有领域的替代方案。
传染性许可证
又称copyleft许可证,即要求衍生作品采取相同许可证,当然,不同许可证要求的传染强度也不一样。
吼吼吼,又到了我最喜欢的GNU环节,伟大的RMS,开源世界的自由之光!
GNU家族
即FSF(自由软件基金会,Free Software Foundation)主持的一系列开源许可证。
根据查询资料,对于 Mixin 是否可以算作"修改",个人感觉 Mixin 其实往往可以看作动态链接,因为你没有包含原有项目的代码。如果对方是GPL,建议你先咨询,因为动态链接GPL是100%要求开源,如果是LGPL,没有那么严格的限制,毕竟LGPL允许动态链接。
由于该系列各个原文极长,故不再附上原文片段,仅给出条款位置,诸君可自行前往fsf官网查看原文。
GNU General Public License
亲传弟子,大名鼎鼎的GNU/Linux就是以GPLv2开源。
此许可证以强传染性著称,目前常见的版本为GPLv2和GPLv3,具体条款在GPLv2中位于第二条,在GPLv3中位于第五条。
其核心为任何基于 GPLv3 代码的衍生作品,在分发时必须整体以 GPLv3 或兼容许可证发布,不得添加额外限制,且必须向接收者提供完整的对应源代码。
GPLv3相对于GPLv2可以说是翻新重修,添加了反Tivo化、聚合体不传染、反专利诉讼等改进。
贴一小段GPL3第五条,让大家感受一下这个许可证的复杂性。
"A compilation of a covered work with other separate and independent works,
which are not by their nature extensions of the covered work... is called an 'aggregate'
if the compilation and its resulting copyright are not used to limit the access or legal rights
of the compilation's users beyond what the individual works permit."
当然,我们不需要知道那么多,那都是商业公司的事,作为普通的modder,你只需要知道如果你的项目包含了GPL项目的代码,就必须以其许可证版本or later进行开源。
如果你是在选许可证,我更加推荐GPLv3,因为GPLv2中有不少历史遗留问题,在法律解释上存在灰色地带,如 "contains or is derived from" 在具体场景下的边界认定就存在大量判例分歧。
GNU Affero General Public License
即AGPLv3,与GPL不同的是,这一版许可证目前你可能只能见到AGPLv3,因为v2根本就没出现过,而v1不属于GNU家族,也已经过时。
其与GPLv3的区别仅为多了第十三条,主要针对GPL对于SaaS(软件即服务,可以看作现在需要联网的app或者网络服务)即如果你在网络服务上使用了AGPLv3项目,则你的项目同样必须以AGPLv3开源!
所以主要需要注意的人是服务器腐竹hhh,开服务器时记得排查一下你服务器选的插件和mod。
GNU Lesser General Public License
最常见的就当属LGPLv2.1/LGPLv3啦!这个版本2.0->2.1进行了大幅修正,所以你可以说完全无法看到2.0的存在。
同样,你可以看作这是GPL的DLC,其削减了GPL的传染性,现在动态链接下主程序可保持专有。
至于v2.1和v3.0的区别?和GPLv2<->GPLv3区别完全一样哦!
当然,其多了一个升级条款,见下文
LGPL3的第二条~
a) under this License, provided that you make a good faith effort to
ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or
b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
(也就是说,面对LGPLv3项目,你可以选择使用LGPLv3分发你的衍生项目,也可以选择升级GPL)
LGPLv2.1的第二条~
3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices.
Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy.
This option is useful when you wish to copy part of the code of the Library into a program that is not a library.
(同理,面对LGPLv2.1项目,你可以选择使用LGPLv2.1,也可以选择GPLv2 or later进行分发)
附上FSF对你的忠告:为什么你的下一个库不应该使用LGPL
Mozilla Public License
即MPL2.0,v1.0&v1.1已被Mozilla弃用,同样不被OSI认可。
文件级弱 Copyleft许可证,传染性比LGPL还弱。
合规判定完全不依赖链接方式(动态/静态),而是以文件本身为唯一边界,仅修改过的 MPL 文件必须开源。
"Modifications" means any of the following:
a. any file in Source Code Form that results from an addition to, deletion from, or modification of the contents of Covered Software; or
b. any new file in Source Code Form that contains any Covered Software.
(其针对'修改'的定义——文件本身)
Each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license under Patent Claims to make,
use, sell, offer for sale, import and otherwise transfer its Contribution or Contributor Version.
If You initiate litigation against any entity by asserting a patent infringement claim...
then any patent licenses granted to You under this License shall terminate as of the date such litigation is filed.
(专利授权&专利诉讼终止,如果你对贡献者发起专利侵权诉讼,你获得的所有专利授权自动失效,和APH2.0的专利报复很像)
"Larger Work" means a work that combines Covered Software with other material, in a separate file or files,
that is not Covered Software.
('较大'的作品,允许将受 MPL 约束的文件与其他非 MPL 材料(包括闭源商业代码)组合分发,前提是 MPL 文件本身保持开源)
注:GPL无Large Work这个概念,只有'聚合体不传染',指的是多个项目合并的项目包可以豁免,与MPL的Large Work有本质区别。
此外,还有几点需要注意,MPL不授予使用者商标使用权(你不能使用 Mozilla 或贡献者的商标来推广你的衍生作品,很像BSD3对不对?),以及如果你分发的项目是二进制分发(可执行文件),你无需提供整个项目的源码,仅需告知接收者如何获取受 MPL 覆盖部分的源代码(见MPL2.0 Section2.1&2.2,规定了源代码分发限制&二进制分发限制)。
许可证兼容性
那么就会有小朋友问了。
那我的项目如果用了MIT许可证分发的代码,但我想用GPL整体发布怎么办啊?
这个时候我们就要引入一个概念,许可证之间的兼容性。
比如,GPLv3就是对MIT兼容的,即你的GPL会直接传染整个项目,包括MIT部分也要以GPL分发。
但由于MIT要求保留署名,所以这种情况代码开头写SPDX版权声明和根目录NOTICE就更加稳妥。
再举个例子,如果你不是原作者,你不能把别人的代码并进来然后CC0分发
不同版本的不同许可证的兼容列表是不一样的,在你有混用的情况时请务必确认兼容性(除非你用的公有领域资料),你可以在各个许可证官网查看其对其余许可证的兼容性。
一些小问题
Q: 把源码放到 Github 是不是就代表开源,我可以随便用了?
A: 并非,需要看许可证,如果是ARR协议或者未明确许可证,即为保留所有权利,禁止复制、修改、再次分发、衍生作品或者反编译。
Q: 我想限制商业使用,或者竞争性使用,有什么许可证吗?
A: 并没有开源许可证可以做到,因为这违反了开源定则。但PolyForm的源码可用系列许可证值得一试。
Q: 把代码喂给AI,然后产出的代码我以违背许可证的方式使用,合规吗?
A: 往往是不合规的,因为假设源码是ARR或者禁止演绎类的,喂给AI属于再分发,AI产出属于修改/复制,各个地区法律情况不同,但大体可以看作这样。如果产出内容有大段相似,那就实锤侵犯版权了。
Q: 源码可见(注意,不是开源,指的是源码可见)项目是否可以随便反编译?
A: 明显不是,可用和反编译是两种行为,我的协议可以不限制你的复制、修改,但可以禁止反编译。
Q: 在什么情况下反编译是合法的?
A: 为了互操作性或学习,比如你试图和某个mod联动,但对方是闭源,你就可以反编译获取接口。但你的产出代码最多只能加载类/反射,不可以包含原mod任何一部分。
结语
最后补充一点,如果你在源代码发布页没看到许可证文件,请勿贸然使用!
因为法律上讲,无许可证默认保留所有权利,请先与版权持有人进行沟通!
以上就是我们详细介绍的许可证了,以后也会不定期补充,有不懂的地方欢迎提出~
刚才说到ARR,突然想到一个冷笑话,各位自己get吧(
Copyleft: All Right Reversed.


