昨天在MSN上和一个朋友交流。他们公司原来在做基于GTK的Linux手机框架。交谈后,才知道他们公司已经不做GTK,改做Android方案了。我们谈了一会儿,这个朋友比较看好Android。最后我说:“Android很可能用Linux打败Linux手机。在Android出现后,恐怕很多人都会失去继续做GTK方案的决心”。

1 Android

1.1 简介

Android是是OHA组织发布的手机软件栈,包括操作系统、中间件和主要的应用。OHA是Google主导的一个行业联盟。因为Google的名气太大了,我们通常也把Android说成是Google的方案。把基于Android的手机说成是gphone,把HTC的第一款使用Android的手机说成是G1。

Android采用了Linux内核,但它没用任何Linux的GUI方案。它的应用框架和GUI库都用Java语言实现。 Android内部有一个叫作Dalvik的Java虚拟机,Java程序由这个虚拟机解释运行。 Android平台的应用程序必须用Java语言开发。

1.2 讨论

我在 旧文 中谈到Android的两个问题:

  1. Google目前只开放了SDK,即应用软件的开发接口,没有开放中间件的源代码。
  2. Android的设计很漂亮,但是否实用还有待实践检验。

第一个问题已经不存在了,因为Android在10月份已经开放了所有的源代码,我自己也 编译过。关于第二个问题,我主要是怀疑java的效率不适合嵌入式环境。但据使用过G1的朋友说,速度可以接受。

有的网友说基于Android的开发成本很高,例如没有输入法框架。但听朋友说Android计划在明年一月份推出输入法框架。做scim的苏哲现在应该在Google吧,不过他应该不会做Android。虽然软件计划一般都会推迟,但Google还是有一定可靠度的。

2 Linux手机

虽然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手机。

3 Openmoko

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就够了。

3.1 OM-2007.2

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本身。

3.2 ASU

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就不能运行了。

3.3 FSO

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还没有实现拨号功能。

4 框架

在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的硬件平台。

5 Android影响了谁?

在相对长的时间内,Andoid和WM、Symbian和iphone不会产生直接的冲突。WM、Symbian和iphone都有自己的消费群体。但Android会直接影响其它Linux手机方案。

因为Android是个完全开源的方案。而开源、开放正是其它Linux手机方案的主要特色。 Android采用java,肯定会付出一定的性能损失,但却换来了一致、简单的编程接口,降低了应用开发难度。相对于Android,GTK应用的开发难度要大得多。

Android将在两个方面打击其它Linux手机方案:

  1. Android会分化Linux手机系统的开发者。

    Linux手机系统的开发是很困难的。网上有段比较搞笑的 评论

    “去年在北京各个手机设计公司拜访了一大圈,包括德信,联想,cect,还有一大堆小一点的公司。一谈到linux上做手机,cto们都老泪纵横,有个大公司的cto拉着我的手,捶着胸口说:70个人,8个月,8个月啊,那么点功能都没有做出来。搞得我后来吹手里的android平台底气都不足了。”

    在Android完全开源后,还有多少公司和开源开发者会坚持艰难、前途未卜的Linux手机开发呢?

  2. Android会吸引大量应用开发者。

    其实各种Linux联盟、论坛的最终目标就是制定一个统一的Linux手机应用软件平台。在Android提供了这样一个平台后,其它组织就在一定程度上失去了原本的使命感。应用开发者会自发地选择易于学习、影响力大的平台。一个平台在聚集了更多的开发者后就会更加强大,再吸引更多的开发者。我们能设想出一个在上手度和影响力上超过Android的Linux平台吗?

6 结束语

Android和linux手机平台的矛盾并没有什么正邪之分,只是技术实现的此消彼长。技术上的激烈竞争有利于消费者和技术进步,但对于涉身其中的开发者多少有点残酷。

我在一篇旧文中说:“在移动状态下,人类通过手机这个终端接入信息社会这个巨大的网络;信息社会通过手机这个平台将内容发布给人类”。其实,Google关注的是信息的接入平台,而不是手机的设计、制造。这也是Google为什么会把方案完全开放的原因。但Google的强势介入确实对原有的生态环境带来一定的影响。

因为Goolg图谋的是信息平台,所以Android的很多应用都对带宽有较高要求。虽然WiFi能起到一些补充作用,但目前的网络环境暂时还不适合Android手机的大量普及。所以,其它Linux手机方案还有一定的发展时间和空间。我希望在这段时间里能出现一个一致、自洽、文档完善、易于学习的开源Linux手机方案。

昨天晚上陪儿子看了一会儿《霍尔的移动城堡》,小姑娘苏菲因为帮助霍尔而被荒野女巫诅咒,成了苏菲婆婆。我想如果我也被诅咒而失去大量时光,在剩下的时间里我会做什么呢?答案很简单,还是抓紧时间做自己必须做和喜欢做的事情吧。

更多相关文章

  1. Android撬动IT市场的新支点
  2. Android撬动IT市场的新支点
  3. Android撬动IT市场的新支点
  4. Android撬动IT市场的新支点!
  5. Android能用Linux打败Linux手机吗?
  6. Android撬动IT市场的新支点
  7. Android应用程序框架
  8. Android获取本机电话号码的简单方法
  9. 从android游戏框架看其生命周期!

随机推荐

  1. Android使用Notification通知栏功能的封
  2. 手把手教你使用MPAndroidChart实现柱状图
  3. 控制状态栏、导航栏、实现沉浸式模式
  4. Android——实现【搜索框】与点击搜索事
  5. android中自定义标签ImageButton
  6. Cocos2d-x开发移植到安卓平台横竖屏设置
  7. android wifi工作流程
  8. Android封装BaseFragment
  9. android BitmapFactory的内存溢出
  10. Tensorflow:Android调用Tensorflow Mobile