搭建Vue3组件库:第十章 开源许可证

简介: 本章介绍一下开源许可证。

软件是一种著作,天然是拥有版权的。很多人会认为放在 Github 上的就是开源软件,既然放了源代码,我就可以随便使用了。其实版权法规定著作是禁止共享的,也就是说没有许可证的软件等于保留版权。虽然源代码公开了,但并不表明你可以随便使用,一用就会侵犯版权。如果软件侵犯版权,必须明确授予用户开源许可证。

另外,有一些没有道德的公司会大量使用开源的产品,进行组合封装修改后当做自己的劳动创造。这些拿来党属于破坏游戏规则的一群人,这些人也应该让他们受到应有的惩罚,例如:GPL协议就是防止这种情况发生的。

  • 软件著作权的明确,作者(版权方)的权益明确,保护知识成果
  • 方便用户使用,用户获得明确的授权(是否可以进行使用、拷贝、修改和再发布)
  • 开源≠免费,免费≠免责, no license≠授权,授权≠收费

版权是知识产权的一种,和著作权是同一个概念,可以自动取得,也可以登记取得,是作者对自己的著作享有的法定权利。著作权是公民、法人依法享有的一种民事权利,属于无形财产权。享有著作权的作者可以决定是否对他的作品进行著作权意义上的使用和处理,在我国,只要发表就会受到保护。


开源许可证的种类

我们可以把版权分为四大种。

  • Copyright - 受版权保护的;未经准许不得复制的。
  • Copyleft - 有限空间内的自由使用,不得用于商业目的,且不得闭源,衍生品仍需开源。
  • Permissive - 宽松自由软件许可协议,对软件的使用、修改、传播等方式采用最低限制的自由软件许可协议条款类型。
  • Create Commons - 大多是被用于设计类的工程上,署名权,非商业用途,禁止衍生。

实际上,一般只会把 CopyleftPermissive 叫做开源,其中 Permissive 限制比较宽松。而 Copyleft 要求不得用于商业目的且不得闭源,并且后续衍生子软件必须遵守条款。其实这种协议就是为了弘扬开源精神,不希望某些公司垄断和强占开发成果。

copyright就是俗称的版权,也叫著作权。

版权又称著作权,用来表述创作者因其文学和艺术作品而享有的权利。版权的取得有两种方式:自动取得和登记取得。在中国,按照著作权法规定,作品完成就自动有版权( 百度百科

在版权的基础上,作者还可以制定授权协议(license),按照自己的心意进一步界定使用者的权利。

也就是说,作者的具体权利 = 当地法律规定的版权(copyright) + 自己在作品中添加的授权协议(license)。

权利 = 版权(copyright) + 授权协议(license)

比如,商业化的授权协议(license)可能会倾向于强调,使用者的哪些行为是侵权行为,从而保护自己的商业利益。而基于开源思想的授权协议则会强调使用者的权力。


Permissive 宽松自由许可

BSD(二条版)、BSD(三条版)、MITApache2

BSD(二条版) BSD(三条版) MIT Apache2
允许修改后闭源
不保证代码质量
必须披露原始作者
不得使用原始作者名字为软件推广
分发时必须保留原始许可声明
修改过必须向用户声明修改
未修改必须保持许可证不变

Copyleft 有限空间内的自由

GPLAffero GPL (AGPL)LGPLMozilla(MPL)

GPL Affero GPL (AGPL) LGPL Mozilla(MPL)
分发二进制格式,必须提供源码
修改后,必须与修改前保持许可一致
不得在原始许可以外附加限制
如果项目包含GPL许可代码, 整个项目必须开源
云服务用到的代码, 云服务代码必须开源
如果项目属于动态链接库使用许可证库 项目不用开源
许可证代码在单独文件中 新增其他文件可以不开源

前端项目的开源协议

目前前端项目普遍会选择 MIT协议。

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 协议

    ==> 代表项目: VueReactElement

  • 比较关心专利: Apache协议

    ==> 代表项目: ApacheSVN

  • 比较关心项目的共享改进: GPL

    ==>代表项目: LinuxGit

  • 非代码项目: CCreative Commons

    ==>署名: 必须提到作者

    ==>非商业用户

    ==>禁止演绎,禁止修改原作品在创作


在 Github 中添加开源许可证

Github 中已经添加了各种开源许可证的模版。在创建项目的时候可以直接选择对应的开源协议。

在这里插入图片描述

当然也可以后期添加和修改,下面就在组件库添加上开源协议。

其实开源许可证就是一个文本文件放在项目的根目录下,所以可以在根目录下点击 【Add file】选择 【Create new file

在这里插入图片描述

然后填入文件名 【 LICENSE 】,Github 会自动判断出你需要添加开源协议的,并且会显示 【CHoose a license template 】选择许可证模版按钮,点击按钮就可以选择你需要的模版了。

在这里插入图片描述

然后是有效期和作者全名。

  • 有效期填写: 2022
  • 作者全名还是有点讲究的 可以把你的中文名字和英文名字做一个混合填写,比如 : genius

在这里插入图片描述

添加完成后,点击 Review and Submit 就可以创建属于自己的许可证了。


扩展阅读

相关文章
|
9天前
vue3【实战】语义化首页布局
vue3【实战】语义化首页布局
28 2
|
9天前
|
存储 容器
vue3【实战】来回拖拽放置图片
vue3【实战】来回拖拽放置图片
19 2
|
9天前
|
JavaScript 开发工具 开发者
vue3【提效】使用 VueUse 高效开发(工具库 @vueuse/core + 新增的组件库 @vueuse/components)
vue3【提效】使用 VueUse 高效开发(工具库 @vueuse/core + 新增的组件库 @vueuse/components)
32 1
|
4天前
【vue3】Argumnt of type ‘history:RouterHistory;}is not assignable to paraeter of type ‘RouterOptions‘.
【vue3】Argumnt of type ‘history:RouterHistory;}is not assignable to paraeter of type ‘RouterOptions‘.
6 0
|
4天前
|
JavaScript
【vue3】vue3中路由hash与History的设置
【vue3】vue3中路由hash与History的设置
9 0
|
4天前
|
编解码 前端开发
【Vue3】解决电脑分辨率125%、150%及缩放导致页面变形的问题
【Vue3】解决电脑分辨率125%、150%及缩放导致页面变形的问题
11 0
|
4天前
|
JavaScript
【vue】 vue 翻页时钟制作,vue2、vue3
【vue】 vue 翻页时钟制作,vue2、vue3
11 0
|
2天前
|
JavaScript
|
4天前
|
JavaScript
【vue】el-dialog 内的tinymce弹窗被遮挡的解决办法 及 tinymce打开弹出菜单后直接关闭对话组件,导致该弹出菜单残留
【vue】el-dialog 内的tinymce弹窗被遮挡的解决办法 及 tinymce打开弹出菜单后直接关闭对话组件,导致该弹出菜单残留
14 6
|
1天前
|
存储 缓存 JavaScript
vue代码优化方案
【7月更文挑战第13天】 **Vue.js 优化要点:** 分解大组件以提高复用性和加载速度;利用计算属性与侦听器优化数据处理;使用Object.freeze()减少响应式数据;借助Vuex或Composition API管理状态;实现虚拟滚动和无限加载提升长列表性能;路由懒加载减少初始加载时间;用Vue DevTools检测性能瓶颈;定期代码审查与重构;应用缓存策略;遵循最佳实践与团队规范,提升应用整体质量。
10 2