2. Debian存档

Debian系统是通过一系列 软件包 得以维护和发行的。由于软件包数量太多(目前超过15000个),为了对它们进行便捷式管理,它们被划分进不同的 ,并被赋予不同的 优先性

Debian项目致力于构建一个自由的操作系统,但是,并不是每一个我们想要提供的软件包都是我们所理解的 自由的 (参阅下文中Debian自由软件指南),或是可以不受限制地被导入或导出的。因此,根据软件包各自的许可证和相关限制,存档被划分成不同的组 [1]

分组的目的是:

  • 让我们能够提供尽可能多的软件

  • 让我们能够鼓励每个人来编写自由软件,以及

  • 让大家在不违反任何许可证、导入/导出限制、或任何其他法律的情况下更加便捷地为我们的系统创建CD-ROM。

存档的 main 组构成了 Debian发行版

其他分组(non-free-firmware, contrib, non-free)内的软件包不被视为是Debian发行版的一部分,不过,我们仍为它们的使用提供支持,并为它们提供基础设施(例如我们的故障追踪系统和邮件列表)。本Debian政策手册对这些软件包也适用。

2.1. Debian自由软件指南

Debian自由软件指南(DFSG)形成了我们对“自由软件”的定义。即:

  1. 二次发行自由

    Debian组件的许可证不得限制任何人出售或捐赠该软件,其中,该软件可能成为一个软件集合发行版中的一个组件,而该软件集合发行版可能包含了多个不同来源的程序。该许可证不得向销售方索取专利费或其他费用。

  2. 源代码

    程序必须包括源代码,并且必须允许软件以源代码和编译形式发行。

  3. 衍生作品

    许可证必须允许其他人对软件进行修改和发展其衍生作品,且必须允许它们在原始软件许可证条款下发行。

  4. 作者的源代码之完整性

    许可证仅能在以下情形下限制源代码在发行时的修改行为,即,许可证允许发行带有源代码的“补丁文件”,且其目的是在编译时对程序进行修改。许可证必须明确表明允许发行用修改过的源代码编译成的软件。许可证可以要求衍生作品使用不同于原始软件的名称或版本号。(这是一种妥协。Debian项目鼓励所有作者不要限制他人对源代码文件或二进制文件进行修改。)

  5. 禁止歧视个人或群体

    许可证不得歧视任何个人或由多人构成的群体。

  6. 禁止歧视用途

    许可证不得限制任何人在特定领域使用该程序。例如,它不得限制该程序被用于商业目的,或被用于基因研究。

  7. 许可证的发行

    程序所附带的权利必须适用于该程序再次发行时的所有受众,无需他们再执行一个附加的许可证。

  8. 许可证不得特定于Debian

    程序附带的权利不得依赖于该程序是否为Debian系统的一部分。如果一个程序是从Debian中摘取出来,随后在Debian系统之外被使用或发行,但仍处在程序许可证条款的应用范围内,那么该程序再次发行的一切受众都拥有它与Debian系统结合时被赋予的一切权利。

  9. 许可证不得污染其他软件

    许可证不得对与该许可软件一起发行的其他软件做出种种限制。例如,许可证不得要求在同一媒介中发行的所有其他程序都必须是自由软件。

  10. 许可证示例

    “GPL”,“BSD”及“Artistic”是我们视为是 自由 的许可证的示例。

2.2. 存档分组

2.2.1. main存档组

main 存档组构成了Debian发行版。只有该组中的软件包被视为发行版的一部分。该组中的所有软件包都不依赖于该组以外的软件得以运行。任何人都可以自由使用、共享、修改和二次发行该组中的软件包 [2]

main 组中的所有软件包必须遵守DFSG(Debian自由软件指南)。 [3]

此外, main 组中的软件包

  • 不能通过要求或推荐该组以外的软件包而得以编译或执行(因此,该组中的软件包不能声明与non-main 组的软件包拥有以下关系,即 Pre-DependsDependsRecommendsBuild-DependsBuild-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 组之外拥有运行依赖关系。

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.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. 优先级

Each package must have a priority value, which is set in the metadata for the Debian archive and is also included in the package's binary control (see Priority), .dsc and .changes files. This information is used to control which packages are included in standard or minimal Debian installations.

Starting with dpkg version 1.22.13, the Priority of a binary package is set to optional unless specified otherwise in the source or its binary stanza in the source package template control file. Therefore, explicitly specifying Priority as optional may be omitted.

大多数Debian软件包的优先级都是 optionaloptional 优先级之外的优先级仅用于那些默认情况下应包含在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 优先级以前用于与其他包冲突的包和大概率只对有特殊要求的人有用的包。然而,这种区别有些武断,没有得到一致的遵循,也不足以保证存档维护的有效性。