Unix、Linux、GNU 关系梳理
之前写了一篇 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 Thompson 和 Dennis 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 关系梳理的更多相关文章
- 【转】mac os、linux及unix之间的关系
mac os.linux及unix之间的关系 unix 是由贝尔实验室开发的多用户.多任务操作系统 linux是一类Unix操作系统的统称,严格来说,linux系统只有内核叫“linux”,而li ...
- Linux(三)——Unix&Linux 的基础命令
Linux(三)--Unix&Linux 的基础命令 快捷键 Ctl-A 光标移动到行首 Ctl-C 终止命令 Ctl-D 注销登录 Ctl-E 光标移动到行尾 Ctl-U 删除光标到行首的所 ...
- Unix/Linux 从哪儿来?那些改变世界的人们...
昨天看文章时发现自己对 linux 操作系统不够了解,还记得 17 年时听过老师的一些课,对 linux 的历史有一点了解,不过当时并没有记录笔记,现在已经忘的差不多了. 这次从网上找资料,又重新看了 ...
- 28个Unix/Linux的命令行神器_转
28个Unix/Linux的命令行神器 下面是Kristóf Kovács收集的28个Unix/Linux下的28个命令行下的工具,有一些是大家熟悉的,有一些是非常有用的,有一些是不为人知的.这些工具 ...
- linux运维的认知及RHEL7 Unix/Linux 系统 介绍和安装
如何成为一个优秀的linux运维人员? 如果你有机会和条件:环境能够磨练一个人的能力和意志. 大胆的做你从未做过的项目,每一个项目都是对自身的极大提升. 有好的环境资源不 ...
- unix/linux中图形界面那些事
我们知道unix/linux刚开始的时候是没有图形界面的,随着时代的发展,排版.制图.多媒体应用越来越普遍了,这些需求都需要用到图形界面(Graphical User Interface).为此,MI ...
- 如何使用Unix/Linux grep命令——磨刀不误砍柴工系列
http://man.linuxde.net/grep ---------------------------------------------------- 如何使用Unix/Linux gre ...
- 获得Unix/Linux系统中的IP、MAC地址等信息
获得Unix/Linux系统中的IP.MAC地址等信息 中高级 | 2010-07-13 16:03 | 分类:①C语言. Unix/Linux. 网络编程 ②手册 | 4,471 次阅读 ...
- 28个Unix/Linux的命令行神器
下面是Kristóf Kovács收集的28个Unix/Linux下的28个命令行下的工具(原文链接),有一些是大家熟悉的,有一些是非常有用的,有一些是不为人知的.这些工具都非常不错,希望每个人都知道 ...
- 20个 Unix/Linux 命令技巧
让我们用这些Unix/Linux命令技巧开启新的一年,提高在终端下的生产力.我已经找了很久了,现在就与你们分享. 删除一个大文件 我在生产服务器上有一个很大的200GB的日志文件需要删除.我的rm和l ...
随机推荐
- WPF实现TextBlock呼吸灯效果
实现代码 <TextBlock Text="录像中" FontSize="48" Foreground="#ED4646" Horiz ...
- 物联网浏览器(IoTBrowser)-基于计算机视觉开发的应用“智慧眼AIEye”
一.起因 最近毕业在家:),准备筹划社区运营和IoTBrowser升级的事务,遇到了一系列物业管理上的问题,本来出于好心提醒物业人员,结果反被误认为是打广告推销的,当时被激怒一下,后面一想也许这也是一 ...
- git 怎么将某个开发分支最近几次的提交合并成一次提交
1. 切换到开发分支: git checkout dev 2. 运行交互式 rebase 命令,并指定要合并的提交数量(在这个例子中是最近的3次提交): git rebase -i HEAD~3 3. ...
- [oeasy]python0143_主控程序_main
主控程序 回忆上次内容 上次把 apple.py 拆分成了 输入 主函数 引用模块中变量的时候 要带上包(module)名 get_fruits.a get_fruits.b 最终 拆分代 ...
- oeasy教您玩转vim - 38 - # 配合移动
快速删除 回忆上节课内容 以前知道可以在插入状态下使用 del.退格 进行删除 现在知道了默认状态下使用通过 x 删除字符 可以在 x 前面使用[count]进行翻倍 如 10x 删除的字符存储在 ...
- C# EPPlus帮助类(EPPlusExcelHelper)
public class EPPlusExcelHelper : IDisposable { public ExcelPackage ExcelPackage { get; private set; ...
- abc--cf训练日常总结
ABC 最近遇到好多思维和位运算的题目不会做,特地过来总结一些小小的知识点. 思维题目 https://atcoder.jp/contests/abc353/tasks/abc353_c 这道题目要求 ...
- 【jQuery学习日记】从入门到再入门
1,jQuery介绍 jQuery 是一个 JavaScript 库. jQuery 极大地简化了 JavaScript 编程. 2,入门jQuery jQuery有两大核心:jQuery核心函数和j ...
- c++ 17 demo
1 // Cpp.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并结束. 2 // 3 4 #include <iostream> 5 #includ ...
- 我用Awesome-Graphs看论文:解读Naiad
Naiad论文:<Naiad: A Timely Dataflow System> 前面通过文章<论文图谱当如是:Awesome-Graphs用200篇图系统论文打个样>向大家 ...