2. Debian存档
Debian系统是通过一系列 软件包 得以维护和发行的。由于软件包数量太多(目前超过15000个),为了对它们进行便捷式管理,它们被划分进不同的 区,并被赋予不同的 优先性。
Debian项目致力于构建一个自由的操作系统,但是,并不是每一个我们想要提供的软件包都是我们所理解的 自由的 (参阅下文中Debian自由软件指南),或是可以不受限制地被导入或导出的。因此,根据软件包各自的许可证和相关限制,存档被划分成不同的组 [1]。
分组的目的是:
让我们能够提供尽可能多的软件
让我们能够鼓励每个人来编写自由软件,以及
让大家在不违反任何许可证、导入/导出限制、或任何其他法律的情况下更加便捷地为我们的系统创建CD-ROM。
存档的 main 组构成了 Debian发行版 。
其他分组(non-free-firmware
, contrib
, non-free
)内的软件包不被视为是Debian发行版的一部分,不过,我们仍为它们的使用提供支持,并为它们提供基础设施(例如我们的故障追踪系统和邮件列表)。本Debian政策手册对这些软件包也适用。
2.1. Debian自由软件指南
Debian自由软件指南(DFSG)形成了我们对“自由软件”的定义。即:
- 二次发行自由
Debian组件的许可证不得限制任何人出售或捐赠该软件,其中,该软件可能成为一个软件集合发行版中的一个组件,而该软件集合发行版可能包含了多个不同来源的程序。该许可证不得向销售方索取专利费或其他费用。
- 源代码
程序必须包括源代码,并且必须允许软件以源代码和编译形式发行。
- 衍生作品
许可证必须允许其他人对软件进行修改和发展其衍生作品,且必须允许它们在原始软件许可证条款下发行。
- 作者的源代码之完整性
许可证仅能在以下情形下限制源代码在发行时的修改行为,即,许可证允许发行带有源代码的“补丁文件”,且其目的是在编译时对程序进行修改。许可证必须明确表明允许发行用修改过的源代码编译成的软件。许可证可以要求衍生作品使用不同于原始软件的名称或版本号。(这是一种妥协。Debian项目鼓励所有作者不要限制他人对源代码文件或二进制文件进行修改。)
- 禁止歧视个人或群体
许可证不得歧视任何个人或由多人构成的群体。
- 禁止歧视用途
许可证不得限制任何人在特定领域使用该程序。例如,它不得限制该程序被用于商业目的,或被用于基因研究。
- 许可证的发行
程序所附带的权利必须适用于该程序再次发行时的所有受众,无需他们再执行一个附加的许可证。
- 许可证不得特定于Debian
程序附带的权利不得依赖于该程序是否为Debian系统的一部分。如果一个程序是从Debian中摘取出来,随后在Debian系统之外被使用或发行,但仍处在程序许可证条款的应用范围内,那么该程序再次发行的一切受众都拥有它与Debian系统结合时被赋予的一切权利。
- 许可证不得污染其他软件
许可证不得对与该许可软件一起发行的其他软件做出种种限制。例如,许可证不得要求在同一媒介中发行的所有其他程序都必须是自由软件。
- 许可证示例
“GPL”,“BSD”及“Artistic”是我们视为是 自由 的许可证的示例。
2.2. 存档分组
2.2.1. main存档组
main 存档组构成了Debian发行版。只有该组中的软件包被视为发行版的一部分。该组中的所有软件包都不依赖于该组以外的软件得以运行。任何人都可以自由使用、共享、修改和二次发行该组中的软件包 [2]。
main 组中的所有软件包必须遵守DFSG(Debian自由软件指南)。 [3]
此外, main 组中的软件包
不能通过要求或推荐该组以外的软件包而得以编译或执行(因此,该组中的软件包不能声明与non-main 组的软件包拥有以下关系,即
Pre-Depends
,Depends
,Recommends
,Build-Depends
,Build-Depends-Indep
,或Build-Depends-Arch
,除非该包仅列为 main 组中某一软件包的非默认候选),不能有太多故障以至于我们拒绝为其提供支持,并且
必须满足本手册中提出的所有政策要求。
如果一个源码包在 main 存档组中,那么它至少有一个二进制码包必须在 main 存档组中,并且剩下的软件包必须要么在 main 组中,要么在 contrib 组中。所有二进制软件包所属的存档组由其 Section
所示,见 分区。
存档工程不易处理 main 存档组中那些既包含 main 二进制软件包又包含 contrib 二进制软件包的源码包,因此,这些源码包应被局限于那些不易将其拆分的情形中。如果能很轻易将源码包拆分成独立于彼此构建的 main 部分和 contrib 部分,那么这些部分应当通过彼此独立的源码包得以展现。
当 main 组中的一个源码包既包含了 main 二进制软件包,也包含了 contrib 二进制软件包,那么该源码包和其 main 二进制软件包必须遵守 main 软件包的种种要求,但是其 contrib 二进制软件包则可以只遵守针对 contrib 软件包的相对弱的要求。尤其是,main 组中的源码包必须不得在该组之外拥有依赖关系,但是 contrib 二进制软件包可以在 main 组之外拥有运行依赖关系。
更多关于自由软件的含义,见 自由的含义是什么? 。
Debian的FTP Masters发布的 REJECT-FAQ 详细说明了Debian项目当前对DFSG的诠释。
2.2.2. non-free-firmware存档组
non-free-firmware 存档组包含了那些为用户所需要的硬件提供固件的软件包,初始化、使用和更新那些硬件需要这些固件,通常而言这些软件包对于一些重要的功能来说是必要的(即,无线网络连接),或者对于处理硬件缺陷是必要的(即,CPU微码更新)。该存档组中的软件包可以不遵守本手册中的一些政策要求,这可能是因为它的源代码是不可获得的,或者是因为一些针对修改的限制或其他的约束。
non-free-firmware 中软件包
不能有太多故障以至于我们拒绝为其提供支持,并且
must meet all policy requirements presented in this manual that it is possible for them to meet. [4]
2.2.3. contrib存档组
contrib 存档组包含了旨在与Debian发行版一同运作的补充性软件包,构建或运行这些软件包需要依赖发行版之外的软件。
contrib 组内的所有软件包必须遵守DFSG。
此外,contrib 组内的软件包
不能有太多故障以至于我们拒绝为其提供支持,并且
必须满足本手册中提出的所有政策要求。
贡献组包含的软件包示例有:
依赖于 contrib 组软件包、non-free 的软件包,或不在我们存档中的软件包来得以编译或执行的自由软件包。
包装软件包或其他类型的非自由程序中的自由组件。
如果一个源码包存在于 contrib 组中,那么该包生产的所有二进制软件包都必须属于 contrib 存档组。
2.2.4. non-free存档组
non-free 存档组包含了那些旨在与Debian发行版一同运作,但是要么不需要遵守DFSG,要么具有一些发行问题的补充性软件包。出于某些修改限制或其他一些局限性,这些软件可以不符合本手册中的某些政策要求。
如果软件包因为不符合DFSG或受到专利或法律上的限制从而具有发行上的问题,那么它们必须被放在 non-free 组中。
此外,non-free 组中的软件包
不能有太多故障以至于我们拒绝为其提供支持,并且
必须满足本手册中所有那些它们可以满足的政策要求。 [4]
如果一个源码包在 non-free 组中,那么该包生产的所有二进制软件包都必须被归入 non-free 存档组。
该包可能无法满足某些政策要求,例如,如果源码不可获得,那么该包就无法满足某些政策要求。这些情况需要根据具体情况进行处理。
2.3. 版权方面的考虑
每个包都必须在文件 /usr/share/doc/PACKAGE/copyright
中附有其发行许可证的逐字副本。
当满足以下所有条件时,软件包内文件的版权信息必须被逐字复制到 /usr/share/doc/PACKAGE/copyright
中,即:
这些文件的发行许可证要求其所有副本以及/或者二进制发行版本都包含其版权信息;
这些文件以源代码形式或编译形式通过二进制包发送;以及
文件在二进制包中呈现的形式不包括其版权声明的纯文本版本。
因此,针对作为源码包构建过程一部分的文件,其版权信息不需要包含在 /usr/share/doc/PACKAGE/copyright
中,例如autotools文件的版权信息,这是因为这些文件没有被安装到二进制包中。同样,纯文本文件已包含了它自己的版权信息,并在未经修改的情况下安装至二进制包中,因此,它们也不需要将其版权信息复制到 /usr/share/doc/PACKAGE/copyright
。
但是,当某软件包的许可证要求在所有副本以及/或者二进制发行版本中包含其版权信息时,那么对于所有被发送至二进制包的被编译成目标代码的文件,其版权声明必须全部包含在 /usr/share/doc/PACKAGE/copyright
,大部分许可证都是这样要求的。[5]
更多细节见 Copyright information 。
出现以下情况,我们保留不将相关文件放入存档的权利,即
其使用或发行会违反法律,
其发行或使用带有伦理上的冲突,
我们需要为它签署许可证,或者
其发行会与其他政策发生冲突。
如果程序的作者没有声明其使用者不捐款是不道德的、非法的或其他一些类似的说法,那么,程序的作者可以鼓励该程序的使用者捐款。在这种情况中,这类程序必须被归入 non-free 组中。
对于下类软件包来说,它们不能被放在Debian FTP站点或其镜像上,即它们的版权许可声明(或专利事宜)不允许它们被二次发行,连仅仅是对其二进制文件进行二次发行也不允许,并且,不存在任何对它们的特殊许可。
需要注意的是,根据国际版权法(也适用于美国),未经明确说明,任何人 不得 发行或修改相关作品。因此,没有版权声明的程序 是 受版权保护的,对它做出任何举动都有被起诉的风险!同样地,如果一个程序有版权声明,但其中没有说明哪些行为是被允许的,那么一切行为都是不被允许的。
许多作者没有意识到限制性版权(或相关版权声明的缺失)可能会给使用他们的所谓自由软件的用户带来什么样的后果。通常来说,使用者应该主动联系这些作者,委婉地要求他们对其许可证的相关条款进行修改。不过,这样做可能会产生一些政治上的问题,因此,使用者应该先在 debian-legal
的邮件列表上寻求建议,下文会对此进行进一步的解释。
如果对版权有疑问,请发送邮件至 debian-legal@lists.debian.org。准备好向我们提供相关版权声明。GPL、公共领域软件和类BSD版权覆盖下的软件是安全的;但是要留意“禁止商业使用“和“限制发行”这一类用语。
被视为不需要将其所有版权声明复制到Debian的版权文件中的许可证包括Apache-2.0和Boost软件许可证,版本1.0。FTP团队会最终决定一个包的版权文件是否需要被复制。
如需查找需要被复制的版权声明,你可以尝试 grep --color=always -Eir '(copyright|©)' * | less -R
2.4. 分区
为了方便管理,main 组, non-free-firmware 组,contrib 组,和 non-free 组内的软件包被进一步归入不同的 分区 。
每个软件包的所在分组和所在分区应该在包的 Section
控制记录中得以明确,(见 Section)。不过,为了确保Debian发行版的一致性,Debian存档的维护者可以对此进行修改。Section
记录字段格式应当如下:
如果软件包在 main 组内,标记 section 。
如果包在 non-free-firmware 组、contrib 组、或 non-free 组中,标记 area/section 。
Debian存档的维护者提供具有权威性的分区列表。目前的分区包括:admin, cli-mono, comm, database, debug, devel, doc, editors, education, electronics, embedded, fonts, games, gnome, gnu-r, gnustep, graphics, hamradio, haskell, httpd, interpreters, introspection, java, javascript, kde, kernel, libdevel, libs, lisp, localization, mail, math, metapackages, misc, net, news, ocaml, oldlibs, otherosfs, perl, php, python, ruby, rust, science, shells, sound, tasks, tex, text, utils, vcs, video, web, x11, xfce, zope。。debian-installer 作为一个附加的分区包含了安装程序所使用的特殊软件包,该区不适用于普通的Debian软件包。
有关分区及其定义的更多信息,请参阅 unstable中的分区列表 。
2.5. 优先级
每个软件包都必须有一个优先级值,该值被设定在Debian存档的元数据中,同时它也包含在软件包的控制文件中(见 Priority)。此信息用于控制哪些软件包需要被包含Debian标准安装中,哪些需要被包含在最简安装中。
大多数Debian软件包的优先级都是 optional
。 optional
优先级之外的优先级仅用于那些默认情况下应包含在Debian标准安装中的软件包。
一个软件包的优先级仅由它直接为用户提供的功能来决定。一个软件包的优先级不应仅仅由于另一个具有更高优先级的包依赖于它而得到升级;用于构建Debian安装的工具会正确地处理包与包之间的依赖关系。这尤其意味着C类函数库的优先级几乎永远不会高于 optional
,这是因为它们不直接向用户提供功能。不过,作为例外,Debian安装程序的维护者可以为了解决一些安装问题,并确保在标准或最简安装中包含正确的软件包,从而要求提高某个软件包的优先级。
Debian包管理工具承认以下 优先级 值。
required
系统正常运行所必需的包(通常,这意味着dpkg功能依赖于这些包)。删除一个带有
required
优先级的包可能会导致你的系统完全崩溃,即使通过dpkg
也可能无法补救,因此,仅在完全理解这一删除行为意味这什么的情况下删除相关包。仅包括
required
软件包的系统具有足够的功能供系统管理员启动系统并安装更多软件。important
具有该优先级的程序为重要程序,其中包括在所有类Unix系统上都能找到的程序。如果一个有经验的Unix程序员在找不到某一个程序时说“到底是怎么回事,
foo
在哪里?”时,那么该程序一定是一个important
包。[6] 如果没有它系统就无法正常运行或无法使用,那么该软件包也必须具有优先级important
。这 不 包括Emacs、X Window System、TeX或任何其他大型应用程序。important
软件包只是那些满足最低限度普遍预期的和必要的工具。standard
这些包提供了一个相对而言小但不太受限的字符模式系统。如果用户没有做出其他选择,系统会默认将其安装。许多大型应用程序不包含在内。
优先级均为
standard
或更高优先极的两个包不得相互冲突。optional
这是存档中大多数包的默认优先级。除非一个软件包应该被默认安装在标准的Debian系统上,否则它应该具有
optional
优先级。优先级为optional
的包可能会相互冲突。extra
此优先级已弃用。请改用
optional
优先级。这个优先级应该被视为等同于optional
。extra
优先级以前用于与其他包冲突的包和大概率只对有特殊要求的人有用的包。然而,这种区别有些武断,没有得到一致的遵循,也不足以保证存档维护的有效性。
这是一个重要的标准,因为我们试图创建一个自由的Unix。