一切都始于 20 世纪 80 年代中期,我的父母为我们家购买了一台 Apple ][c。虽然我喜欢玩游戏,但我很快就被 BASIC 编程所吸引,以及它在工作和娱乐方面的用途。在那个时代,计算机被认为只不过是打字机,因此具有“高级计算机技能”的人可以轻松地利用它们。
一个例子是使用 BASIC 和点阵打印机自动生成惩罚作业。当我被分配写 200 遍道歉声明时,我问我的老师是否可以打印出来。在确认后,我编写了一个 5 行 BASIC 程序来为我生成它。另一个微妙的诡计的例子是使用非 WYSIWYG 字处理器,例如 AppleWorks,对字体、行距和页边距进行微调,以将学期论文“拉伸”到要求的长度。
我对计算机的痴迷很快就导致了一台带有 RAM 驱动卡和一个 x86 PC 协处理器卡的 Apple ][gs。调制解调器和 BBS 变得热门,拥有像这样的双硬件系统为我提供了各种各样的软件选择。然而,2400bps 的调制解调器速度确实阻碍了我每天获得超过几 KB 的有趣下载。
冒险进入 Unix
我的本科课程是计算机信息系统 (CIS) 学士学位,我的研究生学位是计算机科学硕士学位。我的本科教育课程主要让我接触 PC 和分时大型机。真正的乐趣始于我的研究生课程,通过拨号访问带有互联网连接的 Unix 机器,打开了一个全新的探索世界。虽然我仍然使用我的双处理器 ][gs 进行调制解调器工作以及撰写和打印论文,但 Unix 系统凭借其基于 Telnet 的通用游戏、FTP 档案、在线电子邮件和 C 编程真正吸引了我的注意力。Gopher 很受欢迎,并且与像我这样受限于普通终端界面的人一起成长。
当我被分配到负责为学校运行计算机服务的学术计算部门时,我的研究生课程出现了命运的转折。学生可以访问基于 Ultrix 的系统,这些系统带有 X Window 终端。大多数是灰度的,因为颜色处理在当时是一项 CPU 密集型任务,并且确实影响了系统性能。少数彩色系统很好,但那些机器拖得很厉害。
这对我来说是一段非常愉快的时光,因为我被授予对系统的 root 访问权限,并被分配到系统和网络维护工作。我有一些优秀的导师,这强烈影响了我从事系统管理而不是编程的决定(尽管我至今仍然非常热爱编程)。
从 Unix 到 Linux
稀缺是发明之母,当我们需要共享学校计算机系统稀缺的资源时,我们学生经常会变得富有创造力。我们的学生人数是 Ultrix 工作站的三到五倍,因此寻找资源(尤其是在项目交付时)通常是一个挑战。当不需要图形显示时,可以使用一组 56k PPP 调制解调器进行远程系统访问。然而,找到一台具有备用资源的机器并共享系统进行源代码编译通常会导致进展缓慢。像大多数人一样,我发现晚上工作通常会有所帮助,但我需要其他东西来让我能够更快地迭代。
然后,学校的一位系统管理员建议我查看一个可以免费使用的 Unix 系统。这就是 Linux,以 3.5 英寸软盘映像的形式提供。鉴于我们学校的 T1 线路速度极快,我很容易搜索新闻组和其他来源来学习如何下载它。它完全基于 32 位 Intel PC,这是我不拥有的设备类别。
幸运的是,我在学校的工作让我可以访问旧计算机的垃圾堆,因此我的脑筋开始转动起来。
我找到了足够多的废弃 PC 来构建一台坚固的 80386 PC,其中包含一些不错的 RAM(我确信远低于 1GB)、一个可用的图形显示器、一个细以太网(同轴)卡和一个硬盘驱动器。我拥有的映像是 Linux 内核 0.98,我不记得它是官方发行版的一部分(可能是 SLS)。我记得的是,它以一系列软盘映像的形式出现——第一个启动内核和一个最小安装程序,接下来它格式化驱动器,然后它要求提供每个连续的软盘映像来安装核心 GNU 实用程序。安装了核心并且系统可启动后,您将下载并安装其他软件包映像,例如编译器等。
这对我来说是我学术生涯中的一个严重福音。在没有运行 X Window 服务器显示的情况下,这台 PC 严重优于我在学校可以访问的 Ultrix 工作站。我被允许将这台机器连接到学术网络,挂载学校的学生网络文件系统 (NFS) 共享,并直接访问互联网。由于我的研究生课程对大多数学生作业使用 GCC(有时是 Perl 4),我可以在本地完成我的开发工作。这让我可以独占访问一项关键资源,使我能够更快地迭代我的项目。
然而,一切并不完美。硬件有点不稳定(可能就是它被丢弃的原因),但我可以处理。真正让我恼火的是 Linux 和 Ultrix 在操作系统和系统库级别上的差异程度。我开始了解将软件移植到其他平台意味着什么;我可以自由地在我想要的任何地方进行开发,但我必须以 Ultrix 编译的二进制文件的形式交付我的项目。在一个平台上完美运行的 C 代码会在另一个平台上崩溃。这非常令人沮丧,但可能我最粗鲁的觉醒是早期 Linux 对空指针解引用的处理。Linux 似乎很乐意将这些作为虚拟空操作传递,但 Ultrix 会立即在 SIGSEGV 上转储核心。当我的第一个端口在我的项目到期前几天发生在目标平台上时,这真是一件令人惊讶的事情!这也让我对 C++ 的探索非常具有挑战性,因为我对 malloc()/free() 的粗心使用以及自动 构造函数和析构函数处理使我的项目到处都是空指针炸弹。
在我的研究生课程结束时,我升级到了一台完整的工作站——一台带有 SCSI 硬盘驱动器、CD-ROM 驱动器、1024x768 RGB 监视器和一个与我的新 US Robotics V.Everything 调制解调器完美匹配的 16550 UART 串口卡的 Intel 486DX2 66MHz。它可以双启动 Windows 和 Linux,但更重要的是,显卡和处理器允许更愉快(并且更快)的开发环境。旧的 386 仍在学校服役,但我现在大部分的繁重工作和黑客行为都发生在家里。
与 Mike Harris 关于 90 年代 Linux 的故事 类似,我真的喜欢当时流行的那些 CD 捆绑包。在我居住的地方附近有一家新的 Micro Center 电脑商店,它是业余 PC 零件、非凡的技术书籍以及所有可以想象到的 Linux(和免费 Unix)CD 存档的金矿。我记得 Yggdrasil 和 Slackware 是我最喜欢的发行版之一。真正令人难以置信的是 CD 存储的巨大容量——650MB!这是获取软件的重要资源。是的,您可以用 56k 下载这些位,但这非常有限。更不用说大多数人都负担不起存档那么多空闲数据以供以后阅读。
直到今天
这就是我超过 25 年的系统管理和开源软件乐趣的开始。Linux 一直是我职业生涯和个人发展的重要组成部分。如今,我仍然沉迷于 Linux(主要是 CentOS、RedHat 和 Ubuntu),但经常使用 FreeBSD 和其他很酷的开源产品获得乐趣。
我对 Linux 的探索引导我进入了 Opensource.com,我希望在那里回馈一点并帮助引导新一代的动手计算机乐趣。
5 条评论