外观
9.开发许可证:维护自己的版权
1883字约6分钟
2024-10-08
软件是一种著作,天然是拥有版权的。很多人会认为放在 Github 上的就是开源软件,既然放了源代码,我就可以随便使用了。其实版权法规定著作是禁止共享的,也就是说没有许可证的软件等于保留版权。虽然源代码公开了,但并不表明你可以随便使用,一用就会侵犯版权。如果软件侵犯版权,必须明确授予用户开源许可证。
另外,有一些没有道德的公司会大量使用开源的产品,进行组合封装修改后当做自己的劳动创造。这些拿来党属于破坏游戏规则的一群人,应该让他们受到应有的惩罚,例如:GPL 协议就是防止这种情况发生的。
用户故事 (UserStory)
为组件库选择一个合适的开源许可证。
任务分解 (Task)
- 选择合适的开源许可证;
- 在 Github 上申请开源许可证;
任务实现
选择开源许可证其实就是你的版权声明。首先应该清晰地认识什么是版权。
版权是知识产权的一种,和著作权是同一个概念,可以自动取得,也可以登记取得,是作者对自己的著作享有的法定权利。著作权是公民、法人依法享有的一种民事权利,属于无形财产权。享有著作权的作者可以决定是否对他的作品进行著作权意义上的使用和处理,在我国,只要发表就会受到保护。
开源许可证的种类
版权分为四类:
- Copyright - 受版权保护的;未经准许不得复制的。
- Copyleft - 有限空间内的自由使用,不得用于商业目的,且不得闭源,衍生品仍需开源。
- Permissive - 宽松自由软件许可协议,对软件的使用、修改、传播等方式采用最低限制的自由软件许可协议条款类型。
- Create Commons - 大多是被用于设计类的工程上,署名权,非商业用途,禁止衍生。
实际上,一般只会把 Copyleft 和 Permissive 叫做开源,其中 Permissive 限制比较宽松。而 Copyleft 要求不得用于商业目的且不得闭源,并且后续衍生子软件必须遵守条款。其实这种协议就是为了弘扬开源精神,不希望某些公司垄断和强占开发成果。
Permissive 宽松自由许可:
- BSD(二条版);
- BSD(三条版);
- MIT;
- Apache2;
BSD(二条版) | BSD(三条版) | MIT | Apache2 | |
---|---|---|---|---|
允许修改后闭源 | ✅ | ✅ | ✅ | ✅ |
不保证代码质量 | ✅ | ✅ | ✅ | ✅ |
必须披露原始作者 | ✅ | ✅ | ✅ | ✅ |
不得使用原始作者名字为软件推广 | ✅ | |||
分发时必须保留原始许可声明 | ✅ | |||
修改过必须向用户声明修改 | ✅ | |||
未修改必须保持许可证不变 | ✅ |
Copyleft 有限空间内的自由:
- Copyleft;
- GPL;
- Affero GPL (AGPL);
- LGPL;
- Mozilla(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 最后还是意识到了这个问题,修改了开源协议。
如何选择开源协议?
看了这么多对比列表,可能有点眼花。
Github 专门发布了一个网站 叫做 Choose an open source license 可以帮助你简化判断。
这个网站主张让开发者从自己的目的出发选择许可证,具体如下:
需要简单宽松的协议: MIT 协议
代表项目: Vue 、React 、Element
比较关心专利: Apache 协议
代表项目: Apache、SVN
比较关心项目的共享改进: GPL
代表项目: Linux 、Git
非代码项目: CCreative Commons
署名: 必须提到作者
非商业用户
禁止演绎,禁止修改原作品在创作
这里我们选择较为宽松的 MIT 协议就可以了。
在 Github 中添加开源许可证
在 Github 中已经添加了各种开源许可证的模版,在创建项目的时候可以直接选择对应的开源协议。
如果刚开始没选择,也可以后期添加和修改,下面就在组件库添加上开源协议。
其实开源许可证就是一个文本文件放在项目的根目录下,所以在 Github 仓库根目录下点击 【Add file】选择 【Create new file】
然后填入文件名 【 LICENSE 】,Github 会自动判断出你需要添加开源协议,并且会显示 【 CHoose a license template 】选择许可证模版按钮,点击按钮就可以选择你需要的模版了。
选择 MIT 协议,填写有效期和作者全名。
- 有效期填写: 2023 - present
- 作者全名可以把你的中文名字和英文名字做一个混合填写,比如 : Moqi(InfinityX7)Xu
添加完成后,点击 Review and Submit 就可以创建属于自己的许可证了。
提交修改
发起一个 PR,等待工作流完成,后,合并 PR
然后就可以在项目首页看到协议许可生效了。
提示
生成许可证后记得在本地仓库 git pull
拉取下来
复盘
本节的目的是了解开源许可证,并且选择符合自己需要的开源许可证。开源许可证有很多不同的分类,应该根据不同的项目特点选择合理的开源许可证,也应该在为自己的项目挑选开源库的时候注意许可证分类,以免引起不必要的版权麻烦。
最后留一些思考题:
- 开源许可证的分类都有哪些 ?
- 哪种许可证的项目不允许修改后闭源?
- 如何在 Github 中创建许可证?