开源贡献协议介绍

众所周知,开源代码都有其开源许可证,详细选择参考如何选择开源许可证?。这里不是要讨论开源许可证的问题,而是开源贡献协议。最近在参加一个开源项目时,提到需要使用DCO贡献协议,所以就去了解当下主流的开源贡献协议。

CLA(Contributor License Agreement)协议

CLA时对开源License的法律性质补充,多由企业或者组织自行定义,作为开源协议的补充,一次性签署,比如alibaba CLA协议: Alibaba Open Source Individual CLA

使用上来说,CLA只需要签署一次,如阿里巴巴个人CLAGoogle CLAPivotal CLACNCF CLA

使用CLA的用户或者组织

  • Facebook
  • Eclipse
  • Go
  • Google
  • InfluxDB
  • Python
  • Elastic
  • CNCF
  • …..

DCO(Developer Certificate of Origin)协议

DCO时Linux Foundation提出的,只有四条简短条文, 具体内容如下: DCO,使用上只需要开发者提交信息时追加 Signed-off-by 即可。具体内容(version1.1)如下:

  1. 该贡献全部或部分由我创建,我有权根据文件中指明的开源许可提交;要么
  2. 该贡献是基于以前的工作,这些工作属于适当的开源许可,无论这些工作全部还是部分由我完成,我有权根据相同的开源许可证(除非我被允许根据不同的许可证提交)提交修改后的工作;要么
  3. 该贡献由1、2、或 3 证明的其他人直接提供给我,而我没有对其进行修改。
  4. 我理解并同意该项目和贡献是公开的,并且该贡献的记录(包括我随之提交的所有个人信息,包括我的签字)将无限期保留,并且可以与本项目或涉及的开源许可证保持一致或者重新分配。

使用方法详见 Probot: DCO, 其实就是提交代码(commit)时增加-s参数,然后你会在提交信息里看到

1
2
3
This is my commit message

Signed-off-by: DEVELOPER <random@developer.example.org>

使用DCO的用户或者组织

  • Gitlab
  • Chef
  • TiKv
  • Apache SkyWalking
  • ……

总结

如果你只是一个commiter,请遵从开源项目的贡献者协议,或者发起issue请求变更,如果是自己的开源项目,更看重法律风险,建议使用CLA,看重社区合作,可以使用DCO。

References

  1. CLA vs. DCO: What’s the difference?
  2. 为何《贡献者许可协议》不利于开源社区?
  3. Move from CLA to DCO #2649 - github.com
  4. probot/dco