在回家的路上,和同事开玩笑说,要是 Nokia 或者 Symbian 请我去做 Symbian OS 的技术总监,我会告诉他们如何把 Symbian 引导到正确的方向。当然,这仅仅是笑谈,但是似乎不妨碍我们正确地思考这一问题。
在 2006 年,我开始做真正智能移动平台的安全软件(在此之前,曾经跟踪过 Palm 上的安全动态,也有原型程序)。当时的平台还是以 Symbian(包括 S60 和 UIQ)和 Windows Mobile 为主。在经历痛苦的学习,持续的挫折感,并使用相当难用的 CodeWarrior(而据说已经是当时最好的集成开发环境了)进行开发之后,我大胆预测了 Symbian 平台的没落。到现在,似乎长着眼睛的人都可以看到这一点了。我做出这一预言的根据有两点,从现在看来,虽然没有触及到核心问题,但基本上还是对的。这两点分别是:1、对触摸屏设备的准备不足;2、Symbian 应用的开发困难。
在第一点上,完全是 Nokia 的问题,而不是 Symbian 的问题。众所周知,Nokia 一直是 Symbian 的实际决策者,不知道出于什么原因,Nokia 对于触摸屏设备一直抱有一种奇怪的敬而远之的态度。然而这并不是 Symbian 对触摸屏设备的态度,事实上,Symbian 系统从开始就对触摸屏设备是支持的,甚至于 UIQ 子公司本身就一直致力于触摸屏设备上界面的演进。但 Nokia 从未试图采用 UIQ 界面推出设备,在触摸屏设备上,仅推出过一款 7710(7710 的前身 7700 没有产品化)。7710 的界面系统被 Nokia 冠以 S90 的名号。事实上,即使到今天来看,7710 的界面也不能算是过时,如果能够一直演进到现在的话(还有一个前提,就是 Nokia 确实有关注触摸屏上用户体验的产品人员),应该不逊色于其他系统,至少不输给 S60 第五版。有意思的是,S90 的界面原型却辗转到了 maemo 上(叫做 Hildon),而后者的最新进展又成了 Nokia 眼下寄予厚望的救命稻草。
在第二点上,大家都知道,在 Symbian 平台进行开发,其学习曲线是很陡峭的,即使是老手,对于形形色色的描述符(一个几乎避不开的东西)以及清除栈(另一个几乎避不开的东西),也很难能在短时间内完全掌握,写出无错代码;我一直坚持认为,清除栈是一个更加容易引入错误的机制(error-prone mechanism)。而且无论 Symbian 如何宣称,如何鼓吹,它仍然是一个不完善的 C++ 开发平台,甚至很长时间连 STL 都不能支持。在使用其他语言开发,更多地要为实现什么功能,给用户带来什么样的体验而沉思的同时,Symbian 开发者可能不得不绞尽脑汁去实现一个 map。
开发困难严重地抑制了应用程序的繁荣,尤其是对大量的爱好者来说。而从 Symbian 9 开始引入的签名机制更使得这种情况雪上加霜,个人几乎写不出任何激动人心的应用(由于能力的限制),即使写出来了,也很难于推广,因为你在用户使用之前就不得不支付给 Symbian 或者其相关的认证机构/测试机构一笔不菲的费用。在这样的开发生态系统中,我想,任 Nokia 把 Ovi Store 做得再好,也无济于事。
那么,现在的我,认为导致 Symbian 没落的根本原因是什么呢?是理念问题。无论是 Symbian 还是 Nokia,似乎都一直是在以作嵌入式设备的理念设计手机,而不是以真正的开放式的智能设备的理念来设计。这种毫无开放性的理念,其直接后果就是不重视开发平台的进化。就在 2008 年,还可以听到 Symbian 的这样回复合作伙伴要求改进构建系统的建议:为什么要改变呢,它工作得很稳定啊?我已经不止一次说过,Nokia 曾经坐失良机:当初 Borland 的开发部门以极低的价格出售,Nokia 无动于衷,要知道 Borland 公司在开发工具上的积累根基深厚,甚至为 Nokia 的手机终端推出过 C++ Builder!Nokia 在这方面的欠缺(对软件基础构造而言,如操作系统和编译器)影响深远,maemo 系统的龟速前进也是铁证之一,要不是在紧要关头和 Intel 大佬结盟,meamo 的前途更是暗无天日。即使是现在,meego 到底能对 Nokia 的手机有多少贡献也还殊难预料。Nokia 的另一个失误在于前些年购买了 Qt。准确地、从纯技术的角度说,购买 Qt 并不完全错误,但是,如果去推敲 Nokia 购买 Qt 的目的,就可以认为完全是个愚蠢的决定,因为 Nokia 希望利用它能够快速开发出跨平台的应用,来使得 Nokia 手机终端上的应用数量能够快速增长。这一事实证明,Nokia 或者 Symbian 的技术决策者有严重的 C++ 情结,而完全无视于移动领域技术大潮的方向!我们放眼看一下当前的主流开发平台,无一不是受控环境或者近似受控环境为主。Android 的 Java,iPhone 的 Objective-C,Windows Phone 正是意识到了这一潮流,才勇于把开发技术迁移到 .net 平台上。
总结而言,Symbian 没落在看不清科技发展前景,既缺乏创新,又缺乏对创新的认同乃至追随上。
Symbian 的最后机会。Symbian 确实是一个出色的操作系统(稳定而安全),但一直以来,Symbian 都缺乏这样一个清醒认识:Symbian 不是一个出色的应用开发平台。它把过多的系统本身在设计或者实现时引入的限制,毫无遮拦地暴露给了应用开发人员,导致后者们不得不面对一个奇形怪状的系统,它和很多其他更为成熟的操作系统相比,尽管原理相似,但却在用法上有很大不同,增添了许多繁琐的操作(比如要显式连接很多服务器,甚至文件服务也不例外);而且还要采用一种稀奇古怪的开发语言(所谓的 Symbian C++),系统提供的 R 类甚至不支持在析构函数中自动关闭关联着的打开的资源句柄。Symbian 现在由 Symbian 协会管理,我仍然看不到任何将要翻身的迹象,无论是 Symbian^3 还是 Symbian^4,都是如此。如果需要我来给出解决方案的话,那就是,明确而严格地区分系统和应用的接口层面,底层保留 C++ 开发的状况,而把应用层转向更为先进的、更具有生产效率的其他受控语言或者开发工具。这样做,从根本上隔离了应用程序,降低了给系统带来的安全风险,同时又大大降低了学习曲线和周期,提升了开发效率,可以吸引更多的开发人员进入。具体的方法,个人认为,要么移植 Dalvik,实现和 Android 的兼容,要么收购 Red Five Labs(http://www.redfivelabs.com),加以整合改进,采用 .net 开发。又或者,也可以考虑全面使用 Flash 技术,可惜的是我对这个方面了解甚浅,不能确定是否可以满足绝大多数的开发需求。
顺便说一下 meego,我本人对这个系统不太看好,特别是对于 Nokia 的手机而言,可能对于上网本或者其他终端还会好一些。在开发上,meego 现在比 Symbian 还要倒退一步,开发环境连 Windows 都不支持,而且仍然是以 C/C++ 为主要开发语言。照现在的形势看,meego 极有可能会是下一个 Symbian。