昨天在MSN上和一个朋友交流。他们公司原来在做基于GTK的Linux手机框架。交谈后,才知道他们公司已经不做GTK,改做Android方案了。我们谈了一会儿,这个朋友比较看好Android。最后我说:“Android很可能用Linux打败Linux手机。在Android出现后,恐怕很多人都会失去继续做GTK方案的决心”。
Android是是OHA组织发布的手机软件栈,包括操作系统、中间件和主要的应用。OHA是Google主导的一个行业联盟。因为Google的名气太大了,我们通常也把Android说成是Google的方案。把基于Android的手机说成是gphone,把HTC的第一款使用Android的手机说成是G1。
Android采用了Linux内核,但它没用任何Linux的GUI方案。它的应用框架和GUI库都用Java语言实现。 Android内部有一个叫作Dalvik的Java虚拟机,Java程序由这个虚拟机解释运行。 Android平台的应用程序必须用Java语言开发。
我在 旧文 中谈到Android的两个问题:
第一个问题已经不存在了,因为Android在10月份已经开放了所有的源代码,我自己也 编译过。关于第二个问题,我主要是怀疑java的效率不适合嵌入式环境。但据使用过G1的朋友说,速度可以接受。
有的网友说基于Android的开发成本很高,例如没有输入法框架。但听朋友说Android计划在明年一月份推出输入法框架。做scim的苏哲现在应该在Google吧,不过他应该不会做Android。虽然软件计划一般都会推迟,但Google还是有一定可靠度的。
虽然Linux手机的市场份额还少到可以忽略,但Linux手机的平台、联盟、框架却很多。有位CSDN的 网友曾经说过要比较7个Linux手机平台的异同点。这个朋友说的7家是:Maemo、Limo、GPE、Android、ALP、LiPS、OMA。 LiPS已经不干了。Maemo目前还是MID方案。GPE是PDA环境。我没看过 OMA发布过什么方案。 ALP最近有三星取消一款使用该平台手机的 传闻。
其实除了这几家,做Linux的公司或组织应该还有很多。还不时听到新的方案,例如 Jalimo,与Android类似在Linux内核上做Java框架。国内也有不少公司做过QT或GTK的方案,只是比较低调,连开放SDK的都很少。其实,iphone应该也是Linux的近亲。iphone的Mac OS X也是类Unix的系统。但我想Apple不会认这门亲戚。
Linux手机的GUI方案主要有GTK和QT。QT的Qtopia Phone Edition(QPE)原来是商业软件,从4.3版开始用GPL开源。Openmoko平台的ASU方案就集成了QT。 GTK一直是由开源组织维护的开源软件,比QT开放,所以很多平台选择了GTK。
Android算Linux手机吗?从开发技术来看,我认为它不算。我认为在技术上iphone比Android更接近Linux手机。
Openmoko是最早的开源手机方案,目前也还是开放最彻底的方案。软件到硬件、电路图到结构图全部开放。 Openmoko目前主要有三套软件方案: OM-2007.2、ASU和FSO。这3个方案我都在freerunner上用过,从普通用户角度来看,这3个方案的发布版本都不像正常的手机。
当然这也不能怪Openmoko。因为Openmoko本来就是给开发者学习、试验的。至于freerunner要面向普通用户的说法,我觉得只是一个笑话。千万不要把半成品给普通用户看到,否则它就没有必要成为成品了。
有时我觉得Openmoko的开发者还是在按照PC软件的思路开发,而不是做手机。例如Openmoko的所有方案中没有一款会提示用户没插入SIM卡,只说找不到网络。我在gsmd(后台通信模块)中看到一个分析AT命令的缓冲区长度被定义为64K(MLPARSE_BUF_SIZE),而且这个缓冲区在开机分配后就不会被释放的。这样太浪费了。我曾经在一个总共只有64K内存的系统中实现过与gsmd类似的功能。这是个转发系统,如果不用考虑转发系统的缓存,其实32K就够了。
OM-2007.2是一套基于GTK的方案,也是Openmoko最初的方案。我觉得除了界面操作不便、功能少、有时接不到电话外,还是做得不错的。但是Openmoko没有坚持完善这套方案,而是又搞了ASU。
OM-2007.2后台通信模块是gsmd。后台通信模块就是通过AT命令与GSM模块通信的软件模块,系统其它模块通过后台通信模块使用GSM模块提供的通信功能。 gsmd通过socket向其它进程提供服务。 Ryan Paul 说GTK的局限性和gsmd的不完善使得Openmoko改用QT方案。我觉得这个理由不充分,gsmd是个很小的模块(12323行代码),完善它应该不算太困难。至于GTK的局限性,从很多优秀的基于GTK的项目来看,即使有什么局限性,也不是来自GTK本身。
ASU也被称作OM-2008.8。Openmoko最新的Makefile默认将openmoko-asu-image作为构建目标。 ASU是April Software Update或者August Software Update的缩写。计划在4月发布,后来在8月发布。
ASU的后台通信模块改用了QPE的通信组件。除了QT外,ASU还集成了Enlightenment的E17桌面环境的一些组件。 Enlightenment也是一个Linux桌面环境,它有一个叫作EFL的GUI库。 EFL是Enlightenment Foundation Libraries的缩写。
ASU声称同时支持GTK、QT和EFL的开发。但在OM-2007.2上开发的应用,如果使用了Openmoko的框架或者gsmd,在ASU就不能运行了。
FSO是FreeSmartphone.Org With FSO的缩写。 FSO是一个不包含UI的手机框架。它封装了所有与UI无关的手机功能,并通过D-Bus总线提供调用接口。
FSO并不限于Openmoko,它的 目标 是制定一个开放、统一、独立于UI的手机中间件规范。我很欣赏这种专注做好一件事情的做法。 FSO有清晰的 开发计划,规划了每个milestone要实现哪些功能。目前已经发布到milestone4。
FSO版本的Openmoko映像包含一个叫作zhone的参考UI。zhone使用了一个叫作Illume的窗口管理器。 Illume是Enlightenment的一个组件。
上面两张图片选自Openmoko的wiki。其实,目前最新的FSO milestone4中,zhone还没有实现拨号功能。
在FSO推荐阅读的一篇 文章中有这么一段话:
When someone uses a framework - or, for that matter, a programming language - what they are really doing is delegating decision-making to someone who they think will have better judgement.
我们在使用一个框架的时候,是委托框架的设计者帮我们做出决定。我们相信这个设计者更了解框架涉及的领域,能够做出更好的决定。一个好的框架应该告诉用户怎样做,而不是给用户太多的选择,让用户无所适从。
文章的作者认为同时向用户提供两种脚本语言不是一个特性,而是一个错误。如果同时提供4种脚本语言,那就是一场噩梦了。 Openmoko有3套不成熟的软件方案,其中的ASU向我们提供了GTK、QT和EFL三种应用程序开发方式。这是特性、错误、还是噩梦呢?其实只是不得已吧。
我们对框架的最基本要求就是:一致和自洽。进一步的要求包括文档完善、易于学习。
相对于Openmoko,Android提供了一个相对稳定、文档完善的框架。如果你是应用开发者,你会选择Android还是Openmoko呢?
其实,拿Openmoko和Android比较很可能是不合适的。如果Openmoko的目标只是为开发者和学生提供一个学习、研究Linux手机的软硬件平台,那么Openmoko做得够好了。很多人正在将Android移植到Openmoko的硬件平台。
在相对长的时间内,Andoid和WM、Symbian和iphone不会产生直接的冲突。WM、Symbian和iphone都有自己的消费群体。但Android会直接影响其它Linux手机方案。
因为Android是个完全开源的方案。而开源、开放正是其它Linux手机方案的主要特色。 Android采用java,肯定会付出一定的性能损失,但却换来了一致、简单的编程接口,降低了应用开发难度。相对于Android,GTK应用的开发难度要大得多。
Android将在两个方面打击其它Linux手机方案:
Android会分化Linux手机系统的开发者。
Linux手机系统的开发是很困难的。网上有段比较搞笑的 评论:
“去年在北京各个手机设计公司拜访了一大圈,包括德信,联想,cect,还有一大堆小一点的公司。一谈到linux上做手机,cto们都老泪纵横,有个大公司的cto拉着我的手,捶着胸口说:70个人,8个月,8个月啊,那么点功能都没有做出来。搞得我后来吹手里的android平台底气都不足了。”
在Android完全开源后,还有多少公司和开源开发者会坚持艰难、前途未卜的Linux手机开发呢?
Android会吸引大量应用开发者。
其实各种Linux联盟、论坛的最终目标就是制定一个统一的Linux手机应用软件平台。在Android提供了这样一个平台后,其它组织就在一定程度上失去了原本的使命感。应用开发者会自发地选择易于学习、影响力大的平台。一个平台在聚集了更多的开发者后就会更加强大,再吸引更多的开发者。我们能设想出一个在上手度和影响力上超过Android的Linux平台吗?
Android和linux手机平台的矛盾并没有什么正邪之分,只是技术实现的此消彼长。技术上的激烈竞争有利于消费者和技术进步,但对于涉身其中的开发者多少有点残酷。
我在一篇旧文中说:“在移动状态下,人类通过手机这个终端接入信息社会这个巨大的网络;信息社会通过手机这个平台将内容发布给人类”。其实,Google关注的是信息的接入平台,而不是手机的设计、制造。这也是Google为什么会把方案完全开放的原因。但Google的强势介入确实对原有的生态环境带来一定的影响。
因为Goolg图谋的是信息平台,所以Android的很多应用都对带宽有较高要求。虽然WiFi能起到一些补充作用,但目前的网络环境暂时还不适合Android手机的大量普及。所以,其它Linux手机方案还有一定的发展时间和空间。我希望在这段时间里能出现一个一致、自洽、文档完善、易于学习的开源Linux手机方案。
昨天晚上陪儿子看了一会儿《霍尔的移动城堡》,小姑娘苏菲因为帮助霍尔而被荒野女巫诅咒,成了苏菲婆婆。我想如果我也被诅咒而失去大量时光,在剩下的时间里我会做什么呢?答案很简单,还是抓紧时间做自己必须做和喜欢做的事情吧。