安卓不是linux
Linux 与 Linux 内核其实是不一样的,Linux 的内核是由 Linus Torvalds 在1991年首次编写。它是操作系统的核心,包括设备驱动、文件系统、进程管理、网络通信等。但是操作系统光有内核,用户是没有办法操作的,所以很多厂商和 Linux 社区就在内核之上开发了很多工具,比如我们常用的 GNome桌面,FireFox浏览器、GIMP 图片编辑器等等。Linux 内核和这些应用一起打包后就被称作 Linux 发行版本 Linux 有很多的发行版本。所以我们常说的 Linux 有两个含义:
1) Linux 内核,这个严格来说应该叫 GNU/Linux,因为它是 GNU 计划的一部分
2) Linux 发行版本,比如 Debian、Ubuntu、Mint、RedHat等等。
安卓基于Linux内核这句话,大家千万不要解读为安卓等同于Linux。虽然安卓基于Linux,但安卓与Linux之间还是有比较大的区别。Linux发行版中的软件通常只收录经过开源社区审核过的开源软件,或者经过商业机构审核的闭源软件。而安卓对应的则是Android/Linux,毫无疑问系统也是开源的,但问题就在于安装在上面的软件基本都是闭源的,而且针对这些软件基本没有审核机制。仅仅这一点就能说明安卓与Linux发行版是有比较大的区别的。
Linux 内核是用 C语言开发的,安卓在 Linux 的内核之上用 C/C++ 开发了Dalvik ,后来改叫 Android Run Time,其实本身就是安卓的 Java 虚拟机。我们做的安卓应用都要用 Java开发,运行在 ART 上面。谷歌让安卓系统只能运行一个Dalvik/ART(Java虚拟机),
Linux 其他发行版本也可以用 Java 开发应用,只要运行在 Linux 的 Java 虚拟机上就可以了。除此之外我们也可以在 Linux 内核之上使用其他框架开发,比如 GTK 框架的 Gnome、QT 框架的 LXQT。通常的Linux发行版可以运行多个“Dalvik/ART”(此处为打比方,根据不同发行版会有gnome、LXQT等)。这一点算是安卓与Linux发行版的根本区别。
Linux kernel 的版权是 GPL。 这下问题来了:如果你是硬件厂商,希望你的硬件能在 Linux kernel 下运作,那么就必须要有驱动程序。如果驱动程序的程序代码公开,等于硬件规格也公开的差不多了。许多厂商不愿意这么做,所以就提供编好的驱动程序,但不提供原始码。 Android 的重点就是商业应用,Google 采用了一些手法来绕过这问题。他们把驱动程序移到 "userspace",也就是说,把驱动程序变成在 Linux kernel 上层跑,而不是一起跑的东西,这样就可以避过 GPL。
Android代码包括三部分:Android 开源系统(Android Open Source Project,简称 AOSP ) 提供了 Android 系统的框架,包括修改后的 Android 专用 Linux 内核,Dalvik 虚拟机和 Android 应用层框架等。AOSP的大部分源码采用 Apache 2.0 授权模式发布,另外 Android 专用 Linux 内核部分采用 GPL 授权。Apache 2.0 授权规定,可以任意使用源码,不需要开源。GPL授权规定,对源码的任何修改都必须开源。
[*]
[*]Google 移动服务(Google Mobile Service,简称GMS)GMS 是由 Google 提供的一系列提高用户移动体验的应用和服务,包括各种服务和内购功能,还有一些 Google 的应用:Play 市场,GMail,Chrome,Google 地图,Google+ 等。GMS 提供了很好的特性,但是 GMS 是闭源的。为了获取 GMS 的使用,必须通过 Google 的授权。这部分源代码是不可见的。
[*]基于 AOSP 的源码开发独立的 Android 系统 AOSP 是开源的,任何人都可以修改 AOSP 的代码开发独立于 AOSP 的 Android 系统。因为 AOSP 采用 Apache 2.0 授权,所以修改 AOSP 后的代码不需要开源。众多国产手机厂商的系统都属于这一类。
[*]
解释清楚了安卓与 Linux 内核的关系以及与 Linux 其他发行版本的区别后,我们再来看下小伙伴们经常问到的两个问题:
1) 可以在安卓上运行 Linux 的桌面应用吗?
因为安卓有很多标准的 GNU 库没有安装,也没有安装图形 X server,所以答案是不能。不过有一些应用尝试让我们在安卓环境中使用 Shell,安卓终端模拟器还有busybox,感兴趣的同学可以去了解一下。
2) 可以在Linux 桌面上运行安卓的应用吗?
因为其他 Linux 发行版本也没有 Dalvik / ART,所以安卓的应用在 Linux 桌面上不能直接运行。不过我们只需要将 Dalvik / ART 移植到 Linux 桌面环境就可以了。正是基于这个原理,市场上有很多安卓手机模拟器,不仅可以用在 Linux 桌面,还可以用在 Windows 以及 Mac 上。
页:
[1]