104 lines
6.8 KiB
Markdown
104 lines
6.8 KiB
Markdown
---
|
||
title: 贡献者协议(Contributing)
|
||
description: 本文讨论了开源项目中贡献者协议的重要性,比较了CLA和DCO两种协议,并提供了贡献者协议的模板。
|
||
keywords:
|
||
- 贡献者协议
|
||
- CLA
|
||
- DCO
|
||
- 开源协作
|
||
tags:
|
||
- 软件工程/Git协作
|
||
- 技术/软件工程
|
||
author: 7Wate
|
||
date: 2023-06-26
|
||
---
|
||
|
||
开源项目的成功在很大程度上取决于社区的参与和贡献。然而,这种参与经常涉及到一些复杂的法律问题,尤其是与知识产权有关的问题。为了解决这些问题,开源社区引入了两种主要的贡献者协议: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](https://github.com/aliyun/cla)。
|
||
|
||
## DCO
|
||
|
||
DCO (Developer Certificate of Origin) 是由 Linux Foundation 制定的,它并不是一个法律协议,而是一种证明。开源贡献者只需要在提交时签署邮件地址,就相当于确认了他们对提交的贡献拥有相应的权利,并同意该贡献在该项目或涉及的开源许可下公开发布。
|
||
|
||
DCO 包含以下四点保证:
|
||
|
||
1. 贡献全部或部分由我创建,我有权根据文件中指明的开源许可提交;
|
||
2. 贡献是基于以前的工作,这些工作属于适当的开源许可,无论这些工作全部还是部分由我完成,我有权根据相同的开源许可证(除非我被允许根据不同的许可证提交)提交修改后的工作;
|
||
3. 贡献由 1、2、或 3 证明的其他人直接提供给我,而我没有对其进行修改。
|
||
4. 我理解并同意该项目和贡献是公开的,并且该贡献的记录(包括我随之提交的所有个人信息,包括我的签字)将无限期保留,并且可以与本项目或涉及的开源许可证保持一致或者重新分配。
|
||
|
||
## 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` 是最常见的约定。
|
||
|
||
### 中文模板
|
||
|
||
```markdown
|
||
贡献者许可协议
|
||
|
||
本贡献者许可协议(以下简称“协议”)由签署下列的一方(以下简称“贡献者”)同意,并向[项目名称]授予对由[项目名称]管理的软件项目的某些许可权。本协议自下列最新的签名日期起生效。
|
||
|
||
1. 定义:
|
||
“代码”指的是在此协议下由贡献者交付给[项目名称]的计算机软件代码,无论是以人类可读形式还是机器可执行形式。
|
||
|
||
2. 版权授予:在此协议的条款和条件下,贡献者特此向[项目名称]和[项目名称]分发的软件的接收者授予永久的,全球性的,非独占的,免费的,免版税的,不可撤销的版权许可,用于复制,准备衍生作品,公开展示,公开表演,再许可,和分发代码及其衍生作品。
|
||
|
||
贡献者声明贡献者有法律权利授予上述许可。
|
||
|
||
贡献者名称:__________
|
||
签名:__________
|
||
日期:__________
|
||
|
||
```
|
||
|
||
### 英文模板
|
||
|
||
```markdown
|
||
Contributor License Agreement
|
||
|
||
This Contributor License Agreement ("Agreement") is agreed to by the party signing below ("Contributor"), and conveys certain license rights to [Project Name] for software projects managed by [Project Name]. This Agreement is effective as of the latest signature date below.
|
||
|
||
1. Definitions:
|
||
"Code" means the computer software code, whether in human-readable or machine-executable form, that is delivered by Contributor to [Project Name] under this Agreement.
|
||
|
||
2. Copyright Grant: Subject to the terms and conditions of this Agreement, Contributor hereby grants to [Project Name] and to recipients of software distributed by [Project Name], a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Code and such derivative works.
|
||
|
||
Contributor represents that Contributor is legally entitled to grant the above license.
|
||
|
||
Contributor Name: __________
|
||
Signature: __________
|
||
Date: __________
|
||
|
||
```
|