Unix手册页的历史

2020-05-29 04:31:17

UNIX手册页从何而来?谁引入了名称、概要等基于部分的布局?对于手册页作者:那些经济的两个和三个字母的说明是从哪里开发出来的?

互联网上的许多可用账户缺乏引用,有时甚至不一致。在本文中,我将根据源代码、手册和第一手资料重新构建UNIX手册页的历史。

特别感谢Paul Piells的CTSS源档案;Bernard Nivelet的Multics Internet Server;UNIX遗产协会的UNIX源重建研究;Gunnar Ritter为传家宝项目的源;阿尔卡特-朗讯贝尔实验室的Plan 9源;BitSavers的历史档案;最后但同样重要的是,Rudd Canaday,James Clarke,Brian Kernighan,Douglas McIlroy,Nils-Peter Nelson,Jerome Saltson。

萨尔策用MAD计算机语言为麻省理工学院的IBM7094 CTSS操作系统编写了径流实用程序。它留下了相当多的遗产:不仅当代手册页继承自径流,而且其中许多人实际上使用的指令与原始径流手册中指定的指令相同。

输入通常由英文文本组成,每行不超过36o个字符。控制字必须以新行开始,并且它们以句点开头,以便它们可以与其他文本区分开来。径流不打印控制字。

在许多缩写径流控制字中,诸如sp和br之类的宏仍然很常见。根据Saltzer和原始文献,径流的语法大致继承了M.J.Leslie Lowry,Fernando J.Corbató和J.Richard Steinberg于1963年所作的照抄、备忘录和修饰实用程序。径流的最初目的是格式化萨尔策的博士论文提案。

径流来源:MAD、FAP支持例程、支持例程接口。由Saltzer先生提供。

Jerome H.Saltzer,手稿打字和编辑,兼容分时系统AH.9.01节,程序员指南,Patricia Crisman,编辑(第二版)。麻省理工学院出版社,1965年(1966年12月修订)。(HTML)

杰罗姆·H·萨尔策,TYPSET和FORKER,备忘录编辑和键入命令,麻省理工学院计算中心备忘录,CC-244。1964年11月6日(HTML)。

M.J.Leslie Lowry,Fernando J.Corbató和J.Richard Steinberg,Compatible Time Sharing System中的Memo,Modify,and Ditto Commands in the Compatible Time Sharing System,麻省理工学院计算中心备忘录,CC-205。1963年3月11日。由Saltzer先生提供。

在AT&Amp;T Bell Labs&Hhippany中心工作期间,Canaday领导了麻省理工学院CTSS向GE-635(635组装)的移植工作。怀疑径流公用事业是此端口的一部分。移植的CTSS最初打算作为原型(将被耐克硬件取代),但最终又被使用了五年。找不到此CTSS端口的源。

Rudd Canaday,过去的日子。2011年10月27日。给克里斯塔普斯·宗森和汤姆·范·弗莱克发电子邮件。

Rudd Canaday,过去的日子。2011年10月24日。给克里斯塔普斯·宗森和汤姆·范·弗莱克发电子邮件。

人们对这个推测的径流港知之甚少,只知道它被称为Roff,很可能是在贝尔实验室的GCOS-II GE-635上运行的。里奇经常被引用为参与了这个港口,这一点是没有争议的。卡纳迪也被认为是一位作家,尽管他自己的说法并非如此。McIlroy和Saltzer都推测,如果这个版本被写成,很可能是用BCPL写的,很像径流。

Rudd Canaday,过去的日子。2011年10月27日。给克里斯塔普斯·宗森和汤姆·范·弗莱克发电子邮件。

1967年,Madnick将径流代码作为脚本移植到IBM的IBM CP67/CMS。脚本文档明确提到UNIX终端上的手册页格式化程序至今仍在使用退格编码约定(当然,在此之前,这是机械打字机的常见做法):

因此,退格键允许在终端对脚本文件加下划线和叠印。逻辑退格字符仅在输入时打印,并且不占用记录中的一列;它在逻辑上退格一列.。

无法找到最初重写径流的源代码,尽管存在大量关于此实用程序的文档。马德尼克转会的日期来源于他的出版物和独立的账目。

Stuart E.Madnick和Allen Moulton,Script,一个在线手稿处理系统,IEEE工程写作和演讲学报,卷。EWS-11,第2号,1968年8月。

1969年,麦克罗伊发布了一个有影响力的BCPL径流端口,将径流模型扩展到默里山AT&;T贝尔实验室的Gecos GE-645计算机上。他在写径流时没有提到CTSS径流源代码,也没有提到任何其他推测的Saltzer效用的衍生品。该实用程序在1969年以后的进展记录在由R.F.Mabee移植的Multics BCPL源代码中:

1969年3月,贝尔实验室的道格·麦克罗伊(Doug McIlroy)写了第一本“穆尔蒂奇的罗夫”(Roff For Multics)。1969年5月和6月,阿特·埃文斯对其进行了广泛的修改,增加了许多评论,并做出了各种修改。1970年由丹尼斯·卡普斯添加的脚注。由Harwell Thrasher于1971年维护。R Mabee在1971-1972年间添加了许多新功能并修复了错误。径流和BCPL在1973年5月由R F Mabee移交给6180 Multics(从645)。

麦克罗伊的港口有时被称为径流,有时被称为罗夫。更名的原因并不完全清楚:我知道我在1969年称它为决选。到了1971年,他成了罗夫。现在我不太确定这个名字是从莫里斯那里得来的。可以想象,这句话出自汤普森之口,他对缩短名字很在行。我1971年的描述是在1月份;第一版Unix手册的日期是1971年12月。

分流源列表,由Multics Internet服务器托管。根据该文件的许可条款,可在本地获得径流源文件的副本。

道格拉斯·麦克罗伊,罗夫,美国电话电报公司贝尔实验室技术备忘录。1971年1月12日。在作者许可的情况下可用。(高质量版本。)

道格拉斯·麦克罗伊,“决选”,美国电话电报公司贝尔实验室技术备忘录。1969年9月17日。在作者许可的情况下可用。(高质量版本。)。

合成实用程序néflow是Multics霍尼韦尔6180的CAPPS向PL/1提供的径流端口。它后来由埃德·沃尔曼(Ed Wallman)进行了调整和改进。汤姆·范·弗莱克(Tom Van Vleck),沃尔曼1978年中期的经理,讲述了为制作照相排版手册和消除对BCPL的依赖所做的移植工作。(注:主要来源错误地将Ossanna称为撰写BCPL决选的人;实际上是McIlroy。)。

汤姆·范·弗莱克,沃尔曼作曲的起源日期。2011年10月22日。发电子邮件给克里斯塔普斯·宗森斯。

撰写由Multics Internet服务器托管的源列表。根据文件的许可条款,您可以在本地获得合成源文件的副本。

1966年夏天,在麻省理工学院工作期间,科尼根接触到径流后,在普林斯顿大学撰写博士论文(以格式化论文),用Fortran编写了一个PORT(用于IBM System/360)。根据他的说法,该系统又被学生会使用了五年。穿孔卡片的来源早已不复存在。

布莱恩·科奈根,OS/360下的手稿印刷:罗夫。在作者许可的情况下可用。(高质量版本。)。

汤普森写了一个PDP-7端口,要么是BCPL的径流,要么是直接来自CTSS的径流。这个分叉是进化的死胡同,取而代之的是大约在同一时间编写的PDP-11ROF(1)。这个端口的源代码早就丢失了。

肯·汤普森(Ken Thompson),UNIX手册页&有关Roff(1)历史的问题。2011年10月23日。发电子邮件给克里斯塔普斯·宗森斯。

Multics的大多数编程团队继续在位于默里希尔的AT&;T贝尔实验室使用UNIX,因此在1971年AT&;T UNIX版本1中将Multics Final合并为UNIX Roff(1)也就不足为奇了。这是BCPL决选的PDP-11汇编语言端口。根据McIlroy的说法,Ossanna说服AT&;T专利部使用UNIX和ROF(1)来格式化专利申请,而根据汤普森的说法,这种使用是购买PDP-11的理由。

关于这个版本是谁写的,有很多不同的说法,但大多数都集中在奥桑娜、里奇和汤普森身上。然而,麦克罗伊、科尼根和汤普森的第一手资料表明里奇是该书的主要作者。这是证实了里奇在BCPL的专业知识,因为罗夫(1)是基于麦克罗伊的BCPL决选。

不幸的是,第一个Roff(1)版本丢失了。AT&;T UNIX版本1的一些源已从旧磁带重建,但Roff(1)不在其中。从那时起剩下的只有手工录入和第一手帐目了。然而,版本5 AT&;T UNIX的PDP-11源代码仍然存在,根据第一手资料,它是原始版本的修改形式。

在手册页方面,版本1 AT&;T UNIX ROF(1)也因其发布的第一版UNIX程序员手册而闻名,该手册定义了当今流行的手册页结构和布局。汤普森在Multics MSPM的启发下构思了这个大会,本身也受到CTSS手册的启发。

Joseph F.Ossanna,Dennis Ritchie和Ken Thompson,Roff,UNIX程序员手册,第一版,第1节,1971年11月。

由Multisans.org托管的Multics系统程序员手册的目录和部分列表。

肯·汤普森(Ken Thompson),UNIX手册页&有关Roff(1)历史的问题。2011年10月23日。发电子邮件给克里斯塔普斯·宗森斯。

道格拉斯·麦克罗伊,“*Roff的设计与实现”。2018年12月3日。通过电子邮件发送到Groff邮件列表。

Ossanna接管了PDP-11Roff(1),并为AT&;T UNIX版本2构建了nroff(1),它专注于将文本输出到终端。这样做的确切动机尚不清楚,但人们含糊地认为这是为了发展实用程序和语言,以支持更高级的格式。

遗憾的是,原始工作的源记录已完全丢失;但是,有更高版本的PDP-11源(适用于版本6 AT&;T UNIX)和手册页(版本3 AT&;T UNIX)可用。

汤普森提到,nroff(1)引入了可编程宏的概念。nroff(1)的版本6 AT&;T UNIX源代码证实了这一点,其中文件的前缀为/usr/lib/tmac。解析宏(参见版本6 AT&;T存档中的nroff.8)。相同的行为不会在Roff(1)源代码中同时重现,所以这是宏的第一次出现是有道理的。

Joseph F.Ossanna,Dennis Ritchie和Ken Thompson,Roff,UNIX程序员手册,第一版,第1节,1971年11月。

肯·汤普森(Ken Thompson),UNIX手册页&有关Roff(1)历史的问题。2011年10月23日。发电子邮件给克里斯塔普斯·宗森斯。

Ossanna开始从他的PDP-11nroff(1)源码为版本4AT&;T UNIX编写troff(1)。它被广泛断言,驱动动机是为猫照排机创造输出。

此版本的AT&;T UNIX的原始源也丢失了;但是,手册仍然存在,PDP-11源的记录存在于版本6 AT&;T UNIX的原始磁带数据中(显然无法重建)。

1975年左右,奥萨纳用C语言重写了troff(1)。然而,1977年,这项工作停止了,消息来源近两年没有受到影响,直到科尼根恢复了这项工作:

乔·奥斯纳于1977年底去世后,特洛夫可能有近两年的时间是静止的,因为没有人有时间和勇气去碰它。当时完全是用C语言写的,我记得有9000多行。我简单地对其进行了修改,逐渐绕过了字体的一些限制,利用动态内存,并为其属性在动态加载的文件中指定的设备生成独立于设备的输出。

结果是第一个完整的UNIX troff(1)源代码。在版本7 AT&;T UNIX中,nroff(1)和troff(1)都是从相同的C源构建的,由预处理条件分隔,而roff(1)仍然构建在其PDP-11程序集中。Ditroff(%1)名称来源未知。科尼根写道,我很肯定我说的只是一个与设备无关的流氓;这个名字来自其他地方,我从来都不喜欢它。

Kernighan的与设备无关的troff(1)在未来几年被重新打包到AT&;T(及其衍生产品)的商用UNIX系统中。大约在1978年,DWB以troff(1)作为其支柱;后来,WWB安装了许多附加的字处理实用程序。这些应用程序在1989年由美国电话电报公司贝尔实验室的子公司USL重新打包。大约在1978年,SoftQuad收购了DWB工具,将troff(1)更名为sqtroff(1)。

B.W.Kernighan,M.E.Lesk和J.F.Ossanna,UNIX分时系统:文档准备,AT&;T Bell系统技术期刊,第57卷,第6期,1978年7月。

“UNIX分时系统:统计文本处理”,“美国电话电报公司贝尔系统技术学报”,第57卷,第6期,1978年7月。

B.W.Kernighan,M.E.Lesk和J.F.Ossanna,UNIX分时系统:文档准备,AT&;T Bell系统技术期刊,第57卷,第6期。1978年7月。

Plan9操作系统最初于1991年由位于默里希尔的AT&;T Bell实验室发布,是一个扩展了UNIX模型的研究系统。它包括ditroff(1),Kernighan稳步改进它以包含UTF编码等特性。直到2000年6月的第三版之前,Plan 9还不是自由软件,当时源代码是按照Plan 9许可证获得许可的。(1)直到2000年6月,第三版才成为免费软件,当时源代码是按照Plan 9许可证获得许可的。它在2002年根据朗讯公共许可证1.02再次获得许可。

2005年,Sun Microsystems发布了其Solaris操作系统的CDDL许可变体,称为OpenSolaris。这包括1983年导入AT&;T UNIX system V UNIX的Troff(1)的重新获得许可的后代。里特在2005年8月将该软件并入了传家宝项目。

GNU troff通常被认为是现代UNIX安装中分布最广的。它默认捆绑在大多数GNU/Linux操作系统上。这个端口,重命名为Groff,是由James C.Clarke在1989年专门为GNU项目编写的。此时,还不存在开放源码的实现。

Groff移植完全基于SunOS 4.1.4附带的troff文档,并且是在Sun 4/110上用C++编写的(GNU C++编译器的初始实现是在Sun上实现的,这使其成为理想的起点)。

1991年,Spencer向Usenet comp.soures.unix发送了一封简短的邮件,说明他已经为AT&;T UNIX nroff(1)和ditroff(1)版本7中记录的MAN和MS宏包编写了AWK语言的解释器。

这是AWF,这是一个非常实用的格式化程序,或者完全用(旧的)awk编写的(子集)nroff-ms&34;克隆。

根据Spencer的说法,AWF对于C News的可移植性是必要的,C News是由Spencer和Geoff Collyer在1987年编写的Usenet新闻服务器。该项目希望分发手册页源代码,但由于ditroff(1)源代码仍受许可证限制,因此需要保证可移植到未授权的UNIX系统。

阿贝尔在1991年将AWF(1)移植到C,当时他还在普渡大学。这个移植的动机是[生产]一个可以在小型系统上运行的C语言版本,特别是MS-DOS系统。

与AWF类似,mandoc(1)主要读取ditroff(1)宏文件(不是一般的ditroff(1)输入),尽管它具有一些通用输入功能。它是第一个完全语义的手册页解析器,公开已解析文档的注释内容。格罗夫(1)手册是这个港口的主要基础。

在霍尼韦尔时,将径流移植到IBM CP67/CMS,并将其重命名为Script。主页:web.mit.edu/smadnick/www/home.html。

在默里山的AT&;T Bell实验室工作期间,研究了PDP-11汇编语言nroff(1)和troff(1)(也将后者转换为C语言)。

在默里希尔的AT&;T Bell实验室工作期间,编写了PDP-11汇编语言Roff(1)。主页:cm.bell-labs.com/who/dmr。

在默里山AT&;T Bell实验室工作期间,参与了Roff(1)、Nroff(1)和Troff(1)的工作。主页:cm.bell-labs.com/WHO/Ken。

此页面的内容可在知识共享(Creative Commons';Attribution Share-Like)下获得:派生作品必须归属于作者并使用类似的许可。但是,此处提供的引用通信(和源材料的副本)是发送者/作者的版权,不在本许可证的涵盖范围内。