笔者想到现在年轻的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年代中期以后,这些游戏逐渐淡出了我们的视野,但直到今天它们仍旧有少数的忠实粉丝。粉丝们任务原始的界面设计使得他们能更专注于情节和故事,留给他们了丰富的想象空间。
ASCll表
ASCII的全称是美国信息交换标准代码(American Standard Code for Information Interchange),是60年代发明的一套基于拉丁字母的电脑编码系统。不像其他早期的字符编码,ASCII一直沿用至今。它与Unicode前127个字符编码相同。如果你知道UTF-8编码,每个ASCII编码的文件也可以看作是UTF-8编码的。
下表是ASCII-1967,也就是今天仍然使用的版本。
它与最初的1963年版ASCII表略有不同。这张表没有包含波浪线和竖线,5E由尖号改为向上的箭头,5F由下划线改为向左的箭头。
如果你在90年代之后才接触计算机,那些控制字符就显得非常神秘,即0~31号字符。也许你知道NUL是C语言的字符串结束标志,还知道LF表示换行,HT表示水平制表,那么剩余的符号都代表什么呢?
其中,大多数的符号都是电传协议留下的遗产,一部分符号早就停用了,另一部分甚至都不为圈内人所知。只有极少数的符号还留存于目前的二进制协议中。
笔者列举了前32个符号的含义:
- NUL (Null) C语言中字符串结束的标识符。
- SOH (Start of Heading) 标题开始标志,某些版本的Unix把它当做收件箱的消息分隔符。
- STX (Start of Text), ETX (End of Text) 很少用于数据包和数据流的分隔符。ETX是Ctrl-C,在Unix系统中表示为中断字符,但这与ASCII表示的意义毫无关系,也许是从“Cancel”一词引申而来。
- EOT (End of Transmission) 相当于Ctrl D,Unix终端的传输结束标志。
- ENQ (Enquiry) 在硬件串行终端的年代,如果计算机发送ENQ到终端,终端需要做出应答。虽然这种做法并不普遍,它至少给了计算机自动配置终端能力的办法。在更早的电传打字机年代,应答内容是基站ID而不是设备类型。在70年代,人们都记得ENQ在ascii表里的名字是WRU,意为“Who Are You?”
- ACK (Acknowledge) ENQ/ACK用于通信连接时的握手确认。当时,Hacker们在日常交流中用“ACK”来表示“I hear you”。
- BEL (Bell) 让电传机的电铃发出提示声音。通常VDT设备也支持这个功能,但是现在的软件终端模拟器不一定支持。有些设备把它改为标题栏闪烁的提示。
- BS (Backspace) 退格,即字面意思。曾经争议过键盘上的Backspace是否应该只支持退格功能,还是要兼顾退格和删除的功能。
- HT (Horizontal tab) 水平制表符,如字面意思。曾经用作Unix的文本文件的分隔符。
- LF (Line Feed) Unix文本换行符。终端将其解读为“向下滚动一行”。
- VT (Vertical Tab) 垂直制表符。在终端打印输出的时代,这个符号可以让纸张向下滚动若干行。有些ANSI编码将VT定义为“向上滚动一行”。大家还记得这个符号的唯一原因是它在Unix系统中定义了空格字符,而在其他系统中早就销声匿迹。
- FF (Form Feed) 换页键。许多VDT显示器将它定义为“清屏”的指令。软件终端模拟器有时也保留了这个习惯。
- CR (Carriage Return) 现在的读者可能从未见过当年的打印机,所以需要解释一下:“回车”是将打印头或光标移动到最左边的操作。Windows、其他非Unix操作系统和一些互联网协议(例如SMTP)把CR-LF作为行结束符,而不是仅仅用LF。MacOS则只用CR表示。
- SO (Shift Out), SI (Shift In) 切入、切出字符集。双色电传打印机(另一种颜色通常是红色)用SO指令切换为备用颜色,SI指令换回原有的默认颜色。
- DLE (Data Link Escape) 数据链路转义,有时在二进制协议中用来表示数据包标识符。也就是说,一个数据包以DLE开始,以DLE结束,如果数据中包含有DLE字符,则连续输入两个DLE。
- DC (Device Control) 在笔者的印象中,除了电传打字机之外别无用途。
- NAK (Negative Acknowledge) 参见上文ACK词条的介绍。
- SYN (Synchronous Idle) 除了电传打字机之外也别无用途。注意,不要将它与TCP/IP协议初始连接时,三次握手SYN SYN-ACK中的SYN搞混淆。
- ETB (End of Transmission Block) 除了电传打字机之外也别无用途。
- CAN (Cancel), EM (End of Medium) 除了电传打字机之外也别无用途。
- SUB (Substitute) DOS和Windows系统使用Ctrl-z作为文件结束标志,但与它的ASCII含义并不相关。当时的人们都知道^Z继承自CP/M(1974)的操作系统,这个系统早已被人遗忘。
- ESC (Escape) 现在仍被广泛使用。它的用法最初是和VT00和ANSI标准的VDT有关,现在已经被所有软件终端模拟器所使用。
- [FGRU]S ({Field|Group|Record|Unit} Separator) ({Field|Group|Record|Unit} 各种分隔符),现在很少使用。
- DEL (Delete) 表示退格并且删除。
上述这些符号并不是都被我们熟知,有些看着眼熟却不知道功能,有些知道功能却又想不起表示符号。现如今仍然常用的符合主要是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首发。