Author: Demon --- Law & Script
开源软件简史(二)链接门
开源软件简史(三)链接门
Unix 的诞生
“软件共享的历史与计算机一样长久,如同人类自烹饪依始就交换食谱一样。” --- Richard Stallman
实际上,在计算机出现的最初年代,由于能够使用计算机的都是软件开发者或研究人员,软件提供它们的源代码是天经地义的事。将软件以源代码形式提供给用户,软件问题可以由用户们(同时也是软件开发者、计算机科研人员)自己修改解决,这样不仅能缓解计算机企业的售后服务压力,特定硬件平台上的用户们还可以对自己的软件进行修改来满足一些特定的需求。使用相同硬件的计算机科研人员或爱好者会组成特定的小团体,共享技术心得和自己编写、修改的程序。
1969年11月,美国国防部高级研究计划管理局( Advanced Research Projects Agency )开始建立一个命名为 ARPAnet 的网络,通过专门的接口信号处理机( IMP )和专门的通信线路,把美国的几个军事及研究用电脑主机联接起来,其4个结点分布在洛杉矶的加利福尼亚州大学洛杉矶分校、加州大学圣巴巴拉分校、斯坦福大学、犹他州大学四所大学的4台大型计算机。起初是为了便于这些学校之间互相共享资源而开发的。作为 Internet 的鼻祖,虽然 ARPAnet 的设计目的是使研究人员在合作一个项目时可以共享代码和信息,但是它也成为了对开放源代码可行性的一个展示。
1965年时,美国电话电报公司( AT&T )下属的贝尔实验室加入一项由通用电气和麻省理工学院合作的计划,这项野心勃勃的计划旨在建立一套多使用者、多任务、多层次的 MULTICS 操作系统,用于取代当时通用的只支持30台终端访问主机的分时操作系统( Compatible Time-Sharing System )。但到了1969年,由于 MULTICS 计划制定的目标太多太大,项目距离完成遥遥无期,实际拿出的产品也不能叫人满意,该项目最终被喊停。
1969年的夏天,贝尔实验室的研究员 Ken Thompson 和 Dennis Ritchie 吸取了之前的教训,采取了“保持简单”的策略,一起用汇编语言在 DEC PDP-7 机器上写出了一个新的多任务操作系统,这就是 Unix 。说起这个名称, MULTICS 其实是“ Multiplexed Information and Computing Service ”的缩写,原本计划能同时支持1000用户的系统,最后只能支持到2位用户,于是贝尔实验室的人们就开玩笑地称他们的系统其实是:“ UNiplexed Information and Computing Service ",缩写为" UNICS ",后来,大家取其谐音,就称其为" UNIX "了。
Unix 的第一版是完全用汇编语言编写的,虽然运行起来效率非常高,但这也意味着它无法直接在非 PDP-7 的机器上运行,以至于次年 Ken 所在的研究小组申请到了一台性能更加强大的 PDP-11/20 时,他们不得不把整个操作系统重写一遍以完成移植。
Unix 最初只在贝尔实验室内部流转,因为大家并不喜欢 DEC 机器自带的操作系统,所以实验室内越来越多的人换上了 Unix 。渐渐的, Ken 还收到了外部的人索要Unix的磁盘拷贝寄来的邮件,由于数量不多, Ken 也一并寄给了他们。不过,随着越来越多的人想要在不同的机器上使用这套系统,他们意识到有必要用高级语言来重写这套系统。最初,他们在 Unix 第二版中使用的是 B 语言,这是 Ken 以剑桥大学的 BCPL 语言为基础设计的一种简便易用的语言。但由于其在进行系统编程时依旧不够强大,所以 Dennis 对其进行改造形成了一种新的语言,他取了 BCPL 的第二个字母作为这种语言的名字,这就是今日影响力巨大的 C 语言。随着1973年 C 语言的完成,两人迫不及待地投入到用 C 语言重写 Unix 的工作中,不久第三版的 Unix 便诞生了。用 C 语言编写的 Unix 代码简洁紧凑、易读、易修改、可移植,从此 Unix 操作系统的修改、移植变得相当便利,为 Unix 日后的普及打下了坚实的基础。而在当时那个为了实现最高运算效率而完全用汇编语言编写操作系统的时代, Ken 和 Dennis 此举是极具创新和革命意义的,他们清楚地意识到需要在效率和效用之间取得平衡。用汇编写的 Unix 会更快和更小,但用 C 语言写的系统变得如此的易于修改、理解和移植,所以他们认为牺牲速度和内存是值得的。
1974年, Ken 和 Dennis 在7月的《 The Communications of the ACM 》上发表了一篇“T he UNIX Time Sharing System ”的文章向外界介绍 Unix ,引起了学术界的广泛关注,向其索取源码的请求更是源源不断。于是乎,Unix 第五版就以“仅用于教育目的”的协议提供给各大学作为教学之用,费用也只是象征性地收取了制作磁盘和手册的成本。由于其近乎免费和可获得的源码, Unix 很快成为当时操作系统课程中的范例,各大学和公司也开始对 Unix 进行了各种各样的改进和扩展, Unix 逐渐风行大街小巷。
致电脑爱好者的公开信
Ken 和 Dennis 的研究小组仍在积极地投入 Unix 的开发当中,他们的小组被称为“ Research ”(内部称为“1127”),与此同时,他们避免对外作出提供支持的承诺。这是因为 AT&T 受制于《反托拉斯法》的规定,无法进入电话、电报以外的行业,这也是它允许人们免费获得 Unix 源代码的重要原因。相应的,它不向用户提供软件技术支持和售后服务。于是人们便有了相互支持和共享错误信息的动机。但当时并没有互联网,这种共享往往通过学者间的游学和研究人员的交流会的形式完成,人们通过磁盘/软盘等形式分享改进过的源代码,这便是早期以物理形式存在的社区。
70年代,随着软件规模与复杂程度的提高,以及“福特主义”的兴起,商业软件开始了分工化的进程,软件工程内部分成了负责设计软件的功能与结构的设计员以及负责具体实现软件功能的编码员。这种由一个人或少数人负责总体设计和监督完成项目的模式由于和中世纪的大教堂建造非常相似,因而被称为大教堂模式。与此同时,计算机用户的平民化,和出于保护自家技术、确保公司盈利能力的目的,软件产品开始走向闭源,即只提供可运行的软件程序而不包括其源代码。对于两者的理解, Eric Raymond 用了一个有趣的比喻:“源代码就像菜谱,而可运行软件则是依照菜谱烹调出来的菜品,拥有菜谱的人可以轻易地烹调出同样的美味,而吃过菜品的人却不能够反推出其菜谱。”也就是说,闭源将使得用户无法知道软件实现的原理,通过修改代码以满足自己特别需求的愿望也无法实现。在这方面,微软称得上是一个先锋。
1975年,微软公司成立,他们推出的第一个产品 Basic 编程软件深受人们的喜爱,几乎成为每台电脑上必备的软件。由一群计算机爱好者和发烧友组成的“家用计算机俱乐部”是当时最著名的社区之一,俱乐部有一个不成文的规定,会员可以从俱乐部带走软件的磁盘,只要下次会议时带回两份拷贝给其他会员就行了。这是当时人们习以为常的软件传播方式,微软的 Basic 程序就这样被安装在了许多俱乐部成员的电脑上,而实际上只有原始的拷贝是从微软那里付了钱买来的。不久,盖茨便写了一封“致电脑爱好者的公开信”,其措辞简单明了,直接指责这种行为称“你们大多数人都是在剽窃软件”,接着他从触犯知识产权和抑制创新的角度阐述“谁能够承担得起没有收入的工作?什么样的爱好者可以让3个人长年累月无偿地投入编程工作中,找出所有的错误,编制产品手册并进行发布呢?” 私有软件和开源软件从此成了势不两立的仇家。
BSD ( Berkeley Software Distribution )
同年, Ken Thompson 获得了带薪休假一年的机会,他选择到加州大学伯克利分校访学,与他一起的,是他随身携带的最新的 Unix 第六版的源码磁盘。伯克利的 Computer & Science Research Group ( CSRG,就是在大学里对计算机有兴趣的同学、教授,一起捣鼓计算机的一群人)成员对于 Ken 的到来欢欣鼓舞,早在 Unix 发布之时 Bob Fabry 教授便为伯克利争取到了一份拷贝并在校园内招募到了一批有兴趣研究和改进这一系统的人,其中一名学生 Bill Joy 的表现尤为突出,他可以算是小组的领导人之一。 Ken 到了伯克利之后也没有闲着,他当时在开发一个可以工作在 Unix 上的 Pascal 解释器, CSRG 的人们加入其中,他们共同改进 Unix 的代码,添加新的功能。
1977年,其他大学的人们也开始对伯克利的软件感兴趣, Bill Joy 便开始着手编译他们自己的操作系统,正如早期的 Unix 一样,期间他们陆续有收到一些外界的代码改进和反馈,这些也一并被包含其中,待到下一个版本中一起发布。到了1978年3月完工时他们将捆绑了自家软件的改进过的第六版 Unix 以 1BSD ( 1st Berkeley Software Distribution )的名称对外发布。 1BSD 中包含了他们改进过的 Pascal 解释器,还包括了一些新的设备驱动程序,对核心的修改, ex 文字编辑器,和一个比 V6 的 Shell 更好用的 Pascal Shell ,适配的平台为 PDP-11 。 1BSD 一共分发出了30份左右的拷贝。
2BSD 于1979年5月时发布,适配平台依然是 PDP-11 ,这个版本除了一些软件的更新之外,最大的变化应该是 vi 编辑器的加入,这一编辑器是今日依旧非常流行的 vim 编辑器的前身。同年,伯克利购置了一台 DEC 最新款 VAX 机器,为了充分发挥这台机器的性能,小组成员们继续埋头工作,于年底前发布了 3BSD ,这一版本提供了 VAX 机器的接口以及虚拟内存的功能,从这一版本开始 BSD 一直使用 VAX 接口。 4BSD 于1980年底发布,添加了 Job-Control 功能,允许用户挂起进程。次年发布了 4.1BSD ,这一版本原本应该是称为 5BSD 的,但 AT&T 担心会与自家的 Unix System V 产生混淆,所以改称。 4.1BSD 没有大的软件升级,不过其面对的是 VAX 机器自带的系统 VMS 在性能上表现出的优势,于是这一版本可以说花费了很大的力气进行系统层面的性能校正。 4.2BSD 带来了较大的功能更新,这也使这一版本的开发周期延长到了2年,到1983年8月才正式发布。新版本添加了完全由伯克利开发的 TCP/IP 协议栈,快速文件系统(将磁盘的扇区由 512B 增加到 4KB ),以及对 NFS 文件系统的支持。BSD最大的贡献大概要数 TCP/IP 了,在 Windows NT 中也依靠 BSD 的代码来实现。
1982年 CSRG 小组迎来变故,小组的核心成员 Bill Joy 选择离开伯克利并创立了 Sun 微系统公司,他将之前自己领导开发的 BSD 继续发展成为 SunOS 操作系统(后来的 Solaris ),与德州仪器合作设计了 Sparc 微处理器,在90年代依靠出售其高性能、平价的 Sparc 系列工作站狠狠赚了一笔, Sun 的股价也一度超过 IBM 。
1984年美国司法部依据《反托拉斯法》起诉美国电话电报公司构成垄断,联邦法院判决将其分拆成一个专营长途电话业务的新 AT&T 公司和7个本地电话公司,之前对其进入计算机行业的限制也因此同时被取消。正如大家所预见到的, AT&T 没有放过 Unix 这块大肥肉的商业价值,不久之后 Unix 便不再提供源代码,转而收取高达2~20万美元的授权费。
再说说这几年间 Unix 的发展。1979年的 Unix 7 是最后一个广泛发布的研究型 Unix 版本,之后 Unix 的许可证开始禁止大学使用 Unix 的源码,包括在授课中学习,80年代相继发布的 8、9、10 版本只授权给了很少的几家大学。1981年, AT&T 基于版本7开发了 Unix System Ⅲ 的第一个版本,这是一个仅供出售的商业版本,不过其依然提供源代码。同时,为了解决市场上混乱的 Unix 版本情况, AT&T 综合其他大学和公司的各种 Unix 和软件,开发了商业版 Unix System V Release 1 并于1983年发布,这一版本开始不再提供源代码。以 System V 命名的 Unix 在80年代陆续又发布了几个版本的更新,在当时具有强大的影响力, IBM 的 AIX 和 HP 的 HP-UX 等 Unix 变种皆是基于 System V 开发。
回到伯克利, 4.3BSD 于1986年6月发布,常规更新。由于此时各个版本的 BSD 都含有 Unix 代码,虽然 BSD 可以免费获取到,但作为衍生的产品,要使用 BSD 却不得不向 AT&T 支付高昂的授权费。于是一个分支项目便应运而生,项目利用 BSD 自行开发、公布在网络上的那部分代码开发了一个新的版本,于1989年6月公布,取名 Networking Release 1 ( Net/1 )。由于 Net/1 去掉了私有部分的 Unix 代码,它并不是一个完整的操作系统而更像是一个软件包。当然,人们并不会轻易放弃, Net/2 的计划很快被提上日程,这次的目标是把所有私有 Unix 代码重写以形成一个完整的操作系统。时间一晃就是两年,1991年6月 Net/2 发布,尽管完全重写的目标是基本上实现了,不过这次依然不完整,由于 Unix 内核部分的6个文件编写难度太大,小组的成员最后决定将缺少这6个文件的版本公布,希望外界能有大神级的开发者帮助他们补齐为一个完整的系统。
过了半年多时间, Bill Jolitz 夫妇合作完成了缺失的6个文件,并将其源码公布于网上给人下载,取名为 386BSD 。 Jolitz 曾参与过 BSD 早期版本的开发,而他们的代码也正如其名字一样,是为兼容当时流行的 Intel 80386 机器开发的。后来 Jolitz 作为联合创始人加入了 BSDi ( Berkeley Software Design Inc ),继续改进这部分的代码, BSDi 是由原 CSRG 的几名成员成立的一家公司,他们把补齐文件之后以 BSD/386 (后改称 BSD/OS )命名的系统以市场可以接受的价格( $995 )出售,取得了不错的销售成绩。
BSDi 以大幅低于 System V 的价格销售,甚至在广告中使用了“ 1-800-ITS-Unix ”这样带挑衅意味的客服电话,这对 Unix 的销量来说是一个很大的威胁,看不过眼的 AT&T 不久便将对方告上了法庭,时间是1992年,理由是其销售的系统中含有私有的 Unix 代码,随后伯克利的师生也被卷入这场诉讼当中。依据原告的申请,法院签署了禁止令, Net/2 及其派生的版本都被禁止在市面上传播,期间由于法院的调查, BSD 的大部分开发工作也被搁置。这场官司旷日持久,闹得人心惶惶,学生和教师以及校委员会被要求出庭作证, Net/2 的全部代码作为证据必须接受原告和法庭的仔细审核以确保其中如伯克利所说的已不包含有 Unix 的私有代码。期间, AT&T 将 Unix 版权出售给了 Novell ,接手的 Novell 不打算继续扯皮,遂与伯克利达成了和解。这桩官司最终在1994年1月结案,根据调解协议, Net/2 的18000个文件中有3个文件需要删除,另有68个文件需要添加 Unix 的版权声明,协议中还要求,原告不得针对使用或开发 4.4BSD 的任何人及组织提起进一步的诉讼。
既然官司打完了,大家又可以回去各干各的活儿了。6月份, 4.4BSD 发布,这次分为完全包含伯克利代码并可自由分发使用的 4.4BSD-Lite (不完整),和包含 Unix 代码并需要取得授权才可使用的 4.4BSD-Encumbered 两个版本。1995年的 4.4BSD-Lite Release 2 是最后一个由伯克利开发的BSD版本,随着 CSRG 小组的解散, BSD 的开发也开始走出这座校园,到更广阔的天地里去。
在这之后,基于 386BSD 逐渐形成了三个“主流”的 BSD 分支: FreeBSD 是最受欢迎的 BSD ,针对高性能和易用性,它为 x86和 x64 架构的处理器提供了最好的支持。 NetBSD 被设计成可以运行在几乎任何计算架构上,具备高度的可移植性。 OpenBSD 则是为最大化安全性设计的,这不仅仅体现在它宣称的功能,在实践中也确实如此,它是为银行、金融等重要机构的关键系统设计的。由于使用 4.4BSD-Lite 可以避免法律纠纷,这些分支版本后来也将他们的代码更新到了 4.4BSD-Lite 。
至此, BSD 的故事暂告一段落。
Minix
因为 AT&T 的政策改变,在 Unix 7 推出之后,新的使用条款不再允许在大学中使用 Unix 源代码。阿姆斯特丹自由大学计算机科学系的 Andrew S. Tanenbaum 教授为了能在课堂上教授学生操作系统运作的实务细节,决定在不查看任何 AT&T 的源代码情况下,自行开发与 Unix 兼容的操作系统,他取 Mini-Unix 之意,将之命名为 Minix 。 Minix 1.0 的全部代码一共约12,000行,随他的《操作系统:设计与实现》一书一起发布于1987年,置于附录中作为范例,随后也发行了一些包含源码的磁盘。彼时的 Minix 凭借低廉的价格和简易的操作在大学中大行其道。
Minix 的系统要求在当时来说非常简单,只要三片磁盘就可以启动。系统在设计之初是为了在 IBM PC 和 IBM PC/AT 兼容电脑上执行的,1.5版也有移植到 Motorola 68000 系列 CPU 、 ARM 和 Sparc 机器上,2.0版则以 x86 架构为主。早期版本皆以教学为目的,需要收取很少的费用,2000年换用 BSD 授权后可以免费获取。
最新的版本为 Minix 3 ,发布于2005年的 ACM 操作系统大会上,依旧作为《操作系统:设计与实现》第三版的范例,只不过其设计目标发生了改变,摘自其官网:“ Minix 3 是一个免费、开源的,旨在实现高可靠性、灵活性及安全性的操作系统。” 但是由于其开放源代码的特性,它依然非常适合用于课堂教学中让学生们了解操作系统是如何运作的。
POSIX
POSIX 是 Richard Stallman 应 IEEE 的要求而提议的一个易于记忆的名称,全称是 Portable Operating System Interface (可移植操作系统接口),而 X 表明其是 Unix API 的传承。 POSIX 标准定义了操作系统应该为应用程序提供的接口标准,是 IEEE 为要在各种 Unix 操作系统上运行的软件而定义的一系列 API 标准的总称,其正式称呼为 IEEE 1003 ,而国际标准名称为 ISO/IEC 9945 。 POSIX 的标准化工作始于1985年左右。
POSIX 标准意在获得源代码级别的软件可移植性。换句话说,为一个 POSIX 兼容的操作系统编写的代码,应该可以在任何其它的 POSIX 兼容操作系统(即使是来自另一个厂商)上编译执行。 POSIX 并不局限于 Unix ,许多其它的操作系统也支持,例如 Linux 、 FreeBSD 、 DEC OpenVMS 等, Windows NT 不支持。
本文是LinuxStory柴米油盐计划的投稿文章,由 LinuxStory 整理发布。原作者署名为:Demon --- Law & Script 。转载请注明出处,否则必究相关责任。
本文链接:https://linuxstory.org/simple-history-about-opensource-1
[…] Demon — Law & Script 开源软件简史(一)链接门 […]
[…] Demon — Law & Script 开源软件简史(一)链接门 […]