Linus 生日快乐
今天是 Linus 的生日。虽然这对他来说基本上是一个私人活动,但它也与 Linux 内核的创建有着有趣的历史联系。
众所周知,在开始编写 Linux 之前,Linus 在 Sinclair QL 上进行编码,这是一个出色但相当奇怪的系统,它基于 Amiga、Atari ST、Apple Lisa 和 Macintosh 中使用的 Motorola 68000 芯片的简化版本。Linus 准备忍受该芯片的局限性,因为它提供了多任务处理——因此有可能进行一些高级编程。
出于同样严格的原因,他在一段时间内避免购买 PC:他不喜欢英特尔芯片的底层架构。但是当 80386 问世时,Linus 最终屈服了,并在 1990 年底,决定购买一台 PC。唯一的问题是找到支付它的资金。
一个资金来源是芬兰政府的拨款。这实际上是一笔学生贷款,用于他在大学期间的一般生活费用,而不是专门用于购买电脑,但 Linus 合理地认为,对于学习计算机科学的学生来说,PC 是必不可少的物品,因此是一项允许的开支。他最终在 1992 年 11 月还清了这笔债务。
在这笔学生贷款的基础上,Linus 增加了他所谓的“圣诞节钱”。正如任何生日非常靠近圣诞节的人都会告诉你的那样,这种“圣诞节钱”几乎总是包括生日的钱,因此很可能购买 PC 的一些资金是以生日礼物的形式到来的。值得注意的是,Linus 在圣诞节后——也就是他的生日后——立即购买了新电脑。正如他在 1996 年告诉我的那样:“我记得新年后第一个非节假日,我就去买了 PC。” 规格相当令人警醒
386,DX33,4 兆内存,无协处理器,40 兆硬盘
在获得了硬件之后,Linus 接下来不得不等待他想要的软件——Tanenbaum 的 Minix 操作系统。这也是他最终选择 PC 的原因之一:Tanenbaum 基于 Unix 的系统已被移植到 80386,并且在其上运行速度很快,正如 Linus 在大学学习期间发现的那样,这激起了他对这种教育工具的兴趣。
Minix 在 PC 上可能很快,但它的到来却非常缓慢。在他首次公开发表的 采访,在 Linux News 中,Linus 回忆了他在那段时间具体做了什么
事实证明,Minix 在芬兰无法获得(至少我无法轻易找到它),所以虽然我在 1991 年 1 月 5 日拿到了我的机器(由于每月付款,日期很容易记住 :-)),但我被迫在上面运行 DOS 几个月,等待 Minix 磁盘的到来。所以一月到二月大约 70-30 的时间花在了玩《波斯王子》和熟悉机器上。
当 Minix 最终到来时,我已经解决了“PoP”,并且略懂一些 386 机器代码(足以让机器进入保护模式并停在那里循环)。所以我安装了 Minix(在 DOS 分区上留下了一些空间给“PoP”),并开始进行黑客编程。
获得 Minix 并不是完全愉快的体验:键盘绑定是错误的,而且它的行为与我习惯的太阳机不太一样(呜呜。我*讨厌* bourne shell 用于交互式工作)。键盘很容易纠正(虽然我不喜欢 Minix 键盘驱动程序代码),应用 Bruce Evans 的 386 补丁使系统更“真实”了一些。
所以在 91 年 3 月左右的某个时候,我拥有了一个运行 Minix-386 的 386 系统,并且我能够安装 awb 的 gcc-1.37.1 端口。在那之后,我能够将 bash 移植到由此产生的混乱中,事情看起来好了一些。我还花时间到处瞎搞(移植 gcc-1.40 和各种其他程序),并在这样做的时候不断学习关于 386 的知识(编写小型启动盘,这些启动盘将建立一个保护模式环境并打印出各种无意义的消息)。
在那次采访中,Linus 谦虚地描述了 Linux 的起源
“Linux”直到 91 年 8 月左右才真正存在——在那之前,我所拥有的本质上只是一个非常基本的保护模式系统,它从一个美化版的“Hello world”程序演变成一个更加美化版的终端模拟器。Linux 在终端模拟器阶段停留了相当长一段时间:我摆弄 Minix,并使用我的保护模式程序从大学机器上读取新闻。没有下载/上传,但它做了相当不错的 vt100 模拟,并且通过使用两个任务来完成,这两个任务从键盘->调制解调器和调制解调器->屏幕进行通信。
到 91 年仲夏,“Linux”能够读取磁盘(令人欣喜的时刻),并最终拥有了一个小型且愚蠢的磁盘驱动程序和一个简单的缓冲区缓存。所以我开始尝试制作一个文件系统,并且出于简单的实际原因使用了 Minix fs:这样我就已经有了一个文件布局,我可以在其上测试东西。经过更多的编程(谈论掩盖事实),我得到了一个非常简单的 UNIX,它具有真实系统的一些基本功能:我可以在其下运行小型测试程序。
那时我四处寻找一些标准文本——我早就决定我不想编写用户级程序,并且为了轻松移植东西,我要么必须使新系统与 Minix 兼容(呜呜),要么遵循其他类型的标准。我想要的是 POSIX 指南,不是为了 100% 符合 posix,而是为了不做任何我以后会后悔的真正愚蠢的事情。
我对 posix 标准的追求失败了,因为我发现 posix 标准委员会出售标准来养活自己,但我确实得到了一个很好的线索,指向(当时非常早期且不受支持的)GNU libc.a,它附带了一个早期的手册。该手册有所帮助,但最大的帮助实际上是与向我指出它的人联系:arl@sauna.hut.fi。他当时/现在是 nic.funet.fi 上 pub/OS 子目录的组织者,并且有兴趣在 nic 为 Linux 提供一个家。
那时,我只是漫无目的地考虑发布我的系统(而且我没有真正的时间表),但 arl 愉快地在 nic 创建了一个 pub/OS/Linux 子目录,因此也为该系统命名。我还没有真正准备好发布,所以该目录包含一个 README 大约一个月(“此目录用于可自由分发的 Minix 克隆”或类似的东西)。Arl 可能认为这个项目不会有什么成果。
我认为我们可以安全地说,“arl”——赫尔辛基大学的工作人员 Ari Lemmke——在这一点上有点误判了。令人惊叹的是,Linus 的“美化版‘Hello world’程序”现在正在运行近 全球 90% 的顶级超级计算机。在另一端,它正在大举进军智能手机市场,这意味着有一天可能有数十亿人会在口袋里装着 Linux 内核。
的确,很难想象如果 Linus 在 1991 年没有用他的圣诞节和生日钱购买那台 PC,今天的世界会是什么样子。今天可能是感谢他为我们带来的 Linux 这份惊人礼物,并祝他生日快乐的最佳时机。