docs/社区开发指南/openKylin软件包版权协议补充指南.md

9.8 KiB
Raw Blame History

title date tags
openKylin软件包版权协议补充指南 2022-09-16 14:36:45

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

openKylin 对待软件包版权和许可证信息的态度十分严格,在 openKylin 中的所有软件包都应包含相应的版权信息,一般包括如下三步:

  1. 将相应的版权声明文件放入每个源文件的头部注释中;
  2. 在软件包的一级目录下创建以“LICENSE”或“COPYING”为名的文件放入整个项目的许可证信息
  3. 在debian/copyright 文件中提供项目所有源文件版权信息的摘要;

推荐新的开源项目使用Mulan PSL v2协议 。Mulan PSL v2与BSD类许可证类似有很好的兼容性BSD、MIT类宽松许可证兼容Mulan PSL v2协议Mulan PSL v2协议兼容Apache License v2.0、L/GPLv2、L/GPLv3等许可证。即许可在BSD、MIT类许可证下的代码可以贡献到使用Mulan PSL v2协议的项目中使用Mulan PSL v2协议的代码可以贡献到Apache License V2.0、L/GPLv2或L/GPLv3等项目中。

头部注释

针对项目内的.c/.cpp/.h/.py/.java 等源文件,在头部注释添加相应版权声明,相应的声明可在许可证文本信息中找到,也可以参考遵循相同许可证的项目:

以项目ukui-foo许可证“Mulan PSL v2”copyright主体 Zhang Three 为例,需要在每个源文件头部注释中插入:

Copyright (c) 2022 Zhang Three
ukui-foo is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at:
         http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details.

以项目ukui-foo许可证GPL-3.0+copyright主体 Zhang Three 为例:

Copyright (C) 2022 Zhang Three

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, 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 <http://www.gnu.org/licenses/>.

企业用户使用企业copyright

项目license文件

依据项目遵循的许可证情况需要将相应的许可证完整内容openKylin可从/usr/share/common-license目录下获取, Mulan PSL v2协议从官网获取),拷贝到项目的一级目录下,重命名为"LICENSE"或“COPYING”。 以项目ukui-foo许可证GPL-3为例

cd ukui-foo
cp /usr/share/common-license/GPL-3 COPYING

debian/copyright文件

文件语法

debian/copyright 文件必需要传达所有规定的上游信息、版权声明和许可细节,该文件由两个或更多段落组成。至少,该文件必须包括一个标题段和一个文件段。

段落

有三种类型的段落。文件中的第一个段落被称为标题段。其他每一段都是 Files 段或者是独立的 License 段。

标题段

以下字段可以出现在标题段中

  • 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

类型:单行值;

该文件格式遵循规范的地址,如:

Upstream-Name

类型:单行值;

上游使用的软件名

Upstream-Contact

类型:基于行的列表;

到达上游项目的首选地址。可能是自由格式的文本,但按照惯例,通常会写成 RFC5322 地址或 URI 的列表。

Source

类型:格式化文本,无概要;

上游来源的解释。通常这将是一个 URL但它可能是一个自由格式的解释。如果上游源已被修改以删除非自由部分则应在此字段中进行说明。

Disclaimer

类型:格式化文本,无概要;

此字段可用于非免费和贡献包(non-free)的情况

Comment

类型:格式化文本,无概要;

此字段可以提供附加信息。

License

类型:格式化的文本,带有简述;

在标题段中,这个字段给出了整个软件包的许可信息,它可能不同于每个文件许可信息的所有组合或是它们的简化。在 Files 段中,这个字段给出了该段的文件字段中所列文件的许可条款。在一个独立的许可段落中,它给出了那些引用它的段落的许可条款。

第一行:许可证的缩写名称,或提供替代方案的表达方式。标准缩写

剩下的几行:如果这里留空,文件必须包括一个独立的许可证段落,与第一行列出的每个许可证短名称相匹配。否则,这个字段应该包括许可证的全文,或者包括一个指向/usr/share/comm-licenses下的许可证文件的指针。这个字段应该包括所有需要的文本以满足 Debian Policy 对包含软件发行许可的要求,以及任何许可要求,即在二进制软件包中包含保修免责声明或其他声明。

类型:有格式的文本,无概要;

一个或多个自由格式的版权声明。任何格式都是允许的; 请看下面的例子,以了解如何组织这个字段使其更容易阅读。在标题段中,这个字段给出了整个软件包的版权信息,它可能不同于或简化于所有每个文件的版权信息的组合。在 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

debian/copyright可以参考示例

社区上游已经有程序能够帮助我们检查 copyright 的写法,这些程序目前都遵循 DEP-5 的规则。

licensecheck

维护者可以通过 licensecheck 命令对源码文件头部进行检查

  • $ licensecheck * -r

cme

使用 cme命令根据源码文件头部自动更新 debian/copyright 文件

  • $ cme update dpkg-copyright