本文目录导读:

在开源项目中正确标注版权声明,不仅是对原作者的尊重,也是遵守开源许可证(License)的法律要求,标注方式主要取决于你使用的具体许可证(如 MIT、Apache 2.0、GPL 等),但有一些通用的最佳实践。
以下是详细的步骤和模板:
核心原则
- 保留上游版权:如果你使用了别人的开源代码,绝对不能删除或修改其原有的版权声明和许可证文件。
- 清晰声明:让任何人都能轻易找到谁拥有版权,以及代码的使用条件是什么。
- 文件头 + 项目根目录:通常需要在每个源文件的头部(注释中)和项目根目录下的
LICENSE文件中同时声明。
项目根目录的 LICENSE 文件(必须)
这是最核心的步骤,你需要将所选许可证的标准全文复制到一个名为 LICENSE(或 LICENSE.md、COPYING)的文件中,放在项目的根目录。
关键点:在许可证文件的开头,需要替换作者(Copyright Holder)信息。
通用格式:
Copyright (c) [年份] [版权所有者姓名或组织名称]
示例:
- 个人:
Copyright (c) 2024 Zhang San - 公司:
Copyright (c) 2018-2024 ABC Technologies, Inc. - 组织:
Copyright (c) 2024 The React Native Authors(有些项目会声明所属组织)
具体许可证示例(只显示头几行,后面是标准条款):
-
MIT License:
MIT License Copyright (c) 2024 Zhang San Permission is hereby granted... -
Apache License 2.0:
Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0...
每个源文件的头部注释(强烈推荐)
虽然有些许可证(如 MIT)不强制要求,但加上文件头注释是行业惯例,能有效防止代码片段被复制后无法溯源。
通用文件头模板:
/* * Copyright [年份] [版权所有者] * SPDX-License-Identifier: [许可证标识符] * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */
简化版(适用于 MIT 等宽松许可证):
# Copyright (c) 2024 Zhang San # SPDX-License-Identifier: MIT
SPDX-License-Identifier:
这是近年来非常推荐的标准化写法,它可以方便机器自动识别许可证,常见的标识符有:
MITApache-2.0GPL-3.0-onlyBSD-2-Clause
不同场景下的正确做法
场景 1:你创建了一个全新的项目
- 步骤:
- 选择许可证(如果不确定,开源界最推荐 MIT 或 Apache 2.0)。
- 创建
LICENSE文件,填入标准全文,并修改版权信息。 - 在每个新建的源文件头部,加入 Copyright 声明。
- 示例:
Copyright (c) 2024 Li Si. Licensed under the MIT License.
场景 2:你修改/增强了一个现有的开源项目(Fork)
- 重要规则:
- 必须保留:原始项目的所有
LICENSE文件、所有文件头中的版权声明。 - 需要添加:你自己的版权声明(通常是在原始声明后另起一行)。
- 必须保留:原始项目的所有
- 正确做法:如果原始文件头部是
Copyright (c) 2022 Original Author,你可以添加一行:# Copyright (c) 2022 Original Author # Copyright (c) 2024 Your Name
不要把原作者的名字划掉只写你的名字,这是严重的违规行为。
场景 3:你使用了别人开源库中的一小段代码
- 最佳做法:
- 在引用代码的附近(如注释中)写明来源和原作者。
- 示例:
// The following code is modified from the “sort_utils” library // Copyright (c) 2022 Jane Doe (https://github.com/janedoe/sort_utils) // Licensed under the MIT License.
场景 4:你是公司开发,混合了内部代码和开源代码
- 需要在项目内清晰划分:
- 你自有代码使用公司指定的许可证(如 Apache 2.0)。
- 第三方依赖库保持其原有的许可证文件(通常放在
third_party/或vendor/目录下)。 - 在项目根目录的
NOTICE文件中(Apache 2.0 要求)或README中声明“本软件使用了以下第三方开源组件...”。
常见的错误(避坑指南)
- 只写了 License 名,没写 Copyright:
- ❌ 错误:
License: MIT - ✅ 正确:
Copyright (c) 2024 Your Name. Licensed under the MIT License.
- ❌ 错误:
- 年份写错:
- 如果是 2024 年写的代码,不要写成
Copyright 2020-2023,对于持续更新的项目,建议写起始年份,如2018-2024。
- 如果是 2024 年写的代码,不要写成
- 遗漏 SPDX 标识符:
- 这在大型项目(如 Linux 内核)中是硬性要求,养成好习惯,加上
SPDX-License-Identifier。
- 这在大型项目(如 Linux 内核)中是硬性要求,养成好习惯,加上
- 使用自己看不懂的模板:
- 如果是个人小项目,选用 MIT 最简单,如果用 GPL 等复杂许可证,务必理解其传染性条款。
Checklist
- [ ] 项目根目录有
LICENSE文件。 - [ ] License 文件第一行是:
Copyright (c) [Year] [Your Name/Company]。 - [ ] 每个
.py、.js、.java等源文件头部有版权注释(包含 SPID 推荐)。 - [ ] 如果修改了别人的代码,保留了原有所有声明,并添加了新的声明行。
- [ ] 在
README.md中包含了 “License” 章节。