1. 把 LICENSE 文件放在仓库根目录
首先要做的是把许可证原文作为 LICENSE(或 LICENSE.txt、LICENSE.md)文件放在仓库根目录。GitHub、GitLab 和包管理器会查找此文件来识别许可证。在生成器中选择许可证并填写年份和版权所有者,即可直接获取。
- 不要修改原文:只填写 MIT、BSD、ISC 中
[year]、[fullname]这类占位符,其余文字保持原样。改动文字后将无法被识别为标准许可证,还可能产生解释上的问题。 - GNU 许可证保持全文原样:GPL、LGPL、AGPL 原文中没有需要填写的地方。版权所有者和版本条款通过文件声明来说明。
2. 年份和版权所有者的写法
- 年份:一般写首次公开的年份。也可以写成
2019-2026这样的范围。法律上没有每年更新的义务。 - 版权所有者:个人编写的代码写本人姓名;职务上编写的代码通常以雇主为版权所有者(因国家和合同而异)。多人贡献的项目也可以写成
The Example Project Authors,并用AUTHORS文件管理名单。 - 版权声明的作用是告知权利,而不是产生权利。即使没有声明,版权依然存在。
3. 各许可证的附属文件
| 许可证 | 惯例 |
|---|---|
| Apache-2.0 | LICENSE + 如有需要的 NOTICE(只简短写归属声明) |
| GPL-3.0 / GPL-2.0 | 原文放在 COPYING 或 LICENSE 中 |
| LGPL-3.0 | COPYING(GPL-3.0 原文)+ COPYING.LESSER(LGPL-3.0 原文) |
| MIT OR Apache-2.0 | LICENSE-MIT + LICENSE-APACHE |
| BSL-1.0 | LICENSE_1_0.txt |
Apache-2.0 的 NOTICE 并非必需,但再分发带有 NOTICE 的代码的人必须保留其内容。ASF 建议 NOTICE 中只放法律上必需的归属声明,不要放致谢或许可证全文。
4. 源文件头
在每个文件中放一个简短的文件头,即使文件被单独复制,许可证信息也会随之一起。
# SPDX-FileCopyrightText: 2026 Example Inc.
# SPDX-License-Identifier: Apache-2.0
GNU、Apache、MPL 也推荐使用官方声明,但越来越多的项目只用 SPDX 两行来代替。详情请参阅 SPDX 指南。
5. 包元数据与 README
- 在
package.json、Cargo.toml、pyproject.toml等文件的 license 字段中写上 SPDX 标识符。 - 在 README 末尾设置「许可证」一节,用一两句话概括(例如「This project is licensed under the MIT License — see LICENSE」)。
6. 第三方代码声明
如果分发时包含了他人的代码,也必须一并遵守其许可证义务。
- 复制进来的代码,在相应文件中保留原有的版权声明和许可证。
- 以二进制或应用形式分发时,将使用的开源组件列表和许可证全文汇总到
THIRD_PARTY_NOTICES文件或应用的「开源许可」界面中。 - 依赖项较多时,可用 SBOM 工具或包管理器的许可证报告功能自动生成列表。
7. 接受贡献时:DCO 或 CLA
接受外部贡献后,版权会分散在多人手中。管理这一问题有两种方式。
- DCO:贡献者在提交中加入
Signed-off-by:,确认「我有权以项目许可证提交这段代码」。方式轻便,Linux 内核采用此方式。 - CLA:贡献者向项目授予包括再授权在内的广泛权利的协议。如果要做商业双重许可或为日后更换许可证留有余地,就需要它。
贡献规则写在 CONTRIBUTING.md 中。
8. 更换许可证时
- 版权所有者可以为今后的版本采用其他许可证。对已发布版本授予的许可通常不会被撤回。
- 如果有其他贡献者的代码,需要征得他们的同意(通过 CLA 获得再授权权利的情况除外)。
- 从宽松型改为著佐权相对容易(因为宽松型代码可以进入著佐权项目),但从著佐权改为宽松型,如果没有所有版权所有者的同意,实际上是不可能的。
- 在 CHANGELOG 和 README 中清楚记录更换的时间、原因和适用版本。
检查清单
- LICENSE 原文(只填写占位符)
- 附属文件(NOTICE、COPYING.LESSER 等)
- 文件头(SPDX 两行)
- 包元数据与 README
- 第三方声明
- 贡献规则(DCO 或 CLA)
本文为一般信息,不构成法律意见。重要决定请咨询专业人士。
参考来源
- GitHub Docs, Adding a license to a repository — https://docs.github.com/en/communities/setting-up-your-project-for-healthy-contributions/adding-a-license-to-a-repository
- Apache, Applying the Apache License · Assembling LICENSE and NOTICE — https://www.apache.org/legal/apply-license.html
- GNU, How to Use GNU Licenses for Your Own Software — https://www.gnu.org/licenses/gpl-howto.html
- REUSE Specification — https://reuse.software/spec/
- Developer Certificate of Origin — https://developercertificate.org/