在最近举行的Linaro Connect 会议上,Linus Torvalds 被问道他最喜爱的芯片架构,Linux 之父想都没想就回答说是x86架构而不是ARM架构。Torvalds说,人们太痴迷于指令集和CPU核心,但围绕架构的生态系统更为重要。x86的生态系统远胜于其它架构。x86平台有着统一的硬件、开发和基础设施,许多应用的开发都是在x86机器上进行的。
而ARM平台则是一个碎片化的市场,ARM统治了移动市场,但它的碎片化导致了很多支持和设备方面的问题。Torvalds说,他个人对ARM作为一个硬件平台非常失望。
Linus Torvalds资料图
Linux内核虽然是统一的,但Linux发行版称得上是碎片化.
很多人说采用Linux内核的Android碎片化,我觉得主要不过在于厂商跟不上Google更新的Android版本,像安装包格式APK是统一的.
但Linux发行版就不同了,Debian系的deb包,Redhat系的rpm包,格式不同也就算了,关键是你把Debian系的二进制deb包拿到Redhat系上几乎是无法运行的,因为不满足动态共享库依赖关系.
甚至是同一个发行版的不同版本,比如Ubuntu 12.04和Ubuntu 16.04,因为每个系统版本依赖的动态共享库版本不同,所以不同系统的deb包也无法做到通用,这就必须同时维护多个系统版本的deb包,这点上确实被Windows吊打了.
Docker的出现一定程度上也是为了解决Linux发行版碎片化给服务部署时带来的困难.
但显然,Docker太重了,不可能每一个应用都打包成一个Docker来发布运行.
唯一我想到的就是在开发和编译程序时考虑静态链接共享库,实现跨Linux发行版的二进制发布.
其实很多软件都能做到,服务器方面的XAMPP(PHP),JDK(Java),图形界面方面的FileZilla,SQLiteStudio,Sublime Text,Qt Creator/SDK,Blender3D,VirtualBox等都提供了解压即用的Linux二进制包.
比如我在Ubuntu上交叉编译的ARM Linux版本的PHP7解释器就是静态链接共享库,保证了PHP7可以运行在Android和Raspbian这些ARM架构的Linux上:
站在开发者的角度来说:ARM这个平台太碎片化。arm的平台开发环境,开发工具,对新手的友好度等等和x86差距很大。别说是新手,就是有底层经验开发的老手去参与arm相关的开发都很困难。没有现成的文档,没有现成的轮子,没有趁手的debug工具,各家和各家的实现细节不同,而intel和amd当年彼此有过授权以及互相兼容,标准化方面的努力。
对比下市面上x86相关的开发书籍和arm的相关书籍,差距就很明显了。
苹果,高通,三星,华为等等这些大公司各自玩各自的,没人愿意出来花时间做一些对开发者有好的事情。苹果的xcode到现在也就那样,更别说去搞底层arm的开发了。说白了就是:arm上有一群吃肉的狼,而x86上就intel一只虎(amd就是被intel豢养的宠物)。x86的统一是intel事实上的垄断下客观上造成的好处。但垄断的坏处,消费者感受的最明显,想想intel火炉子p4,PD时代,高价低性能就觉得可怕。
arm指令比x86少,更简单,按常理来说应该更好上手才对,但实际上却是:arm整个平台的开发环境和x86差距很大。随着大公司介入,不断投钱到arm上,也许未来arm在这方面可以赶上来。
可以预见的未来:苹果肯定是不配合的,自成一家;其他arm的厂商互相成立一个标准协会类似的东西,标准化平台,开始完善统一一些基础设施。就看高通、三星、华为等等这些厂愿不愿意坐下来谈了。