本文目录导读:

在开源项目中正确标注版权声明,不仅是对原作者的尊重,也是遵守开源许可证(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” 章节。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播