聊一聊 Linux 的起源和发展

最近在系统性重新整理下关于 linux 的一些知识。linux 对于所有的开发工程师来说都不算是陌生的东西,但往往在面对它时,却又显得那么生疏。关于生疏,对于出入门的同学来说,其过多发行版和指令已经够吃一壶的了。这篇文章主要是看看 linux 自身的一些故事。

计算机主机实际上就是一堆硬件,为了更好的、有效率的控制这些硬件资源,于是乎就有了操作系统。操作系统除了负责控制这些硬件资源的分配,还具备提供计算机运行所需的一些基本功能,比如网络功能。当然,如果仅有这些是不够的,对于用户来说,直接面向的并不是硬件或者操作系统,而是软件。因此,操作系统也会为了让工程师更容易开发软件,也提供了一整组系统调用接口;这也是 Unix 或者 Linux 最原始的初心和核心。

从 CTSS 到 Multies

早期的计算机并不像如今这样普及,并且当时的计算机操作系统仍然比较简单,只能支持单用户、单任务和少量用户之间的数据共享,其主要用于军事、高科技研究以及学术单位,其存在的问题就是

  • 不好用
  • 速度慢
  • 操作接口不友好
  • 输入输出单一
  • 程序编写困难

随着硬件与操作系统的改良,可以使用键盘来进行输入。但是对于一个普通的学校来说,大多数情况下都是只有一台主机,那么这种情况下就会大家都在等着轮换住使用这个主机。于是在 1960年初,麻省理工学院开发了 CTSS(Compatible Time-Sharing System 兼容分时调度系统),其目的是可以让大型主机通过提供数个终端机以连线进入主机(即使是现在这种路子还在一些企业中使用,就是常见的瘦客户端模式),CTSS 这玩意可以说是近代操作系统的始祖。

CTSS 解决了多个使用者在某一时间内分别使用 CPU的资源(实际上就是 CPU 在内个工作者工作之间进行切换);但是其问题在于,这些终端机仅具备输入输出的功能,不具备任何运算或者软件安装的能力,并且一台主机所能支持的终端数的数量也是有限的(差不多 30 个)。

于是在 1965 年,由麻省理工学院、贝尔实验室和通用电气公司共同发起了 Multies 计划:让大型主机可以达成提供 300 个以上的终端机连线的目标。到 1969年,由于计划进度落后,加上资金短缺,Bell 宣布退出。不过 Multies 系统最终还是由剩下的两家合作完成了,不过此时已经没法在“一石激起千层浪“了。Multies 计划的结果没有给业界带来多大的影响,不过在这个过程中也着实培养了许多优秀的人才,这些人也在后续的 Linux 的演进中起到了非常重要的作用,比如 Ken Thompson。

CTSS 和 Multics 的出现,为后来操作系统的发展奠定了基础,它们的分时段、分层结构、多用户和多任务等特性,成为了后来操作系统开发的重要范本和参考。虽然 Multics 的发展遭遇了失败,但它的设计思想和技术,对后来的操作系统和计算机科学领域产生了深远的影响。

Ken Thompson 是 Bell 的人,在Bell 退出之后,这哥们也没闲着,他出于自身的需求,花了一个月的时间,基于 DEC PDP-7 计算机,使用 Assemble 语言写出了一组核心程序,同时包括了一些核心工具程序,以及一个小小的文件系统,没错,这就是 unix 的原型,在当时这个系统还没有被称为 unix,而是 unics(相对于 Mutlies 的复杂而言)。下面是 unics 这个文件系统中的两个重要的概念:

  • 所有的程序或者系统设备都是文件
  • 不管是使用建构编辑器还是附属文件,编写程序的目标都应该是有效地完成既定的任务

在软件开发中,建构编辑器和附属文件是两种不同的工具,它们都可以帮助程序员有效地编写代码。建构编辑器(如Visual Studio、Eclipse等)通常包括代码编辑器、编译器和调试器等工具,可以提高程序员的生产力和效率。附属文件则是一些额外的文件,例如配置文件、库文件和资源文件,它们为程序提供了一些必要的附加信息和功能。

不过话说回来,你知道前面提到的 Ken Thompson 的 “自身需求” 是什么吗?—玩游戏….,不过这哥们不仅是玩,为了玩,还贡献了一些代码来改进游戏,包括优化游戏的性能和改进用户界面等方面,当然最重要的是他写的那个 unics 系统。

unix 的诞生

上面提到,Ken Tompson 为了玩游戏,搞出了一个叫 unics 系统;由于 unics 系统的易用性,使得在贝尔实验室内部广为流传,并且也进行了数度改版。但是因为 Unics 本来是以 Assmeble 语言写成的,可移植性太差,加上当时的计算机机器架构都不太相同,所以每次要安装到不同的机器都得要重新编写 Assmeble 语言,很不方便。这时另一个大神就出现了,他叫 Dennis Ritchie。为了解决可移植性,可读性以及可维护性问题,Ritchie 先是创建了 C 语言(起初是B 语言,但是 B 编译的核心性能不好,所以创建了 C 语言),又基于 C 语言重写了 unics 的核心,这也标志着 unix 的正式诞生。

重要的Unix分支–BSD的诞生

BSD(Berkeley Software Distribution)是一个 Unix 操作系统的分支,其起源可以追溯到20世纪70年代。在当时,AT&T的Unix操作系统被广泛用于大型计算机,但是它的源代码并未公开,因此开发者无法自由地修改和分发它。

为了解决这个问题,加州大学伯克利分校的计算机科学系(主要是 Bill Joy,没错,这哥们就是 sun 的创始人)开始开发自己的Unix操作系统,即BSD。由于该系统是在AT&T的Unix系统的基础上开发的,因此它继承了许多Unix系统的基本特性,并添加了许多新的功能和工具,例如vi编辑器和BSD套接字(socket)API等。

BSD系统的发展得到了广泛的支持和贡献,成为了Unix操作系统的重要分支之一。BSD操作系统的开放源代码和社区参与模式也为其他类Unix操作系统的开发提供了范例和灵感,例如Linux操作系统的开发就受到了BSD的影响。

值得注意的是,由于历史原因和版权问题,BSD系统在1994年被划分为两个主要的分支,即FreeBSD和OpenBSD。这两个分支各自拥有自己的开发团队和社区,但它们都继承了BSD系统的传统和哲学,继续为Unix操作系统的发展做出贡献。

System-V

System V 最初由 AT&T 开发并发布于 1983 年,相对于早期的 Unix 版本,System V 引入了许多新的特性和功能,包括 TCP/IP 协议栈、虚拟内存、可靠信号机制、动态链接等。System V还提供了许多标准的系统调用和库,这些标准在 Unix 系统之间得到了广泛的共享和兼容。

在System V发布后不久,许多Unix厂商开始将它作为他们的主要操作系统版本,并在其基础上进行了许多改进和定制,例如IBM的AIX、HP 的 HP-UX、Sun 的 Solaris 等。

由于 Unix 的高度可移植性与强大的性能,加上当时并没有版权的纠纷, 所以让很多商业公司开始了Unix操作系统的发展,例如AT&T自家的System V、IBM的AIX以及HP与DEC等公司, 都有推出自家的主机搭配自己的Unix操作系统。随之而来的一个问题是,早期生产计算机硬件的公司之间并没有所谓的“协定“,这就导致了每一个计算机硬件公司生产的硬件不兼容,所以每个公司又都设计了符合自己硬件的 unix 系统。

System V 的另一个重要的特点是可以支持x86架构的个人计算机系统,也就是说 System V 可以在个人计算机上面安装与运行了。System V 兴起也使得AT&T 在商业版权上有了新的念头,在 1979 年发行的第七版 Unix 中,特别提到了 “不可对学生提供源代码”的严格限制!这也造成Unix业界之间的紧张气氛,并且也引爆了很多的商业纠纷。

目前被称为纯种的 Unix 指的就是 System V 以及 BSD 这两套

Minix

System V 在1979年的版权声明中,影响最大是学校教 Unix 核心源代码相关知识的教授,这里面就包括了 Andrew Tanenbaum。

1979年 的Unix第七版可以在Intel的x86架构上面进行移植, 那么是否意味着可以将Unix改写并移植到x86上面了呢?在这个想法上, Tanenbaum教授于是乎自己动手写了Minix这个Unix Like的核心程序! 在撰写的过程中,为了避免版权纠纷,Tanenbaum 完全不看Unix核心源代码! 并且强调他的Minix必须能够与Unix相容才行!Tanenbaum在1984年开始撰写核心程序, 到了1986年终于完成。Minix算是一个小型 Unix 操作系统,其主要目的是教学和研究。Minix 的代码是开源的,它吸引了许多程序员的关注和参与,其中就包括了后来的 Linux 开发者林纳斯·托瓦兹(Linus Torvalds)。

Linux

1991 年,林纳斯·托瓦兹在 Minix 的基础上,开发出了 Linux 操作系统。Linux 的开发目标是提供一个完全开源、免费、可定制的操作系统,使得更多人可以参与其中的开发和使用。Linux 借鉴了 Unix 和 Minix 的许多设计思想和技术,如文件系统、Shell 命令解释器、分时段系统、网络功能等,但也有许多创新,如内核模块化设计、虚拟文件系统等。

随着时间的推移,Linux 逐渐得到了广泛的应用和发展。1992 年,GNU 项目的创始人理查德·斯托曼(Richard Stallman)发布了 GPL 许可证,宣布 GNU/Linux 以及其他软件的代码可以自由使用、修改和发布。这极大地促进了 Linux 社区的发展和成长,吸引了更多的程序员参与到其中,使得 Linux 变得更加强大和普及。

在发展过程中,Linux 也经历了多个版本和分支,如 Debian、Red Hat、SUSE 等。这些分支在保留 Linux 原有特性的基础上,也针对不同的应用场景和用户需求进行了适当的改进和定制。例如,Red Hat 的企业版 Linux 专注于提供稳定、安全的操作系统,以满足企业客户的需求;SUSE Linux 则专注于提供针对大型服务器和应用的操作系统。

此外,还出现了许多基于 Linux 的开源软件和平台,如 Apache Web 服务器、MySQL 数据库、Docker 容器等。这些软件和平台不仅提供了开源的解决方案,也使得 Linux 更加完善和广泛应用。

总结

Linux 历史的发展有它偶然性和必然性,不管是因为游戏、版权还是社区软件,每一个版本的演进都不断推动 Linux 的发展和完善。不过不得不说的是,这些在 Linux 发展中赫赫有名的人,真的是值得每一个工程师去学习的,Ken Thompson 的兴趣、Andrew Tanenbaum 的 工程师脾气 等;当然这个过程中也是离不开像 麻省理工学院、贝尔实验室和通用电气公司 等大厂以及后续一些商业公司的推波助澜。

参考文档和书籍

  • 鸟哥的Linux 私房菜基础学习版(第4版)
  • ChatGPT
  • 只是为了好玩 : Linux之父林纳斯自传
作者

卫恒

发布于

2023-04-05

更新于

2024-01-19

许可协议

评论