之前写了一篇 MSYS2、MinGW 和 Cygwin 关系梳理的博客,但是要讲清它们几个的关系最好还是先了解一下操作系统的发展历程。遂补充了这篇博客。

UNIX:现代操作系统的始祖

Operating Systems: Crash Course Computer Science | YouTube

现在我们常用的操作系统,除了 Windows 外,剩下的几乎所有操作系统,都可以追溯到 UNIX

1964 年,麻省理工学院(MIT)、通用电气(GE)、贝尔实验室(Bell Labs)想要开发一款先进的操作系统,他们将该操作系统起名为 Multics,其名称来源于 MULTiplexed Information and Computing System(多工信息与计算系统)。然而,Multics 系统的开发难度很高,项目的开发进度十分缓慢,因此后来贝尔实验室退出了这个项目。但是贝尔实验室的两名研究员 Ken ThompsonDennis Ritchie 转而设计了另一款更简单的操作系统,UNIX。UNIX 系统引入了内核的概念,内核只实现操作系统的核心功能,而其他功能均由外部的工具程序实现。UNIX 最初由汇编语言编写,为了能够将 UNIX 移植到其他机器,Dennis Ritchie 又发明了 C 语言,并和 Ken Thompson 一起使用 C 语言重写了 UNIX。UNIX 的简单性使得它可以在更便宜和更多元的机器上运行,并很快在贝尔实验室内部流行了起来。随着 UNIX 的源码被传播到各大高校,UNIX 很快成为了 1970 -- 80 年代最受欢迎的操作系统之一。

拿到 UNIX 源码的高校纷纷开始尝试对 UNIX 进行扩展和改进,从而形成了自己版本的 UNIX,称为“UNIX 变种”。其中最著名的变种之一是来自加州大学伯克利分校(UCB)的学生 Bili Joy 开发的变种,称为 BSD(Berkeley Software Distribution)。

然而好景不长,UNIX 的大受欢迎使得贝尔实验室的母公司 AT&T 看到了 UNIX 的商业价值,并决定将 UNIX 转为商业软件。于是在 1979 年,AT&T 决定不再将 UNIX 源码免费分发给高校,并发行了一个商业版的 UNIX,称为 UNIX System V,同时对之前的 UNIX 及其变种声明了著作权。

由于 BSD 在 UNIX 历史中的巨大影响,UNIX 的版权持有者 USL 和 BSD 的开发者 UCBi 为 UNIX 的版权打了一场旷日持久的大官司(USL v. BSDi)。官司的结局是 BSD 不能再使用原先 UNIX 中的代码,于是 UCB 重写了 BSD 中所有来自于 UNIX 的代码,发布了一个全新的版本,称为 4.4 BSD-Lite。

从事计算机教学但又无法获取 UNIX 源码的 Andrew S. Tanenbaum 教授为了方便教学,决定自行编写一个类 UNIX 的操作系统内核,并将其命名为 MINIX。MINIX 与 UNIX 完全兼容,但是没有使用任何 UNIX 源码。

GNU:自由软件运动

Richard Stallman 是一个计算机大神,从小就爱写代码。不仅热爱写代码,他还热衷于分享代码。为了让更多人加入共享代码的行动,他于 1984 年创建了 GNU 项目(GNU's Not Unix)。最初的设想是建立一个免费版本的 UNIX 系统,然而当时的 GNU 项目只有 Stallman 一个人,构建一个完整的操作系统是一项过于庞大的工作。于是 Stallman 想,他可以先开发操作系统的工具软件,之后再开发操作系统内核,最后将工具软件和内核组合起来,就能组成一个完整的操作系统。为了宣传 GNU,Stallman 开始参考 UNIX 上的专有软件,并开发了完全免费且公开源代码的 GNU 版本。后来 Stallman 还开发了著名的编辑器 Emacs,以及大名鼎鼎的 GCC 编译套件。与此同时他还成立了自由软件基金会(Free Software Foundation, FSF)。为了避免 GNU 项目所开发的软件被其他人修改后再次变成专有软件,Stallman 与律师草拟了通用公共许可证(General Public License, GPL),并称它为“Copyleft”(相对于专有软件的“Copyright”)。在 GPL 条款下,任何使用了 GPL 源码的软件都必须再次以 GPL 条款发布,且公开源代码。由于 GNU 项目开发了很多重要而又基础的软件,且这些软件都遵守 GPL 协议,因此出现了很多基于这些软件且同样遵守 GPL 协议的软件,从而壮大了自由软件群体。不过,GNU 项目的目标是构建一个完整的操作系统。现在操作系统的工具软件有了,还差一个操作系统内核,就可以完成 GNU 项目了。GNU 项目提出了一个名为 Hurd 的内核,然而这个内核的设计理念过于先进,实现难度过大,一直迟迟没能发布。

Linux

1991 年,一个名为 Linus Torvalds 的芬兰小伙正在大学读计算机专业。他购买了一台 Intel 386 计算机,想要在上面运行 Unix 系统。然而当时的 Unix 系统是收费的,正好他了解到 MINIX 完全兼容 UNIX 且可以在 Intel 386 机器上运行,于是他就体验了一段时间 MINIX。然而毕竟 MINIX 仅用于教学目的,缺少很多功能,于是 Linus 想要改进 MINIX。他阅读了 MINIX 的源码,并使用 GNU 开源工具开发了一个简易的操作系统内核,Linus 将其命名为 Linux。为了改进 Linux,Linus 将其源码放到网上,并号召大家一起为这个操作系统提建议。由于很多人都对这种能运行在个人计算机上的类 UNIX 系统感兴趣,他的 Linux 系统很快获得了很多人的帮助。一开始,Linus 对源码的修改来自于他人通过邮件发来的源码,后来由于提交修改意见的人越来越多,Linus 开始使用版本控制软件 BitKeeper 来帮助自己管理代码。然而后来 BitKeeper 的免费许可被取消,Linus 一气之下写了自己版本的版本控制软件 Git,并开源免费发布。

Linux 火起来之后,GNU 的那帮人一看,这不就是我们一直要开发的操作系统内核吗?于是就把 GNU 项目的工具移植到 Linux 上用。GNU 工具 + Linux 内核,形成了完整的操作系统。这个完整的操作系统就称为 GNU/Linux。

参考:

如果你想要了解更多关于计算机科学的信息,强烈推荐系列视频:Crash Course Computer Science | YouTube

Unix、Linux、GNU 关系梳理的更多相关文章

  1. 【转】mac os、linux及unix之间的关系

    mac os.linux及unix之间的关系   unix 是由贝尔实验室开发的多用户.多任务操作系统 linux是一类Unix操作系统的统称,严格来说,linux系统只有内核叫“linux”,而li ...

  2. Linux(三)——Unix&Linux 的基础命令

    Linux(三)--Unix&Linux 的基础命令 快捷键 Ctl-A 光标移动到行首 Ctl-C 终止命令 Ctl-D 注销登录 Ctl-E 光标移动到行尾 Ctl-U 删除光标到行首的所 ...

  3. Unix/Linux 从哪儿来?那些改变世界的人们...

    昨天看文章时发现自己对 linux 操作系统不够了解,还记得 17 年时听过老师的一些课,对 linux 的历史有一点了解,不过当时并没有记录笔记,现在已经忘的差不多了. 这次从网上找资料,又重新看了 ...

  4. 28个Unix/Linux的命令行神器_转

    28个Unix/Linux的命令行神器 下面是Kristóf Kovács收集的28个Unix/Linux下的28个命令行下的工具,有一些是大家熟悉的,有一些是非常有用的,有一些是不为人知的.这些工具 ...

  5. linux运维的认知及RHEL7 Unix/Linux 系统 介绍和安装

    如何成为一个优秀的linux运维人员?      如果你有机会和条件:环境能够磨练一个人的能力和意志.      大胆的做你从未做过的项目,每一个项目都是对自身的极大提升.      有好的环境资源不 ...

  6. unix/linux中图形界面那些事

    我们知道unix/linux刚开始的时候是没有图形界面的,随着时代的发展,排版.制图.多媒体应用越来越普遍了,这些需求都需要用到图形界面(Graphical User Interface).为此,MI ...

  7. 如何使用Unix/Linux grep命令——磨刀不误砍柴工系列

     http://man.linuxde.net/grep ---------------------------------------------------- 如何使用Unix/Linux gre ...

  8. 获得Unix/Linux系统中的IP、MAC地址等信息

    获得Unix/Linux系统中的IP.MAC地址等信息 中高级  |  2010-07-13 16:03  |  分类:①C语言. Unix/Linux. 网络编程 ②手册  |  4,471 次阅读 ...

  9. 28个Unix/Linux的命令行神器

    下面是Kristóf Kovács收集的28个Unix/Linux下的28个命令行下的工具(原文链接),有一些是大家熟悉的,有一些是非常有用的,有一些是不为人知的.这些工具都非常不错,希望每个人都知道 ...

  10. 20个 Unix/Linux 命令技巧

    让我们用这些Unix/Linux命令技巧开启新的一年,提高在终端下的生产力.我已经找了很久了,现在就与你们分享. 删除一个大文件 我在生产服务器上有一个很大的200GB的日志文件需要删除.我的rm和l ...

随机推荐

  1. rem适配布局

    没有一张图解决不了的事 https://www.processon.com/mindmap/5e3a589be4b021dc2899f511 <link rel="stylesheet ...

  2. Oracle 递归拼接字段

    效果 sql SELECT LISTAGG(T.NAME, ' / ') WITHIN GROUP(ORDER BY LEVEL DESC) AS RESULT FROM S_WORK_RESOURS ...

  3. PixiJS源码分析系列: 第一章 从最简单的例子入手

    从最简单的例子入手分析 PixiJS 源码 我一般是以使用角度作为切入点查看分析源码,例子中用到什么类,什么方法,再入源码. 高屋建瓴的角度咱也做不到啊,毕竟水平有限 pixijs 的源码之前折腾了半 ...

  4. Vue bug from backend

    一个后端引发前端的BUG 使用的框架是vue 代码里面有一个组件 <table :data="data"/> 获取后台数据 this.data = await fetc ...

  5. Day 1 - 二分

    整数二分 我们可以做到每次排除一半的答案,时间复杂度 \(O(\log n)\). long long l = L, r = R; while(l <= r) { long long mid = ...

  6. Tomcat 线程池学习总结

    前提 Tomcat 10.1.x Tomcat线程池介绍 Tomcat线程池,源于JAVA JDK自带线程池.由于JAVA JDK线程池策略,比较适合处理 CPU 密集型任务,但是对于 I/O 密集型 ...

  7. Java 根据XPATH批量替换XML节点中的值

    根据XPATH批量替换XML节点中的值 by: 授客 QQ:1033553122 测试环境 JDK 1.8.0_25 代码实操 message.xml文件 <Request service=&q ...

  8. 如何正确使用@Bulider与<T>返回数据

    @Data @ToString @Builder @AllArgsConstructor public class PageResult<T> implements Serializabl ...

  9. pip升级导致报错:pip消失

    pip升级导致报错:pip消失 在安装Jupyter Notebook的时候需要用首先更新pip,如下: 使用以下命令更新pip和安装Jupyter pip3 install --upgrade pi ...

  10. 【MongoDB】Re01 安装与基础操作

    Linux安装 官网下载红帽安装版 #下载三个rpm包 wget https://mirrors.tuna.tsinghua.edu.cn/mongodb/yum/el7-4.2/RPMS/mongo ...