软件是一种著作,天然是拥有版权的。很多人会认为放在 Github
上的就是开源软件,既然放了源代码,我就可以随便使用了。其实版权法规定著作是禁止共享的,也就是说没有许可证的软件等于保留版权。虽然源代码公开了,但并不表明你可以随便使用,一用就会侵犯版权。如果软件侵犯版权,必须明确授予用户开源许可证。
另外,有一些没有道德的公司会大量使用开源的产品,进行组合封装修改后当做自己的劳动创造。这些拿来党属于破坏游戏规则的一群人,这些人也应该让他们受到应有的惩罚,例如:GPL
协议就是防止这种情况发生的。
-
软件著作权的明确,作者(版权方)的权益明确,保护知识成果
-
方便用户使用,用户获得明确的授权(是否可以进行使用、拷贝、修改和再发布)
-
开源≠免费,免费≠免责, no license≠授权,授权≠收费
版权是知识产权的一种,和著作权是同一个概念,可以自动取得,也可以登记取得,是作者对自己的著作享有的法定权利。著作权是公民、法人依法享有的一种民事权利,属于无形财产权。享有著作权的作者可以决定是否对他的作品进行著作权意义上的使用和处理,在我国,只要发表就会受到保护。
开源许可证的种类
我们可以把版权分为四大种。
Copyright
- 受版权保护的;未经准许不得复制的。Copyleft
- 有限空间内的自由使用,不得用于商业目的,且不得闭源,衍生品仍需开源。Permissive
- 宽松自由软件许可协议,对软件的使用、修改、传播等方式采用最低限制的自由软件许可协议条款类型。Create Commons
- 大多是被用于设计类的工程上,署名权,非商业用途,禁止衍生。
实际上,一般只会把 Copyleft
和 Permissive
叫做开源,其中 Permissive
限制比较宽松。而 Copyleft
要求不得用于商业目的且不得闭源,并且后续衍生子软件必须遵守条款。其实这种协议就是为了弘扬开源精神,不希望某些公司垄断和强占开发成果。
copyright就是俗称的版权,也叫著作权。
版权又称著作权,用来表述创作者因其文学和艺术作品而享有的权利。版权的取得有两种方式:自动取得和登记取得。在中国,按照著作权法规定,作品完成就自动有版权(百度百科)
在版权的基础上,作者还可以制定授权协议(license),按照自己的心意进一步界定使用者的权利。
也就是说,作者的具体权利 = 当地法律规定的版权(copyright) + 自己在作品中添加的授权协议(license)。
权利 = 版权(copyright) + 授权协议(license)
比如,商业化的授权协议(license)可能会倾向于强调,使用者的哪些行为是侵权行为,从而保护自己的商业利益。而基于开源思想的授权协议则会强调使用者的权力。
Permissive
宽松自由许可
BSD
(二条版)、BSD
(三条版)、MIT
、Apache2
BSD (二条版) | BSD (三条版) | MIT | Apache2 | |
---|---|---|---|---|
允许修改后闭源 | ✅ | ✅ | ✅ | ✅ |
不保证代码质量 | ✅ | ✅ | ✅ | ✅ |
必须披露原始作者 | ✅ | ✅ | ✅ | ✅ |
不得使用原始作者名字为软件推广 | ✅ | |||
分发时必须保留原始许可声明 | ✅ | |||
修改过必须向用户声明修改 | ✅ | |||
未修改必须保持许可证不变 | ✅ |
Copyleft
有限空间内的自由
GPL
、Affero GPL (AGPL)
、LGPL
、Mozilla(MPL)
GPL | Affero GPL (AGPL) | LGPL | Mozilla(MPL) | |
---|---|---|---|---|
分发二进制格式,必须提供源码 | ✅ | ✅ | ✅ | ✅ |
修改后,必须与修改前保持许可一致 | ✅ | ✅ | ✅ | ✅ |
不得在原始许可以外附加限制 | ✅ | ✅ | ✅ | ✅ |
如果项目包含GPL许可代码, 整个项目必须开源 | ✅ | |||
云服务用到的代码, 云服务代码必须开源 | ✅ | |||
如果项目属于动态链接库使用许可证库 项目不用开源 | ✅ | |||
许可证代码在单独文件中 新增其他文件可以不开源 | ✅ |
前端项目的开源协议
目前前端项目普遍会选择 MIT
协议。
Vue
: MIT https://github.com/vuejs/vue/blob/dev/LICENSEReact
:MIT https://github.com/facebook/react/blob/main/LICENSEElement
: MIT https://github.com/ElemeFE/element/blob/master/LICENSEAnt Design
:MIT https://github.com/ant-design/ant-design/blob/master/LICENSE
MIT 协议是一种最简单的开源协议,只需要保留最基本的版权许可。这个时候就会有人问,为什么React
同样是MIT协议,但是听说百度要求内部全面停止使用 React
呢?这是因为 React
曾经在开源协议外还增加了附加的条款。
大概意思就是,当发生下列情况时,Facebook
有权益吊销你的 React
使用权:
- 与
Facebook
及其附属机构发生利益冲突; - 同任何一个和
Facebook
有关的组织发生了法律纠纷; - 同任何与 React 有关的组织发生利益冲突。
也就是说,使用 React 的项目,如果和 Facebook
有利益冲突都可能被吊销React的使用权。这个对于大厂来讲肯定不太行,后来这件事不断发酵,开源社区在更多的 Facebook
开源项目中发现了类似的规定,开发者普遍认为这种许可证模式正在毒害社区。 不过 Facebook
最后还是意识到了这个问题,修改了开源协议。
开源许可证的权力术语
不同的“开源许可证”有不同的授权维度,或者加以限制,又或者要求有条件的使用。
名称 | 中文 | 备注 |
---|---|---|
Commercial use | 商业应用 | 指是否可将开源用于商业目的 |
Distribution | 发布发行 | 指是否允许发布发行依赖于此开源的项目 |
Modification | 修改 | 指是否允许在开源项目上做修改 |
Patent use | 申请专利 | 指是否允许用于专利申请 |
Private use | 个人使用 | 指是否允许个人学习,修改和使用 |
License and copyright notice | 注明协议和版权 | 指是否要求注明协议以及版权说明 |
State changes | 注明变更 | 指对于开源代码的修改是否要明确说明 |
Liability | 义务 | 指开源软件是否承担使用其后带来的义务 |
Trademark use | 商标使用 | 指开源软件是否可用在商标或在商标中暗示使用 |
Warranty | 报修维护 | 指开源软件是否提供后期维护 |
Same License | 同协议下 | 指基于开源二次开发的产品若发布,是否要基于相同或相近的协议之下 |
Disclose source | 公开源码 | 指基于开源开发的代码是否也需要开源 |
如何选择开源协议?
可以参考阮一峰老师的图:
Github
专门发布了一个网站 叫做 Choose an open source license 可以帮助你简化判断。
这个网站主张让开发者从自己的目的出发选择许可证。详细如下:
-
需要简单宽松的协议: MIT 协议
==> 代表项目:
Vue
、React
、Element
-
比较关心专利:
Apache
协议==> 代表项目:
Apache
、SVN
-
比较关心项目的共享改进:
GPL
==>代表项目:
Linux
、Git
-
非代码项目:
CCreative Commons
==>署名: 必须提到作者
==>非商业用户
==>禁止演绎,禁止修改原作品在创作
在 Github 中添加开源许可证
在Github
中已经添加了各种开源许可证的模版。在创建项目的时候可以直接选择对应的开源协议。
当然也可以后期添加和修改,下面就在组件库添加上开源协议。
其实开源许可证就是一个文本文件放在项目的根目录下,所以可以在根目录下点击 【Add file
】选择 【Create new file
】
然后填入文件名 【 LICENSE
】,Github
会自动判断出你需要添加开源协议的,并且会显示 【CHoose a license template
】选择许可证模版按钮,点击按钮就可以选择你需要的模版了。
然后是有效期和作者全名。
- 有效期填写: 2022
- 作者全名还是有点讲究的 可以把你的中文名字和英文名字做一个混合填写,比如 : genius
添加完成后,点击 Review and Submit
就可以创建属于自己的许可证了。
扩展阅读
-
Choose an open source license,https://choosealicense.com/
-
MIT License 协议原文 https://opensource.org/licenses/MIT
-
Apache License 2.0 协议原文 http://www.apache.org/licenses/LICENSE-2.0.html
-
GNU GPL v3 协议原文 https://www.gnu.org/licenses/gpl-3.0.txt
-
更多开源许可列表 https://spdx.org/licenses/
-
主流开源协议之间有何异同? https://www.zhihu.com/question/19568896
-
《程序员不可不知的版权协议》,作者 GcsSloop https://www.gcssloop.com/tips/choose-license
-
《如何选择开源许可证?》,作者 阮一峰,http://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html