第 4 章 兼容性问题

目录

4.1. Debian GNU/Linux 可以运行于哪些硬件架构/系统上?
4.2. Debian GNU/Linux 使用什么内核?
4.3. Debian 与其他 Linux 发行版的兼容性如何?
4.4. Debian 系统和其他 Unix 系统之间的源代码兼容性怎么样?
4.5. 我可以在我的 Red Hat/Slackware/……Linux 系统使用 Debian 软件包(“.deb”文件)吗?我可以在我的 Debian GNU/Linux 系统使用 Red Hat 软件包(“.rpm”文件)吗?
4.6. 我应该如何安装非 Debian 的应用程序?

4.1. Debian GNU/Linux 可以运行于哪些硬件架构/系统上?

Debian GNU/Linux 包含的所有程序都提供完整的源代码,所以它应当能在 Linux 内核支持的所有系统上工作;阅读 Linux FAQ 以了解更多细节。

当前的 Debian GNU/Linux 版本,12,对于以下架构而言,有完整的二进制发行版:

  • amd64:这囊括了基于支持 AMD64 扩展的 64 位 AMD CPU 的系统,以及基于支持 EM64T 扩展的英特尔 CPU 的系统,以及一个常见的 64 位用户空间。

  • arm64:支持含有最新的 64 位 ARM 处理器的设备。

  • armel:小端序 ARM 机器。

  • armhf:作为 armel 的替代品,提供给支持硬件浮点数的 ARMv7 机器。

  • i386:这囊括了基于英特尔及其兼容处理器的系统,包括英特尔的 386、486、奔腾、奔腾 Pro、奔腾 II(包括 Klamath 和赛扬),和奔腾 III,以及大多数 AMD、Cyrix 和其他厂商的兼容处理器。

  • ia64:英特尔 IA-64(“安腾”)计算机。

  • mips:SGI 的大端序 MIPS 系统,Indy 和 Indigo2;mipsel:小端序 MIPS 机器,Digital DECstation。

  • powerpc:这包括一些 IBM/摩托罗拉的 PowerPC 机器,包括苹果麦金塔 PowerMac 型号,以及 CHRP 和 PReP 开放架构的机器。

  • ppc64el:64 位小端序 PowerPC 移植,支持数个较新的 PowerPC/POWER 处理器。

  • s390x:用于 IBM System z 机器的 64 位移植,替代 s390。

Debian hurd-i386(在 i386 32 位 PC 上运行 GNU Hurd 内核),mipsel64(小端序模式的 64 位 MIPS),powerpcspe(针对“Signal Processing Engine”硬件的移植),sparc64 (64 位 SPARC 处理器),sh (日立 SuperH 处理器)以及 x32(在 amd64/x86_64 CPU 上使用 32 位指针)二进制发行版的开发正在进行中。

m68k 架构的支持在 Etch(Debian 4.0)版本被放弃,因为它不符合 Debian 发布管理员设定的标准。该架构包括了含有 Motorola 680x0 处理器(x>=2)和 MMU 的 Amiga 和 ATARI 机器。不过,虽然它不是官方稳定发布版本的一部分,该移植仍然活跃且可以安装,并可能在未来的版本中重新被激活。

由于类似的原因,对 hppa(惠普的 PA-RISC 机器)以及 alpha(Compaq/Digital 的 Alpha 系统)的支持在 Squeeze(Debian 6.0)版本被放弃。arm 也在该发布版本被放弃,因为它已被 armel 架构取代。

对 32 位 s390 移植的支持(s390)在 Jessie(Debian 8)版本已停止,它已被 s390x 取代。此外,由于开发人手不足,对 IA-64 和 Sparc 移植的支持在此发布版本也被迫被移除。

关于可用的移植的更多信息,请查看网站上的移植页面

关于引导、磁盘分区、启用 PCMCIA(PC 卡)设备以及类似的问题,请遵循安装手册的指引,可以在我们网站 https://www.debian.org/releases/stable/installmanual 阅读。

4.2. Debian GNU/Linux 使用什么内核?

除了 Linux,Debian 也针对如下操作系统内核提供完整的二进制发行版:

  • FreeBSD:通过 kfreebsd-amd64 以及 kfreebsd-i386 移植提供,分别针对 64 位 PC 和 32 位 PC。这两个移植首次在 Debian 6.0 Squeeze 作为技术预览版发布。然而它们并不是 Debian 8 Jessie 版本的一部分。

除了这些以外,针对以下移植的工作正在进行中:

  • avr32,针对 Atmel 的 32 位 RISC 架构的移植,

  • hurd-i386,针对 32 位 PC 的移植。该移植将使用 GNU Hurd,GNU 团队共同编写的新操作系统,

  • sh,针对日立 SuperH 处理器的移植。

过去曾有将本发行版移植到 NetBSD 内核的尝试,以提供 netbsd-i386(针对 32 位 PC)和 netbsd-alpha(针对 Alpha 机器),但这些移植从未被发布,并且现在已被废弃。

关于可用的移植的更多信息,请查看网站上的移植页面

4.3. Debian 与其他 Linux 发行版的兼容性如何?

Debian 开发者与其他 Linux 发行版作者沟通,以期维持与其他 Linux 发行版的兼容性。[1]大多数商业的 Linux 产品在 Debian 上运行得和在构建它的发行版上一样好。

Debian GNU/Linux 遵从 Linux 文件系统层次结构标准。然而,对此标准的一些规则的解释存在变通空间,所以 Debian 系统和其他 Linux 系统可能存在细微差别。

4.4. Debian 系统和其他 Unix 系统之间的源代码兼容性怎么样?

对于大多数应用,Linux 版本的源代码和其他 Unix 操作系统兼容。Linux 支持 System V Unix 系统,以及自由和商业的 BSD 衍生系统所支持的几乎一切东西。然而在 Unix 圈子,这种声明几乎没有价值,因为没有方法可以证明它。在软件开发领域,完全的兼容性是必需的,而不是“在大多数情况下”的兼容。所以多年以前,对标准的需求出现了,而如今 POSIX.1(IEEE 标准 1003.1-1990)是类 Unix 操作系统源代码兼容性的主要标准之一。

Linux 打算遵循 POSIX.1,,但 POSIX 标准需要花钱,且 POSIX.1(以及 FIPS-151-2)认证十分昂贵;这使得 Linux 开发者追求完全符合 POSIX 标准变得十分困难。认证费用使 Debian 不太可能获得官方兼容性认证证书,即使它能完全通过验证套件。(验证套件现在可以免费获得,所以可以预期更多人将会着手解决 POSIX.1 兼容性问题。)

Unifix GmbH(位于德国 Braunschweig)开发了一个获得了 FIPS 151-2(POSIX.1 的超集)认证的 Linux 系统。这项技术被用于 Unifix 自己的发行版,称作 Unifix Linux 2.0,以及 Lasermoon 的 Linux-FT。

4.5. 我可以在我的 Red Hat/Slackware/……Linux 系统使用 Debian 软件包(“.deb”文件)吗?我可以在我的 Debian GNU/Linux 系统使用 Red Hat 软件包(“.rpm”文件)吗?

不同的 Linux 发行版使用不同的软件包格式以及不同的软件包管理系统。

您也许可以:

将 Debian 软件包解包到运行不同的 Linux 发行版的机器上的程序已经出现了,而且一般能够工作,至少文件可以被正确解包。反过来也大致成立,也就是说,将 Red Hat 或者 Slackware 软件包解包到运行 Debian GNU/Linux 的机器上的程序也许可以正确地解包并放置大多数文件到正确的目录。这主要归功于 Linux 文件系统层次结构标准的存在(以及被广泛接受)。可使用 Alien 软件包在不同的软件包格式之间进行转换。

您也许不会想要:

大多数软件包管理器在解包档案时会写一些管理文件。这些管理文件通常没有标准化。所以,在运行其他发行版的系统上解包 Debian 软件包会对该系统的软件包管理器产生不可预测的(当然也不是正面的)效果。类似地,来自其他发行版的工具可能可以在 Debian 系统中成功解包它们的档案,但可能会使得 Debian 软件包管理系统在后续升级或删除一些软件包时出错,甚至简单地输出系统上有哪些软件包时也可能出错。

更好的方式:

Linux 文件系统标准(所以也包括 Debian GNU/Linux)要求 /usr/local/ 下的子目录完全由用户处置。所以,用户可以解包其他发行版的软件包到此目录,然后单独管理它们的配置、升级和删除。

4.6. 我应该如何安装非 Debian 的应用程序?

目录 /usr/local/ 下的文件不受 Debian 软件包管理系统的控制。因此,将您的程序的源代码放在 /usr/local/src/ 是个好习惯。比如,您可能会解压名为“foo.tar”的软件包源码到目录 /usr/local/src/foo。在您编译它们之后,将二进制文件放入 /usr/local/bin/,库文件放入 /usr/local/lib/,配置文件放入 /usr/local/etc/

如果您的程序和/或文件真的必须放入其他的目录,您也可以将它们保存在 /usr/local/,并建立从必须存入的目录到 /usr/local/ 中实际路径的符号链接。例如,您可以建立如下的链接

ln -s /usr/local/bin/foo /usr/bin/foo

在任何情况下,如果您获得了一个版权声明允许再次发布的软件包,您应该考虑用它制作一个 Debian 软件包,并将其上传到 Debian 系统。成为一名软件包开发者的指引可在 Debian 政策文档中找到(参见第 12.1 节 “Debian 系统中还能获得哪些有针对性的文档?”)。



[1] Linux Standard Base 是一个允许相同的二进制软件包在多个发行版运行的标准。在 Jessie(Debian 8)发布之后,Debian 放弃了对 LSB 兼容性的追求。参见这条 Didier Raboud 于 2015 年 7 月 3 日发布的消息以及后续的讨论以了解背景信息。