浅谈 unix, linux, ios, android 区别和联系
网上的答案并不是很好,便从网上整理的相对专业的问答,本人很菜,大佬勿喷
UNIX 和 Linux
UNIX 操作系统(尤尼斯), 是一个强大的多用户、多任务操作系统,支持多种处理器架构,按照操作系统的分类,属于分时操作系统,最早由 KenThompson、Dennis Ritchie和Douglas McIlroy于1969年在AT&T的贝尔实验室开发。目前它的商标权由国际开放标准组织所拥有,只有符合单一UNIX 规范的 UNIX 系统才能 使用UNIX这个名称,否则只能称为类 UNIX(UNIX-like)
unix 是在 posix 之前就有的,linux 是在 posix 出来之后有的,最初的 linux 是仿制的 minix,unix 和 linux 很多软件都是相通的,linux 是 UNIX 的一个分支,别的分支还有freebsd 等,UNIX 是命令行下的系统 linux 是加了窗体管理的系统。 UNIX 是一个功能强大、性能全面的多用户、多任务操作系统,可以应用从巨型计算机到普通PC机等多种不同的平台上,是应用面最广、影响力最大的操作系统。 Linux 是一种外观和性能与 UNIX 相同或更好的操作系统,但,Linux 不源于任何版本的 UNIX 的源代码,并不是 UNIX,而是一个类似于 UNIX 的产品。
从发展的背景看,Linux 是从 UNIX 发展而来的。这种继承使得Linux的用户能大大地从 UNIX 团体贡献中获利。因为 UNIX 是世界上使用最普遍、发展最成熟的操作系统,它是七十年代中期发展起来的微机和巨型机的多任务系统,虽然有时接口比较混乱,并缺少相对集中的标准,但还是发展壮大成为了最广泛使用的操作系统之一。UNIX 的用户可以从很多方面得到支持和帮助。因此,Linux 做为 UNIX 的一个克隆,同样会得到相应的支持和帮助,直接拥有 UNIX 在用户中建立的牢固的地位。
从使用费用上看,UNIX 与 Linux 的区别在于 Linux 是一种开放、免费的操作系统,而 UNIX 系统基本上需要有偿使用。这一区别使得我们能够不用花钱就能得到很多Linux的版本以及为其开发的应用软件。当我们访问 Internet 时,会发现几乎所有可用的*软件都能够运行在Linux系统上。并且,一大批世界级的优秀的程序员正在努力开发和提供基于 Linux 的共享软件。 但是,也正是由于Linux 源码可以开放的缘故,所以现在真正的商业应用尚未开始,原因很简单:任何人都可以了解其内部最薄弱的环节,都可以实施侵袭和攻击。
从产品方面看,UNIX 和 Linux 都是操作系统的名称.但 UNIX 这四个字母除了是操作系统名称外,还作为商标归 SCO 所有.Linux 商业化的有 RedHat Linux 、SuSe Linux、slakeware Linux、国内的红旗等,还有 Turbo Linux.UNIX 主要有 Sun 的 Solaris、IBM 的 AIX, HP 的 HP-UX,以及x86平台的的 SCO UNIX/UNIXwareUNIX多数是硬件厂商针对自己的硬件平台的操作系统,主要与 CPU 等有关,如Sun 的Solaris作为商用,定位在其使用 SPARC/SPARCII 的CPU的工作站及服务器上,当然 Solaris 也有x86的版本,而Linux 也有其于 RISC 的版本。
至于价格,个人使用的 Linux 基本上算是免费的,不同的Linux发行厂商针对企业级应用在基本的系统上有些优化,如 RedHat 的 Enterprise 产品,这些产品包括支持服务是比较贵的。像IBM/HP/SUN的UNIX,因为主要是针对其硬件平台,所以操作系统通常在设备价格中。
在性能上,Linux没有 UNIX 那么全面,但基本上对个人用户和小型应用来说是绰绰有余.通常情况下,如果你有机会使用到UNIX环境,比如银行、电信部门,那一般都是固定机型的UNIX。比如电信里SUN的居多,民航里HP的居多,银行里IBM的居多。学习中,不同的UNIX命令集有些不同,要注意。
目前主流的Unix系统有三种,分别是 AIX、HP-UX、Solaris,它们分别运行在各自的 Unix 服务器上,这些 Unix 服务器自成体系,有自己生产的 CPU、内存、主板等等,这些Unix系统互不兼容,它们各自有自己的系统工程师,这些工程师一般只熟悉其中的某种 Unix 系统,如果要熟悉其它的 Unix 系统,则还要继续学习,这些 Unix 系统没有好坏,只有不同。
另外,目前各个行业关键性的应用领域采用的都是Unix服务器,为什么呢?Linux一般运行在PC机上,不太稳定,并行度不够 一般应用在小型企业;而Unix系统则运行在Unix服务器上,这些服务器非常稳定,已经经历过几十年的考验,还有这些Unix服务器CPU的个数最多的可以达到一百多个,并行度非常高,这个是PC机无法比拟的。目前在电信、金融、油田、移动、证券等行业的关键性应用,Unix服务器处于垄断地位。所以只有掌握了Unix才能真正意义上的进入高端行业,对以后的职业发展是至关重要的。
Linux
Linux 是一套免费使用和*传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
Linux 操作系统诞生于1991 年10 月5 日。Linux 有许多不同的版本,但是都使用了 Linux 内核。Linux 安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。
严格来讲,Linux 这个词本身只表示 Linux 内核,但实际上人们已经习惯了用 Linux 来形容整个基于 Linux 内核,并且使用GNU工程各种工具和数据库的操作系统。
Linux 内核是可以裁剪的,可以对不同的目标平台(如PC、嵌入式设备)做不同的裁剪。
有实力的厂家一般还可以直接修改内核源代码,做不同的定制或者裁剪。比如以前国产麒麟系统修改了 FreeBSD(一种Unix)内核以便符合自主安全,成为一个事件。
各系统发展时间轴:
iOS
iOS 是由苹果公司开发的移动操作系统,iOS 与苹果的 Mac OS X操作系统一样,属于类 Unix 的商业操作系统。原本这个系统名为 iPhone OS,因为iPad,iPhone,iPod touch 都使用 iPhone OS,所以 2010WWDC 大会上宣布改名为 iOS(iOS为美国Cisco公司网络设备操作系统注册商标,苹果改名已获得Cisco公司授权)。
Android
Android 是一种基于 Linux 的* 及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,*地区较 多人使用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。
虽然 Android 基于 Linux 内核,但是它与 Linux 之间还是有很大的差别,比如 Android 在 Linux 内核的基础上添加了自己所特有的驱动程序。
android 是否能称为一种新的操作系统呢?至少我自己认为不算是,它最多算作一个新的应用程序罢了。
Android 为什么会选择 Linux ?
成熟的操作系统有很多,但是 Android 为什么选择采用 Linux 内核呢?这就与 Linux 的一些特性有关了,比如:
1、强大的内存管理和进程管理方案 2、基于权限的安全模式 3、支持共享库 4、经过认证的驱动模型 5、Linux本身就是开源项目
图解 Android 和 Linux 的区别
上面两幅图应该很直观的展示了 Android 系统和 Linux 发行版系统(Ubuntu/Fedora/centos)之间的区别和联系。
可以这么说 Android 本质上还是一个 Linux 系统,只不过 Google 对它进行了裁剪和定制,这跟我们定制Linux到自己的嵌入式设备上的做法大同小异,只不过Google做的更多罢了,那么 Google 主要做了哪些事情呢?上图中也可以看出来,很多人说 Android 系统的程序只能用Java开发,这么说的说明对 Android 系统的架构了解的还不是很深入,其实从图上看到,Google 自己写了一个叫Dalvik的程序运行在Linux的系统上面,这个程序就是 Android 的 Java虚拟机(JVM),由于效率等问题 Android4.4 以后改为 Android Run Time(ART),但不管是 Dalvik 还是ART,都是用c/c++开发的,而用 Java 开发出来的 APP 其实是运行在 Dalvik/ART 上面的,皮之不存毛将焉附,没有 Dalvik/ART,那些 Java 开发的 APP 是根本没法运行的,所以说那些说 Android 系统不能用 c/c++ 开发的说法是站不住脚的,只要用 AOSP(安卓开放源码项目)里面的交叉编译器编译出来的二进制文件在 Android 上面照样也是可以运行的,而且跟 Dalvik/ART 属于同一层次的东西,即(都是init进程的子进程),但是一般的 Android 系统上 init 进程只有一个子进程即Dalvik/ART,如果非要说Dalvik/ART才算Android的话,那么Android确实不能用 c/c++ 开发,因为 Java 程序编译出来的是字节码,只能在 Dalvik/ART 上运行,c/c++ 编译出来的是二进制机器码直接在CPU中运行,应该说c/c++开发(这里不是说的JNI方式)Android 程序无法调用 Android 的 Java 类库这样才是正确的。
说了这么多Android的,再看看 Linux 发行版的做法,Linux 发行版一般是在 Linux 的基础上开发了一套桌面管理系统,比如基于 GTK 框架的gnome,比如基于Qt框架的LXQT(听说 Ubuntu 准备抛弃 gnome 投向Qt怀抱了?Qt的死忠粉表示干得好!)。跟 Windows 一样,经典的一个桌面系统+N个软件的模式,用 c/c++ 开发出来程序编译成二进制的机器码直接运行在 Linux 系统上,这些软件全部都是跟Dalvik/ART一个层次的东西,而Linux发行版的程序能不能用 Java 开发呢?这个问题就跟问 Windows上 能不能用Java开发一样没水准。毕竟 Dalvik/ART 本身也是运行在 Linux 系统上的,你只要把 Dalvik/ART 移植到 Linux 发行版甚至 Windows 上,你手机里的那些 APP 就可以运行了(当然是不依赖硬件的,如果要打电话肯定是不行了),不然你以为Android模拟器是怎么弄的。
总结起来,Android 系统和 Linux 发行版的系统根本区别是 Android 上面只跑了一个 Dalvik/ART,而Linux发行版上面跑了很多“Dalvik/ART”而已。如果你把 gnome 或者LXQT部署到Android 上,或者把 Dalvik/ART 部署到 Linux 发行版上的话,那么二者的区别可能并没你想象的那么大。
其实,在 Linux 上面跑一个软件(虚拟机、解释器),然后再基于这个软件做二次开发的的做法 Google 的 Android 并不是第一个这么干的。工控行业的小伙伴对控制器应该很熟悉吧?什么,你不知道控制器?或者说PLC更亲切吧,PLC(可编程控制器)只是一种通用的控制器而已,PLC 分为两种,一种是编译型的PLC,我们在学校里学习的什么欧姆龙,三菱,西门子S300都是这种PLC,这种PLC的软件架构很简单,就是一个单片机,然后我们画的梯形图跟我们编译单片机程序一样直接被编译成了机器码,然后烧写到单片机里面执行,这种PLC是没有办法监控运行的,不过我要说的是另外一种PLC,曾经机缘巧合接触过一段时间,那就是软PLC,最常用的软PLC就是codesys,codesys可不止是一个简单的PLC编译工具!它是一个软PLC核!为什么说他跟Android的做法十分相似呢?看看它的架构就知道了,codesys 通常被部署在Linux系统上面,开机即运行,然后我们的梯形图程序被codesys编译工具转成梯形图指令保存到内存中,然后codesys内核逐句解析梯形图指令,边解析边执行,而不是像传统的编译型的PLC一样先把所有程序编译成机器码再烧写到flash中,运行的时候再搬到内存里面运行,这跟JVM执行字节码如出一辙,这种PLC可以很方便的实现监控运行,怎么样,是不是跟Android的做法很相似呢?