搭建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 就可以创建属于自己的许可证了。


扩展阅读

相关文章
|
2月前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
154 64
|
2月前
|
JavaScript 前端开发 API
Vue 3 中 v-model 与 Vue 2 中 v-model 的区别是什么?
总的来说,Vue 3 中的 `v-model` 在灵活性、与组合式 API 的结合、对自定义组件的支持等方面都有了明显的提升和改进,使其更适应现代前端开发的需求和趋势。但需要注意的是,在迁移过程中可能需要对一些代码进行调整和适配。
124 60
|
17天前
|
JavaScript API 数据处理
vue3使用pinia中的actions,需要调用接口的话
通过上述步骤,您可以在Vue 3中使用Pinia和actions来管理状态并调用API接口。Pinia的简洁设计使得状态管理和异步操作更加直观和易于维护。无论是安装配置、创建Store还是在组件中使用Store,都能轻松实现高效的状态管理和数据处理。
67 3
|
2月前
|
前端开发 JavaScript 测试技术
Vue3中v-model在处理自定义组件双向数据绑定时,如何避免循环引用?
Web 组件化是一种有效的开发方法,可以提高项目的质量、效率和可维护性。在实际项目中,要结合项目的具体情况,合理应用 Web 组件化的理念和技术,实现项目的成功实施和交付。通过不断地探索和实践,将 Web 组件化的优势充分发挥出来,为前端开发领域的发展做出贡献。
45 8
|
2月前
|
存储 JavaScript 数据管理
除了provide/inject,Vue3中还有哪些方式可以避免v-model的循环引用?
需要注意的是,在实际开发中,应根据具体的项目需求和组件结构来选择合适的方式来避免`v-model`的循环引用。同时,要综合考虑代码的可读性、可维护性和性能等因素,以确保系统的稳定和高效运行。
41 1
|
2月前
|
JavaScript
Vue3中使用provide/inject来避免v-model的循环引用
`provide`和`inject`是 Vue 3 中非常有用的特性,在处理一些复杂的组件间通信问题时,可以提供一种灵活的解决方案。通过合理使用它们,可以帮助我们更好地避免`v-model`的循环引用问题,提高代码的质量和可维护性。
49 1
|
2月前
|
JavaScript
在 Vue 3 中,如何使用 v-model 来处理自定义组件的双向数据绑定?
需要注意的是,在实际开发中,根据具体的业务需求和组件设计,可能需要对上述步骤进行适当的调整和优化,以确保双向数据绑定的正确性和稳定性。同时,深入理解 Vue 3 的响应式机制和组件通信原理,将有助于更好地运用 `v-model` 实现自定义组件的双向数据绑定。
|
2月前
|
JavaScript 索引
Vue 3.x 版本中双向数据绑定的底层实现有哪些变化
从Vue 2.x的`Object.defineProperty`到Vue 3.x的`Proxy`,实现了更高效的数据劫持与响应式处理。`Proxy`不仅能够代理整个对象,动态响应属性的增删,还优化了嵌套对象的处理和依赖追踪,减少了不必要的视图更新,提升了性能。同时,Vue 3.x对数组的响应式处理也更加灵活,简化了开发流程。
|
2月前
|
JavaScript 前端开发 API
从Vue 2到Vue 3的演进
从Vue 2到Vue 3的演进
53 0
|
2月前
|
JavaScript 前端开发 API
Vue.js响应式原理深度解析:从Vue 2到Vue 3的演进
Vue.js响应式原理深度解析:从Vue 2到Vue 3的演进
72 0