之前写了一篇 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. .NET CORE 部署提示 An error occurred while starting the application.

    错误提示: 解决方法 检查一下nuget引用包 是否更新了版本,如果升级或者降级了版本,需要将新的dll文件更新一下

  2. CF1800E 题解

    发现一个神奇的事实:显然不限制交换次数可以实现交换任意字符. 因此可以直接判断字符集是否相等. 在考虑哪些地方可以交换. 根据题意可知可以交换的区间为 \([1,n - k]\) 以及 \([k + ...

  3. java 高效递归查询树 find_in_set 处理递归树

    建表语句 DROP TABLE IF EXISTS `sys_dept`; CREATE TABLE `sys_dept` ( `id` bigint(20) NOT NULL AUTO_INCREM ...

  4. Nuxt框架中内置组件详解及使用指南(四)

    title: Nuxt框架中内置组件详解及使用指南(四) date: 2024/7/9 updated: 2024/7/9 author: cmdragon excerpt: 摘要:本文详细介绍了Nu ...

  5. [oeasy]python0136_接收输入_input函数_字符串_str

    输入变量 回忆上次内容 上次研究了 一行赋值多个变量 a = b = 5 a, b = 7, 8   还研究了 标识符的惯用法 python使用的是 snake_case蛇形命名法 用下划线 分隔开小 ...

  6. Python 实时获取任务请求对应的Nginx日志

    需求描述 项目需求测试过程中,需要向Nginx服务器发送一些用例请求,然后查看对应的Nginx日志,判断是否存在特征内容,来判断任务是否执行成功.为了提升效率,需要将这一过程实现自动化. 实践环境 P ...

  7. 记一次 Redisson 线上问题 → 你怎么能释放别人的锁

    开心一刻 今天,我的又一个好哥们脱单了,只剩下我自己单身了 我向一个我喜欢的女生吐苦水 我:我这辈子是找不到女朋友了 她:怎么可能,你很优秀的,会有很多女孩子愿意当你女朋友的 我内心窃喜,问道:那你愿 ...

  8. 修复ERROR 1045 (28000): Access denied for user 'root'@'%' (using password: YES)

    修复ERROR 1045 (28000): Access denied for user 'root'@'%' (using password: YES) 直接修改 mysql.user 表中的权限字 ...

  9. vue3 + ts 中出现 类型“typeof import(".........../node_modules/vue/dist/vue")”的参数不能赋给类型“Component<any, any, any, ComputedOptions, MethodOptions>”的参数。

    错误示例截图 解决方法 修改shims-vue.d.ts中的内容 declare module "*.vue" { import { defineComponent } from ...

  10. 【SpringBoot】08 探索配置方式 Part4 优先加载的路径

    配置文件的加载位置: SpringBoot启动会扫描i以下为位置的applicationproperties 或者application.yml文件,作为springboot的默认配置文件 优先级从高 ...