开源项目的成功在很大程度上取决于社区的参与和贡献。然而,这种参与经常涉及到一些复杂的法律问题,尤其是与知识产权有关的问题。为了解决这些问题,开源社区引入了两种主要的贡献者协议:CLA (Contributor License Agreement) 和 DCO (Developer Certificate of Origin)。这两种协议在法律义务和责任方面有着显著的不同。
CLA
CLA (Contributor License Agreement) 是开源协议的补充,它明确了贡献者和项目所有者之间的法律关系。CLA 协议包括公司级别和个人级别的 CLA,公司级别的 CLA 允许一个公司代表其所有员工签署,而个人级别的 CLA 则只针对个人贡献者。
CLA 协议主要涵盖以下几点:
- 签署该 CLA 的主体和贡献的定义;
- 授予著作权给拥有该软件知识产权的公司或组织;
- 专利许可的授予;
- 签署者保证依法有权授予上述许可;
- 签署者确保所有的贡献内容均为原创作品;
- 签署者为贡献内容支持的免责描述;
- 说明贡献者提交非原创作品应该采用的方式;
- 保证在获悉任何方面不准确的事实或情况之时通知签约方。
对于在中国的企业,他们还会在 CLA 协议中加入一些本地化的内容,比如阿里巴巴的 Alibaba Open Source Individual CLA。
DCO
DCO (Developer Certificate of Origin) 是由 Linux Foundation 制定的,它并不是一个法律协议,而是一种证明。开源贡献者只需要在提交时签署邮件地址,就相当于确认了他们对提交的贡献拥有相应的权利,并同意该贡献在该项目或涉及的开源许可下公开发布。
DCO 包含以下四点保证:
- 贡献全部或部分由我创建,我有权根据文件中指明的开源许可提交;
- 贡献是基于以前的工作,这些工作属于适当的开源许可,无论这些工作全部还是部分由我完成,我有权根据相同的开源许可证(除非我被允许根据不同的许可证提交)提交修改后的工作;
- 贡献由 1、2、或 3 证明的其他人直接提供给我,而我没有对其进行修改。
- 我理解并同意该项目和贡献是公开的,并且该贡献的记录(包括我随之提交的所有个人信息,包括我的签字)将无限期保留,并且可以与本项目或涉及的开源许可证保持一致或者重新分配。
CLA 与 DCO 的比较
下表对比了 CLA 和 DCO 的特性,可以看出两者在法律责任、社区属性、签署方式等方面都有不同。这就需要根据项目的特点和需求来选择合适的贡献协议。
特性 | CLA | DCO |
---|---|---|
社区属性 | 弱 | 强 |
签署方式 | 一次性 | 每次提交时在 commit 信息里追加 Signed-off-by: email 信息 |
法律责任 | 明确法律义务 | 无声明,用来限制提交者遵守开源 license |
是否可自定义 | 公司或组织可自行定义 | 否 |
使用案例 | Google、Pivotal、CNCF、阿里巴巴、Apache SkyWalking | GitLab、Chef、Harbor、TiKV |
公司属性 | 强,可以签署公司级别的 CLA | 弱 |
在选择合适的贡献协议时,不仅要考虑法律问题,也要考虑社区的文化和参与者的需求。例如,对于大型跨公司开源项目来说,CLA 可能更适合,因为它可以让项目更加正规,并且更符合长期发展的需求。而对于那些更依赖社区的项目来说,DCO 由于其简洁和易于理解的优点,可能会是更好的选择。
贡献者协议
文件通常被命名为 CONTRIBUTING.md
,这个文件通常位于项目的根目录中。有一些项目可能会使用不同的文件名,例如 CONTRIBUTORS.txt
或 CONTRIBUTE.md
,但是 CONTRIBUTING.md
是最常见的约定。