UNIX简史
从1991年Linux出现至今,由于众多IT巨头以及技术社区的推动,Linux已经成为非常成熟、可用于各种关键领域的操作系统,适当了解其发展历史,对于理顺其技术流派、从而更好地学习和使用Linux具有重要意义。由于其基于UNIX系统二十多年的研发成果,要了解Linux的历史就要先了解UNIX的历史。笔者搜集整理了一些史料分享给大家,本篇先介绍UNIX的历史,有不当之处欢迎批评指正。
UNIX由AT&T的贝尔实验室(BTL, Bell Telephone Labs)于1969年开发。UNIX源于一个叫MULTICS的项目,该项目于1964年发起,旨在开发一个可同时支持大量用户使用的计算机操作系统。除了BTL,通用电气(Generic Electrics)、麻省理工(MIT)也参与其中,但该项目并未成功(据说是因为进展过度缓慢被最终裁撤,也有人说是因为需求过于超前)。
在项目进行期间,1969年,BTL的两名工程师Ken Thompson和Dennis Bitchie利用业余时间在一台闲置的DEC PDP7计算机上开发了一个最基本的操作系统内核,同年,Thompson经过两个多月的论证和开发,为该系统内核设计了文件系统,使文件能够在层次结构中有序地存放。
后来,更多的人投入到了这项工作,这个项目也该有个名字了。因为MULTICS项目是“Multiplexed Information and Computer Services(多路信息和计算机服务)”的缩写,开发团队决定将他们的系统命名为“Unics”,表示“Unixplexed Information and Computer Service(综合信息和计算机服务)”,后来研究员Brian Kernighan干脆就将新系统叫做“Unix”。
随着系统开发的推进,他们使用的PDP 7显得有些小了,他们需要一台更强的计算机。他们决定以开发新的文本处理程序为由向公司申请购买新的计算机。在当时,文本处理程序是非常受市场欢迎的——公司同意他们购买一台PDP 11。
PDP 11到货后,他们发现只有CPU和内存,没有磁盘和操作系统,Thompson为它开发了一个驻留内存的RAM盘,一半用作磁盘,另一半用来运行操作系统。磁盘到货后,他们继续开发操作系统以及向公司许诺的文本处理程序。这个文本处理程序就是Troff,后来被用来制作UNIX的man手册。
1971年11月,Thompson和Ritchie完成了程序员手册。1972年6月,UNIX的第二版V2诞生,此时UNIX的装机数量已经超过10台。
1973年底,开发团队决定开一次发布会对外公开他们的成果。众多的IT机构和大学向他们申请UNIX的许可。因AT&T作为电信业垄断巨头(尤其是其垄断了长途电话业务),早就被美国司法部盯上,美国司法部在1958年与AT&T签订了一个和解协议,双方约定AT&T不进入计算机领域,不销售计算机相关产品,司法部不以《反托拉斯法》对其发起诉讼。由于这个原因,AT&T是免费向各机构和大学提供UNIX源代码的。但AT&T不向这些用户提供技术支持,也不为他们纠正系统中的错误,这些用户不得不联合起来形成社区来进行技术交流。他们创建了USENIX社区,意为“UNIX用户”,用来共享技术,他们曾在1974年5月举行了第一次交流会,虽然当时只有十多人参加,但对UNIX社区的发展起到了重要的推动作用。
加州大学伯克利分校也获得了UNIX使用许可,它是Ken Thompson的母校。1975年Thompson回到母校任教,同时带去了最新版本的UNIX。两个刚毕业的学生Chuck Haley和Bill Joy也加入了对UNIX的进一步开发中(Bill Joy后来成为了SUN Microsystems的副总裁之一)。Joy完善了EX编辑器,使其最终演变成了著名的全屏幕编辑器VI。VI不依赖于特定类型的终端,通过Joy创建的TERMCAP通用终端系统与特定终端所对应的控制器结合使VI在各种类型的终端上都可以正确工作。Haley和Joy还开发了一个Pascal编译器,并将其加入了UNIX。Joy将伯克利分校的UNIX版本叫做BSD(Berkely Software Distribution)。
Bill Joy在伯克利分校完成BSD4.1的开发后,离开伯克利加入了SUN Microsystems公司,在那里他完成了BSD 4.2的开发,在1983年他在此基础上创建了SUN版本的Unix——SunOS。
再回到AT&T。从1977年开始AT&T开始将UNIX向Interdata和IBM计算机移植,在此之前,UNIX只能在PDP计算机运行。到1979年6月发布的UNIX Version 7是第一个可移植的UNIX版本,该版本还提供了更多的先进功能,如awk, lint, make, uucp等。此时系统手册已达到400页,另有两个各400页的附录。该版本还包含了Kernighan和Ritchie开发的C编译器,用来对UNIX的大部分代码进行重写;以及增强的shell(Bourne shell)、find、cpio、expr等命令。
此时UNIX已作为计算机工业的一个重要领域开始被各大厂商重视,比如微软和SCO合作开发了Xenix,用于运行在Intel 8086平台的计算机上。AT&T意识到了UNIX是一个非常有商业价值的系统,它在Version 7的使用许可中以防止泄露商业机密为由阻止大学将其作为学术研究的范例,至此各大学只能将操作系统课程的传授限制在理论层面了。
1983年AT&T发布了UNIX System V(SV),这是一个收费的商业化版本,不允许传播源代码。
由于在1974年美国司法部再次起诉AT&T违反《反托拉斯法》,1982年哥伦比亚地区法庭判决AT&T败诉,1984年AT&T被拆成了8个小公司(一个新的AT&T和七个本地电话公司,分别是大西洋贝尔、西南贝尔、西部贝尔、太平洋贝尔、南方贝尔、亚美达科以及纽新公司,他们也被称为“贝尔七兄弟”)。这个判决实际上同时表示1958年的和解协议已经无效了,AT&T可以进军计算机领域了。所以拆分后AT&T依然继续开发System V。SV经过了多次修订,1989年发布的System V Release 4(SVR4)是最重要的一个版本,它首次结合了多个UNIX版本的特性,引入了其他厂商的技术,比如SUN Microsystems,实际上SVR4是AT&T和SUN Microsystems共同发布的,它标志着UNIX系统的进一步标准化和商业化。
再看伯克利分校这边。AT&T对UNIX版权的控制使得伯克利分校仅能将其BSD分发给持有AT&T源码许可的公司,同时伯克利也开始着手在BSD中清除AT&T的代码。80年代后期,几个伯克利的学生成立了一个叫“Berkely Software Design Inc."的公司用来出售BSD的一个商业版本,1990年被AT&T指控其侵权并告上法庭,伯克利分校也成为被告。一直到1994年双方才达成和解,BSD得以继续发展。BSD分裂成不同的版本,FreeBSD,netBSD,OpenBSD(被认为最安全的UNIX)和TrustedBSD。实际上,在1994年和解之前,AT&T就已经将UNIX卖给了Novell,次年Novell又将UNIX卖给了SCO。
这些年的时间里,各大厂商纷纷有了自己的UNIX产品,比如IBM的AIX,DEC的Ultrix,HP的HPUX,Microsoft与SCO合作开发的 Xenix,SUN的Solaries(SunOS的升级版本)。UNIX系统形成两大主要分支,即SVR4和BSD。所有现代的UNIX系统或多或少地都是基于这两个主流分支开发的。
由于AT&T对UNIX版权的控制使大学在教授操作系统时没有了范例可用,1987年,荷兰阿姆斯特丹自由大学的美籍教授Andrew Tanenbaum(加州大学伯克利分校物理博士,《操作系统:设计与实现》的作者)决定自己写一个不含AT&T代码的UNIX兼容操作系统用于教学,他将他的系统叫做Minix。Minix就是Linux的前身,1991年芬兰学生Linus Torvalds在Minix的基础上创建了Linux。由于Linux作为开源软件,获得了众多厂商和技术社区的支持,在1995-1999年间,Linux得到很大的发展,支持多种硬件平台,成为商业UNIX的有力竞争对手。
回望历史,对于UNIX版权的控制深深地影响了UNIX的发展历程。由于IBM在支持Linux时使用了部分AT&T原始代码,掌握版权地SCO在2001年对IBM进行了长达18年的诉讼案,期间SCO的言行表现使得SCO被UNIX世界边缘化了,从现在来看,从SCO拿到UNIX版权的时候,UNIX原始版本的开发就已经结束了。在UNIX的发展过程中形成了一系列的工业标准,比如IEEE POSIX,UNIX97,FHS等,Linux的开发也会参考或升级这些标准。
下面是笔者从某教材中截取的UNIX发展历史简图,供大家参考。

相关文章:
UNIX简史
从1991年Linux出现至今,由于众多IT巨头以及技术社区的推动,Linux已经成为非常成熟、可用于各种关键领域的操作系统,适当了解其发展历史,对于理顺其技术流派、从而更好地学习和使用Linux具有重要意义。由于其基于UNIX系统二十多年的…...
React和Vue中暴露子组件的属性和方法给父组件用,并且控制子组件暴露的颗粒度的做法
React 在 React 中,forwardRef 是一种高级技术,它允许你将 ref 从父组件传递到子组件,从而直接访问子组件的 DOM 节点或公开的方法。这对于需要操作子组件内部状态或 DOM 的场景非常有用。为了使子组件能够暴露其属性和方法给父组件…...
uniapp 常用的指令语句
uniapp 是一个使用 Vue.js 开发的跨平台应用框架,因此,它继承了 Vue.js 的大部分指令。以下是一些在 uniapp 中常用的 Vue 指令语句及其用途: v-if / v-else-if / v-else 条件渲染。v-if 有条件地渲染元素,v-else-if 和 v-else 用…...
python学opencv|读取图像(十四)BGR图像和HSV图像通道拆分
【1】引言 前序已经对BGR图像和HSV图像的转换进行了基本讨论,相关文章链接为: python学opencv|读取图像(十二)BGR图像转HSV图像-CSDN博客 python学opencv|读取图像(十三)BGR图像和HSV图像互相转换深入-C…...
C# 结构体和类
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、类(Class)二、结构体(Struct)示例代码(定义类和结构体)类的继承代码示例(…...
D9741是一块脉宽调制方三用于也收路像机和笔记本电的等设备上的直流转换器。在便携式的仪器设备上。
概述: D9741是一块脉宽调制方三用于也收路像机和笔记本电的等设备上的直流转换器。在便携式的仪器设备上。 主要特点: ● 高精度基准电路 ● 定时闩锁、短路保护电路 ● 低电压输入时误操作保护电路 ● 输出基准电压(2.5V) ● 超过工作范围能进行自动校…...
题目 1738: 排序
题目 1738: 排序 时间限制: 2s 内存限制: 96MB 提交: 14351 解决: 3477 题目描述 对输入的n个数进行排序并输出。 输入格式 输入的第一行包括一个整数n(1<n<100)。 接下来的一行包括n个整数。 输出格式 可能有多组测试数据,对于每组数据,将排序后…...
爬虫逆向学习(十四):分享一下某数通用破解服务开发经验
阅前须知 这篇博客不是教大家怎么实现的,而且告知大家有这个东西,或者说一种趋势,借此分享自己大致的实现经验。具体的实现我也不好整理,毕竟是在别人的基础上缝缝补补。 前言 使用补环境方式破解过某数的同学都知道࿰…...
《Vue进阶教程》第十一课:响应式系统介绍
1 什么是响应式 当数据改变时, 引用数据的函数会自动重新执行 2 手动完成响应过程 首先, 明确一个概念: 响应式是一个过程, 这个过程存在两个参与者: 一方触发, 另一方响应 比如说, 我们家小胖有时候不乖, 我会打他, 他会哭. 这里我就是触发者, 小胖就是响应者 同样, 所谓…...
rpc设计的再次思考20251215(以xdb为核心构建游戏框架)
1.服务提供者注册的方式 // 表明这是一个服务提供者,ServerType 和 ServerId从application.properties中读取 // 而且只有当当前服务是Game时,才生效。 或者 条件注解??? RpcProvider(typeServerType.Game) public class GameProvider{MsgReceiver…...
pydub AudioSegment增加音频文件音量并保存- python 实现
DataBall 助力快速掌握数据集的信息和使用方式,会员享有 百种数据集,持续增加中。 需要更多数据资源和技术解决方案,知识星球: “DataBall - X 数据球(free)” -------------------------------------------------------------…...
IT 新突破!远程控制电脑技术造就工作与学习新方向!
远程控制电脑技术的历史可追溯到计算机网络的早期时代。最初,通过电话线和调制解调器的组合,实现了远程访问,这是远程控制电脑技术的雏形。随着互联网技术的飞速发展,远程控制电脑技术也日趋完善,并在多个领域得到了广…...
LabVIEW起落架震台检测
在现代飞机制造与维护过程中,起落架的性能测试是保障飞机安全的重要环节。通过LabVIEW开发的起落架小落震台检测系统,通过模拟飞机着陆过程,准确捕捉起落架在着陆时承受的各种动力学特性和应力响应,有效提升起落架设计的精度与可靠…...
Day24 C++ 接口(抽象类)
C 接口(抽象类) 接口描述了类的行为和功能,而不需要完成类的特定实现。 C 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念。 如果类中至少有一个函数被声明…...
UE5 关于画质、机能与开发成本的思考
1、并不省时间 UE5等工具优点是可以通过一些工具与资源快速获得较好的画面,节约一些时间, 但缺点也很多, 一个是各种精度的素材之间的协调问题,参差不齐,统一升级到高精度会产生较大的成本, 一个是资源…...
IOS学习路线图
iOS是由苹果公司开发的移动操作系统。 苹果公司最早于2007年1月9日的Macworld大会上公布这个系统,最初是设计给iPhone使用的,后来陆续套用到iPod touch、iPad上。iOS与苹果的macOS操作系统一样,属于类Unix的商业操作系统。原本这个系统名为…...
HICE-day6
二层交换 交换基础 所谓的二层交换机指的是针对数据的二层头部(以太网帧头)中的MAC地址进行寻址并转发数据的交换设备。二层交换机不具备路由功能,它工作在OSI七层模型的第二层,因此被称为二层交换机。 上图中,PC1、…...
第100+33步 ChatGPT学习:时间序列EMD-ARIMA-LSTM模型
基于Python 3.9版本演示 一、写在前面 上一节,我们学了经验模态分解(Empirical Mode Decomposition,EMD)。 如同结尾所说,“那么,做这些分解有什么作用呢?有大佬基于这些分解出来的序列分别作…...
(C语言)双向链表
目录 链表的分类 双向链表的实现 1)定义链表 2)初始化双向链表 3)申请节点 4)尾插 5)头插 6)打印链表 7)尾删 8)头插 9)查找 10)指定位置删除 11…...
青少年编程与数学 02-004 Go语言Web编程 04课题、接收和处理请求
青少年编程与数学 02-004 Go语言Web编程 04课题、接收和处理请求 课题摘要:一、构建WEB服务器1. 安装Go语言2. 创建项目结构3. 编写代码4. 运行WEB服务器5. 访问WEB服务器 二、接收请求1. 定义处理函数(Handler)2. 将处理函数与路由关联3. 启动服务器4. …...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解
文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一:HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二:Floyd 快慢指针法(…...
el-amap-bezier-curve运用及线弧度设置
文章目录 简介示例线弧度属性主要弧度相关属性其他相关样式属性完整示例链接简介 el-amap-bezier-curve 是 Vue-Amap 组件库中的一个组件,用于在 高德地图 上绘制贝塞尔曲线。 基本用法属性path定义曲线的路径,可以是多个弧线段的组合。stroke-weight线条的宽度。stroke…...
SpringCloud优势
目录 完善的微服务支持 高可用性和容错性 灵活的配置管理 强大的服务网关 分布式追踪能力 丰富的社区生态 易于与其他技术栈集成 完善的微服务支持 Spring Cloud 提供了一整套工具和组件来支持微服务架构的开发,包括服务注册与发现、负载均衡、断路器、配置管理等功能…...
