OSCHINA

我叫 Lars Wirzenius,见证了 Linux 的起步。Linux 如今在全球取得了巨大成功,但它诞生之初却非常不起眼。

以下是我对 Linux 最早期的记忆,关于它如何被创建 —— 这也是 Linux 达成如今地位的起点。

我在 1988 年秋季开始了在赫尔辛基大学计算机科学专业的学习,那年我还遇到了 Linus Torvalds,他是那年计算机科学系另一位说瑞典语的新生。在那年的尾声,我们获得了访问 Unix 服务器的权限,我因为误将rm输入为rn(Usenet 阅读器的缩写)而意外发现了 Usenet 这个讨论系统。

我把这件事告诉了 Linus,然后我们花了很多时间来探索这个系统。

一年后,我们都去参加了义务兵役,但在不同的地方。我们在 1990 年秋天回到了大学继续学业,并都选择了 C 和 Unix 编程课程,这门课程还包括相当一部分 Unix 内核架构的理论。这促使我们阅读了其他操作系统的内核,比如 QNX 和 Plan 9。我和 Linus 热情地讨论了操作系统应该如何正确构建。我们有着 20 岁大二学生的那种过度自信,所幸这件事没有被记录下来流传后世。

1991 年 1 月,Linus 在当地一家组装电脑零件的商店购买了他的第一台个人电脑。这台电脑配备了一款 386 CPU,在当时算是相当高级的,因为 Linus 想探索多任务处理。

此外,由于他从一台配备 32 位 Motorola 68008 CPU 的辛克莱尔 QL电脑迁移过来,他想要一个 32 位的 CPU,不想降级到 16 位,因此 286 并不是一个选择。Linus 的第一台个人电脑拥有惊人的 4 兆字节 RAM 和一个硬盘。

他获得了一份《波斯王子》游戏的副本,这占据了接下来几个月他大部分的空闲时间。后来,他还购买了一份MINIX,因为在大学使用过 Unix 后,他想在家里也拥有类似的东西。

字母 A 和字母 B

完成游戏后,Linus 开始学习英特尔汇编语言。有一天,他向我展示了一个多任务处理的程序。一个任务或线程会在屏幕上写入字母 "A" 的流,另一个写入 "B";当 "A" 的流变为 "B" 的流时,上下文切换在视觉上非常明显。这就是后来被称为 Linux 内核的第一个版本。

后来,Linus 扩展了这个程序,并用 C 语言编写了大部分。在 1991 年晚春的这个时期,我为 Linus 编写了一个 C 语言的sprintf()函数的实现,因为他还没有学会如何编写带有可变参数列表的函数。我想让他免受为每种要写入的值编写不同函数的痛苦。这段代码的核心仍然在内核中,作为 snprintf ()。

随着时间的推移,Linus 不断改进他那初出茅庐的内核,并持续实现新功能。不久之后,他编写了键盘和串行端口的驱动程序,屏幕上实现了对VT100终端转义序列的模拟,并且可以使用它通过调制解调器从家中拨打电话到大学,以读取 Usenet。这简直就是科幻小说中的情节!

有一天,Linus 不小心尝试使用他的硬盘来拨打电话到大学,结果导致他的主引导扇区以"ATDT"和大学调制解调器电话号码开始。从这次事故中恢复过来后,他在内核中实现了文件权限功能。

1991 年 8 月,Linus 在 首次公开提及他的新内核 的地方,即在 comp.os.minix 新闻组中,提到了这句话:“我正在做一个(免费)操作系统(仅作为爱好,不会像 GNU 那样庞大和专业)”,如此谦逊。

该系统最初被称为 Freax。几周后,Linus 请求 ftp.funet.fi 管理员之一 Ari Lemmke 上传第一个 tar 存档。Ari 选择了 Linux 这个名字。最初的版本仍然在其中一个源文件中保留了原始名称。

在这段时间里,人们对尝试这个新事物很感兴趣,因此 Linus 需要提供一种安装方法和说明。由于他只有一台个人电脑,所以他来到我家安装。由于他的电脑一直被用来开发 Linux,而这只是在他 Minix 安装的基础上简单扩展的,所以它实际上从未真正安装过。

因此,我的电脑是 Linux 第一次安装的 PC。当这一切发生的时候,我正在睡觉,我推荐这种安装 Linux 的方法:睡觉,而 Linus 做艰苦的工作。

Linux 的第一个版本使用了一种禁止商业使用的许可证。一些早期的贡献者建议改为使用免费软件许可证。

1991 年秋天,RMS 访问了芬兰,我带 Linus 去听了 RMS 的演讲。这次演讲,贡献者的压力以及我的纠缠最终说服了 Linus 在 1992 年初选择 GNU GPL 许可证。

圣诞节假期期间,Linus 在 Linux 中实现了虚拟内存。这使得 Linux 成为在内存有限的廉价机器上更加实用的操作系统。

1992 年

1992 年伊始,发生了一场著名的与 Andrew Tanenbaum 的辩论,Andrew Tanenbaum 是一位大学教授,也是 MINIX 的作者。他对 Linux 及其架构持有一些看法。Linus 也对 MINIX 有自己的观点。这场辩论被描述为一场激烈的争吵,但从后来看,实际上相当文明。

对 Linux 未来成功更为重要的是,X11 系统被移植到了 Linux 上,使得 1992 年成为了 Linux 桌面的元年。

我选择在社区方面贡献力量,而不是直接参与内核开发,帮助回答问题、编写文档等。我还创办了一份关于 Linux 的简短新闻通讯,其中最有趣的是发表了第一次采访 Linus 的文章。这份新闻通讯后来被 comp.os.linux.announce 新闻组所取代。

第一个 Linux 发行版也是在 1992 年开始的:Softlanding Linux System或 SLS。第二年,SLS 演变成了 Slackware,这激发了 Ian Murdock 在 1993 年创办 Debian,旨在探索更基于社区的开发结构。在接下来的几年里,还会出现其他一些发行版。

1993 年,我和 Linus 都被大学聘为教学助理。我们得以共用一间办公室。那个房间里有一台 PC,Linus 接管了它,用于 Linux 开发。我则对 DEC 终端用于访问 Usenet 感到满意。

有一天,Linus 感到无聊,工作中的电脑运行得有点慢。他花了一整天的时间用汇编语言重写了 Linux 内核的命令行解析器,为了提高速度。(当然,这完全是徒劳的,解析器后来又用 C 语言重新编写,以便于移植。其速度并不重要。)

几年后,他花了好几天的时间玩《Quake》,表面上是为了测试内核内存管理,尽管那时用的是一台更新的电脑。那个房间里玩得很开心,而且没有任何恶作剧。完全没有。

在某一点上,Linux 获得了对以太网和 TCP/IP 的支持。这意味着人们可以不用调制解调器就能阅读 Usenet。然而,早期的 Linux 网络代码有时有点粗糙,因为它们是从零开始编写的。

有一次,Linux 发送了一些损坏的包,导致网络上的所有 Sun 机器都崩溃了。由于修复 Sun 内核很困难,Linux 被禁止在大学网络中使用,直到其错误被修复。无法从自己的办公桌访问 Usenet 是一个极大的动力。

1.0

在 1994 年的春天,我们觉得 Linux 已经完成了,结束了,没有更多可以添加的了。人们可以用 Linux 来编译它自己,阅读 Usenet,同时运行许多个 xeyes 程序。

我们决定发布 1.0 版本,并安排了一场发布活动,邀请了芬兰的计算机媒体,甚至有一个电视台派出了摄制组。大部分活动都是仪式性地在后台编译 Linux 1.0,同时 Linus 和其他人谈论 Linux 是什么,以及它的优点。Linus 解释说,PC 上的商业 Unix 系统如此昂贵,以至于自己编写一个更简单。

在 1995 年,我和 Linus 在大学里上了一个软件工程课程,这个课程主要由一个大型实践项目组成。当然,这个项目是基于 Linux 构建的。我坚持要使用版本控制系统。我曾目睹在早期课程中的学生进行一种嘈杂的版本控制:学生们通过 NFS 共享源代码树,在修改文件时会大声喊 “我在编辑这个文件”。

在我看来,这并不是一个有效的办法,所以我坚持使用 CVS,这是我刚刚了解到的。但正是这次经历让 Linus 不喜欢 CVS,并且多年来拒绝使用任何超出上传 tar 包到 FTP 站点的版本控制工具。

那年也是 Linux 首次被 Linus 移植到新架构的时候。他得到了一台 DEC Alpha 机器。我后来用这台机器作为终端来阅读 Usenet。其他人也将 Linux 移植到其他架构,但这并没有让我得到更多机器来阅读 Usenet。

在 1997 年,Linus 毕业后搬到了美国,在 Transmeta 公司找到了一份工作。我在赫尔辛基地区的一家不同大学找到了一份工作。

在接下来的几年里,发生了许多事情。结果是 Linux 仍然缺少一些功能,所以人们开始着手解决这些问题。“开源” 这个术语被创造出来,IBM 在 Linux 开发上投入了大量资金。Netscape 发布了一个开源的网页浏览器版本。

跳过一些细节,许多年后,开源基本上统治了世界。LWN 开始运营,并每周报道了这些历史事件。

在 1991 年,Linus 写道,Linux “不会像 GNU 那样变得庞大和专业”。到了 2023 年,Linux 运行在每一个大洲,每一个海洋,数十亿台设备上,在轨道上,甚至在火星上。

这对于最初只是两个讨论帖,在屏幕上写下一串 A 和 B 的项目来说,已经相当不错了。

本文翻译自:《The early days of Linux》

https://lwn.net/Articles/928581/

↓分享、在看与点赞~Orz