第一次给大公司的开源项目(Typescript)提 PR,提交完 GitHub 就弹出一条评论,让你签什么 CLA:
css
@microsoft-github-policy-service agree
什么玩意儿?我就改了个拼写错误,还要签协议?
CLA 是什么
CLA,全称 Contributor License Agreement,翻译过来叫"贡献者许可协议"。
简单说,就是一份法律文件,你签了之后,就授权项目方可以合法使用你贡献的代码。
为什么需要这东西
想象一个场景:
张三给某开源项目提了个 PR,合并了。过了两年,张三突然跳出来说:"这段代码是我写的,你们用了我的代码,侵犯我版权,赔钱!"
项目方一脸懵:代码是你自己提交的啊?
张三:提交归提交,我没说授权你们用啊。
听起来像碰瓷,但法律上还真不好说。毕竟代码确实是张三写的,版权默认归作者。
CLA 就是为了堵这个漏洞。你签了 CLA,就相当于白纸黑字写清楚了:
- 这代码是我自己写的(不是抄的)
- 我授权你们用、改、分发
- 以后不会反悔找你们麻烦
CLA 里具体写了啥
以微软的 CLA 为例,核心条款就这几条:
1. 原创声明
你保证提交的代码是你自己写的。如果包含别人的代码,要标注清楚来源和许可证。
2. 版权授权
你授予项目方永久的、全球范围的、免版税的版权许可。说白了就是:他们可以随便用,不用给你钱,也不用每次都问你。
3. 专利授权
如果你的代码涉及专利(虽然大多数情况下不会),你也授权他们使用。
4. 雇主确认
如果你是在工作中写的代码,公司可能对代码有知识产权。这种情况下,你得先拿到公司的许可才能签 CLA。
签了会怎样
签 CLA 不会让你:
- 失去代码的版权(版权还是你的)
- 不能在别处使用这段代码
- 承担什么法律责任
签 CLA 只是说:
- 项目方可以合法使用你的贡献
- 你不会秋后算账
不同项目的 CLA
不是所有开源项目都要签 CLA,主要是大公司的项目:
| 公司 | 需要 CLA |
|---|---|
| 微软 | 是 |
| 是 | |
| Meta | 是 |
| Apache 基金会 | 是 |
| 个人项目 | 通常不需要 |
个人维护的开源项目一般不搞这套,太麻烦。但大公司不行,法务部不允许有法律风险敞口。
怎么签
以 GitHub 上的微软项目为例:
- 提交 PR
- 机器人会自动评论,让你签 CLA
- 回复:
@microsoft-github-policy-service agree - 搞定
就这么简单。签一次就行,以后再给同一个组织提 PR 就不用重复签了。
如果你是代表公司贡献代码,需要加上公司名:
ini
@microsoft-github-policy-service agree company="你的公司名"
一些细节
Q:我就改了个 typo,也要签?
是的。哪怕只改了一个字符,也是贡献,也要签。
Q:签了 CLA,代码版权归谁?
版权还是你的。CLA 只是授权,不是转让。
Q:能撤回吗?
理论上你不能撤回已经合并的代码的授权。但你可以随时停止贡献。
Q:CLA 和开源许可证什么关系?
开源许可证(MIT、Apache 等)是项目对外的授权,告诉使用者可以怎么用这个项目。
CLA 是贡献者对项目的授权,告诉项目方可以怎么用贡献者的代码。
两个方向不一样。
小结
CLA 这东西,说白了就是大公司的法务需求。对贡献者来说,签一下也没什么损失,就是授权项目方合法使用你的代码。
第一次遇到可能有点懵,但理解了它的目的,就知道这是正常流程,不是什么坑。
签就完了。
如果你觉得这篇文章有帮助,欢迎关注我的 GitHub,下面是我的一些开源项目:
Claude Code Skills (按需加载,意图自动识别,不浪费 token,介绍文章):
- code-review-skill - 代码审查技能,覆盖 React 19、Vue 3、TypeScript、Rust 等约 9000 行规则(详细介绍)
- 5-whys-skill - 5 Whys 根因分析,说"找根因"自动激活
- first-principles-skill - 第一性原理思考,适合架构设计和技术选型
全栈项目(适合学习现代技术栈):
- prompt-vault - Prompt 管理器,用的都是最新的技术栈,适合用来学习了解最新的前端全栈开发范式:Next.js 15 + React 19 + tRPC 11 + Supabase 全栈示例,clone 下来配个免费 Supabase 就能跑
- chat_edit - 双模式 AI 应用(聊天+富文本编辑),Vue 3.5 + TypeScript + Vite 5 + Quill 2.0 + IndexedDB