一切都始于 1980 年代中期,我的父母为我们家购买了一台 Apple ][c。 虽然我喜欢玩游戏,但我很快就被 BASIC 编程迷住了,以及它对工作和娱乐的实用性。 这是一个计算机被视为不过是打字机的时代,因此具有“高级计算机技能”的人可以轻松地利用它们来发挥自己的优势。
一个例子是使用 BASIC 和点阵打印机自动生成惩罚作业。 当我被要求写 200 次道歉声明时,我问我的老师是否可以打出来。 得到确认后,我编写了一个 5 行 BASIC 程序来为我生成它。 另一个微妙的欺骗例子是使用非 WYSIWYG 文字处理器,例如 AppleWorks,对字体、行间距和边距进行微操作,以将学期论文“拉伸”到所需的长度。
我对计算机的痴迷很快导致了一台带有 RAM 驱动器卡和 x86 PC 协处理器卡的 Apple ][gs。 调制解调器和 BBS 变得越来越热门,拥有像这样的双硬件系统为我提供了各种软件选择。 然而,2400bps 的调制解调器速度严重限制了每天获得超过几 KB 有趣下载的机会。 我坚持使用 Apple 作为业余爱好一段时间,但这很快就要改变了。
冒险进入 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 在 OS 和系统库级别上的差异有多大。 我开始意识到将软件移植到其他平台意味着什么; 我可以自由地在任何地方进行开发,但我必须将我的项目作为 Ultrix 编译的二进制文件交付。 在一个平台上完美运行的 C 代码会在另一个平台上崩溃。 这非常令人沮丧,但可能我最粗鲁的觉醒是早期 Linux 对空指针解引用的处理。 Linux 似乎乐于将其作为虚拟的空操作跳过,但 Ultrix 立即在 SIGSEGV 上转储核心。 当我第一次移植到目标平台发生在我的项目到期前几天时,这真是太可怕了! 这也使我对 C++ 的探索极具挑战性,因为我对 malloc()/free() 的粗心使用以及自动 构造函数和析构函数处理使我的项目到处都是空指针炸弹。
在我的研究生课程接近尾声时,我升级到了一台完整的野兽工作站——一台 Intel 486DX2 66MHz,带有 SCSI 硬盘、CD-ROM 驱动器、1024x768 RGB 监视器和一个 16550 UART 串行卡,完美匹配我的新 US Robotics V.Everything 调制解调器。 它可以双启动 Windows 和 Linux,但更重要的是,显卡和处理器允许更令人愉快(和更快)的开发环境。 旧的 386 仍在学校服役,但现在我的大部分繁重工作和黑客行为都发生在家里。
类似于 Mike Harris 关于 90 年代 Linux 的故事,我真的很喜欢当时流行的那些 CD 捆绑包。 我住的地方附近有一家新的 Micro Center 电脑商店,它是业余 PC 零件、非凡的技术书籍以及所有可以想象的 Linux(和免费 Unix)CD 档案的宝库。 我记得 Yggdrasil 和 Slackware 是我最喜欢的发行版之一。 真正令人难以置信的是 CD 存储的巨大容量——650MB! 这是获取软件的重要资源。 是的,您可以用 56k 的速度下载这些位,但这非常有限。 更不用说大多数人都负担不起存档那么多空闲数据以供以后阅读的费用。
直到今天
这就是开启我 25 多年的系统管理和开源软件乐趣的原因。 Linux 一直是我职业和个人发展的重要组成部分。 如今,我仍然 heavily 进入 Linux(主要是 CentOS、RedHat 和 Ubuntu),但经常与 FreeBSD 和其他很酷的开源产品一起玩。
我对 Linux 的探索让我来到了 Opensource.com,我希望在那里回馈一点并帮助引导新一代的实践计算机乐趣。
5 条评论