浅谈 Unix 、Linux 、 Android 的关系
一、Unix
Unix是由肯·汤普逊和丹尼斯·里奇发明,且还发明了B、C语言,丹尼斯老爷子也被称作 C 语言和 Unix 之父。
肯·汤普逊和丹尼斯·里奇编写的 Unix 系统后来受到各个软件大厂商的青睐。他们开发了 Unix 系统能够支持的软件,对 Unix 系统进行了封装,并推出了他们自己的 Unix 版本,这些版本的 Unix 系统只能运行在大型的计算机上,而且价格非常昂贵。小公司以及众多的软件爱好者根本不可能用得起。为了抵制这些大厂,自由主义者理查德·斯托曼倡导“在自由的时代,用户应该免费享有对软件源码阅读和修改的权利”,于是他提出了著名的 GNU 计划。
二、GNU
GNU(GNU is not Unix)他的目的就是作出Unix的替代品,在计算机硬件的基础上,GUN计划包括操作系统内核、shell、各种软件,一整套的软件系统来代替Unix,并且在这个计划下诞生了大名鼎鼎的Linux操作系统的内核。
三、Linux
Linux 的诞生,不得不提到另一个系统 Minix,Minix(小型的Unix)由于Unix 并不开源,所以荷兰阿姆斯特丹的 Vrije 大学计算机科学系的安德鲁·塔能鲍姆(Andrew S. Tanenbaum )教授所开发的一个类 UNIX 操作系统写了一个不包含任何AT&T源代码的Unix系统,名为 Minix ,并开放全部源代码。
Linux的作者在某大学读书的时候使用了这个Minix 的系统,但是他觉得太难用了,就决定自己写了一个操作系统,并且作者本人也是 GNU 计划的忠实拥护者,所以他公开了Linux内核的全部代码。
所以 Linux 和 Unix 的关系我认为,Linux 是由 Unix 发展而来的,并不是直接继承了 Unix,而是对 Unix 的一些内容进行借鉴,所以我并不认可网上所说的“类 Unix”系统。
那么什么是 Linux 的内核呢?
就是操作系统的核心,包括设备驱动、文件系统、进程管理、网络通信等等,但是光有操作系统的内核,用户是没有办法操作的,所以很多人就在Linux的内核上开发了很多工具,比如 GNome 桌面,FireFox 浏览器等等,Linus Torvalds 负责开发的 Linux 其实仅仅只有 Kernel(核心)和一些相关工具,对于我们普通人来说,使用起来还是非常困难的
但是为了能让使用者更好的使用到Linux,许多的商业公司或非盈利团体,就将 Liunx Kernel 与 可以运行的软件整合起来,加上自身独具特色的工具程序,组成了Linux的众多发行版,比如 Debian,Ubuntu ,Kali 等等。
四、开源许可证
其实在国外,软件开发者是很注重开源这一件事的,但是为了避免GNU所开发的自由软件被他人开发成专利软件,所以他和律师起草了有名的通用公共许可证(GPL)。世界上的开源许可,大概有上百种,即使是现在最流行的六种----GPL、BSD、MIT、Mozilla、Apache 和 LGPL----之中做选择,也很复杂。
以下我们借鉴阮一峰老师的总结图
五、Android
我们知道 Linux 的内核是基于 GPL 开源许可的,也就是说如果你想用 Liunx kernel 那么你必须将你修改的代码开源,那 Google 能这么干嘛,当然不能,这么干了 Google 该咋赚钱收费啊,所以 Google 找到了一个偏门的方式,让自己躲过 GPL。
所以其实 Android 包含了三个部分:
- Android Open Source Project :简称 AOSP ,它提供了 Android 系统的框架,包括修改后的 Android 专用 Linux Kernel ,Dalvik 虚拟机 (后来的 Android Run Time) 虚拟机。
- Google Mobile Service :简称 GMS ,是由 Google 提供的一些列移动用户体验的应用和服务,比如 Google Play ,Chrome ,Goolge 地图等等,但是 GMS 是闭源的,要想使用,必须经过 Google 的同意才行(要交钱的)。
- 基于 AOSP 开发的独立 Android 系统 : 由于 AOSP 是开源的,所有人都可以去更改它,因为 AOSP 是基于 Apache 2.0的协议,并且国内的 GMS 并不支持,所有我们有众多的 EMIU 、MIUI 等等他们都是基于AOSP 进行二次开发的。
安卓实际上用到的就是Linux的内核,因为Linux内核本身就是开源的,那么Android 和 Linux发行版都是基于Linux内核的,安卓是不是Linux的发行版本呢?
Linux的内核使用C语言开发的,安卓在 Linux 的内核之上使用 C/C++ 开发了 Dalvik/Android Run Time 也就是安卓的虚拟机,我们的安卓应用都需要使用JAVA开发,运行在ART上面,当然我们也可以在 Liunx 内核上使用其他开发框架都是和ART属于一个层次的东西,所以安卓和Linux的发行版本本质上是一样的。
六、浅谈一下 Harmony OS
大家可能在网上对于鸿蒙系统众说纷纭,对于华为宣传 Harmony OS 是一款基于微内核的面向全场景的分布式操作系统,听上去是不是非常的高端大气上档次,对的我也没有看懂是什么意思,但是我们可以和 Android 对比看看。
我们都知道 Android 是基于 Linux 的宏内核设计,包含了操作系统的绝大多数功能和模块,但是这有一个最大的弊端就是他们都拥有最高权限,只要有一个地方出现了问题,整个系统就会崩溃。
什么是微内核呢?微内核结构由一个非常简单的硬件抽象层和一组比较关键的原语或系统调用组成,而这些原语构建了一个操作系统必须的存在的几个部分,如:线程管理、地址空间和进程间通信等等,只有这些才具有最高的权限,其他的模块不具有最高权限。微核的目标是将系统服务的实现和系统的基本操作规则分离开来,对于微内核设计并不是一种很先进的概念,但是并没有得到很好的应用。
从鸿蒙的系统架构图我们也可以看出,Hormony OS 并不仅仅的局限于 Linux kernel 还包括其他许多的东西,在这里我们不进行展开,但是网上很多人都说鸿蒙还是基于 Android 的,其实我觉得 AOSP 既然是开源的,那么在他的某些基础上进行开发,我觉得其实并没有很大的问题,毕竟 Hormny OS 还需要很长的一段路可以走。
最值得让我一提的,我觉得其实是华为的方舟编译器,上文我也提到过 Android 的应用都是基于 Java 开发的,但是 Linux kernel 并不能读懂 Java 它说的是啥,需要 Java 虚拟机来帮助内核完成通信,可是这样就会导致 Android 的应用使用起来,相对于 IOS 来说还是比较卡的(因为 IOS 是继承了 Unix,闭源的),而华为的方舟编译器是在 APK 在打包之前,就把指令统一的换成内核可以读懂的机器语言,省略了虚拟机这个“中间商”那么自然软件的运行速度就翻倍提升,这是我认为 Hormony OS 最厉害的地方之一,当然了还有它的万物互联等等。
七、结语
本文是我对 Unix 、Linux 、Android 的关系的总结,以及对Harmony OS的一些看法 ,当然一千个读者有一千个哈姆雷特,博主也在学习中不断地增强自己的认识,大家不喜勿喷。