首页    新闻    小组    威客    人才    下载    博客    代码贴    在线编程    论坛
Linux 内核往事
2025年3月4日 18:07 | 阅读 27 次

本文翻译自:The early days of Linux

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

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


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

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

一年后,我们都去参加了义务兵役,但在不同的地方。我们在1990年秋天回到了大学继续学业,并都选择了C和Unix编程课程,这门课程还包括相当一部分Unix内核架构的理论。这促使我们阅读了其他操作系统的内核,比如QNXPlan 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的项目来说,已经相当不错了。

(文/开源中国)    




评论 (0)
游客请输入验证码
最新评论
0
0
收藏