!61 openKylin软件包版权协议补充指南

Merge pull request !61 from KevinDuan/master
This commit is contained in:
moshengren 2022-09-16 06:43:34 +00:00 committed by Gitee
commit 95d08d2928
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
1 changed files with 271 additions and 0 deletions

View File

@ -0,0 +1,271 @@
---
title: openKylin软件包版权协议补充指南
date: 2022-09-16 14:36:45
tags:
---
## openKylin软件包版权协议补充指南
openKylin 对待软件包版权和许可证信息的态度十分严格。在 openKylin 中的所有软件包必须包含 debian/copyright 文件且在该文件中需要提供相关信息的摘要。
该文件通常需要包含软件包版权信息的逐字副本;有关详细信息以及与软件包版权相关的进一步注意事项。
### 文件语法
debian/copyright 文件必须是机器可理解的,但又是人类可读的,同时需要传达所有规定的上游信息、版权声明和许可细节。
该文件的语法与其他 Debian 控制文件的语法相同,在 Debian 政策手册中有所规定。
该文件由两个或更多段落组成。至少,该文件必须包括一个标题段和一个文件段。
每个字段的值都是下面列出的四种类型之一。本文件中每个字段的定义指出了它的值的类型。
1. 单行值 Single-line values
一个字段的一个值必须在同一行上,不可分段。
2. 空格分隔的列表 Whitespace-separated lists
定义为空格分隔的列表的字段值可以在一行或多行上。列表中的值由一个或多个空白字符空格或换行符分隔。例如Files 字段包含一个用换行的文件名模式的列表。
3. 基于行的列表 Line-based lists
另一种列表值每行有一个值。例如Copyright 字段可以列出许多版权声明,每行一个。
4. 文本格式类似于包装的长篇描述
格式化的文本字段使用与软件包描述字段中的长描述相同的规则,可能还会使用第一行作为概要,就像 control 文件的描述用于短描述那样。例如Disclaimer字段没有特殊的第一行而License则有。
### 段落
有三种类型的段落。文件中的第一个段落被称为标题段。其他每一段都是 Files 段或者是独立的 License 段。这与 debian/control 文件中的源代码和二进制包段落类似。
#### 标题段
以下字段可以出现在标题段中
- Format: 必选
- Upstream-Name: 可选.(建议)
- Upstream-Contact: 可选.(建议)
- Source: 可选.(建议)
- Disclaimer: 可选.
- Comment: 可选.(建议)
- License: 可选.
- Copyright: 可选.
标题段中的 Copyright 和 License 可以补充但不能取代 Files 段。它们可以用来总结整个软件包的贡献和再分配条款,例如,当一个作品结合了允许性和自由复制的许可时,或者记录一个汇编的版权和许可。在标题段中可以只使用 License单独使用 Copyright 就没有意义了。
#### Files 段(可重复)
对文件的版权和许可证的声明是在一个或多个段落中进行的。在最简单的情况下,可以使用一个段落,它适用于所有文件,并列出所有适用的版权和许可证。
以下字段可以出现在一个文件段落中。
- Files: 必选
- Copyright: 必选
- License: 必选
- Comment: 可选.
#### 独立的 License 段落(可选,可重复)。
当一组文件多重许可,或同一许可多次出现时,你可以使用单行许可字段和独立的许可段落来扩展许可简称。
以下字段可以出现在独立的许可段落中。
- License必选
- Comment可选
### 字段
以下字段是定义在 debian/copyright 中使用的。
#### Format
类型:单行值;
该文件格式遵循规范的地址,如:
- Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/。
#### Upstream-Name
类型:单行值;
上游使用的软件名
#### Upstream-Contact
类型:基于行的列表;
到达上游项目的首选地址。可能是自由格式的文本,但按照惯例,通常会写成 RFC5322 地址或 URI 的列表。
#### Source
类型:格式化文本,无概要;
上游来源的解释。通常这将是一个 URL但它可能是一个自由格式的解释。如果上游源已被修改以删除非自由部分则应在此字段中进行说明。
#### Disclaimer
类型:格式化文本,无概要;
此字段可用于非免费和贡献包(non-free)的情况
#### Comment
类型:格式化文本,无概要;
此字段可以提供附加信息。
#### License
类型:格式化的文本,带有简述;
在标题段中,这个字段给出了整个软件包的许可信息,它可能不同于或简化于所有每个文件的许可信息的组合。在 Files 段中,这个字段给出了该段的文件字段中所列文件的许可条款。在一个独立的许可段落中,它给出了那些引用它的段落的许可条款。
第一行:许可证的缩写名称,或提供替代方案的表达方式。[标准缩写](https://dep-team.pages.debian.net/deps/dep5/#license-short-name)。
剩下的几行:如果这里留空,文件必须包括一个独立的许可证段落,与第一行列出的每个许可证短名称相匹配。否则,这个字段应该包括许可证的全文,或者包括一个指向/usr/share/comm-licenses下的许可证文件的指针。这个字段应该包括所有需要的文本以满足 Debian Policy 对包含软件发行许可的要求,以及任何许可要求,即在二进制软件包中包含保修免责声明或其他声明。
#### Copyright
类型:有格式的文本,无概要;
一个或多个自由格式的版权声明。任何格式都是允许的;
请看下面的例子,以了解如何组织这个字段使其更容易阅读。在标题段中,这个字段给出了整个软件包的版权信息,它可能不同于或简化于所有每个文件的版权信息的组合。在 Files 段落中,它给出了适用于文件模式所匹配的文件的版权信息。
版权字段收集了本段文件的所有相关版权声明。并非所有的版权声明都适用于每一个单独的文件一个版权人的出版年份可能会被收集在一起。例如如果文件A有
- Copyright 2008 John Smith
- Copyright 2009 Angela Watts
和文件B有
- Copyright 2010 Angela Watts
涵盖文件A和文件B的版权字段只需包含
- Copyright 2008 John Smith
- Copyright 2009, 2010 Angela Watts
版权字段可以包含完全复制的原始版权声明(包括 " Copyright "一词),也可以缩短文本,只要不牺牲信息即可。本规范中的例子同时使用这两种形式。
#### Files
类型:以空格分隔的列表;
表示本段规定的许可证和版权所涵盖的文件的模式列表。
文件字段中的文件名模式是使用简化的shell glob语法指定的。模式由空格隔开。
- 只有通配符 * 和 ? 适用;前者匹配任何数量的字符(包括没有),后者匹配单个字符。两者都匹配斜线(/)。
- 匹配从源码开始的路径名。因此,"Makefile.in " 只匹配源码根模流的文件,但 "\*/Makefile.in" 匹配所有目录层级的文件。
### License 规范
#### 语法
License名称是不区分大小写的并且不能包含空格。
在多重许可的情况下,当用户可以在不同的许可之间进行选择时,以及当作品的使用必须同时遵守多个许可的条款时,许可的短名称以 "or" 来分隔。
例如这是一个简单的“GPL 版本 2 或更高版本”字段:
License: GPL-2+
这是双重许可的 GPL/Artistic 作品,例如 Perl
License: GPL-1+ or Artistic
这适用于其中包含 GPL 和经典 BSD 代码的文件:
License: GPL-2+ and BSD
对于最复杂的情况,逗号用于消除 ors 和 ands 的优先级,并且优先级高于 or除非前面有逗号。例如
A or B and C 意味着 A or (B and C).
A or B, and C 意味着 (A or B), and C.
这是一个包含 Perl 代码和经典 BSD 代码的文件:
License: GPL-2+ or Artistic-2.0, and BSD
一个有OpenSSL例外的GPL-2+作品实际上是一个双重许可的作品它既可以根据GPL-2+重新发布也可以根据GPL-2+和OpenSSL例外重新发布。因此它被表述为
License: GPL-2+ with OpenSSL exception
### 如何检查 copyright
社区上游已经有程序能够帮助我们检查 copyright 的写法,这些程序目前都遵循 DEP-5 的规则。
#### licensecheck
维护者可以通过 licensecheck 命令对源码文件头部进行检查
- $ licensecheck * -r
#### cme
使用 cme命令根据源码文件头部自动更新 copyright 文件
- $ cme update dpkg-copyright
## 代码文件如何加 Copyright
在了解完 debian/copyright 的规则和使用工具后,来了解一下代码文件头部应该如何添加头文件。
使用多行注释符号 `/*....*/` 来进行版权信息添加。
### 自研开源应用
```
/*
* Peony-Qt
*
* Copyright (C) 2020, KylinSoft Co., Ltd.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
```
### 开源软件包修改
```
/*
* dpkg - main program for package management
* archives.c - actions that process archive files, mainly unpack
*
* Copyright © 1994,1995 Ian Jackson <ijackson@chiark.greenend.org.uk>
* Copyright © 2000 Wichert Akkerman <wakkerma@debian.org>
* Copyright © 2007-2015 Guillem Jover <guillem@debian.org>
* Copyright © 2011 Linaro Limited
* Copyright © 2011 Raphaël Hertzog <hertzog@debian.org>
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
```