DEC 访谈
Linux 的 Alpha 移植实际上从两个方面开始,一个是在马萨诸塞州利特尔顿的数字设备公司办公室,另一个是在路易斯安那州新奥尔良的河船上。
第一个方面是由数字半导体公司 Alpha 迁移工具组的 Jim Paradis 开始的。Jim 的小组负责寻找使用 Alpha 处理器的创新方法,Jim 一直在研究几个版本的 Unix 操作系统,以确定是否有可能进行移植。Jim 确定 Linux 将提供高效、强大的操作系统,因此他开始将 Linux 的 32 位版本移植到 Alpha 作为测试用例。Jim 认为 32 位版本的 Linux 将是移植 GNU 工具、X Window 系统和其他应用程序的最简单平台。
与此同时,Jon “maddog” Hall 正在帮助策划在新奥尔良举行的 DECUS 活动。DECUS 是数字设备公司用户协会,DECUS Unix 特殊兴趣小组 (Unix SIG) 的主席 Kurt Reisler 希望邀请 Linus Torvalds 到 DECUS 演讲 Linux。当时是 1994 年 5 月,内核 V1.0 刚刚发布不久。Kurt 在资助 Linus 从赫尔辛基来的旅行方面遇到了麻烦,因此 Digital UNIX 基础产品营销团队资助了这次旅行。在见到 Linus 后,maddog 对这位年轻人的印象和他对这位年轻人设计的操作系统一样深刻。DECUS 之后,在乘坐河船 Natchez 时,提出了对 Alpha 进行 64 位移植的前景,不久之后,一台 Alpha 系统就运往了赫尔辛基。
大约在同一时间,我发现一些 Digital UNIX 工程师正在使用 Linux。通过在工程组建立的联系,我找到了 Jim Paradis 并与他开始了对话。此后不久,组建了一个由工程师组成的小团队,以进一步开展 Linux 的 Alpha 移植工作。通过市场调研,我说服团队将他们的努力与 Linus 的 64 位移植工作结合起来。尽管当时的 32 位移植工作进展更快,但 64 位移植工作进展迅速,并且围绕 32/64 位移植的问题并没有像 Jim 预期的那样具体化。因此,Jim “打包”了 32 位移植,工程人员开始与 Linus 和几位勇敢的志愿者一起攻击 64 位移植。
当这个项目开始时,Linux 仅在基于 Intel x86 的系统上运行。早期涉及大量疯狂的活动,跟踪 Linux 内核版本,同时将 Linux 移植到 Alpha AXP 平台。最早的 Linux 到 Alpha AXP 的移植是基于 32 位 Intel 内核的,现在回想起来,也许我们应该更大胆一些,直接进行 64 位原生 AXP 支持。当时 Linus 正在为此目标努力。他的方法是将内核移植到 AXP 并运行 Digital Unix 二进制文件以获得可用的系统。我们的方法是采用 32 位 Intel Linux 并移植它和系统的其余应用程序(例如 init 和 bash)到 AXP,而不干扰它们的自然 32 位特性。我们与 Linus 交换了大量代码,但最终感觉我们没有为主流工作做出贡献——这始终是 Linus 的代码流。我想只是有太多的工作要做,以至于所有的工作都是有用的,但最终,我们切换到 Linus 的 64 位 AXP 内核工作并在那里做出了贡献。早期的工作几乎没有浪费;我在 MILO(Alpha Linux Miniloader)上所做的工作直接移植到了 64 位 Linux,Jay Estabrook 的设备驱动程序工作以及 Jim Paradis 的内存管理和系统工作也是如此。Linux 所有平台中使用的 PCI 代码也来自那个时期。我们的首要目标是获得一个不崩溃且具有可用的 SCSI 和以太网设备驱动程序的自托管 Alpha Linux 系统。我们需要 SCSI 来支持文件系统,需要以太网设备驱动程序来支持网络。必须有足够的应用程序才能构建 Alpha Linux 内核。
在早期,除了我们 Digital 的三个人和 Linus 之外,没有其他 Alpha AXP 用户。另一位早期贡献者是 David Mosberger-Tang,他足够勇敢地购买了一台 Alpha AXP Noname 系统并开始破解。我们五个人努力工作,代码自由流动。我们早期的目标是拥有一个免费的 Alpha Linux 发行版,可以被更广泛的 Linux 社区采用和使用。Jim Paradis 的 BLADE 版本包含了一个足够多的系统,人们可以轻松地在他们的系统上启动并运行 Alpha Linux,并足以开始编写代码。在 BLADE 发布时,只有两个广泛可用的受支持的 Alpha Linux 系统,Jensen (DECPC 150) 和 Noname 板(之所以这样称呼,是因为任何克隆供应商都可以在其上贴上自己的名字)。Noname 板的价格合理——尽管仍然相当昂贵——并且购买了很多用于运行 Linux。BLADE 将 Alpha 带给了主流 Linux 社区——或者至少是 Linux 社区中更勇敢的人。
另一个市场调研“政变”是决定内核只有一个源代码树,并且决定 Alpha 版本的 Linux 尽可能接近 Intel 版本。基于此决定的早期项目之一是放弃扩展通用对象文件格式 (ECOFF) 而改用可执行和链接格式 (ELF)。ELF 已经为 Intel 方面选择了,Intel 版本的 Linux 必须超越 a.out 到 ELF 格式的转换。ELF 项目立即启动,从 ECOFF 到 ELF 的过渡发生在 Alpha Linux 投入普遍使用之前。
在 ELF 之前,映像尺寸非常大,因为每个映像都是静态链接的。当 ELF 出现时,整个系统使用情况变得好得多。这种变化在 DEC Multia/UDB(通用桌面盒)上尤其引人注目;您可以在 32MB 内存中运行 X,并且 不 使用任何交换空间。
第三个重要的营销决策是 Digital 不会销售 Linux,而是允许现有的 Linux 系统供应商提供发行版和支持。这导致了 Digital 工程部门(在法律允许的情况下)贡献回他们为 Linux 开发的一切源代码的决定。
在 Digital,我们从未将自己视为“拥有”Linux;Linux 不能被任何事物拥有或控制,只能被全球 Linux 社区拥有或控制。在早期,我们基本上是在追赶 Intel Linux。我们编写代码、移植代码并到处向人们展示这个整洁的新事物。我们 Digital 人员过去(现在仍然)将自己视为更广泛的 Linux 社区的一部分。在我第一次在 Alpha 上启动 MILO 之前,我什至没有使用过 Linux。Linux 具有感染力。我们的作用过去是,现在仍然是,成为其余 Linux 世界的催化剂。Red Hat Alpha Linux 发行版就是一个很好的例子。我们帮助使其成为可能,但真正做移植工作的是 Red Hat。他们这样做是因为,和我们一样,他们相信 Alpha AXP 是一个优秀的 Linux 平台。Digital 利用更大的 Linux 世界的另一个例子是我们的 TGA(或 Zlxpe)图形适配器的驱动程序。该卡没有 XFree86 支持,但在我们的 Windows NT 和 Digital Unix Alpha 系统中使用。Jay Estabrook 为该设备移植了 XFree86,我们还将 TGA 源代码发布给了 XFree86 项目。
许多人可能会问为什么 Alpha 移植很重要。首先,Alpha 是世界上最快的单芯片微处理器。Linus 想要一个快速的系统来展示 Linux 的功能,而 Alpha 是一个自然的选择。
其次,Alpha 是一个真正的 64 位系统,具有 64 位整数和 64 位虚拟地址空间。这让 Linus 可以了解内核在页表等方面需要什么。在另一个层面上,Alpha 的大地址空间允许 Linux 用于计算大内存模型的研究——在并行系统和集群技术中尤其有趣。
第三,Alpha 是一个非常简洁的 RISC 架构。最初,它非常简洁,以至于 Alpha 仅对内存进行字访问,这迫使一些内核数据结构为了效率而重新设计。后来的 Alpha 芯片具有字节指令,但这种架构的简洁性有助于为其他 RISC 架构设定步调。
许多人喜欢 Alpha 是因为他们喜欢它的技术。它的架构纯粹性、速度和天然的 64 位支持对技术专家非常有吸引力。研究和学术界对此非常感兴趣——我们已经了解并喜爱的操作系统,再加上基于 Alpha 的系统价格下跌,极大地促进了销售。
第四个原因是 Digital 是 PCI 总线的早期采用者。尽管一些早期的 Alpha 系统具有 Turbo 通道总线,以便向后兼容我们的旧系统,但 Digital 在 Alpha 系统生命周期的早期就开始提供 PCI 支持,同时融入了 EISA 和 ISA 支持。这使得将设备驱动程序从 Intel Linux 移动到 Alpha Linux 变得更容易,如果系统具有专有总线(例如 Sbus 或 NuBus),这可能会更加困难。
Alpha Linux 能够利用两件事。首先,带有 PCI 和 ISA 总线的 Alpha PC 可以使用与 Intel PC 完全相同的设备。其次,Alpha PC 的价格主要由其组件价格决定,并且随着 Alpha Linux 操作系统价格的下降,Alpha PC 也相应变得更加便宜,从而更具吸引力。
第五个原因是 Digital 通过向希望制造自己的配置系统盒子的原始设备制造商销售 Alpha 系统、主板和芯片来鼓励克隆制造商。为了使这尽可能便宜和开放,Alpha Linux 工程团队选择了高级 RISC 计算 (ARC) 控制台系统(通常与 Windows NT 一起使用),并编写了控制台代码(称为 MILO)的源代码可用版本以及特权架构库 (PAL) 代码的源代码可用版本。
但从总体上看,重要的是要完成 64 位移植,并且使用与 Intel 不同的架构完成移植。在 Alpha 移植开始时,Linux 内核针对 Intel 架构进行了高度优化,在上下文切换等地方使用了大量 Intel 汇编语言和 Intel 架构技巧,并且它只是一个 32 位移植。同样,源代码树和内核结构也没有针对各种架构进行优化。通过移植到 Alpha,Linux 团队为完成所有其他移植并干净地集成铺平了道路。
Linux 不仅仅是一个操作系统。Linux 的大多数有用功能都在于使 Linux 操作系统成为现在的样子的系统实用程序中。Bash、X 服务器等等,是用户看到和使用的东西。内核是系统中相对较小(但很重要)的一部分。随着一小群但坚定的 Alpha Linux 用户群体的壮大,他们专注于让更多的系统实用程序运行起来。与此同时,在 Digital,我们专注于支持我们认为可以成为优秀的 Linux 系统的硬件平台和设备。例如,Digital Semiconductor 销售一系列代号为“Tulip”(21x4x 设备系列)的 PCI 网络芯片。当时,许多 Linux 设备驱动程序的移植性都不是特别好,因为有些驱动程序在其中嵌入了 Intel 汇编代码以及 32 位特性。Jim 和 Jay 花费了大量时间将可用的 Intel Linux 设备驱动程序移植到 Alpha Linux,从而解决了移植性问题。maddog 在各种贸易展上挥舞着 Alpha Linux 的旗帜,并在 1995 年 8 月,我们能够在 Unix Expo 上展示运行 S3 X 服务器的 Alpha Linux。我致力于 Alpha Linux Miniloader,MILO,粗略地说,它就像是打了兴奋剂的 LILO。它是一个免费软件加载程序,允许 Windows NT Alpha 板启动并运行 Linux。它使用真正的 Linux 设备驱动程序和文件系统来加载和运行 Linux 内核。一旦 Jim 和 Jay 让设备驱动程序在 Linux 中工作,我就会让它们在 MILO 中工作。MILO 降低了 Alpha Linux 的入门价格,因为您不必支付系统资源监视器 (SRM) 控制台许可证费或 Digital Unix 许可证费来购买运行 Linux 的硬件平台。本着 Linux 和自由软件基金会的精神,MILO 是免费提供和可再发行的代码。
目前,从功能角度来看,Alpha 项目与单个 Intel 处理器几乎处于同等水平。Alpha 的系统多处理 (SMP) 工作正在开始,Alpha 缺少的东西往往(在很大程度上)Intel Linux 系统也缺少——应用程序。正在为 Alpha Linux 开发的 Java 移植肯定会帮助填补这一空白,GNUstep 和其他应用程序环境问题等项目也将如此。
如今,Linux 的多架构支持非常自然。Linux 用户或系统几乎需要的一切都可以直接为 Alpha 构建。我们早期的目标是使 Alpha Linux 成为 Intel Linux 的有吸引力的替代品。凭借现成的 Linux 发行版、大多数设备驱动程序的顺利运行以及各种受支持的图形设备,我们已经实现了我们的目标。一路走来,我们玩得很开心,结交了朋友,学到了新东西。Alpha AXP Linux 还剩下什么要做?首先,我们将继续支持我们的硬件,并且当我们构建新的 Alpha PC 主板时,我们将自己移植 Linux 或提供信息,以便其他人进行移植。其次,我们将向更广泛的 Linux 社区提供技术信息。我对 Linux 社区了解的一件事是,有很多聪明能干的程序员,他们只需要正确的信息和一些硬件访问权限就能出色地完成工作。第三,我们需要使 Alpha Linux 系统的价格与 Intel Linux 系统具有竞争力。当我们第一次移植 Linux 时,价格差异非常大,但在过去两年中,由于更多公司克隆和批量销售 Alpha PC 系统,这种价格差距已显着缩小。Linux 在很大程度上促成了这种销量。
我们可以对 gcc 编译器为超标量 Alpha 架构生成的编译器优化序列进行更多调整。同样,某些数学库需要进行优化并以源代码格式提供,不仅适用于 Alpha,也适用于其他移植。
我们希望在 Internet 上看到一个虚拟移植和认证实验室,以便没有 Alpha 系统的应用程序开发人员可以移植和测试他们的应用程序。对于其他一些移植(例如 SunSPARC、PowerPC 等),这也是一个好主意。
对在不同负载类型下运行 Linux 的 Alpha 系统进行测试和基准测试,创建有意义的基准测试结果也将很有用。
在 Linux 系统“集群”中进行大规模分布式计算的实际工作也将提供有用的信息。
还需要一组定义的应用程序程序接口 (API) 和应用程序二进制接口 (ABI),它们适用于各种 Alpha Unix 和 Linux 系统(FreeBSD、netBSD、Linux、Digital UNIX 和各种其他 Unix 系统),以便商业应用程序供应商可以为比任何一个 Unix 系统都能吸引的更广泛的受众创建即买即用的应用程序。针对 ABI 测试的应用程序应该能够在任何 Alpha Unix/Linux 系统上运行。
我同意。Linux(所有风格)的未来取决于它吸引应用程序的能力。虽然通常的工程工具集(Emacs、LaTeX、Tk 等)在所有 Linux 平台上都能很好地工作,但 Linux 需要更多的营销和演示工具。它需要一个可行的桌面环境。这可以是运行 Windows 应用程序的能力(通过 Wabi),也可以是符合某些接口规范的本机应用程序。不幸的是,自由软件世界对 WYSIWYG 应用程序的兴趣不如编写操作系统。
我发现一个非常有吸引力的选择是 Java 应用程序可以在 Linux 下运行,即使不是比任何其他包含 Java 虚拟机的操作系统更好。
David Rusling 是 Digital Equipment Co. Ltd. 欧洲半导体应用工程首席工程师。
Jon “maddog” Hall 是 Digital Equipment Corporation Digital UNIX 基础产品营销高级主管