开源软件协议 QA

在开始阅读前,可以先尝试这道选择题,测试自己对开源协议的理解😊。
答案在文章最后。

【选择题】以下受开源软件协议约束的场景包括:

  • [ ] A. 包含某个开源软件库,开发一个安卓程序并上架应用商城
  • [ ] B. 包含某个开源软件库,搭建一个后端服务程序并封装为 SaaS 对外服务
  • [ ] C. 包含开源软件库,开发浏览器前端界面并部署上线给用户使用
  • [ ] D. 使用一个开源脚手架工具构建项目并上线应用商城
  • [ ] E. 包含某个开源软件库,开发一个后端服务程序,提供私有化部署
  • [ ] F. 基于某开源编程语言开发的软件,进行分发
  • [ ] G. 基于某个开源编程语言编译器定制开发语言编译器,实现定制编程语言并进行分发
  • [ ] H. 包含某个自己贡献了代码的开源库,开发一个软件并进行分发

零. 开源协议约束的是谁?

在开源软件中,一般会出现三个角色:

  • 著作权所有人
  • 贡献者
  • 用户

开源协议,一般约束的是软件/代码的著作权所有人用户之间的责任和义务。

一. 什么时候受开源协议的“开源约束”?

只有用户对开源软件进行分发的时候才受约束:

  • 拿开源软件来商用或者提供 SaaS 服务,不受开源协议约束
  • 拿开源软件构建自己的软件(成为其中一部分)进行分发,则开源协议约束
  • 自己开发了软件,但是分发过程中,由用户自己下载所依赖的开源代码/组件,则不受协议约束

Copyright(c) 创作年份 著作权人名称(一般填写公司或者组织名称)

三. 我该选择什么开源协议

这取决于以下几个方面:

    1. 你使用开源软件/代码了吗
    1. 你打算如何分发你的产品
    1. 你打算开源吗(1 和 2 有时候会强制你开源,再结合考虑盈利方式)
    1. 你打算如何约束别人使用你的开源代码
    1. 最后还要兼容所使用开源软件/代码组件的协议

四. 贡献者拥有开源软件的著作权吗

贡献者和开源软件著作权所有人之间的权力和义务,不在开源软件协议的范围内,一般由额外的贡献者协议来进行规定。

一般而言,开源软件在接受社区贡献之前,会需要(或者要求)用户签署一份贡献者协议。协议目前分两大类:

  • CLA(Contributor License Agreement, 贡献者许可协议)
    • 协议内容不固定,由开源软件著作权所有人自行编订
    • 提交 PR 之前,需要签署这份协议,签署一次,对该贡献者的所有提交都生效
  • DCO(Developer Certificate of Origin, 开发者原创证书)
    • 协议内容是格式化条款,优点是协议内容标准化
    • 每次提交都要签署这份协议, git commit 时添加 -s 参数可以自动签署

简而言之,对开源著作权所有人而言,CLA 更有利;对贡献者而言,DCO 更有利。
可以参考:为自己的开源项目建立贡献准则

五. 一些开源相关的司法案例


最后,是文章开篇选择题的答案。
【选择题】以下受开源软件协议约束的场景包括:

  • ✅ A. 包含某个开源软件库,开发一个安卓程序并上架应用商城
  • ❌ B. 包含某个开源软件库,搭建一个后端服务程序并封装为 SaaS 对外服务
  • ✅ C. 包含开源软件库,开发浏览器前端界面并部署上线给用户使用
  • ❌ D. 使用一个开源脚手架工具构建项目并上线应用商城
  • ✅ E. 包含某个开源软件库,开发一个后端服务程序,提供私有化部署
  • ❌ F. 基于某开源编程语言开发的软件,进行分发
  • ✅ G. 基于某个开源编程语言编译器定制开发语言编译器,实现定制编程语言并进行分发
  • ✅ H. 包含某个自己贡献了代码的开源库,开发一个软件并进行分发

简而言之,就是看:

    1. 有没有分发
    1. 分发的对象中有没有包含开源代码/软件

如果有不同的看法,欢迎一起讨论👏