为啥感觉没有纯Linux的手机系统呢?不用虚拟机,硬件利用率百分百?

春菇凉


不能说没有纯手机linux系统,ubuntu touch firefoxOS Tizen等等,ubuntu touch可以自行下载刷机,但支持的机型少。不知道 题主是否知道刷机,曾经安卓刷机成风。什么 MIUI CyanogenMod(团队被三星收了)LineageOS 魔趣 乐蛙等等 ,这些第三方安卓系统做到现在留下来的快没了,这些原生硬改的系统都不能支持所有的安卓手机为何?手机型号厂商太多了,硬件都不一样,需要重新开发驱动,界面等。比如一个相机,每台都不一样,你找sony要驱动不给怎么办,就算给了,那cpu端的DSP高通又不给怎么办?以前我的三星 glacier刷三方系统,系统流畅,相机渣渣,驱动无法解决,就算解决了,还要开发者写相机算法。工程很大。再回来说Linux,也一样这么多手机硬件要从底层重新构建,不像苹果一年就出一部手机。软件写好了关键还卖不到钱,Linux本身就是免费的码农们自愿维护的系统,主要用在服务器上,消费端生态比较差,操作容易程度更差,装个软件还要去下各种支持库,一般人哪里懂。所以呵呵,没有个大财团加上几家大手机厂商去推动是非常难的。想想当年Google首发安卓时的厂商阵容,全球大的手机厂商,软件商都来了,Google面子大啊,有钱,而且技术积累深厚。自己程序加支持的开源项目程序员都好几十万人了。所以没有颠覆的系统,现在想插一脚很难的。


煮酒论乾坤


纯Linux而不需要虚拟机的手机系统当然有,火狐的FirefoxOS、Ubuntu Touch、三星Tizen操作系统、以及曾经大名鼎鼎的Megoo都是没有虚拟机的。

Android使用虚拟机是因为采用了Java作为核心开发语言,Java足够成熟、生态健全、开发者众多,这是Android早期发展迅速的主要原因,当然Android的高速发展也给了Java第二春。Oracle公司现在又在作死,各种用Java的问题刁难Google,Google推出Flutter框架、扶持Kotlin,以及打造Fuchsia操作系统,就是为了能够找到取代Java甚至直接取代Android的解决方案。

值得提一下的是尽管Megoo系统随着诺基亚的失败而消失了,不过Megoo系统的很多理念到现在还被iOS和Android系统借鉴,现在智能机的主要手势操作基本上全是借鉴Megoo操作系统的设计理念。

Android为什么要用虚拟机

Android诞生之初并不是师出名门,后来被Google收购也算是傍上了大款,Android使用虚拟机的主要原因还是因为Java,因为Java有足够好的凯源生态,更重要的是Java有成熟的开发者生态,最最重要的当然还是Java是第一大编程语言、背后有最多的开发者。

Android诞生之初,跟Java普遍使用JVM家在字节码文件(

.class

),Android的虚拟机是Dalvik虚拟机,每次运行程序,Dalvik负责加载dex/odex文件然后解析成机器码让Android系统调用。

2010年5月20日,Google正式向外界发布了版本代号为Froyo冻酸奶的Android2.2版本,这是Android第一个成熟版本,Google在这个版本的虚拟中加入了即时编译、也就是我们通常所说的Just-In-Time Compiler(JIT)编译器,Dalvik使用JIT进行编译,JIT可以对经常使用的dex/odex进行编译和优化,将其翻译成精简的Native Code执行,引入JIT之后Dalvik性能提升了3到6倍。

2013年10月31日,Google正式对外发布代号为Kitkat的Android4.4,Google为了改善Android糟糕的用户体验,开发了全新的虚拟机运行环境,也就是Android Runtime(ART),在这个版本中Google还有了新的编译策略Ahead of time(AOT),不过这时候ART和Dalvik共存,直到2014年10月16日代号为Lollipop棒棒糖的Android5.0版本,ART彻底取代Dalvik,AOT成为了唯一的编译模式,AOT相对于JIT的优点是,JIT是运行时动态编译,每次运行程序的时候都要编译,AOT则是静态编译,应用在安装的时候就已经完成了编译,程序运行的时候不用重新编译,这才是真正的本地应用概念。

ART还对垃圾回收机制进行了改革,ART只有一次垃圾回收暂停、而Dalvik有两次,ART在垃圾回收保持暂停的时候并行处理,ART还优化了垃圾回收的效率,让系统能够及时垃圾回收、及时减少后台内存使用和碎片化问题。

不过在Android7.0之后JIT又重新回归了,AOT/JIT混合编译模式又重新回归了,混合编译当然有优点,不过还是很难解决Android存在的各种问题,毕竟Android的问题一大部分是Java自身的问题,除此之外Android生态本身也比较混乱,这也是Android体验差的重要原因之一。


EmacserVimer


纯Linux的手机操作系统,没有中间虚拟机不是没有,还挺多的,比如Ubuntu Touch,火狐操作系统,三星Tizen操作系统,还有号称首款真正的Linux智能手机Librem 5。

这些系统发展的并不好,导致很少进入大众的视线,让你觉得好像所有的操作系统都是Android的虚拟机架构。

有些人说为这些没发展起来的手机是因为界面丑,其实不然,Android早期的版本1.0. 2.0也丑的要命,就是它的引入的Java虚拟机,引来了无数Java开发者加入,快速的构建起了Android的开发生态。逐渐发展成今天你们看到的样子。

你们都还看过那些纯Linux的手机操作系统呢?晒出来。





拉那烈


我理解的楼主意思是,android中间有个java虚拟机,而linux没有,那么有没有手机可以采用linux,让操作系统或者app直接与硬件之间进行操作,以求效率更高?

楼主理解错了,linux也有虚拟机的。看图:

当然从图中可以看出,两者都有虚拟机。

当然,从linux架构图可以看到有个“程序 n”以及“程序2”是直接通过机器码操作内核的,那么问题来了,既然可以通过程序直接操作内核,为什么android要把这一块裁掉,不直接让程序操作内核呢?主要有以下几个方面:

1.程序兼容性,众所周知java是个跨平台语言,不依赖cpu指令集,这样就能保证兼容性。android在历史的演变过程中,运行在多种平台上,例如:arm,mips,x86,x64,arm-64等等,这个传统来自于linux,曾经linux运行的平台更多,例如:x86,x64,mips,arm,ibm-power,hp,motorala等等。

2.方便移植,作为后来者,android出现的时代,已经有了智能手机或者设备和对应的操作系统,例如:palm os,windows mobile,motorala linux,还有索尼爱立信和nokia主导的symbian os等等,android如果要生存下来必须要让开发者很方便的将他们为其他系统开发的软件移植到android上,而java虚拟机是最好的选择。

3.无奈之选,开发一个新的系统,绝不是吹几句牛,埋头苦干就能行的,那么只能站在巨人的肩膀之上,但是当时没有人愿意公开自己的系统,windows mobile作为微软的产品,虽然可以兼容多种不同品牌手机,但是不开源,palm和黑莓以及苹果是软硬件全是自家,更不可能开源,motorala虽然采用linux但是软件封装却是自成一派,在这样情况下,android只能采用开源的linux,所以形成了这样的架构。




天行健31293242


Linux只是内核,一个系统基础而已。所有安卓也是纯Linux ,只不过去掉了一些无关紧要的东西。

可以使用busybox还原使用性,chroot也可以让安卓机运行Linux桌面级系统。重在Linux发展历程上出现arm这个分支,而且大规模的运用使得ARM版的GNU/Linux拥有交为丰富的程序可以使用。办公娱乐上网乃至作图修图视频剪辑 文档处理与编辑等等。




陈盒子精


操作系统是一层一层搭起来的,Linux打桩,Java虚拟机做地基,Android是楼层框架,各种UI是装修,这才有了你看到的漂亮的楼房。

不知楼主要的纯Linux是不是命令行界面的Linux内核。

按照这个要求,装了第三方应用,没有编译进内核的系统都不能算是纯的Linux。楼主连打电话拨号都要自己写代码才能实现了。


飘162829324


简单理解下,有java虚拟机存在。app开发适配更容易。不然会像windows和Linux一样,安装一个软件先装几十个依赖。


吃小米的鱼


啥叫纯Linux手机?和安卓啥区别?是说和Linux桌面(Ubuntu, Fedora,...)类似吗?


TOMLEI


什么叫纯linux的手机?你的手机系统就是linux的。估计你想说为啥不能跟苹果一样是吧?直接用c或者其他语言直接编程?因为linux各种标准太多啊!大一统的切投资少的手段就是java啊,搞其他格式限制太多了!可能搞不好也会跟桌面的linux系统一样,无法达到统一格式,然后泯然众人


脑袋虫


android用的是linux内核,ios用的是类unix内核,理解提问者的疑问应该是是否有用户可以直接操作内核的手机,答案是不可能,现在商品化的手机必须考虑应用开发和使用环境,所以为了不同手机硬件兼容性考虑,需要封装底层的接口调用并标准化,而且基于安全考虑必须将每个应用权限控制在很小的范围,目前的做法都是用类脚本的语言做中间件,手机应用基本上都是基于脚本的开发,效率上比直接操作硬件的c语言会差一些


分享到:


相關文章: