<!-- Subversion revision of original English document "2059" -->
<!--
   Chinese version: $Revision: 1.1 $
   -->  
<chapt id="compat">兼容性问题

<sect id="arches">可以在什么样的硬件系统上运行?

<p>&debian; 包含所有程序的完整源代码, 因此可以在所有Linux内核支持的硬件系统上运行; 详见 <url name="Linux FAQ" id="http://en.tldp.org/FAQ/Linux-FAQ/intro.html#DOES-LINUX-RUN-ON-MY-COMPUTER">.

<!-- XXX update for new distros -->
<p>&debian; 现在的版本是 &release;, 包括在以下硬件系统上运行的完整的源代码和二进制程序:

<p><em/i386/: 指基于 Intel 和兼容处理器的 PC 机,包括Intel的 386, 486, Pentium, Pentium Pro, Pentium II (Klamath 和 Celeron), 和 Pentium III, 以及 AMD, Cyrix 等制造的兼容处理器.

<p><em/m68k/: 指基于Motorola 680x0 的Amiga 和 ATARI系列.

<p><em/alpha/: 指 Compaq/Digital 的 Alpha 系统.

<p><em/sparc/: 指Sun的 SPARC 和大部分的 UltraSPARC 系统.

<p><em/powerpc/: 指 IBM/Motorola PowerPC, 包括 CHRP, PowerMac 和 PReP.

<p><em/arm/: 指ARM 和 StrongARM.

<p><em/mips/: 指 SGI 的 big-endian MIPS 系统, Indy 和 Indigo2;
<em/mipsel/: 指 little-endian MIPS, Digital DECstations.

<p><em/hppa/: 指 Hewlett-Packard 的 PA-RISC(712, C3000, L2000, A500).

<p><em/ia64/: 指Intel 的 IA-64 ("Itanium") 计算机.

<p><em/s390/: IBM 的 S/390 系统.

<p> 基于 Sparc64(UltraSPARC native) 的 Debian 的二进制版本正在开发阶段.

<p> 更多的具体硬件支持详见用户安装手册
<url id="http://www.debian.org/releases/stable/installmanual">.

<sect id="otherdistribs">与其他的linux发行版兼容行如何?
	
<p>Debian 发者努力与其他 Linux 发行版沟通, 以保持软件的兼容性. 大多数的软件都可以象在他们的开发环境下一样运行的很好.

<p>&debian; 遵循 <url name="Linux 文件系统层次标准)Linux Filesystem Hierarchy Standard)" id="http://www.pathname.com/fhs/">. 但是, 在规则解释上存在一定的回旋余地因此某些细节上可能与其它发行版有所不同.

<sect id="otherunices">Debian 源码与其他 Unix 兼容性如何?
	
<p>大多数Linux程序的源码是和其他 Unix 系统相兼容的. 它几乎支持 System V Unix 系统和自由的和商业的 BSD 系统中的所有程序的源码. 但是说法无法证明, 因此对于 UNIX 没有什么价值. 在软件开发中需要的是完全兼容, 而不是大部分兼容. 因此出现了今天的 POSIX.1 (IEEE Standard 1003.1-1990), 类 UNIX 系统源码兼容性的主要标准之一.

<p>Linux 原本要基于 POSIX.1 的, 但是 POSIX 不是免费的, 而且 POSIX.1 证书相当昂贵. 这使得 Linux 基于 POSIX 开发相当困难. 证书费用使得 Debian 获得官方兼容性证明相当困难, 即使已经完全通过确认条款(为了让更多的人在 POSIX 标准上工作, 这些确认条款可以免费获得).

<!-- <p><strong>(The authors would very much like to give you a pointer to
an on-line document that described that standard, but the IEEE is another
one of those organizations that gets away with declaring standards and then
requiring that people PAY to find out what they are.  This makes about as
much sense as having to find out the significance of various colored lights
on traffic signals.)</strong> -->

<p>Unifix 股份有限公司(Braunschweig, 德国) 开发了一个获得了 FIPS 151-2 证书的 Linux 系统. 这种技术用于 Unifix 的发行版 Unifix Linux 2.0 和 Lasermoon 的 Linux-FT.

<!-- I had to comment this out for obvious reasons... SVD
 <url name="Linux-FT" url="http://www.lasermoon.co.uk/linux-ft/linux-ft.html">.
Currently Unifix merges its patches into the Linux kernel, gcc and other
tools; so it is expected that their fixes towards POSIX.1 conformance will
be available in Debian (and other distributions).
-->

<!-- TODO: explain better how to unpack .debs onto non-Debian systems -->
<sect id="otherpackages">我可以在 RedHat/Slackware/... 上使用 Debian 的包(".deb"文件)吗? 我可以在 Debian 上使用 RedHat 的 rpm 包吗?


<p>不同的发行版使用不同的软件包格式和软件包管理程序.

<taglist>
<tag><strong/你或许能:/
  <item>通过一个程序可以把一个 Debian 包安装基于'其它'发行版的 Linux 系统中, 通常可以正常运行, 也可以把一个RedHat 或 Slackware 格式的包转换成 &debian; 格式的包. 这得益于 Linux 文件系统的层次标准. <url name="Alien" id="http://packages.debian.org/alien"> 程序用于不同格式的包的转换.

<tag><strong/你或许不想:/
  <item>有些人在安装文件时, 自己来写安装控制文件, 通常这些文件是不标准的. 因此在 '其它' 系统上安装一个 Debian 包, 对于包管理系统可能产生不可预知的影响. 同样一个其它系统上的程序也许可以成功的安装到 Debian 系统中, 但是, 可能会导致 Debian 包管理系统不能完成一些包升级或删除, 甚至不能报告系统上安装了哪些包.

<tag><strong/一个比较好的方法:/
  <item>Linux文件系统标准建议 <tt>/usr/local/</tt> 下的目录完全由用户使用, 因此可以将‘foreign' 软件安装到这个目录下,进行配置,升级,或删除.
</taglist>

<!-- It would be useful to document all the ways in which Debian and RedHat
systems differ.  I believe such a document would do a lot to dispell
fears of using a Unix system. SGK -->

<sect id="a.out">Debian 可以运行 "a.out" 程序吗 ?

<p>你确实还有这样的程序吗? :-)

<p><em>执行</em> 一个类似于 <tt>a.out</tt> 格式的程序(即, QMAGIC 或 ZMAGIC),

<list>
  <item>确定内核支持, 要么内建支持(CONFIG_BINFMT_AOUT=y), 要么动态模块支持(CONFIG_BINFMT_AOUT=m). (Debian 的内核影像含有一个 <tt>binfmt_aout</tt> 模块)

  <p>如果你的内核是动态模块支持, 那么确保 <tt>binfmt_aout</tt> 模块已加载. 你可以修改 <tt>/etc/modules</tt> 文件, 使得 <tt>binfmt_aout</tt> 模块启动时加载. 也可以执行 <tt>insmod DIRNAME/binfmt_aout.o</tt> 命令来完成. <tt>DIRNAME</tt> 指和内核版本有关的路径名, 在 2.2.17 内核的系统中 <tt>DIRNAME</tt> 有可能是 <tt>/lib/modules/2.2.17/fs/</tt>.

  <item>安装可以在 2.0 以前版本找到的 <package/libc4/ 包（因为 2.0 开始删除了那个包). 可以在老版的 Debian 光盘（Debian 1.3.1 仍然含有这个包）或者这里 <url id="ftp://archive.debian.org/debian-archive/"> 找到

  <item>如果你执行的程序是个<tt>a.out</tt>图形客户端, 安装 <package/xcompat/ 包.(参阅前面的获取方法).
</list>

<p>如果你有 <tt>a.out</tt> 格式的商业程序, 这是要求商家发给你一个 <tt>ELF</tt> 升级版的好机会.

<sect id="libc5">IDebian 可以运行 libc5 程序吗?

<p>是的,只需要从 <tt>oldlibs</tt> 区域(与老程序兼容所需包)安装 <package/libc5/ 库.

<sect id="libc5-compile">Debian 可以编译 libc5 程序吗?

<p>是的.  从 <tt>oldlibs</tt> 目录安装 <package/libc5-altdev/ 和 <package/altgcc/ 软件包. 你会在 <tt>/usr/i486-linuxlibc1/bin</tt> 目录下发现所需的 <prgn/gcc/ 和 <prgn/g++/, 把它放入你的 $PATH 变量, 使得<prgn/make/ 和其他程序首先执行它.

<p>编译客户端图形窗口系统(X clients), 需要安装 <package/xlib6/ 和 <package/xlib6-altdev/ 包.


<p>注意我们的其他软件包对 libc5 环境不是支持的太好.

<sect id="non-debian-programs">如何安装非 Debian 格式程序?
	
<p><tt>/usr/local/</tt> 目录下的文件不在 Debian 包管理系统控制范围之内. 因此把你的程序的源代码放到 /usr/local/src/ 目录下是个不错的习惯. 例如你可以把一个名为 "foo.tar" 的包解压到 <tt>/usr/local/src/foo</tt> 目录, 编译后，可执行程序放到 <tt>/usr/local/bin/</tt>, 库文件放到 <tt>/usr/local/lib/</tt>, 配置文件放到<tt>/usr/local/etc/</tt>.

<p>如果你的程序必须放到其它目录, 你仍可以把它们放到这个目录, 在需要的目录建立一个符号连接指向 <tt>/usr/local/</tt> 目录下它的位置. 如
<example>ln -s /usr/local/bin/foo /usr/bin/foo</example>

<p>如果你获得一个可再分发的软件, 可以把它做成 Debian 格式的包, 然后把它加载到 Debian 系统中, 在用户手册中有关于Debian 格式包制作的介绍(详见<ref id="debiandocs">).

<sect id="xlib6">我运行 <tt>foo</tt> 时为什么提示 " 无法找到libX11.so.6"?

<p>这个错误表明此程序使用的 X11 的库是 <tt>libc5</tt>版本, 这就意味着你需要从 <tt>oldlibs</tt> 安装<package/xlib6/
This error message could mean that the program is linked against the
<tt>libc5</tt> version of the X11 libraries. In this case you need to
install the <package/xlib6/ package, from the <tt>oldlibs</tt> section.

<p>你也可能碰到关于 libXpm.so.4 的错误信息, 这就需要从 <package/xpm4.7/ 包中安装libc5 版本的 XPM 库.

<sect id="termcap">为什么我不能编译需要 libtermcap 的程序?
	
<p>Debian 使用 <tt>terminfo</tt> 数据库和 <tt>ncurses</tt> 库文件而不是 <tt>termcap</tt> 数据库和<tt>termcap</tt> 库文件. 编译这些软件时应该用 <tt>libncurses</tt> 替换 <tt>libtermcap</tt>, 并且用户应该有一定的关于终端接口的知识.

<p>为了运行已经和 <tt>termcap</tt> 库相连并且你没有源代码的程序, Debian 提供了一个称作 <package/termcap-compat/ 的包, 它提供了 <tt>libtermcap.so.2</tt> 和 <tt>/etc/termcap</tt>, 安装这个包可以解决程序运行提示无法加载'libtermcap.so.2'库或缺少 <tt>/etc/termcap</tt> 文件的问题.

<sect id="accelx">什么无法安装 AccelX?
	
<p>AccelX 安装时会用到 <tt>termcap</tt> 库, 详见<ref id="termcap">.

<sect id="motifnls">为什么我的 XFree2.1Motif 崩溃了?

<p>你需要安装 <package/motifnls/ 包, 他提供了在 XFree-3.1下运行基于 XFree-2.1 编译的 Motif 程序的XFree-2.1 配置文件.

<p>没有这些文件, 一些 Motif 程序在做拷贝和粘贴操作时有可能会崩溃, 也可能会出现其他的问题.

