UNIX历史(11): FreeBSD和Apple相遇

书接上文,上一次讲到回归Apple的Jobs,约了刚到美国的Linus,本来试图拉Linus一起干个大事,结果两个人鸡对鸭讲,讲不到一块去。Linus眼中的Apple是已经掉了毛的凤凰不如鸡,技术烂的不行,Jobs的眼中红的发紫的Linus不过是傻小子睡凉坑,全凭火力壮。两个人一拍两散,Linus那边暂时略去不表,先看看Apple这边又找了哪位领军人物。

说实在的,Jobs回归Apple以后,虽然当年的Apple早已不再风光无限,但是就如同一代枭雄袁世凯写的两句诗:商妇飘零,一曲琵琶知音少;英雄落魄,百年岁月感慨多。当时Jobs是落魄的英雄,确实知音难觅,不过,还是找到了一个虽说不如Linus这么星光璀璨的人物,但是放在开源界依旧可以呼风唤雨的英雄,这个人就是FreeBSD的领军人物Jordan Hubbard,此人在2001年加入Jobs的Apple,一直到2013年离开Apple,在Apple工作了12年时间,在这12年里,将FreeBSD的技术和Apple买来的Next技术融合为一体,是Apple的首席工程师,可以说是在他的帮助下,我们才能用到如今的iOS和Mac OS系统。也正是此君,让Apple继承了UNIX的基因。接下来我来讲讲FreeBSD的由来。

[passster password=”qnXuE1rRzGNU”]

FreeBSD要追溯到1993年,和Linux不同,Linux是从零开始在PC上实现了一遍UNIX,但是FreeBSD则是借助UNIX的代码,试图加一些技巧,让UNIX可以运行在PC机上。两者的最终目标都是要在PC上运行一种UNIX代码,只是选择了不同的道路。两个操作系统一前一后同时起步,现在的Linux已经在份额上远远超过了FreeBSD,但是FreeBSD仍然是非常有影响力的操作系统,在SONY的PlayStation上,任天堂的Switch上,还有众多像Netflix,Whatsapp这样的互联网公司仍然用着FreeBSD的操作系统。当然也包括Apple的操作系统,受FreeBSD的影响巨大。

在1993年的时候,一群电脑爱好者试图将Berkeley UNIX移植到PC上运行,于是这些爱好者,写了不少Shell代码,试图让安装过程变的友好一些,这些Shell代码被整合起来,做成了一个Shell代码合集,名字叫386BSDPatchKit,负责整合这些代码的主要有三个人,分别是Nate Williams, Rod Grimes 和本文的主角Jordan Hubbard。

在FreeBSD的历史上,有很多人贡献了代码,当时的人们还没有版权的概念,有大量贡献代码的人最后都离开了FreeBSD这个社区,好吧,当时还没有FreeBSD社区,也没有正式的邮件列表,纯粹是一些爱好者小规模的发明。如果要安装当时的FreeBSD,需要精挑细选特定的硬件,否则肯定是安装不上的。当时有个管理员,爱好跳伞自由落体的阶段(Freefall),这个管理员打算给这个当时还叫386BSDPatchKit的系统搞个网站,比如可以提供FTP下载服务。按照严格的标准选择,他配置了两台机器,其中一台名字就起名为Freefall,这台机器选择的非常好,相对来说死机的几率小很多,另一台连续6小时都跑不够就死机了。

因此这台名为Freefall的机器承担了初期不少任务,当时还有用到任何版本管理系统,更不要谈什么CVS了,当时都是人工处理版本,最新的稳定版本他们都放在这台叫Freefall的机器上,如果大家称呼的话,就叫Freefall’s 386BSDPatchKit,这个名字很傻,于是他们把这个名字简化成了FreeBSD。

在这个FreeBSD已经能跑的时候,因为大部分人并没有很快的互联网,只能通过CD来传输这么大的系统,在这种需求下,本文的主角Jordan Hubbard就想发行一个CD,最起码可以让分发变的方便一点,于是FreeBSD 1.0发布,也有了正式的这个FreeBSD的名字。CD发行商为Walnut Creek。这个版本的FreeBSD是基于U.C. Berkeley的4.3BSD-Lite为母本,里面提供了不少适合安装在PC的Shell脚本。

这个版本和随后的版本都卖出了不少,但是正是因为使用了4.3BSD-Lite,我前面几篇文章讲过UNIX的版权斗争,这也影响了FreeBSD,在U.C. Berkeley的UNIX版权问题没搞清楚之前,FreeBSD的版权也就有了问题,因此,FreeBSD也因此受挫。在UNIX版本问题解决以后,FreeBSD才开始再次出发,按照自己的节奏,慢慢发展成了现在的样子。

在FreeBSD的领军人物Jordan Hubbard加入Apple以后,Apple与BSD的关系越来越近,反而和Linux的关系越来越远。BSD的协议并没有采用Linux的GPL协议,而是采用的自己的BSD协议。但是BSD和Linux又同属UNIX的后代,因此很多代码修改以后,还是容易通用的。仅仅因为BSD不想采用GPL,尤其是GPL v3协议,因些在一些关键的像C++库上,仍然采用的是GPL v2协议,这导致的结果是Linux的运行库要比FreeBSD的要新。

[/passster]

后来Apple也和GNU社区关系冷淡,强推自己的LLVM技术,如果说Apple是第一个采用自己技术的人,那么BSD社区就是第二个采用Apple技术的人,比如LLVM,CLang,Grand Central Dispatch都是BSD社区积极采用的。在FreeBSD 9.0的时候,CLang被加入到FreeBSD中。这时候,一个大胆的想法被提了出来,FreeBSD将会逐渐的把GNU的代码替换掉,David Chisnall这个Objective-C的著名开发者加入FreeBSD社区,随着BSD版本的更新,GNU代码会越来越少,如果你有兴趣,可以点一下这个链接,看看GNU代码在FreeBSD中的情况。

https://wiki.freebsd.org/GPLinBase

UNIX历史(10):Linus和Jobs的会面

我相信来到我这个《知识星球》的都应该是听过我电台的人,关于Linux的开发,我已经做了好几期电台,就不再在这里写了,再写一次就有些重复了,这里详细写写电台里没涉及的内容。接上期,讲的是Apple考虑使用BSD做为自己的操作系统,那么,Apple难道没有考虑过使用Linux作为自己的操作系统么?

答案是,考虑过。

并且Apple的创始人Jobs和Linus的创始人Linus还举行了一次会面。这次会面在Linus的自传《Just for Fun: The Story of an Accidental Revolutionary》一书中有介绍。 在1997年,Linus从欧洲到了美国,加入了全美达公司。Linus这号人物到了硅谷,自然是一颗巨星降临,就像太阳系里加入了一颗新的行星,这个星系里的其它巨头都要见他一下。所以,包括Sun,IBM,Oracle这些公司的创始人级别的,都和Linus预约时间,一起喝个咖啡什么的。其中也包括Apple公司的Jobs。

[passster password=”qnXuE1rRzGNU”]

Jobs让他的秘书安排了这次会面,希望Linus能抽出1-2个小时的时间和Jobs见面,Jobs随时都可以,只要Linus有时间就行,Linus就答应了这次会面。

会面的过程是Jobs想让Linus与Apple合作,共同对付他们共同的敌人——微软。但是,Linus本人并不在乎微软,虽然Linus说总有一天,Linux会在桌面系统占有一席之地,但是他本人是不在乎微软公司的。用Linus本人的话来讲,他觉得Jobs和媒体上的Jobs没什么两样,Jobs对市场,对自我非常有兴趣,但是Linus对技术对自由非常感兴趣,两种截然相反的性格,导致了这次会谈没什么进展。

事后,Linux说他还是有点喜欢Jobs这个人的,比Sun公司的Bill Joy——vim编辑器和Sun公司的创始人——有趣多了。

我只站在我自己的角度上来看一下这次见面,看看两个人的处境。当时是1997年,Jobs刚刚回归Apple公司,公司生死未卜,Linus已经是开源界的老大,可以忽风唤雨。两个人又都是那种目中无人的人,不存在说谁是谁的粉丝,所以他们之间的谈话也不用寒暄,上来直接怼。最后谁也没说服谁,两个人在不同的道路上,都取得了成功,两个人采用的其实都是UNIX系统 

从技术来看这次争吵,好像无论什么技术,只要肯下功夫研究,都能取得不错的效果。Apple当时派出的技术代表是上两期讲的微内核Mach的专家Avie Tevanian,可以想象,Apple是铁了心的要维护微内核,Linus是铁了心的要维护Linux这种混合内核。在Linus的自传里,大量的写了他和Avie Tevanian关于技术的争论,也不知道坐在一旁的Jobs能不能听的懂。

他和Avie Tevanian可以说是棋逢对手。两个人的争吵从Mac OS的兼容性争吵到内存保护,最终谁也没有说服谁。但是如果以现在的眼光来看,无论是使用了BSD的Mac OS,iOS,还是现在无处不在的Linux(包括Android),两者加起来,已经完成了对手机市场100%的统治。当年Jobs许诺的如果想占领桌面,就要和Apple合作的预言,并没有实现,现实是现在占领不占领桌面,好像并没有什么太大的关系,毕竟Apple开启的手机市场,已经让桌面市场变得不那么重要了。

[/passster]

这次谈话让Apple和Linux分道扬镳,从此,Apple放弃了使用Linux的决定,改用FreeBSD的技术,当时FreeBSD的领军人物是Jordan Hubbard,Linus没有加入Apple,但是Jordan Hubbard加入了Apple,并且担任了BSD,UNIX的技术总监,Apple的内核技术走向了另外一条路。我们下一期再讲讲Jordan Hubbard和Apple在一个新的战场上是如何推进UNIX的。

至于Linux,我在电台里已经讲了太多了,在此就不再赘述。

UNIX历史(9):苹果为什么会改用UNIX内核的NeXT?

这个问题用一句话就能回答,因为当时苹果的操作系统已经不行了,自己做不出来,只好购买一个新的操作系统。这个新买的操作系统就是上一篇文章所说的Jobs做的NeXT。

Continue reading “UNIX历史(9):苹果为什么会改用UNIX内核的NeXT?”

UNIX历史(8):苹果公司如何采用了UNIX?

现在,苹果的操作系统叫 MacOS,这个MacOS是基于一个叫作NeXTSTEP的操作系统开发的。NeXT是苹果的创始人Steve Jobs被苹果公司开除以后,去建立的一家要复仇苹果的公司。

这家公司也是造电脑的,要开发一种给研究人员使用的电脑,硬件和软件自然都要是领先时代的。商标设计组由Paul Rand设计,花了数十万美元,给画了一个我看起来挺丑的黑盒子,这个按下不表。硬件组是由在苹果开发Lisa电脑的人马负责,这个也按下不表。主要是来说软件,也就是NeXTSTEP这个操作系统。

[passster password=”qnXuE1rRzGNU”]

NeXTSTEP的总设计师叫Avie Tevanian,这个家伙最后在苹果公司负责苹果的MacOS的开发,一直到2006年功成名就。他可不是什么无名之辈,他在卡内基-梅隆大学——这所由美国钢铁大王安德鲁•卡内基和美国银行家安德鲁•梅隆分别出资后来又合并的高校里——做出了对人类(是的,就是对人类,我没有写错)影响巨大的微内核操作系统——Accent。

Accent不是UNIX,但是Accent却也是引入了众多现代操作系统特征的前辈之一,比如在20世纪80年代,Accent就让每个进程有4G的虚拟空间,还有Copy-on-Write的功能也是这个Accent操作系统率先实现的。这种虚拟内存技术比微软和苹果早了10到15年。但是Accent不是UNIX,所以众多的UNIX软件无法运行在Accent之上。于是,Avie Tevanian想把Accent改进一下,做一个UNIX的兼容系统,这个系统就是后来名气更大的Mach。

Mach初生之时,UNIX已经年满16岁,因此Mach的目标之一就是让UNIX变的更简单,并且和UNIX互相兼容,在此基础之上,再把Accent的微内核这些先进的东西做出来。于是Mach就以4.3 BSD为基础,开始以新的代码替换BSD UNIX的代码,工作做了两年,就已经让学术界大为震惊,Mach的内核只提供内存和处理器管理,其它的诸如文件系统,网络,输入输出这些都独立运行在内核之上,这个领先的思想也让Mach大为成功,几十年来引用Mach论文的文章不胜枚举,是操作系统行业的一个里程碑。

我们现在打开操作系统的教科书,里面一定有IPC和虚拟内存这两章,Mach 1.0将进程和线程,消息传递机制实现的前无古人的优美。

在1987年,Avie Tevanian博士毕业,就去了本文最开始说的乔布斯新开的NeXT公司。他的职位是NeXT的操作系统,目标是做一个图形化的操作系统系统出来,成果就是NeXTSTEP。仅仅过了不到两年,NeXT发布了预览版,随后一年,在1989年9月18日,发布了1.0版本的NeXTSTEP。NeXTSTEP使用的内核就是Mach 2.0。NeXTSTEP取得了巨大的成功,但是相应的硬件平台并没有多少人来买,于是后来NeXT直接砍掉了自己的硬件部分,开始支持除了苹果的PowerPC架构的几乎所有主流架构,NeXTSTEP可以运行在x86,PA-RISC,SPARC平台上,唯一不支持的就是把乔布斯踢出门的Apple所支持的PowerPC平台。想必乔布斯心里也有过不去的坎吧?

再回来说这个Mach,在1.0取得了巨大成功以后,这个操作系统就和很多优秀的足球运动员一样,出道即巅峰,比如小法。在经历了平稳的2.0,更加工程的2.5以后,在3.0的时候,Mach 3.0让人看到了什么叫强弩之末,在激进的3.0版本下,Mach将BSD UNIX服务完全分离,创造了一个在学术上完美的操作系统,但是,这个系统,连开打开一个文件都会有数十条IPC,消息传递的数量的效率只能达到BSD UNIX的20%到50%之间。这个Mach 3.0也就此成为Mach的最后一个版本。

[/passster]

在这一两年时间,学术界和工业界相继放弃了Mach操作系统,学术界又出现了新的微内核系统,比如L4,开发Mach的核心人员,如Avie Tevanian去了苹果,Richard Rashid去了微软,这两个在Mach系统中呼风唤雨的大佬,又在另一个层面上继续上演英雄惺惺相惜的故事。这个极具开创精神的Mach系统,以另一种方式溶入了UNIX和Windows之中。

macOS

在NeXT和Sun合作以后,NeXTSTEP改名为OPENSTEP,再后来NeXT被Apple收购,UNIX就以这种方式进入了苹果公司。下一期,我再来讲一下苹果公司为何要收购NeXT以及收购以后的NeXTSTEP如何与FeeBSD合作,以及FreeBSD的领军人物Jordan Hubbard加入Apple的故事。

UNIX历史(7): 开源运动所要的技术和理念保证

从技术上来说,开源需要的技术手段并不简单,要汇集起这么多分散在各地的程序员,将这些五花八门的代码组织成一份可运行的代码,需要的不仅仅是兴趣。比较代码之间的差异,并提出改进这件事情并不是那么有趣,尤其是参与项目的程序员越多,需要的改进也就越难以理解,幸好,Perl语言的创始人Larry Wall发明了一个软件,这个软件叫patch。

patch和diff这两个软件结合起来,可以将不同的人提交的代码做一个比较,不必传输整个代码,只需要将有变动的地方传输过去,这在网络不发达的当时,无异大大提高了程序员之间互相合作的效率。无论对原有代码有多么大的改进,都可以生成一个简单的patch文件传输过去,运用这个工具,在互联网上进行协作开发变的可能,这为以后Linux的发展提供了技术上的保证。

Continue reading “UNIX历史(7): 开源运动所要的技术和理念保证”

UNIX历史(6): UNIX内战

在1983年的时候,AT&T被拆分,起初,大家都认为被拆分是个好消息,毕竟有如此众多的公司都推出了自己的UNIX,也有很多的公司可以利用UNIX再加上便宜的68000芯片做新的电脑,这样可以打破计算机行业的老大,当时不可一世的IBM公司。

但是,事情总是会向着不同的方向发展,AT&T当然也想赚钱,如果能把所有的竞争者都清出这个市场,自己作为垄断者肯定能赚更多的钱,于是AT&T开始对UNIX的源码进行了保护,与其它高校和组织之间的交流变的少了起来,并且动用了律师这个武器对贩卖和使用UNIX的公司进行控告。在美国打官司是一件麻烦的事情,大多数人不想官司上身,于是“非法”交易的UNIX公司和使用者逐渐减少。先前对UNIX有很多贡献的高校也不再给UNIX提供代码。经过AT&T的这几下折腾,UNIX成功实现了供应商和用户的双降。 Continue reading “UNIX历史(6): UNIX内战”

UNIX历史(5): 1980—1990年,UNIX在网络上的飞速发展

最近美国的Google公司因为和美国军方合作,导致了众多反对的声音,一个很“主流”的反对声音是:科技不能和政治纠缠在一起。实际上,科技本来就是和政治,军事纠缠不清的。在1980年,美国国防部高级研究计划局(DARPA, Defense Advanced Research Projects Agency)要在VAX机器上实现TCP/IP协议。该计划局有一个项目,也就今天互联网的前身ARPANET(Advanced Research Projects Agency Network),这个ARPANET是运行在PDP-10这种机器上,这种机器是DEC公司的产品,第一个版本的UNIX也是这种机器上开发的。
Continue reading “UNIX历史(5): 1980—1990年,UNIX在网络上的飞速发展”

UNIX历史(4): 1974—1979年, UNIX被外界所知的几年

这是我在我的知识星球上写的《我所知道的UNIX故事》连载之一,有1/3是免费放出来做广告的,本文就是免费的,如果有兴趣,欢迎订阅我的知识星球。

上文说到,1974年,在《美国计算机通信》(Communications of the ACM)上发表了关于UNIX的第一篇论文——《UNIX Time-Sharing System》——之后,外界开始对UNIX关注起来。在那篇论文中,主要是写了UNIX如何的简洁,如何的优美,如何的容易移植,并且可以跑在配置不用太好的机器上。在论文中,说明了已经在UNIX上跑的600个应用。所有的这一切让外界对UNIX的兴趣大增。

当时个人还是买不起计算机的,能买得起的都是大学或者一些实验室。这些大学或者实验室的科学家都希望能体验一下UNIX,于是就写信到贝尔实验室,希望能搞一份UNIX来用用。在1958年的时候,由于贝尔实验室为解决反拖拉斯案例和政府达成的协议,AT&T不能从事与计算机相关的工作。所以,UNIX不能卖钱。当时的协议还规定,贝尔实验室必须将非电话业务的技术许可给任何提出需求的人,美国的法律咱不懂,反正UNIX必须要给任何提出需求的人。当然了,Ken发的论文,这事当然得Ken自己来搞。

我认为,刚开始的时候,请求肯定不会特别多,毕竟那个年代电脑少,要用到UNIX的人肯定也少。在初期的时候,ken一个人负责将装有UNIX的磁带和磁盘邮寄出去,在每一个邮包里,都有ken亲自写的一张纸条,上面写着:”love, ken”

我们可以想到,UNIX被安装进大学的实验室,大学里的人肯定有各种各样的需求。而且那个年代,能用UNIX的人自然也是计算机非常NB的人,需求肯定是难以满足,而且那些人肯定不会上网找代码,毕竟没有什么现成的东西可以用。所以,在最初的几年里,非常多的人为UNIX做出了巨大的贡献,我只列举一些至今仍然在用的项目,这些都是当年那些和ken要了UNIX源码的学校做出的贡献:

耶鲁大学觉得UNIX的Shell版本不够好用,最初的shell叫Thompson shell,可能不太好用,耶鲁大学改进了UNIX的shell;普渡大学要用到UNIX的多用户,当时UNIX并没有特别考虑UNIX的多用户,所以并不完善,普渡大学的电子工程系改进了UNIX的多用户设计;多伦多大学要给UNIX安装一些打印机,所以,多伦多大学完善了UNIX的驱动程序,并且制定了一些规则;加州大学也开发了一个新的shell,c shell,还有包括vi在内的众多软件;最初的UNIX是不支持网络的,这个功能也是在普渡大学,加州大学等一众大学的共同努力下完成的。

所有的这些改进,又通过各种渠道反馈给了ken,于是在1970年代后期,Bell lab发布Unix V7的时候,都把这些改进加入到了UNIX之中,最终,产生了一个更加完善,更加强大的系统。于是,学术界,工业界,商业界之间的互相交流和反馈,让UNIX越来越强大。

公认的第一个版本的UNIX并不是ken在PDP上开发的UNIX,那个UNIX太简单了。UNIX公认的第一个版本是被各个大学,商业机构使用,并反馈源码以后形成的UNIX V7,这个版本可以说是集当时之大成,在1979年由ken亲自发布的。

在当时,UNIX文化产业还形成了一本非常重要的书,叫作《莱昂氏UNIX源代码分析》,这本书有中文版,各大学校的图书馆里肯定有,我当年也曾经借来放了几周,看不懂。本书由上、下两篇组成。上篇为UNIX版本6的源代码,下篇是莱昂先生对UNIX操作系统版本6源代码的详细分析。本书语言简洁、透彻,曾作为未公开出版物广泛流传了二十多年,是一部杰出经典之作。本书的作者是澳洲人,可以看出当年UNIX已经影响到澳洲了。希望大家有兴趣的可以去图书馆找来看看,我确信你的学校里一定有这本书。

当UNIX火了以后,就开始有专门的商业公司开始运作这个事情,在1980年的时候,甚至有一家叫Microsoft的公司也开发了一个叫XENIX的UNIX开销售。当时,Internet已经慢慢的开始发展,如果没有Internet,不止UNIX,我们的生活将会是另外一个样子。

下一篇,就开始讲UNIX在1980年到1990年的发展,在这10年之中,最精彩的莫过于TCP/IP和UNIX版权的斗争了。敬请观注。

我的微信公众号是:软件那些事儿。如有兴趣,可以观注,或者,只是点点广告,让我多赚一点钱也很好 🙂

软件那些事儿

UNIX历史(3): 1969—1974,UNIX成长的前5年

本文是我在知识星球写的《我所知道的UNIX的历史》系列文章,本文是收费的,在这里只能看一部分。因为UNIX的故事是故纸堆里的事情,有同样癖好的人极其稀少,我做电台深有感触。因为没有阅读量就没有广告收入,幸好有几十个人肯付钱,我才得以考古。

这篇文章有2775字,主要考古了UNIX出生后的前5年,也就是那篇对外宣告UNIX出世的论文——《UNIX Time-Sharing System》——发表之前的故事。

主要讲了如何立项,开发的过程,UNIX名字的来源,如何使用的B语言,里奇又是如何魔改B语言从而形成了C语言,里奇的建议如何为日后Plan 9埋下了浮笔,为了避免官司缠身成立的USG又是如何成了日后旷日持久的版权官司的主角。都在本文中有所涉及。

其中还讲了man这个命令的由来,与UNIX的立项有莫大的关系。

书接上文

当贝尔实验室决定退出Multics项目的时候,汤姆森和里奇的内心是痛苦的。从Multics项目组回来以后,这两个哥们决定上书领导,开发一个类似于Multics的项目,贝尔实验室刚刚从一个失败的操作系统泥潭里出来,常言道,刚出虎穴,又入龙潭,这也太执迷不悟了!理所当然的,他们的领导没有批准这个项目。

汤姆森在Multics项目组的时候,负责的项目是是用Fortran开发的一个游戏,这个游戏叫《太空旅行》,这个游戏最初是汤姆森在Multics上开发的,后来才为了运行这个游戏,首先他将游戏移植到GE的系统上。其实还有不少软件都是从Multics上移植过来的,比如启发vi这个编辑器的ed编辑器,就是汤姆森在Multics上实现的,还有一个版本是在上一次讲的CTSS上实现的。如果真的追下去,ed是山寨的一个叫qed(quick editor)的软件,ed,qed都是行编辑器,只能每次操作一行,那是因为当时的计算机没有屏幕,只能通过类似电传打字机的方式和计算机交互,每次只能输入一行,所以,编辑文件也是一行一行的处理,理解了这个,就知道为什么vi是一个巨大的进步了。

话题再回到汤姆森移植《太空旅行》上,一种说法是当时的GE运行时间太贵了,玩不起,一种说法是GE的可操作性太差了,不好玩。不管怎么说,汤姆森还是要另辟蹊径。于是,他看上了一台老旧的没人用的机器,DEC的PDP-7小型机。这个机器主要的作用是用来连接大型主机使用的,但是这个主机有一个比较快的硬盘,还有两个图形终端,也许可以玩双打了 

于是汤姆森和里奇就决定自己开发一个系统,当时只有PDP-7这么一台机器,要在这台机器上开发的工作难度并不小。这两个哥们就参考Multics,设计了包含文件系统,进程还有一组文本编辑器,《太空旅行》小游戏的操作系统。万事开头难,这和今天不同,他们什么都没有,没有合适的编程语言,没有编译器,于是工作的第一步是要给PDP-7写一个编译器。

这个工作是在GE的机器上做的,要经过给纸带打孔等一系列工作才终于完成,编译器工作的不错,可以支持两个用户,一个是汤姆森,一个是里奇。

他们两人的反常举动显然瞒不过同事的法眼,他们的同事Brian Kernighan知道了这件事,打趣他们两人,说这个系统应该叫UNiplexed Information and Computing System,来讽刺Multics,起初UNIX的名字叫UNICS,后来因为UNICS和UNIX同音,还少了一个字母,才变成了UNIX。这个叫Brian Kernighan的哥们也不是个普通人,后来,他也加入了UNIX的开发,现在名满天下的C语言入门书《The C Programming Language》和第一作者就是Brian Kernighan,第二作者是汤姆森,第三作者才是里奇。

接下来我再来讲一下UNIX开发的过程。

[passster password=”qnXuE1rRzGNU”]

写第一个版本操作系统的人是汤姆森,里奇并没有实际写代码,所有代码都是汤姆森一个人完成的。当时汤姆森的老婆要带孩子去娘家过一个多月,因为孩子不大,是第一次去见外婆,这一个月里,汤姆森实际上又回到了单身汉的状态,因此有足够的精力完成这个操作系统。系统虽然粗糙,但是考虑是一个月时间完成的,也已经是人中龙凤才可以做到的。

里奇在这个阶段的作用是建议汤姆森把终端,打印机什么的,也当成一个文件来处理,这就是UNIX日后宣传的一切皆文件的来历,虽然实际上,驱动程序什么的,都不是文件,也正是因为UNIX存在缺点,让Plan 9这个伟大的失败项目看到了机会,项目虽然没成功,但是留下的遗产却至今仍在。这个Plan 9的系统留待日后再说。

他们在PDP-7这台机器上工作了两年以后,机器不能使用了,这时候他们想让贝尔实验室再买一台新的机器来用。当然,申请机器要有个名头,说开发操作系统肯定是不行的。汤姆森打听到贝尔实验室当时的专利办公室正在找一个字处理软件,用来处理与专利相关的文件,汤姆森就说别找了,找不到的,我来做一个给大家用吧。大家都说好!于是在1970年5月,这个办公自动化系统被立项,在1971年夏天月,一台新机器PDP-11被运到了实验室。这台机器是个裸机,连硬盘都没有,直到12月,硬盘才来,搞个文本编辑软件就像张飞吃豆芽一样简单,很快就让老板和专利局的同事非常的满意。这个文本编辑软件(名字叫First Edition)就是现在还被一些硬核粉丝用的nroff/troff,代码肯定不再是以前的了,现在开源的版本叫groff。我们普通人,如果不用Linux就不用了,如果用Linux,当我们使用man这个命令的时候,会调用roff格式的文档。

交差以后,汤普森就在这台新的PDP-11上搞UNIX了。

起初在PDP-7上开发的UNIX是用汇编做的,移植到PDP-11上并不容易,这让汤姆森动了不用汇编写代码的心思。移植成功以后,还要移植一个Fortran Compiler,当时这个Fortran的编译器也是用汇编写的,但是在移植的时候,汤姆森决定用一种称之为B语言的编程语言来写,B语言是一种解释语言,执行起来不快。这个时候,他的好朋友里奇来修改B语言,给B语言写了一个解释器,能够生成机器码,并且加了一些数据结构与数据类型,这个被魔改后的语言被改名为C语言。

于是,汤姆森和里奇用这个C语言重新写了UNIX,这个版本的UNIX被他们两个称为UNIX V5版本,他们两人决定让其它人用这个操作系统,最初找了三个种子用户,这三个种子用户都是专利办公室的打字员,打字员很满意,于是专利办公室的人特别支持他们两个。

于是,慢慢的UNIX流行开了,从贝尔实验室的专利办公室开始,被慢慢的传到外面。因为是C语言写的系统,移植起来非常的方便,在1973年的时候,已经在25台机器上装上了UNIX。

由于当时AT&T由于和军方合作的关系,并且当时反垄断的原因,AT&T不能人事与计算机相关的销售,这样,UNIX是不能被卖的。但是,贝尔内部越来越多的人喜欢用UNIX,只好成立了一个内部小组,做UNIX的支持工作,这就是后来对UNIX发展有巨大影响力的USG(UNIX System Group),这个小组只做两件事情,一件事情是内部如果有人使用UNIX有麻烦,可以找他。第二件事情是如果有外面的公司想使用UNIX,这个小组负责发放许可证。至于开发,都是一些程序员来做。可能是这个基因,导致UNIX对普通用户的不友好,因为UNIX是程序员开发,程序员使用的一个操作系统。

在1974年,里奇和汤姆森共同发布了一篇论文,这篇论文名字叫《UNIX Time-Sharing System》,也正是这篇论文,让外界开始关注UNIX,由此,UNIX由贝尔实验室内部走到了外部。

下次再写UNIX在外面发展的过程。

[/passster]

UNIX历史(2): CTSS:UNIX的爷爷;Multics:UNIX的爸爸

本文是我在知识星球写的《我所知道的UNIX的历史》系列文章,为了公平起见,本文是收费的,在这里只能看一部分。

本文主要考查了UNIX之间的两个操作系统,一个是CTSS,一个是Multics。如果想看到更好更精确的内容,还请点击阅读原文去我的网站上。因为这里只能改五个字。

本文涉及的内容主要有:

  1. 最初没有操作系统的时候如何编程
  2. 批处理操作系统
  3. 在高达1800万美元一台的IBM 7094上开启的Project Mac项目
  4. 可以连接30到160台终端的CTSS系统
  5. 开启了现代操作系统众多诸如进程的Multics系统
  6. Multics的机器指令高达2000万条,而同期的IBM OS/360有100万条

本文有2500多字,是我写的《我所知道的UNIX的历史》的一部分

——正文开始——

时光流逝,时间的指针马上就是进入2019年,在50年前,也就是1969年的时候,世界上第一个配置了Multics操作系统的机器在MIT大学开始运行,负责学校的信息处理工作。

50年过去了,这个启发了包括UNIX在内的所有现代操作的前辈已经功成身退,虽然在众多的教课书里,Multics被形容为一个失败的项目,提到Multics只是为了衬托UNIX的伟大,但是不要忘记了正是Multics,将进程的概念引入了操作系统,将分时系统发扬光大。

Continue reading “UNIX历史(2): CTSS:UNIX的爷爷;Multics:UNIX的爸爸”