Java Card——看上去很美

本周参加了Oracle的Java Card论坛。这是我第几次参加已经记不清了,只是感觉酒店一如既往的高档,但人似乎越来越少,午餐却越来越差。

几年前刚接触Java Card的时候,觉得这玩意实在太酷了!在此之前,COS的技术含量主要体现在行业知识,而在软件技术本身上实在没有多少深度。Java Card的诞生,使得COS真正成为一个运算环境。这是质的飞跃,就好比软件工程专业和计算机科学专业的差异。

平台一统江山,应用百花齐放!多么美好的愿景啊!

几年过去,现实却和理想依然距离遥远。有杀手应用上市么?似乎只有实验应用吧。

为什么没有应用?本文暂且不谈。因为我认为即使真到了应用百花齐放的那一天,Java Card这个平台也会把现实击碎。

Java Card在技术上确实是好东西,但必须认清它是一个平台,而非一个应用。作为平台,它遭遇了我认为最头痛的问题——版本分裂。

版本分裂有两种,显式分裂和隐式分裂。

广义的linux(指OS,而非kernel)就分裂成很多发行版。应用软件会声明自己在哪些平台下调试过,并对份额较高的发行版提前打包成相应格式。

Android自诞生之日,就被各厂商修改定制。且不提传统的手机制造商,就连互联网巨头们也纷纷加入战团。小米、百度、盛大、360、点心……

只要是版本分裂,就会给应用开发带来痛苦。Google会提供Google的API,HTC会提供HTC的API,要充分发挥手机的软硬件特性,就得区别对待、特殊处理。TempleRun适配了707款Android手机,仍然被用户抱怨无法运行,参见【1】。

但显式分裂相比隐式分裂还算不错了,至少大家都知道是这么回事,用户一定程度上也能理解。就好像没有人会下载rpm包往自己的Ubuntu上装。也不会有人对小米手机无法正常运行微信的新闻感到震惊。

隐式分裂就不同了,不同的版本会给人一种看上去完全兼容的幻觉。也许运行一个Hello World也确实没有什么不同,但对于那些商用级别的软件,情况却不像想像的那样。

PyPy号称满足Python的规范,和CPython完全兼容,但快一个数量级。但Python教父Guido Van Rossum表示其无法取代CPython,他在Pycon2012上让在生产环境中使用PyPy的人举手,现场基本无人响应,参见【2】。

再来看Java本身的案例。java sdk有那么几种,参见【3】。如果仔细看看,会发现虽然都是些诸如IBM、Redhat之类的大拿公司在做,但真正大家用的就是Sun开发的官方sdk。为什么?因为不兼容嘛。难道大家不想做得兼容么?我看最大的原因还是基于软件平台的复杂性,要做兼容太难了。一个特别有意思的例子是OpenJDK,它和Sun的JDK,90%的代码都是一样的,OpenJDK也通过了Sun的TCK测试,按说兼容性应该很好了。但Hadoop就明确表示和SunJDK工作正常,和OpenJDK不行,参见【4】。

写了几个例子,我们再回过头来看Java Card。几乎每家卡商都有自己的Java Card OS,再加上一些专做Java Card的小公司,中国市场上应该已经有超过10个Java Card平台了吧。每次客户要试用一个Applet,各家都需要进行平台级调试,才能使之正常运行。或者同样一个应用,每家都在自己的卡上进行开发自己的版本。这对第三方应用开发来说,几乎是寸步难行。大家都过了TCK的,不应该这样不是?呵呵,我想没有什么测试技术能保证把一个软件平台所有的方面都测到吧。更何况TCK还不测UICC之类的电信API。

我曾经听另外一个公司的人很自豪地给我说,一般来说,在别家Java Card上能跑的Applet,在我们的Java Card上no problem;在我们的Java Card上能跑的Applet,在别家的Java Card上却不能正常运行。

这的确是值得他们自豪的事情,但这也值得客户忧虑,值得行业不安。

我们有办法克服Java Card版本分裂带来的弊端么?前面说的那些世界上声名显赫的公司都不做不到,难道我们的从业人员能力比他们强么?

目前,在中国使用Java Card最广的应该就是中国联通了吧。他们同时采购多家卡商的Java Card,而且不断地升级规范,版本分裂自然不能避免。不同于多数客户,中国联通对于各卡商不能完全兼容的问题,已有察觉。去年,中国联通开过一次质量会议,提出了一个很前卫的方案,简单来说,所有卡商把自己的测试脚本提供给联通,每一家卡商都必须通过所有卡商的测试脚本。站在甲方的角度,这么想确实无可厚非,测试上形成一个并集,以大幅度地降低兼容性风险。只是一来我怀疑这么做的实际效果是否能有本质的提升,二来我认为没有一家卡商能投入如此大的研发精力来做这件事情,同时放弃自己的知识产权而使得自己的产品和竞争对手进一步同质化这样的事情似乎也难以用理性来解释。

综上,Java Card作为一个平台,在应用尚未发展起来的时候,其自身就已经版本分裂了,而不再能达到降低应用开发成本的目的。也许某个客户只采购一家卡商的Java Card能够避免版本分裂,但真正的大客户,谁会这么做呢?

也许Java Card还能在擂台上坚持一段时间,但作为一个平台,也许它已经被技术性击倒。

【1】 Android分裂严重 游戏支持707款设备仍遭抱怨
【2】感受开源运动的魅力,《程序员》杂志2012.04
【3】http://en.wikipedia.org/wiki/JDK
【4】http://wiki.apache.org/hadoop/HadoopJavaVersions
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值