我叫 Lars Wirzenius,Linux 诞生时我就在场。Linux 现在在全球取得了成功,但它的起步却相当卑微。这些是我对 Linux 早期、它的创建以及它今天的发展道路的开始的回忆。
1988 年秋天, 我在赫尔辛基大学开始了计算机科学研究,并遇到了 Linus Torvalds,他是当年计算机科学领域另一位讲瑞典语的新生。在第一年年底,我们已经可以访问 Unix 服务器,我通过将rm错误地输入为rn ( Usenet 阅读器),意外地找到了Usenet(讨论系统) 。我告诉 Linus 这件事,我们花了太多时间探索这个问题。
第一年后,我们都去服义务兵役,尽管是在不同的地方。1990 年秋天,我们回到大学学习,两人都参加了 C 和 Unix 编程课程,其中也包括相当多的 Unix 内核架构理论。这导致我们阅读了其他操作系统内核,例如QNX和 Plan 9。Linus 和我热情地讨论了如何正确构建操作系统。我们身上有20岁大学二年级学生的过度自信。每个人都过得更好,因为这没有被记录下来供后代使用。
1991 年 1 月,Linus 从当地一家用零件组装电脑的商店购买了他的第一台PC。PC有一个386的CPU,这在当时是比较花哨的,因为Linus想要探索多任务处理。此外,由于他来自配备 32 位 Motorola 68008 CPU 的Sinclair QL ,因此他想要一个 32 位 CPU,并且不想降级到 16 位 CPU,因此 286 不是一个选择。Linus 的第一台 PC 拥有高达 4 MB 的 RAM 和一个硬盘。
他得到了《波斯王子》游戏的副本,该游戏占据了他接下来几个月的大部分业余时间。后来他还买了一份MINIX,因为在大学使用过 Unix 后,他想在家里也能有类似的东西。
打完游戏后,Linus 开始学习 Intel 汇编语言。有一天,他向我展示了一个可以执行多任务处理的程序。一个任务或线程会在屏幕上写入字母“A”的流,另一个是“B”;当 As 流变成 Bs 时,上下文切换在视觉上是显而易见的。这是后来被称为 Linux 内核的第一个版本。
Linus 后来扩展了这个程序,并用 C 语言编写了大部分程序。在这段时间,即 1991 年春末,我为他编写了 C sprintf()函数的实现,因为他还没有学会如何用 C 语言编写函数变量参数列表。我想让他避免为每种类型的值使用不同的函数来写出的痛苦。这段代码的核心仍然在内核中,如 snprintf()。
随着时间的推移,Linus 改进了他刚刚起步的内核,并不断实现新的东西。一段时间后,他有了键盘和串行端口的驱动程序、屏幕的VT100终端转义序列仿真,并可以使用它通过调制解调器拨号到大学,在家中阅读 Usenet。科幻小说!有一天,Linus 不小心尝试使用他的硬盘拨打大学电话,结果导致他的主引导扇区以 “ATDT”开头,并显示了大学调制解调器池的电话号码。从这次事件中恢复过来后,他在内核中实现了文件权限。
1991 年 8 月,Linus在comp.os.minix新闻组中首次公开提及他的新内核。其中包括这句话“我正在做一个(免费)操作系统(只是一个爱好,不会像 gnu 那样庞大和专业) ”。如此谦虚。该系统最初被称为 Freax。几周后,Linus 要求ftp.funet.fi的管理员之一 Ari Lemmke上传第一个 tar 存档。阿里选择了 Linux 这个名字。初始版本仍包含嵌入源文件之一的原始名称。
这段时间,人们有兴趣尝试这个新东西,因此 Linus 需要提供安装方法和说明。由于他只有一台电脑,所以他来上门安装在我的电脑上。由于他的计算机是用来开发 Linux 的,而 Linux 只是生长在他安装的 Minix 之上,因此之前从未实际安装过。因此,我的电脑是第一台安装 Linux 的 PC。当这一切发生时,我正在小睡,我推荐这种安装 Linux 的方法:小睡,而 Linus 则负责繁重的工作。
Linux 的第一个版本使用了禁止商业用途的许可证。一些早期贡献者建议更改自由软件许可证。1991 年秋天,理查德·斯托曼访问了芬兰,我带莱纳斯参加了斯托曼的演讲。来自贡献者的压力和我的唠叨最终说服 Linus 在 1992 年初选择了 GNU GPL 许可证。
圣诞假期期间,Linus 在 Linux 中实现了虚拟内存。这使得 Linux 在内存较少的廉价机器上成为一个更加实用的操作系统。
1992 年始于与 Andrew Tanenbaum 的著名辩论,Andrew Tanenbaum 是一位大学教授,也是 MINIX 的作者。他对 Linux 及其架构有一些看法。Linus 对 MINIX 有自己的看法。这场辩论被描述为一场口水战,但事后看来实际上相当文明。
对于Linux未来的成功来说,更重要的是X11系统被移植到它上面,使得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 开发。我对用于 Usenet 访问的 DEC 终端感到满意。
有一天,Linus 感到无聊,工作中的 PC 感觉很慢。为了提高速度,他花了一天时间用汇编语言重写了 Linux 内核命令行解析器。(当然,这是毫无意义的,为了可移植性,解析器后来再次用 C 重写。它的速度并不重要。)几年后,他花了几天时间玩 Quake,表面上是为了对内核内存进行压力测试管理,尽管那是使用较新的电脑。那个房间里玩得很开心,没有任何恶作剧。一个都没有。
在某个时候,Linux 获得了对以太网和 TCP/IP 的支持。这意味着人们无需使用调制解调器即可阅读新闻组。遗憾的是,早期的 Linux 网络代码是从头开始编写的,有时会有些粗糙。在某一时刻,Linux 会发送一些损坏的数据包,从而导致网络上的所有 Sun 计算机瘫痪。由于修复 Sun 内核很困难,Linux 被禁止进入大学网络,直到其错误得到修复。无法在办公桌上访问 Usenet 是一个很大的动力。
1994 年春天,我们感觉 Linux 已经完蛋了。完成的。没什么可补充的了。人们可以使用 Linux 来编译自身、读取 Usenet 并同时运行xeyes程序的多个副本。我们决定发布1.0版本并安排了发布活动。芬兰电脑出版社受邀,一家电视台甚至派出了工作人员。活动的大部分内容都是在后台隆重地编译 Linux 1.0,而 Linus 和其他人则谈论 Linux 是什么以及它的优点。Linus 解释说,用于 PC 的商业 Unix 非常昂贵,因此编写自己的 Unix 更容易。
1995 年,Linus 和我在大学修了一门软件工程课程,其中大部分由一个大型实践项目组成。当然,这是构建在 Linux 之上的。我坚持使用版本控制系统。我在早期课程中亲眼目睹学生进行大喊大叫的版本控制:学生们通过 NFS 共享源代码树,并在更改某些内容时大喊“我正在编辑此文件”。这对我来说似乎不是一个有效的方法,所以我坚持使用我刚刚了解到的CVS 。这种经历就是 Linus 不喜欢 CVS 的原因,并且多年来除了将 tar 包上传到 FTP 站点之外拒绝使用任何版本控制。
那一年也是 Linus 第一次将 Linux 移植到新的架构上。他得到了一台 DEC Alpha 机器。后来我将这台机器用作阅读新闻组的终端。其他人将 Linux 移植到其他架构,但这并没有让我获得更多的机器来阅读 Usenet。
1997 年,Linus 毕业并移居美国,在全美达 (Transmeta)工作 。我在赫尔辛基地区的另一所大学找到了一份工作。
接下来的几年里,发生了很多事情。事实证明,Linux 仍然缺少一些功能,因此人们致力于解决这些问题。“开源”一词被创造出来,IBM 在 Linux 开发上投入了大量资金。Netscape 发布了一个开源版本的网络浏览器。跳过一些细节,多年来,开源基本上占领了世界。LWN 启动并每周报道大部分历史。
1991 年,Linus 写道 Linux“不会像 gnu 那样庞大和专业”。到 2023 年,Linux 将在每一个大陆、每一个海洋、数十亿台设备、轨道上和火星上运行。对于以两个线程开始,在屏幕上写入 As 和 Bs 来说,这还不错。