UNIX V4磁带成功恢复:首个C语言编写的UNIX版本重新运行

摘要:

计算机历史博物馆软件策展人Al Kossow成功恢复了上个月在犹他大学发现的超过半世纪之久的磁带内容。UNIX V4是第一个内核用当时全新的C编程语言编写的UNIX操作系统版本,已经从1970年代的九轨磁带驱动器中成功恢复。你可以从互联网档案馆下载它,并在SimH中运行。在Mastodon上,"Flexion"发布了它在SGI IRIX下运行的截图。

上个月,我们报道了犹他大学卡勒特计算学院Robert Ricci教授发现的一卷遗失的早期Unix版本磁带的重大发现。当时,我们引用了声名卓著的Kossow(他也运营着Bitsavers)的话,他说这卷磁带"恢复的可能性相当大"。事实证明他是对的,在上周末,他成功完成了恢复工作。Ricci也在Mastodon上分享了一段视频片段。

这里有一个恢复过程的视频。虽然只有五分钟多一点,但那时UNIX V4还很小:例如,内核大约只有27KB的代码。

数据是使用计算机历史博物馆Len Shustek编写的readtape程序恢复的。由于我们微机世界的大多数人很少接触磁带,用于归档旧软盘的Greaseweazle工具可能是一个更熟悉的对比:readtape和Greaseweazle不是试图从介质中复制字节或扇区(换句话说,是处理过的数字数据),而是采样和记录原始磁通量变化。然后可以使用这些数据重建数字数据,使一些错误恢复成为可能。在这种情况下,只有两个块无法正确读取,但有足够的信息来重建它们的内容。

因此,在互联网档案馆的恢复文件中,你可以看到从一卷只能容纳大约40MB数据的磁带中创建了一个1.6GB的文件。你可能不想下载那个文件。

幸运的是,Angelo Papenhoff提供了一个处理过的版本,完整包含了告诉你如何运行它的README文件。为了进一步指导,在Reddit上,drop_table_allusers建议:

在你下载所有Unix v4文件的目录中,启动SimH pdp-11可执行文件,并将Unix v4文件中找到的boot.ini作为参数传递。然后按"k",输入"unix",按回车键即可启动...

它非常小:包含大约55,000行代码,其中约25,000行是C语言,注释不到1,000行。但是,已故的Dennis M. Ritchie和共同创造者Ken Thompson绝对是真正的程序员,正如古老智慧所记录的:

真正的程序员不需要注释——代码是显而易见的。

Thompson仍然很活跃,最近与计算机历史博物馆进行了第二次口述历史访谈,题目恰当地称为"一位计算传奇人物的发言"。

我们在网上看到了很多对此及其所代表意义的误解,所以我们将尝试将其置于某种背景下。

Unix的第一个版本,后来被称为"第零版",是Thompson在1969年用汇编语言手工编码的。他为贝尔实验室的一台备用PDP-7编写了它,这是数字设备公司1965年的一台小型机。PDP-7是一台18位机器:它以18位字为单位处理内存。这是很久以前的事了,像八位字节这样的东西还没有标准化。PDP-7 UNIX在2016年到2019年期间从打印输出重建。

它运行得很好,几年后,Thompson拿到了一台PDP-11。Thompson为这台16位机器重写了他的操作系统——仍然使用汇编语言——创建了UNIX第一版。起初,这台机器只有一个RS11硬盘,总共只有半兆字节的存储空间,虽然重建的源代码来自后来有第二个硬盘的机器。

随后在同年晚些时候推出了UNIX v2,仍然运行在PDP-11/20上。正如我们今年早些时候报道的,类似UNIX V2测试版的东西最近被重建了。

1972年推出了UNIX V3,引入了管道这一新功能。这是第一个使用当时全新的C编程语言编写的版本。

现在,长期丢失的UNIX V4被发现,其文件得以恢复。这是第一个内核大部分用C语言重写的版本。UNIX V4只能在更高端的PDP-11型号PDP-11/45上运行。

如今,人们对UNIX早期阶段的性质和演进了解不够。例如,有些事情的发生只是因为Ken和Dennis在非常有限的硬件上工作。有一次,他们只有一个DEC RK05硬盘,容量为巨大的1.5MB。当他们获得第二个硬盘驱动器时,他们将所有主目录移到了那里。这些保存在/usr中——它是"users"的缩写,包含了ken和dmr的主目录,这意味着它也包含了大部分二进制文件——构成操作系统本身的实际程序。这给他们带来了一个问题:当挂载命令本身就在那个磁盘上时,你怎么挂载第二个硬盘?解决方案:在第一个硬盘上建立一个特殊的/sbin目录,其中包含访问任何额外硬盘等所需的工具。

Rob Landley在15年前在Busybox邮件列表上写了一个关于分割历史的出色解释:理解bin、sbin、usr/bin、usr/sbin分割。Landley很了解情况:他是Toybox的作者,这是Bruce Perens的BusyBox多命令二进制文件的替代品——在Alpine Linux中使用。

今天,Unix传说的一部分是根目录中的二进制文件(/bin、/sbin、/lib等)和/usr树下保存的二进制文件(/usr/bin、/usr/sbin、/usr/lib等)之间存在重要的功能区别。试图调解这种分割的过程被称为usr合并,有趣的是,最新的Alpine Linux 3.23还没有完成它,尽管原计划要完成。

UNIX最初只是两个天才在业余时间的快速开发,这样他们就可以使用一台备用计算机——在1960年代极其稀有的东西——来玩其中一人编写的视频游戏:SPACEWAR,这是Computer Space的一个版本,第一个商业电子游戏。

他们日常工作中的项目MULTICS操作系统因庞大和过于复杂而不公平地出名。事实上,它被使用了很多年,前用户都很怀念它。

这两个天才Ken和Dennis编写了一些小而简单的东西,与此保持一致,他们使用了小而神秘的缩写和非常短的文件和目录名。他们的同事,伟大的Brian Kernighan——"K&R C"和"AWK"中的"K"——甚至开玩笑地建议将名称改为UNICS。

问题是这个小小的实验性操作系统逃出了实验室。第6版流传出去,成为著名的Lions书的基础,这是史上最著名代码注释的来源:

如果新进程因为被换出而暂停,将堆栈级别设置为savu(u_ssav)的最后一次调用。这意味着在调用aretu之后立即执行的返回实际上是从执行savu的最后一个例程返回的。你不应该理解这个。

(如果你好奇的话,它在带注释源代码的第2238行。注释本身启发了一本书。)

Unix V7是真正造成损害的版本:它像病毒一样传播,其后代、分支和重写被工业界和学术界广泛采用。

现在,它已经发展成为一个臃肿的混乱,比激发它的操作系统大了数百万倍。那些在神秘文件夹中开玩笑的神秘文件名现在被奉为神圣的经文,维护系统的人们已经忘记了它们的起源。

与此同时,原始开发者继续努力工作,改进、重构和简化设计,一直到第十版——然后,它被彻底重写,成为网络感知的贝尔实验室Plan 9。今天,这项工作作为9front继续进行,我们已经写过它,包括它在历史中的地位。

不过,现在一个关键的早期进化步骤已经被发现、成像并且可以工作。这几乎就像是圣诞奇迹一样!

Q&A

Q1:UNIX V4有什么特别之处?

A:UNIX V4是第一个内核用C编程语言编写的UNIX操作系统版本,标志着UNIX从纯汇编语言向高级编程语言的重要转变。它只能在PDP-11/45这种更高端的机器上运行,内核大约只有27KB代码,整个系统包含约55,000行代码。

Q2:这个UNIX V4磁带是如何被恢复的?

A:计算机历史博物馆的专家使用readtape程序恢复数据,该程序不是复制处理过的数字数据,而是采样和记录原始磁通量变化,然后重建数字数据。虽然有两个数据块无法正确读取,但专家有足够信息重建了它们的内容。

Q3:为什么早期UNIX系统的目录结构看起来很奇怪?

A:这是因为硬件限制造成的。Ken Thompson和Dennis Ritchie在极其有限的硬件上工作,最初只有1.5MB的硬盘空间。当他们获得第二个硬盘时,将用户目录移到/usr下,但这创造了挂载问题,所以需要/sbin目录来存储基本工具。这种分割一直延续至今。

我们在FebBox(https://www.febbox.com/cnbeta) 开通了新的频道,更好阅读体验,更及时更新提醒,欢迎前来阅览和打赏。
查看评论