## Hacker 曾经知晓的那些事 文/Eric S. Raymond 笔者想到现在年轻的 Hacker 们对 ASCII 表和那些奇怪的控制字符越来越陌生,不禁感慨万千。 这些知识原本是年轻 Hacker 们初出茅庐的第一课。然而世事变迁无常,转眼间这些硬件终端都已经被淘汰,RS-232 协议也即将寿终正寝。工具产生文化;当工具过时之后,一些文化共性也随之烟消云散,而我们很难察觉到。 这篇文章是笔者收集的一些关于 ASCII 以及相关技术的介绍,特别是硬件串口终端、RS-232 和调制解调器等技术。昔日,这是些人尽皆知的概念,而如今知者甚少。现在已经很少有人直接使用这些技术了,只有在老古董设备中才能见到它们。即便如此,为了文化的传承,让我们来了解它们也无妨。 尽管老一辈 Hacker 亲身经历了技术的发展进步,他们只记得事件发展的前后顺序,对于具体时间的印象已经非常模糊。于是,笔者对此大致做了梳理。即便是各位阅历丰富的读者,也许也能从阅读的过程中发现惊喜。 笔者经常指导年轻 Hacker 使用 Unix 衍生系统,比如 Linux 和 BSD 等,所以文章会涉及不少 Unix 的内容。如果你觉得这些术语非常陌生,那你对剩下的内容可能也会感到陌生。 ### 硬件的变迁 如今,两台计算机一般通过 TCP/IP 协议交互信息,用户不必关心物理底层内容。所谓的“终端”事实上也是“终端模拟器”,只是一个使用 TCP/IP 协议并且控制显示屏内容的软件。 在 TCP/IP 协议和位映射显示器流行之前,情况则大不相同。对于大部分 Hacker 而言,这个概念变化大约发生在1992年,对于拥有昂贵工作站的用户则还要更早一些。 在这之前,人们普遍使用的是视频显示终端(vedio display terminals),简称 VDT。大约是在70年代中期,VDT 替代了由“电传打字机(teletype)”这一更老的技术支持发展的早期打印终端,电传技术大约是在1900年左右由维多利亚电报网演变而来。60年代后期,最早版本的 Unix 系统就是为这些打印终端而开发的,特别是为 Teletype Model 33(ASR-33)。现在 Unix 设备上显示的“tty”就是当年“teletype”的缩写。这并不是唯一带有历史印记的 Unix 设备名。类似的还有 /dev/lp 表示系统默认打印机。当时每位 Hacker 都知道“lp”表示“line printer”,这是一种每次打印一行的机电打印设备,当时在计算机框架中的地位堪比 ASR-33。 在前互联网时代,计算机之间并不需要进行通信,电传打字机、终端与计算机的通信主要通过“RS-232”的硬件协议(也称作“EIA RS-232C”)。在 USB 出现之前,当人们谈论“串行”链路时,他们指的是 RS-232,有时也把与其通信的设备称为“串行终端”。 RS-232 的服役期超级长。它诞生于60年代早期,当时并不是用于计算机,而是为了电传打字机与调制解调器的通信。虽然 RS-232 现在已经过时了,但并没有完全地消失。 其实,除了 RS-232 和串行终端之外,IBM 大型机上还有很多其他设备和技术,但它们在当下流行的技术中没有留下什么印迹或是故事传说。原因在于现代 Unix 系统传承自“小型机”这个已被遗忘的硬件类别,尤其是数字设备公司(Digital Equipment Corporation,DEC)生产的小型机。ASCII、RS-232 和串行终端都是小型机的技术组成部分,当然还有 Unix 本身。 后来,小型机被工作站所取代,工作站又被 IBM 的 PC 机取代。但年长的 Hacker 还是会对他们的入门设备——DEC 小型机的年代(60年代中期到80年代中期)百感交集。 怀旧的心情掩盖了当年这些机器惨淡的计算能力。比如,80年代中期,一台 DEC VAX 11-780 小型机的运算能力还不及现在低端智能手机的1/1000,存储能力更是不到1/5000。 实际上,直到80年代小型机还是出了名的慢(还有糟糕的射频屏蔽能力):若将调幅收音机靠近小型机,喇叭里就会出现异常的噪音,因为无论小型机的基础频率还是主要次谐波的频率都在人类的听觉范围之内。自21世纪以来,再也没有速度如此之慢的计算机。 ### 贺氏智能调制器的凤凰涅槃 调制解调器允许使用铜制电话线来传递数字信号,速率按照今天的标准来看属于龟速,但它却在前互联网时代为我们提供了广域网络。50年代后期,当时大多数人并不了解为军事通信(特别用于 SAGE 防空网络)而发明的调制解调器。 如今,连接铜缆或是光纤的调制解调器被埋藏在房屋外的互联网接入点,智能手机和平板电脑里也安装了调制解调器。而当时,大多数 Hacker 熟知的是“外挂”式调制解调器,一个将计算机与电话线相连的独立盒子。 其实也有内置式调制解调器(计算机的扩展卡),但由于置身于机箱之内,容易受到 RF 信号的干扰,所以从来没有售卖过。有经验的 Hacker 都能解读出调制解调器的“猫叫”声,根据声音区分是否连接成功了。 以今天的眼光来看,老式的调制解调器真是慢得出奇。直到90年代后期广域网技术推广时,调制解调器的速度才从最初的每秒 110b 提高的每秒 56kb。在1984年到1991年间,调制解调器的速度一直稳定在 9600bps。这也是现存串口协议设备的默认速率设置为 9600bps 的原因。 有一种名为“贺氏智能调制器(Hayes Smartmodem)”的设备可以通过串口输入指令来拨号和设置参数。Hacker 们一定都还记得那些“AT”开头的命令,比在 ATDT 后跟一个电话号码就能拨打该号码。其他生产商复制了贺氏公司的指令集,于是在1981年之后这些指令变得通用。 当时不为人知的一点是“AT”前缀还有特殊的属性。这个序列(1+0 1000 0010 1+0 0010 1010 1+,‘+’表示重复前一个字符一次或者多次)使得接收机很容易识别它,即使接收机不知道传输速率,这也使得接收机可以自动同步到该速率。 这个属性非常有用,于是到现在 AT 惯例还在许多地方延续使用。智能手机的 3G/4G 蜂窝调制解调器使用 AT 命令执行控制功能。“AT+QLINUXCMD=”也是向芯片自身运行的 Linux 系统传输命令的前缀。 ### core 的身世 在半导体出现前,大约1955年到1975年,计算机内存使用的主导技术是窜在铜导线上的小磁圈。小磁圈被称为“铁氧体磁芯”,因此主存储器又被称为“内存”或“核”。 Unix 术语是在70年代早期形成的,“in core”和“core dump”这些术语保留到了半导体时代。直到90年代后期,相信大部分 Hacker 还说得出这些术语的来源。 2000年后,随着多处理器系统在台式机上的迅猛发展,越来越多的人把“core”当做“processor core”的简称。如今,“core”一词仍旧可以指代两者,但旧用法的来历已逐渐不被理解,而“in core”之类的术语也将会慢慢消失。 ### 36位系统和八进制 内存单元的字长度通常都是以2的倍数来增长,如现在常见的8位、16位、32位、64位。但这是1983年以后才开始流行的。一种早期的计算机设计传统是使用36位字。 曾经有一段时间,36位机器吸引了大部分 Hacker,这段文化记忆到90年代才逐渐消退。两款著名的36位机是 DEC PDP-10 和 Symbolics 3600 Lisp Machine。83年取消 PDP-10 型号鸣响了这类机型的丧钟,尽管3600机又苟延残喘了近十年。 在2次幂的体系之下,十六进制是表示机器内存原始数据的一种自然方式。但八进制在36位机器中更为常见。原来,36位实际上是由12个3位字段组成,每个字段正好表示一个八进制数字。下面都是 Hacker 们所熟知的有关这些机器的趣闻: 36位二进制足以表示10位十进制的正负整数,等同于当年机械计算器的精度。32位的标准并不被当时的数值分析师和科学计算工笔者所支持,他们坚持要保留最后4位精度。 这些机器用9个比特表示一个字符,4个字符合并为一个字。因此,为它们设计的键盘可能有一个元键来表示第8位和一个现已不存在的额外修饰键表示第9位。 另外,众所周知36位结构解释了 C 语言的一些难以理解的特性。最初的 Unix 机器,PDP-7,采用18位字节,对应于36位机器的半个字。它们就被表示为6个八进制数字(3位)。C 语言的直系祖先是在 PDP-7 上完成的一种解释性语言,称为 B 语言。在 B 语言中,数字就是以0为起始,用八进制表示。 PDP-7 的下一代,也是第一台主力 Unix 机器是 PDP-11(1970年生产)。它使用16位字节,但由于指令集的某些不寻常特性,八进制更能解释它的机器码。C 语言首先应用于 PDP-11,于是继承了 B 语言的八进制语法,并且进一步扩展:当字符串中的反斜杠符号跟了一个数字,那么这个数字用八进制解析。 Interdata 32、VAX 和后来其他的 Unix 平台都没有这些特性。其操作码采用更自然的十六进制。然而,C 语言再也没有改为十六进制,关于前缀0的诡异解释也没有再做更改。 因为许多后来的开发语言(Java、Python 等)处于兼容性的考虑复制了 C 语言的底层规则,所以相对无用甚至存在风险的八进制也许无法彻底摆脱了。 PDP-11 非常成功,它深刻地影响了计算机的架构(包括 Intel 和 ARM 微处理器),最终一统天下,消灭了36位机。 ### RS232 的功败 TCP/IP 链路通常就像一个8比特字节的数据流,确保网络内数据的传播速度最快,用户不用操心错误检测、纠错等底层事件。RS-232 却不同,两个通信的设备必须保持传输速率一致,而且数据的格式也要相同。RS232 设备几乎都使用 ASCII 编码,它利用了 ASCII 只有7位的特点。最高位除了携带数据之外,也会被当做奇偶校验位。为了保证收发正常,必须要约定两端设备的数据格式,否则接收端收到的都是乱码。在1984年之前,数据的格式非常混乱。随后,逐渐统一为“8N1”的格式,即8位数据,没有奇偶校验位,有1位停止位。 另一方面,如果设置了奇偶校验位,就无法使用 RS-232 链路传输二进制数据,高位的数据会被损坏。其他一些已被淘汰的广域网协议的表现更糟糕。 即使 RS-232 的物理接口也是不断地变化。1962年定义的标准 RS-232 采用25针的 D 型接口,针脚数比协议所需的更多(也可以用三个脚的迷你接口)。1984年,IBM PC-AT 推出了更小的 DB-9 接头,各大生产商也转为生产此型号。如果你身边有一台带串口的 PC 机,这个接口很可能是 DB-9。DB-25 后来被用在打印机的并行接口上(与此前打印机所用接口不同)。两种串口现在都被 USB 和网线所替代了。 曾从事过相关工作的朋友一定接触过这些特殊设备:公母头转换器、DB-25 到 DB-9 转接器、接线盒、零调制解调器,以及其他很多早已被淘汰的设备和技术。上了年纪 Hacker 的工具箱里一定还攒着不少这些设备。 我们今天还在讨论这些设备和技术的主要原因是现在很多传感器和控制器件以及物联网设备仍然使用 RS-232 通信,往往是被包裹在 USB 模拟器内。常见的后一类设备可能就是与电脑相连的 GPS 传感器了(不是手持式 GPS 或者车载 GPS)。因此,我们时不时的还需要理解什么是 RS-232 的“握手线”。终端通过修改 DTR(数据终端就绪)线来标示接收、初始化、保持连接等状态是否已经就绪。三线版的 RS-232 完全抛弃了握手线。 90年代中期,RS-232 技术的使用量逐渐减少,直到2010年在通用计算机上几乎绝迹。而标准 RS-232 还广泛用于上述特定领域的应用产品,以及某些商业级的路由器产品中。 ### 远去的广域网:因特网到来之前 今天,TCP/IP 协议的因特网似乎是仅存唯一的广域网(Wide-Area-Network)。早期并不是如此。从70年代后期到90年代中期,尤其是1981年到1991年之间,存在着大量的广域网。可能从你的电子邮件存档中还能找到它们的踪影。广域网的特点之一就是人们有时会在签名中张贴多个不同的网址。 年长的 Hacker 一定对 UUCP 或是 BBS 历历在目。许多人同时活跃于两者之间。在那个年代,如果你不是属于联邦机构、军事单位或者高校研究院的一个组织,就很难接触到“真实”网络(ARPANET,后来的互联网)。于是我们自力更生,利用调制解调器和电话网络实现联网。 UUCP 是 Unix to Unix Copy Program 的缩写。自1979年它从贝尔实验室脱离到90年代中期互联网大爆发,UUCP 利用调制解调器和电话网络长期提供了慢速却廉价的网络。 UUCP 是一种存储-转发系统,原本用于传播软件的更新。但它的主要用户很快地拓展为电子邮件和 USENET(1981年发布),后者是 Stack Overflow 和许多其他网站的前身。消息借助 UUCPU 从话题组传播到整个网络。 uuencode 和 uudecode 是目前 UUCP 遗留的痕迹之一,这是一对用来渲染8位数据的滤波器。Unix 老鸟们都知道这曾是 UUCP 使用电话线网络传输8位数据的工具。 UUCP 和 USENET 采用的双重速率结构(two-tier rate structure)是后来电话计费系统的前身,“本地”通话按照包月计算,昂贵的“长途”通话按照通话时长计费。UUCP 的长途通话可能会因为中继器而产生延迟。 USENET 的历史上有两个重要的事件。一个是1987年的大换名事件(Great Renaming),当时 USENET 的话题名称被重新排列组织。另一个是1993年的“永恒九月”(September that never ended),美国在线向它的用户提供访问 Usenet 的服务。菜鸟用户的涌入持续地降低了 Usenet 乃至更多互联网上的行为、言论的水准。 与此同时,在微型计算机的圈子内,另一种存储-转发系统也在发展,称为 BBS(Bulletin-Board System)。BBS 是计算机上运行的一款服务软件。用户通过一个调制器和一个终端来访问 BBS,BBS 允许用户之间相互留言,上传和下载文件,有时甚至可以玩游戏。 BBS 的灵感来源于超市的公告栏,1978年首个 BBS 在芝加哥出现。随后18年中,成千上万的 BBS 如雨后春笋般出现,背后的服务器往往只是车库里的一台废弃电脑主机。 其后经过几番修改,1984年出现了一套名为 FidoNet 的新BBS系统。它可通过 Internet 电子邮件访问,具有跨站邮件功能,以及类似 USENET 的论坛系统。 90年代中期,随着互联网的广泛普及,BBS 文化很快地消退。只有少数具有怀旧情怀的用户还在使用 BBS,还有一些具有艺术风格的站点被保留了下来。 BBS 留下的文化印记几乎只剩下一些兴起于 BBS 的文件传输协议,比如 XMODEM、YMODEM 和 ZMODEM。这些协议可以在7位的链路上传递8位数据。当年还未接触过 TCP/IP 的用户正是通过它们首次了解信息分包、错误检测等概念。如今,还有至少一家路由器生产商家支持通过串口用 XMODEM 上传数据。 当年,除了 USENET 和 BBS 之外,也有诸如 AOL、CompuServe 和 GEnie 等运营商提供服务,互联网时代到来之后,它们或多或少都受到了冲击,甚至完全消亡。 在这期间,有一件事物侥幸地存活到了2000年左右,那就是各大校园里的学术广域网:CSNET、BITNET、EARN、VIDYANET 等等。当时它们也支持收发邮件和传输文件。现在电子邮件列表中的术语“listserv”就来自于当年的 BITNET。 ### 混乱的终端 现代 Unix 系统的软件终端模拟器处于一段漫长且混乱的历史尽头。这段历史起源于早期称为“glass TYYs”的一种显示器,因为它们模拟电传打字机,但是成本较低,因为不需要消耗纸张。第一台设备于1969年发明,其中最出名的也许是1975年生产的 ADM-3。 最早的 VDT 显示器,比如 ASR-33,只能显示大写字母。有意思的是,尽管1975年之后大多数 VDT 显示器都能支持显示小写字母,但很长一段时间内 Unix 和 Linux 的登录系统都习惯于将输入内容转换为大写字母。如果用户创建了一个全大写字母的用户名和大小写混杂的密码,各种麻烦就会随之而来。 Lear-Siegler ADM-3A(1976)和 DEC VT-100(1978)等设备继承了每行80个字符的穿孔卡片的惯例,显示的行数取决于4:3显示屏的高度(2K 字节的显示内存);这是现在软件终端模拟器的默认尺寸设置为24x80或者25x80的缘由。 这些终端被称为“智能终端”的原因是它们可以解释控制代码来执行操作,比如将光标移动到屏幕的任何位置。加粗、下划线、高亮显示等功能也得到了快速普及。然而,彩色文字和彩色背景是在 VDT 显示器即将淘汰的前几年才开始流行,在此之前的显示器都是单色的。有部分显示器支持粗糙的低分辨率点阵图,也有一部分支持黑白的矢量图形。 早期 VDT 显示器使用的控制码杂乱无章。这一时期的主要遗产是管理这些控制码的 Unix terminfo 数据库,因而终端和应用程序之间可以据此完成抽象的操作,比如“移动光标”等等。目前终端模拟器仍在使用的光标库函数当初就是为了简化这些操作。 1979年,基于 DEC VT-100,推出了终端控制码的 ANSI 标准。到90年代前期,ANSI 标准在 VDT 显示器中已经非常普及,这也是现在终端模拟器选用它的原因。 大约1992年,个人电脑的位映射彩色显示器已经能与单色 VDT 显示器相媲美,并且价格也降到了大众所能承受的范围,这整个技术领域随即迅速地完成了新旧更迭。有少量 VDT 设备一直存活到2010年左右。 有些人认为 VDT 时代遗留的痕迹可以解释 Unix 命令行,事实情况并非如此,后者出现的时间显然早于 VDT,可以追溯到60年代晚期和70年代早期的最后一代终端打印设备。大家都明白,这就是为何我们现在通常把输送到终端模拟器的标准输出称为“打印”。 VDT 技术时代真正能够解释的是下一节将要介绍的一些古董级游戏,以及一些仍然使用的工具程序,比如 vi、top、mutt 等。这些才是 VDT 年代的高级图形交互技术。 ### 前GUI时代的游戏 位映射彩色显示器的流行带动了图像界面游戏的发展。在此之前,VDT 显示器上也流行过大量仅需文字交互或者使用字符图案的游戏。 这些 VDT 游戏也曾在早期的微型机上流行过。一方面由于早期的微型机没有图像显示功能或者功能很弱,另一方面是因为文字类游戏相对容易开发并且容易从书籍杂志上迁移过来。 最早期的一组游戏是众所周知的 Trek 家族,于1971年推出,玩家驾驶星舰与克林贡人和罗慕伦人以及其他敌人战斗。各个年龄段的 Hacker 们对此游戏应该都有深刻的印象。 关于 Trek 游戏的历史总结过于复杂。值得我们注意的是,它及其简陋的界面(甚至不是为 VDT 显示器而设计,而是为了电传打字机)掩盖了其背后相当复杂的战争游戏,包括积极策略、战术奇袭和严密逻辑。 还有另一组游戏采取了与 dungeon-crawling 不同的方式,它们更为直观。它们被统称为“roguelikes”,Rogue 是这一系列中最早被开发的,那是1980年。它们支持地牢层面的俯瞰视角,玩家可以借此游走对抗怪物和寻找宝贝。 这个系列中最受欢迎的游戏是 Hack(1984)和 Nethack(1987)。Nethack 是最早一批由开发团队借助互联网分布式协作完成的项目之一。在当时,这是一个非常新颖的工作方式,因此用这个想法给游戏冠名。 90年代中期以后,这些游戏逐渐淡出了我们的视野,但直到今天它们仍旧有少数的忠实粉丝。粉丝们任务原始的界面设计使得他们能更专注于情节和故事,留给他们了丰富的想象空间。 ### ASCII 表 ASCII 的全称是美国信息交换标准代码(American Standard Code for Information Interchange),是60年代发明的一套基于拉丁字母的电脑编码系统。不像其他早期的字符编码,ASCII 一直沿用至今。它与 Unicode 前127个字符编码相同。如果你知道 UTF-8 编码,每个 ASCII 编码的文件也可以看作是 UTF-8 编码的。 下表是 ASCII-1967,也就是今天仍然使用的版本。 ![enter image description here](http://images.gitbook.cn/af8fedf0-0d45-11e8-a6da-d9b57bdbbf02) 它与最初的1963年版 ASCII 表略有不同。这张表没有包含波浪线和竖线,5E 由尖号改为向上的箭头,5F 由下划线改为向左的箭头。 如果你在90年代之后才接触计算机,那些控制字符就显得非常神秘,即0~31号字符。也许你知道 NUL 是 C 语言的字符串结束标志,还知道 LF 表示换行,HT 表示水平制表,那么剩余的符号都代表什么呢? 其中,大多数的符号都是电传协议留下的遗产,一部分符号早就停用了,另一部分甚至都不为圈内人所知。只有极少数的符号还留存于目前的二进制协议中。 笔者列举了前32个符号的含义: NUL C 语言中字符串结束的标识符。 SOH 标题开始标志,某些版本的 Unix 把它当做收件箱的消息分隔符。 STX,ETX 很少用于数据包和数据流的分隔符。ETX 是 Ctrl-C,在 Unix 系统中表示为中断字符,但这与 ASCII 表示的意义毫无关系,也许是从“Cancel”一词引申而来。 EOT 相当于 Ctrl+D,Unix 终端的传输结束标志。 ENQ 在硬件串行终端的年代,如果计算机发送 ENQ 到终端,终端需要做出应答。虽然这种做法并不普遍,它至少给了计算机自动配置终端能力的办法。在更早的电传打字机年代,应答内容是基站 ID 而不是设备类型。在70年代,人们都记得 ENQ 在 ascii 表里的名字是 WRU,意为“Who Are You?” ACK ENQ/ACK 用于通信连接时的握手确认。当时,Hacker 们在日常交流中用“ACK”来表示“I hear you”。 BEL 让电传机的电铃发出提示声音。通常 VDT 设备也支持这个功能,但是现在的软件终端模拟器不一定支持。有些设备把它改为标题栏闪烁的提示。 BS 退格,即字面意思。曾经争议过键盘上的 Backspace 是否应该只支持退格功能,还是要兼顾退格和删除的功能。 HF 水平制表符,如字面意思。曾经用作 Unix 的文本文件的分隔符。 LF Unix 文本换行符。终端将其解读为“向下滚动一行”。 VT 垂直制表符。在终端打印输出的时代,这个符号可以让纸张向下滚动若干行。有些 ANSI 编码将 VT 定义为“向上滚动一行”。大家还记得这个符号的唯一原因是它在 Unix 系统中定义了空格字符,而在其他系统中早就销声匿迹。 FF 换页键。许多 VDT 显示器将它定义为“清屏”的指令。软件终端模拟器有时也保留了这个习惯。 CR 现在的读者可能从未见过当年的打印机,所以需要解释一下:“回车”是将打印头或光标移动到最左边的操作。Windows、其他非 Unix 操作系统和一些互联网协议(例如 SMTP)把 CR-LF 作为行结束符,而不是仅仅用 LF。MacOS 则只用 CR 表示。 SO,SI 切入、切出字符集。双色电传打印机(另一种颜色通常是红色)用 SO 指令切换为备用颜色,SI 指令换回原有的默认颜色。 DLE 数据链路转义,有时在二进制协议中用来表示数据包标识符。也就是说,一个数据包以 DLE 开始,以 DLE 结束,如果数据中包含有 DLE 字符,则连续输入两个 DLE。 DC 在笔者的印象中,除了电传打字机之外别无用途。 NAK 参见上文 ACK 词条的介绍。 SYN 除了电传打字机之外也别无用途。注意,不要将它与 TCP/IP 协议初始连接时,三次握手 SYN SYN-ACK 中的 SYN 搞混淆。 ETB 除了电传打字机之外也别无用途。 CAN 除了电传打字机之外也别无用途。 SUB DOS 和 Windows 系统使用 Ctrl-z 作为文件结束标志,但与它的 ASCII 含义并不相关。当时的人们都知道 ^Z 继承自 CP/M(1974) 的操作系统,这个系统早已被人遗忘。 ESC 现在仍被广泛使用。它的用法最初是和 VT00 和 ANSI 标准的 VDT 有关,现在已经被所有软件终端模拟器所使用。 [FGRU]s ({Field|Group|Record|Unit} 各种分隔符),现在很少使用。 DEL 表示退格并且删除。 上述这些符号并不是都被我们熟知,有些看着眼熟却不知道功能,有些知道功能却又想不起表示符号。现如今仍然常用的符合主要是 NUL、BEL、BS、HT、LF、FF、CR、ESC和DEL。 ### 大事记 1961年 MIT 发布 PDP-1,现在公认的 Hacker 文化也随之诞生。 1969年 Ken Thompson 开始研发 Unix 系统的雏形。首台商业化的 VDT 发布。首次通过 ARPANET 交换数据包,奠定了今天因特网的发展基础。 1970年 DEC PDP-11 首次发布;它的体系结构主导了后续机型的研发,包括后来的 Intel 微处理器。 1973年 这一年 Interdata 32发布,32位机的时代开启。Unix Edition 5从贝尔实验室走向了一大批教育科研机构。XEROX Alto 率先创造了“工作站”的概念,当时它是一台具有高分辨率显示器和鼠标的联网个人计算机。 1975年 首台 Altair 8800发布,微型计算机时代的大幕拉开。首台24x80和25x80的 VDT 投产。ARPANET 宣布“可用”,开始进入主流的高校。 1976年 经典书籍《Lions’Commentary on UNIX 第六版》发布。大多数 Hacker 首次得以窥视 Unix 的内核代码,对后来开源社区的发展也意义深远。 1977年 Unix 被移植到了 Interdata,是首个用 C 语言替代汇编语言开发内核的版本。 1978年 世界上首个 BBS 在芝加哥问世,取名为 CBBS。 1981年 IBM 的首批 PC 机投产,微型机的英雄时代结束。 TCP/IP 用于安装了 4.1 BSD 版本 Unix 的 VAX-11/780;ARPANET 和 Unix 文化开始融合。 1982年 Sun Microsys 公司成立。商业化 Unix 工作站的时代到来。 1983年 PDP-10 项目被砍,标志着36位系统架构的彻底结束。ARPANET 在经历一番脱胎换骨之后,进化为了 Internet。 1984年 AT&T 开始大规模地推广商业版 Unix,避免用户直接接触源代码。FidoNet 在 BBS 圈子里诞生。 1985年 RMS 发布 GNU Manifesto。同年,C 语言已成为系统开发和应用开发的主流编程语言,最终完全替代了更早期的编译语言。IBM 的 model M 首发。 1986年 Intel 386 首发,8位和16位 PC 机随之而淘汰。大约到1989年此级别的消费级硬件设备才普及,但在那之后的计算机性能迅速地超越了早期的32位迷你机和工作站。 1987年 USENET 正在经历大换名行动(Great Renaming)。 1991年 Linux 和万维网分别诞生。 1992年 位映像彩色显示器应用于消费级 PC 设备。VDT 显示器逐渐被淘汰。 1993年 Linux 系统支持了 TCP/IP 协议,从业余级产品升级为专业级操作系统。美国在线给 USENET 引入流量,“September That Never Ended”时代来临。 1994年 互联网在美国初具规模。USB 标准颁布。 1995年-1996年 UUCP/USENET 和 BBS 文化达到了巅峰时期,之后随着互联网的崛起而没落。 1997年 笔者做了“Cathedral and Bazaar”的演讲。 1999年 互联网泡沫刺破前的最后疯狂。工作站时代结束:随着运行 Linux 系统的 PC 机普及,Suns 和其他 Unix 工作站的市场快速萎缩。 2005年 显示器生厂商把主要生产力量由阴极射线管调整为纯平显示器。2003年之后纯平显示器成为主流产品。另外,2005年 AOL 不再扶持 USENET,Endless September 终归结束。 2007年-2008年 64位系统成为主流,32位系统逐步淘汰。单个处理器的速度稳定在 4GHz 左右。iPhone 和 Android 首发。