开源协议

开源背景

开源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
允许闭源/商用 不允许闭源,适当允许商用

主流开源许可证对比<sup id="fnref:4" class="footnote-ref"><a href="#fn:4" rel="footnote"><span class="hint--top hint--rounded" aria-label="[如何选择开源许可证-阮一峰](https://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html)">[4]</span></a></sup>

MIT协议

MIT协议是主流的协议中最宽松的协议,分发时只要求署名作者,当然也不承担代码使用的风险。
MIT License

BSD协议

一般BSD协议指的是BSD 3-Clause协议,其典型的要求是:不允许使用源项目进行推广/宣传
BSD License

Apache协议

一般Apache协议指的是Apache 2.0协议。其典型要求是:需要对修改的代码进行说明,且附带原来代码的协议。
Apache License

GNU GPL系列协议

GPL协议

一般GPL协议指的是GPL 3.0协议,不过GPL 2.0协议是最广泛的的GPL版本。比如Linuxgit遵守的就是GPL 2.0协议。
GPL协议允许用户自由复制,修改,发布。商业软件不允许使用GPL协议的代码。GPL协议是允许用户收费的,只是用户需要在收费的时候说明收费原因以及分发GPL的副本给客户,明确告知客户可以免费获取该开源软件。如果项目中使用了关于GPL的代码,那么该项目也必须按照GPL协议进行发布,也就是GPL感染,目的是为了强力促进开源共享。
GPL License

LGPL协议

一般LGPL协议指的是LGPL 3.0协议(旧版本是LGPL 2.1协议)。商业软件可以使用LGPL的代码,但是不能修改源代码。如果项目通过动态链接的方式调用LGPL协议的项目,则该项目调用接口的部分必须开源,其他部分允许闭源。
LGPL License

一个项目中可能包含多个开源协议,比如FFmpeg 基本包含了GPL系列全家桶。
但是不同协议不一定能兼容,比如项目中同时包含了Apache-2.0以及GPL-2.0协议,则该项目的开源协议声明是无效的。

如何使用开源协议

以github工程为例,在项目的根目录中创建LICENSE文件,并写入对应的开源协议。如果该文件包含的标准的主流协议,则github会自动识别协议。
github自动识别项目协议

具体的开源协议内容推荐以下两种获取方式,以MIT协议作为例子

OSI官网复制

查找协议

打开OpenSource Initiative,在Search License处输入MIT,搜索后点击The MIT License
搜索协议

复制修改

复制整个协议,粘贴至LICENSE文件中,并修改<Year><COPYRIGHT HOLDER>
复制协议
假设年份是2023年,作者是Orionxer,则MIT协议如下

1
2
3
4
5
6
7
Copyright <2023> <Orionxer>

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Choose a License插件

⭐推荐使用VSCode的Choose a License插件自动为项目生成开源协议,非常优雅。

1.安装插件

安装Choose a License插件

2.设置年份和作者

Ctrl + Shift + P调出VSCode控制台,输入License: set,根据提示选择设置年份以及作者。该设置是一次性的,后续生成任意的协议会根据预设好的年份以及作者自动替换。
设置年份和作者

3.生成协议

Ctrl + Shift + P调出VSCode控制台,输入License:,选择License: Choose license。输入mit,点击MIT License就能生成协议(如果项目中已经存在了协议,则该插件会询问是否替换协议),点击LICENSE文件查看协议是否正常生成。
MIT协议生成成功

点击生成协议前需要确保VSCode的工作区已经处于项目的根目录,否则该插件会在错误的位置生成协议。

参考链接


开源协议
https://blog.gogo.uno/2023/12/12/open_source/
作者
Orionxer
发布于
2023年12月13日
更新于
2024年8月3日
许可协议