在开始阅读前,可以先尝试这道选择题,测试自己对开源协议的理解😊。
答案在文章最后。
【选择题】以下受开源软件协议约束的场景包括:
- [ ] A. 包含某个开源软件库,开发一个安卓程序并上架应用商城
- [ ] B. 包含某个开源软件库,搭建一个后端服务程序并封装为 SaaS 对外服务
- [ ] C. 包含开源软件库,开发浏览器前端界面并部署上线给用户使用
- [ ] D. 使用一个开源脚手架工具构建项目并上线应用商城
- [ ] E. 包含某个开源软件库,开发一个后端服务程序,提供私有化部署
- [ ] F. 基于某开源编程语言开发的软件,进行分发
- [ ] G. 基于某个开源编程语言编译器定制开发语言编译器,实现定制编程语言并进行分发
- [ ] H. 包含某个自己贡献了代码的开源库,开发一个软件并进行分发
零. 开源协议约束的是谁?
在开源软件中,一般会出现三个角色:
- 著作权所有人
- 贡献者
- 用户
开源协议,一般约束的是软件/代码的著作权所有人和用户之间的责任和义务。
一. 什么时候受开源协议的“开源约束”?
只有用户对开源软件进行分发的时候才受约束:
- 拿开源软件来商用或者提供 SaaS 服务,不受开源协议约束
- 拿开源软件构建自己的软件(成为其中一部分)进行分发,则受开源协议约束
- 自己开发了软件,但是分发过程中,由用户自己下载所依赖的开源代码/组件,则不受协议约束
二. 开源协议中 CopyRight 部分怎么填写?
Copyright(c) 创作年份 著作权人名称(一般填写公司或者组织名称)
三. 我该选择什么开源协议
这取决于以下几个方面:
-
- 你使用开源软件/代码了吗
-
- 你打算如何分发你的产品
-
- 你打算开源吗(1 和 2 有时候会强制你开源,再结合考虑盈利方式)
-
- 你打算如何约束别人使用你的开源代码
-
- 最后还要兼容所使用开源软件/代码组件的协议
四. 贡献者拥有开源软件的著作权吗
贡献者和开源软件著作权所有人之间的权力和义务,不在开源软件协议的范围内,一般由额外的贡献者协议来进行规定。
一般而言,开源软件在接受社区贡献之前,会需要(或者要求)用户签署一份贡献者协议。协议目前分两大类:
- CLA(Contributor License Agreement, 贡献者许可协议)
- 协议内容不固定,由开源软件著作权所有人自行编订
- 提交 PR 之前,需要签署这份协议,签署一次,对该贡献者的所有提交都生效
- DCO(Developer Certificate of Origin, 开发者原创证书)
- 协议内容是格式化条款,优点是协议内容标准化
- 每次提交都要签署这份协议,
git commit
时添加-s
参数可以自动签署
简而言之,对开源著作权所有人而言,CLA 更有利;对贡献者而言,DCO 更有利。
可以参考:为自己的开源项目建立贡献准则
五. 一些开源相关的司法案例
最后,是文章开篇选择题的答案。
【选择题】以下受开源软件协议约束的场景包括:
- ✅ A. 包含某个开源软件库,开发一个安卓程序并上架应用商城
- ❌ B. 包含某个开源软件库,搭建一个后端服务程序并封装为 SaaS 对外服务
- ✅ C. 包含开源软件库,开发浏览器前端界面并部署上线给用户使用
- ❌ D. 使用一个开源脚手架工具构建项目并上线应用商城
- ✅ E. 包含某个开源软件库,开发一个后端服务程序,提供私有化部署
- ❌ F. 基于某开源编程语言开发的软件,进行分发
- ✅ G. 基于某个开源编程语言编译器定制开发语言编译器,实现定制编程语言并进行分发
- ✅ H. 包含某个自己贡献了代码的开源库,开发一个软件并进行分发
简而言之,就是看:
-
- 有没有分发
-
- 分发的对象中有没有包含开源代码/软件
如果有不同的看法,欢迎一起讨论👏