开源协议
开源背景
开源OpenSource,目的是为了促进知识和技术的共享/创新。开源协议也叫开源许可。开源软件是一种技术和立场中立的使用许可证约束的开放源代码的软件,以开放协作方式进行开发,其源代码允许任何人使用、拷贝、修改以及重新发布。[1]
知识产权
著作权 | 著左权 | 公共领域 |
---|---|---|
Copyright | Copyleft | Public Domain |
All Rights Reserved | Mandatory Open Source | No Rights Reserved |
著作权
著作权Copyright指作者对其创作作品享有的独占权利,保留所有权利,即All Rights Reserved。虽然保护了作者的权利但是并不利于知识的共享。
著左权
著左权Copyleft,主张通过许可证开放作品的使用和传播,要求保持作品的开放性,禁止闭源。
公共领域
公共领域Public Domain的概念完全与著作权相反,不保留任何权利,即No Rights Reserved。任何进入了公共领域的作品不再有任何的限制,完全自由。如果作品遵守了CC0
协议或Unlicense
协议,则该作品进入了公共领域。
Create Commons
知识共享许可协议Create Commons是一种公共著作权许可协议(简称CC协议),其允许按照多种需求分发受著作权保护的作品[2]。目前主流的CC协议是CC 4.0,包含了四项基本权利:
基本权利 | 意义 |
---|---|
BY Attribution |
署名 |
SA ShareAlike |
以相同方式共享 |
NC Non-Commercial |
非商业性使用 |
ND No Derivative |
禁止演绎 |
CC协议的作用范围比开源协议更广(开源主要适用于软件和代码),可以用于各种创作作品,比如适用于文章博客,硬件电路,3D结构设计等,比如本篇文章使用的就是CC BY-NC 4.0 协议,可以单击定位到文章底部查看。
CC协议中最基础的要求是署名,如果作品的作者放弃署名,则该作品使用的是CC0 1.0协议[3],作品默认进入公共领域。
开源≠免费
其实就是开源软件和免费软件的概念。混淆的原因是用户在下载使用开源软件以及免费软件的过程中均没有付费的行为。仅从用户使用角度来看,确实没什么区别,好用就行。
对于开源软件而言,用户在遵守了对应的开源协议后,可以进行二次修改并分发。而免费软件只是一种商业的行为/策略,一般不会允许用户进行修改并分发。
如果是个人学习或使用,不管是下载还是二次开发,只要不涉及分发或商业行为的话,基本所有声明了CC协议或开源协议都是允许的,无需关注具体的协议条款。
主流的开源协议
分为两大类:宽松协议(Permissive)和严格协议(Copyleft)。
宽松协议 | 严格协议 |
---|---|
Permissive | Copyleft |
MIT , BSD , Apache |
AGPL , GPL , LGPL , MPL , EPL , CDDL |
允许闭源/商用 | 不允许闭源,适当允许商用 |
MIT协议
MIT协议是主流的协议中最宽松的协议,分发时只要求署名作者,当然也不承担代码使用的风险。
BSD协议
一般BSD协议指的是BSD 3-Clause协议,其典型的要求是:不允许使用源项目进行推广/宣传。
Apache协议
一般Apache协议指的是Apache 2.0协议。其典型要求是:需要对修改的代码进行说明,且附带原来代码的协议。
GNU GPL系列协议
GPL协议
一般GPL协议指的是GPL 3.0
协议,不过GPL 2.0
协议是最广泛的的GPL版本。比如Linux
和git
遵守的就是GPL 2.0
协议。
GPL协议允许用户自由复制,修改,发布。商业软件不允许使用GPL协议的代码。GPL协议是允许用户收费的,只是用户需要在收费的时候说明收费原因以及分发GPL的副本给客户,明确告知客户可以免费获取该开源软件。如果项目中使用了关于GPL的代码,那么该项目也必须按照GPL协议进行发布,也就是GPL感染,目的是为了强力促进开源共享。
LGPL协议
一般LGPL协议指的是LGPL 3.0
协议(旧版本是LGPL 2.1
协议)。商业软件可以使用LGPL的代码,但是不能修改源代码。如果项目通过动态链接的方式调用LGPL协议的项目,则该项目调用接口的部分必须开源,其他部分允许闭源。
一个项目中可能包含多个开源协议,比如FFmpeg 基本包含了GPL系列全家桶。
但是不同协议不一定能兼容,比如项目中同时包含了Apache-2.0以及GPL-2.0协议,则该项目的开源协议声明是无效的。
如何使用开源协议
以github工程为例,在项目的根目录中创建LICENSE
文件,并写入对应的开源协议。如果该文件包含的标准的主流协议,则github会自动识别协议。
具体的开源协议内容推荐以下两种获取方式,以MIT
协议作为例子
OSI官网复制
查找协议
打开OpenSource Initiative,在Search License
处输入MIT
,搜索后点击The MIT License
复制修改
复制整个协议,粘贴至LICENSE
文件中,并修改<Year>
和<COPYRIGHT HOLDER>
假设年份是2023
年,作者是Orionxer
,则MIT协议如下
1 |
|
Choose a License插件
⭐推荐使用VSCode的Choose a License插件自动为项目生成开源协议,非常优雅。
1.安装插件
2.设置年份和作者
Ctrl + Shift + P
调出VSCode控制台,输入License: set
,根据提示选择设置年份以及作者。该设置是一次性的,后续生成任意的协议会根据预设好的年份以及作者自动替换。
3.生成协议
Ctrl + Shift + P
调出VSCode控制台,输入License:
,选择License: Choose license
。输入mit
,点击MIT License
就能生成协议(如果项目中已经存在了协议,则该插件会询问是否替换协议),点击LICENSE
文件查看协议是否正常生成。
点击生成协议前需要确保VSCode的工作区已经处于项目的根目录,否则该插件会在错误的位置生成协议。