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 ...
随机推荐
- Plugin 'org.springframework.boot:spring-boot-maven-plugin:'not found
前言 在配置spring-boot的maven时,软件报错:Plugin 'org.springframework.boot:spring-boot-maven-plugin:'not found 在 ...
- VulnHub_DC-4渗透流程
VulnHub_DC-4 DC-4 is another purposely built vulnerable lab with the intent of gaining experience in ...
- Vue 是如何实现数据双向绑定的?
Vue 数据双向绑定主要是指: 数据变化更新视图 视图变化更新数据. 即: 输入框内容变化时,Data 中的数据同步变化.即 View => Data 的变化. Data 中的数据变化时,文本节 ...
- java后端解决请求跨域
跨域 跨域:指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制. 例如:a页面想获取b页面资源,如果a.b页面的协议.域名.端口.子域名不同 ...
- [oeasy]python0041_teletype历史_博多码_shift_capslock_字符数字切换_gear
teletypewriter 历史 回忆上次内容 上次见到了一个真的机械打字机 感受到了蒸汽朋克的时代背景 上上次区分了一些概念 terminal终端,电脑连线最终的端点 TeleTYpewriter ...
- [oeasy]python0011 - python虚拟机的本质_cpu架构_二进制字节码_汇编语言
程序本质 回忆上次内容 我们把python源文件 词法分析 得到 词流(token stream) 语法分析 得到 抽象语法树(Abstract Syntax Tree) 编译 得到 字节码 (b ...
- JavaScript高级~数组方法reduce
reduce() 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值. 有点抽象,意思可以看做每个元素执行之后,都会有一个汇总结果,你可以通过这个汇总结果 ...
- vs 常用的调试技巧
本地调试,一般打断点, 然后下一步,或者步入,或者运行到上一步. 有专用的对战窗口. 条件断点,输入当前变量的名称,然后打印变量值变量名和对战的一些信息,当然也可以选择进入断点后是否进一步运行 线程调 ...
- 基于 SASL/SCRAM 让 Kafka 实现动态授权认证
一.说明 在大数据处理和分析中 Apache Kafka 已经成为了一个核心组件.然而在生产环境中部署 Kafka 时,安全性是一个必须要考虑的重要因素.SASL(简单认证与安全层)和 SCRAM(基 ...
- hive测试数据洗刷
hive测试--HIVE数据分析 测试使用虚拟机中的hive 环境:虚拟机+jdk+hadoop+hive+mysql 题目: 1.数据导入: 要求将样表文件中的(sales_sample_20 ...