Android为什么不直接执行Linux的程序?而是自己搞一套?

[复制链接]
wodesunin 发表于 2023-10-8 17:39:55|来自:中国 | 显示全部楼层 |阅读模式
Android为什么不直接执行Linux的程序?而是自己搞一套?
全部回复5 显示全部楼层
qkw6358 发表于 2023-10-8 17:40:44|来自:中国 | 显示全部楼层
最主要的原因是开发难度。
你说直接执行Linux程序,是让Android开发者都去写C语言吗?
当时的语言环境也不像现在,如果现在让Google再选一次Android的开发语言,他们可能会选Go,选Dart,甚至选Rust,但一定不会选Java。不仅仅是因为版权原因,更重要的是Java本身的问题。
在我看来Android早期的很多问题,Java都要背锅。现在看上去问题少了,主要原因是硬件性能更好了。
Android不像IOS,IOS从一开始就是冲着智能手机而设计的,无论是编程语言,开发环境,甚至UI设计都是如此。而早期Android更像是被IOS逼着开发的产物,根本没有那么多时间让他们自己设计一套编程语言和开发环境。当时最热门的Java+Eclipse就理所当然地成了首选。
现在Google想重新搞一套也搞不了了,Java在Android系统里根深蒂固,替换Java的难度毫不亚于重新开发一套。于是乎他们开发了Fuchsia。(与之相对的,苹果则不需要重新设计IOS)
在我看来,Java是过时的东西。不否认它的历史地位,但时代在进步。以前说Java的那些优点,现在哪个编程语言没有?以前说Java安全,因为没有指针,现在哪个语言还有指针?甚至连多线程都算是Java的优点。二进制文件跨平台执行也是没有意义的东西,反而是为了达到跨平台执行所付出的成本过于巨大——虚拟机终究是虚拟机。
江湖怪侠 发表于 2023-10-8 17:41:43|来自:中国 | 显示全部楼层
你听说过java cpu吗?你听说过java操作系统吗?在java炒得最火的那几年,这些都是大家觉得很有前途的东西。
Android也是那个年代的产物,Android是java操作系统的一个。那个时候Android原作者想做的是一台Java device,而不是linux device。
用linux是因为恰好linux对arm芯片和java支持挺好的。这两个条件但凡有一个不成立,移动终端产业就没linux什么事了。
所以Android跑linux程序的事,原作者就没想过。
fifa8808 发表于 2023-10-8 17:42:33|来自:中国 | 显示全部楼层
这个就有点历史了,Android当时选择不多,Linux-based的移动操作系统也不止它一个。
从头写一个OS几乎是不可能的,但是Linux也只是个kernel,基于它的发行版很多,但是都不是移动操作系统,图形界面没有适合移动版的。
所以你所说Linux程序只是个黑框框程序,手机上的应用是一个有图形界面,懂了不?
当时包括谷歌收购了Android,诺基亚,摩托等等也都在基于Linux开发有图形界面的移动操作系统。因为当时乔布斯已经把基于unix的iOS掏出来了,那还不是莽就行的事了吗?
所以不是另搞一套,而是当时的确没有。
另外Android叉出来的Linux分支和Linux原分支是有差异,且未完全合并的,这个原因太多了,看你问问题方式也不是在问这个,就忽略吧。 你就简单认为Android基于的Linux不是主干的Linux,此Linux非彼Linux。
xhymqe 发表于 2023-10-8 17:43:07|来自:中国 | 显示全部楼层
如果你乐意的话,你确实可以自己把 Android 应用程序框架那一层全部去掉,虚拟机那套也去掉然后自己移植一个 DE 过去,运行原生 Linux Binary。甚至理论上可以用 Bionic 的工具链自己编译一个 MySQL 塞进去。也就是说 Android 完全可以运行 Linux 程序。只不过由于 C Library 底层有一点点差异,不能直接用同样 CPU 架构的二进制程序,需要移植罢了。
cnfsonxxx 发表于 2023-10-8 17:43:46|来自:中国 | 显示全部楼层
来尝试回答一下,仅仅从技术上来讲,把Linux直接搬到移动终端有这么些问题:

  • Linux下面常用的图形界面是X Window,尽管从Unix/大型机时代一直在改进,但是那种client / server架构效率不高,并不是很适合移动终端
  • X Window只是一个图形界面协议,其上还需要窗口管理器,大家比较熟悉的是桌面系统上跑的gnome或者KDE,实际上还有非常多如xfce, twm等等,常用的这些窗口管理器都不适合触摸屏
  • Linux的图形界面缺少好的封装,X Window编程比较复杂,而且控件没有统一界面规范和编程接口,各家窗口管理器用各自的控件,界面风格难以统一
  • 跨平台兼容性差,Linux的二进制可执行文件是依赖于CPU架构的,这样多个厂商如果用不同架构的处理器, Android程序就没有办法跑了
  • 缺少高效的包管理系统,各家的Linux用不同的包管理系统,比如apt, rpm, dpkg/ipkg对可执行文件/库文件/配置文件的管理很松散,不适合Android移动平台将每个App放在相对独立的文件空间/虚拟机的需求
  • 还有其他的技术原因,比如字体、图像、界面特效支持不佳等等。
当然,还有很多商业原因促成了Android,Google由于想把它们的手伸到终端上,控制内容的入口,它们在背后的推动也是商业上首要的因素。

快速回帖

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则