Simon Raffeiner 是一名开发者,曾经为 Ubuntu 手机平板项目服务。在项目的起伏动荡之中,Simon Raffeiner 学到了不少经验,让我们听听他是怎么说的。
现在 Ubuntu 手机与平板已经远去了,这个项目为什么失败?从中能学到什么?我有一些个人之见可以供您参考。
先来简单介绍一下我参与 Ubuntu 项目的经历:2013 年 Ubuntu Touch 发布到 2014 年 12 月,我断断续续在 Nexus 7 上使用 Ubuntu Touch;2014 年 12 月,我开始开发 Click App;2015 年 1 月,我开始撰写“Hacking Ubuntu Touch”系列博客文章,共 15 部分,谈论系统的内部结构,后来还加入了 Ubuntu Phone Insider,从 Canonical 拿到一台魅族 MX4 手机,组织并赞助了 UbuContest app 开发大赛,之后一直在编写漏洞报告、制作 App,直到 2016 年 4 月才停止,到了 2016 年年中时,我廉价出售所有剩下的设备——或者转化了设备。因为有过这么一段经历,所以我认为我可以就这个项目谈谈自己的想法,说说它所面临的挑战,说说它有哪些地方本来可以做得更好,但是没有做好。
请注意,这篇博文并不适用于 UBPorts 项目,这个项目还在继续开发手机操作系统、Unity 8 及其它组件。
它并没有瞄准有利可图的细分市场
面向 PC、笔记本、服务器的 Ubuntu 系统发展过程要顺利一些。几乎所有设备都允许你安装任何操作系统,2004 年 Ubuntu 崛起时,最大的对手微软相当脆弱,容易招来攻击。Windows 的名声不怎么好,价格很贵,占用太多资源,Ubuntu 只要不那么烦人、便宜一些、容易安装、能在旧电脑上跑得更好就行了。Ubuntu 正是这样做的。Windows 的声誉并没有好转,继续糟糕下去,现在甚至还监控用户,价格依旧高高在上。所以 Ubuntu Desktop 没有、也没有必要做太多正确的事,就能维持用户量,并且保持增长。
再看服务器市场,Windows、红帽、SUSE 都有点太保守了,速度太慢了,价格也贵。红帽企业付费订阅产品每年要收几百美元,而且付费之后还无法获得必要的人力支持。如果能够开发一件产品,跑得更快,成本更低,得到产业的支持,拥有大量的功能,肯定能吸引许多人,在云端尤其如此。后来 Ubuntu 成为了 OpenStack 的参考操作系统,这件事帮助很大。
在移动设备领域,一切都不同了。在手机或者平板上,你不可能让任何类型的操作系统快速发展起来。每一台设备都安装定制 Andorid,系统经历过特殊的裁减。2013 年,Ubuntu 宣布进入移动市场,不论是 Android 还是 iOS,都不容易遭受攻击。相反,Android 还向其它平台大举入侵,只有 iOS 例外。有些人之所以期待第三方替代者冒出来,并不是因为 Android、iOS 名声不好、限制太多或者用户体验糟糕,而是因为他们担心谷歌会一统天下。正因如此,攻击 Android、iOS 并不像攻击微软、红帽(在 PC、服务器领域)那么容易。
我还记得,Canonical 的人曾经说过,项目只有从移动市场拿下大约1% 的份额,才能持续生存。要达到目标,意味着每年要销售大约 1100 万台 Ubuntu 手机、几百万台平板。如果从每台设备的软件和服务中获得 1 欧元/美元的收入,就能养得起 100 名开发者,如果指挥得当,这么多人就够了。Sailfish OS 是 Jolla 开发的,曾几何时,Jolla 大约有 120 名员工,它们还要设立营销、支持部门,Canonical 已经拥有这样的部门。问题在于,每年销售 1100 万台手机、几百万台平板是一个艰巨的任务,看看 Ubuntu Desktop 的用户量,估计只有 2000-3000 万。
——获得1% 市场的可能性之一:做得比竞争对手好很多,这样你的产品就会流行起来,那就不用担心1% 了。我认为,大家都清楚这样的事情不会发生,因为有一点很明显:所有的重要服务(WhatsApp、谷歌、Twitter、Instagram 等)都不允许我们克隆它的 App,在 Ubuntu 设备上运行。如果 Canonical 不开发自己的 Telegram 客户端,当第一款商用版 Ubuntu 手机上市时,甚至连 Instant Messenger 工具都没有。当时已经是 2015 年,大家几乎无时不在使用 Instant Messenger。如果 Ubuntu 手机不能做 Android 手机所做的事,大家就不愿意付同样的钱购买 Ubuntu 手机,即使手机上写着“开发者设备”也一样。
——获得1% 市场的可能性之二:拿下一块利润丰厚的细分市场。Canonical 过于关注所谓的“Convergence”(聚合)细分市场,这个市场的人不够多,但 Canonical 忽视了所有的黑客、“程序修补匠”、以及那些无法忍受谷歌、微软的人,NSA 正在盯住这些人。花很多的钱购买一台手机,当它与外接显示器连接时可以变成较慢的笔记本,并没有多少人做好准备买这样的东西,但是有很多人准备花高价钱购买 Blackphone。
用户体验糟糕、没有抓准重点
推出最初的几版 OTA(over-the-air)升级程序之后,我问自己:“bq 和魅族——尤其是它们的客户——真的想干下去吗?”手机很慢,在常规使用中老是要重启。魅族 MX4 有点过热。电池指示器给出的数据不准,移动数据不稳定,许多时候无法在国内漫游,定位服务也是相当不靠谱。来电时,手机老是没有铃声,或者你没有办法打出电话,因为 UI 挡住了按钮。闹钟不好用,蓝牙只支持音频设备,或者最新的输入设备,但连基本的文件传输功能都没有。WiFi 没有办法连接到 WPA Enterprise 网络,这个问题直到 OTA-5 才解决。当我索引文件时,音乐播放器甚至还会删除文件。
有些东西你认为管用,但实际不能用,这样的东西很多很多。还有一点更糟糕:一些漏洞修复之后,经过 2 次 OTA 升级之后居然又跑回来了。在手机/平板项目推行的整个过程中,向 Launchpad 提交的漏洞报告很多,数量冲到太空去了,超乎我的想像。
根治漏洞并不是优先考虑的事,开发者将大部分时间用来拓展平台,让软件支持更多的硬件(魅族 Pro 5,bd Aquaris 10),专注于“Convergence”(聚合)。到了项目快要结束时,与我交流过的用户大部分都对设备不满意。只有那些使用基本功能的人满意,比如我的父亲,他甚至不使用移动数据,每两天才打一个电话,他之所以满意是因为手机可以续航几天。买一台 150 欧元的智能手机,却不使用任何“智能”功能,真说不过去。
我表示理解,因为没有足够多的开发者快速修复所有问题,但是我们既没有开发出很好的 Convergence 手机,也没有很好的 Convergence 平板,相反,设备做任何事情都做不好。项目的人一直在说:“这是开发者设备,不必追求快速,因为从长远来看我们会获胜。”直到某一天管理层才意识到,这样做成本太高了,而且已经浪费了很多时间。此时,我们开始在内部削减开支,大约在 2016 年 10 月时,所有重要员工全都搬到了 Snappy,让手机和平板项目在沉默中死亡,直到几个月后才告诉公众。
我认为,设计师老是抱着“Scopes”的观念,迟迟不变,这点不好,没有人真正知道如何在桌面端使用 Scopes。
设备很难弄到
想弄一台设备真的难,相信大家有同样的感受。我在店铺里买了自己的第一台 Nexus 7,在 eBay 买了一台 Nexus 4,当项目开始蓬勃发展时,这些设备已经旧了,更难买到,很快,官方就不再支持了。Bq 的设备至少还在欧洲大多地区销售,但是很快就卖光了。除了 Ubuntu Phone Insiders,其它人想买到 MX4 真是很难,简直就是痛苦。如果你在美国,拿到一台设备,许多时候根本无法全速连接到移动网络。
2015 年和 2016 年的大多时间里,如果开发者想弄到一台官方支持的设备,测试 App,我真不知道该向你推荐什么。
从另一方面看,大家最想要的设备却不是自己拿到的设备,最想要的是高端 Ubuntu Edge。Bq 设备很便宜,内部存储空间很小,只支持 3G。MX4 很快,安装了大屏,支持 4G,但再无其它,甚至没有 SD 卡槽。在所有官方手机中,Convergence 需要的 HDMI 输出接口全都没有,Miracast/Aethercast 也不是很好的解决方案。许多人认为,Ubuntu 应该可以让它们的硬件发挥最大潜力,比如在 Aquaris E4.5/E5 上支持 FM 广播,不过这个功能甚至都没有出现在清单上,如果没有 Android 设备驱动,社区根本没有办法增加此功能。
大多人都认为 Ubuntu 手机会比 Android 更安全,因为它是开源软件,可以快速升级。但事实并不是这样的,Android 驱动和移动基带是专有的、安全的,可以完全访问硬件。不过这些东西理解的人不多。
沟通与营销有点混乱,有时还存在误导
每一天,我都要花很多时间关注最新进展,许多时候,我根本不知道接下来会有什么出现,下一个 OTA 又会怎样。邮件列表、IRC、Telegram 频道、Launchpad、官方网站、开发者的私人对话、Ubuntu Online Summit……东西太多了。我还没有将 Canonical 非公开对话放进来,这些交流是保密的,目标是保密,希望消息公开时能获得新闻媒体最大的关注。
Canonical 的许多员工在家工作,或者在不同的时区工作,在我看来,这种办公方式变得越来越糟糕。曾几何时,我碰到一些麻烦,比如:“当我按下电源按钮,一秒之后手机才唤醒。”“电池指示器有问题。”我希望他们重视这些漏洞,寻求帮助,服务真是折磨人。
为设备开发内核源码的人可能来自亚洲,至于负责Q&A的人,可能在美国某个地方工作。我自己在欧洲。工作轮班并没有重叠。有时我会早上 8 点与某个亚洲人聊天,在他下班之前交流;然后又在下午或者晚上与美国的人交流,他们刚刚才上班。
不得不承认,我从营销部门学到了许多东西,在“预期 VS 现实”方面学到的更多。例如,许多人假定,在随后的 OTA 升级过程中,Aquaris E4.5/E5 和 MX4 会加入 Convergence 功能,不过在销售设备时,制造商与 Canonical 都没有这样宣传过。直到项目取消了,大多人还认为以后可以在桌面端(火狐、SIP 客户端)运行同样的应用,可以通过软件包安装(apt-get)管理手机,这些想法完全是被营销给误导了。许多时候,团队都强调说 Ubuntu 会保持一致,事实并不是这样的。火狐没法运行,使用软件包安装(apt-get)会出问题,为了这样的事,我无数次通过各种渠道向人们解释。大家很吃惊,他们发现原来面向移动设备的 Ubuntu 居然如此不同。
太关注用户、App 开发者不关心的技术功能
我认为,对于架构师来说,如果你宣布推出一个新的、独立的移动操作系统平台,最好的理由应该是这样的:“好吧,让我们动手干吧,但是要以正确的方式进行,要做得比其它人好。”Ubuntu 不能只是关注图形用户界面,还要让系统在所有设备上运行,接受各种形状的设备。不能只是搞一些相互隔离的应用程序,就像 Linux 内核或者 Android 一样,还要进行全面的限制,保护用户的数据和隐私。系统必须防止 App 消耗太多电能。不论其它平台在技术方面做了什么,Ubuntu 都应该做得更好,以更优雅的方式完成。
对于我来说,这些东西并不是全都有意义。Unity 8 是有必要的,因为 Unity 7 依赖的是 Compiz,它无法良好兼容各种形状的产品,有些设备安装旋转屏。不过 Mir 的唯一作用就是替代X.Org 和 SurfaceFlinger,这样一来,Unity 8 就可以在 PC、移动设备上使用一个 API。我不是图形技术专家,也不是 API 专家,不过站在“人力资源非常有限”的角度看,这样拿出一个全新的显示服务器,但是没有其它人愿意使用,与现有替代产品相比也没有多少提升,应该少做这样的事。如果用户界面看起来没有什么不同,就更应该避免了。自 2013 年年末以来,Ubuntu Touch 一直使用 Android 的 SurfaceFlinger,用得还很欢快。
为了节省一点点电量,你将设计弄得很复杂,而且这种复杂还会给系统服务的部署带来更多工作量,这些服务从未被部署,因为你的团队太小,用户和 App 开发者不会因为你的设备续航时间延长了一点点而喝彩,相反,他们会有无穷的抱怨,因为缺少了这样那样的东西。在 Launchpad 平台上,经常出现“Complete the high priority background service implementations”这样报告,相关的漏洞报告数量达到 240,此时项目已经推出 3 年,但在漏洞方面基本上没有什么改进。
还有一个好例子就是规划好的信息框架。对于你的所有信息需求,不论是 Jabber/XMPP、SMS、Telegram 或者 WhatsApp,你只有一个系统应用程序,第三方资源可以为自己的服务提供插件。为什么不让 App 在后台运行?这套框架是主要的障碍之一。你没有办法制作一个简单的独立 XMPP 客户端,在后台接收信息,但是你想插入的信息框架却姗姗来迟,与没有推出差不多。甚至连 Telegram 客户端也无法在后台运行,它只能显示弹出式通知,因为 Canonical 说服了 Telegram 开发者,修改他们的服务器代码,支持 Ubuntu Push Notification 服务。
在 Canonical 平台上,有一些关键开发者认为 Ubuntu 如此重要,所有的服务提供商都会修改服务器代码,使用 Ubuntu Push Notification 服务,解决此问题。但是除了 Telegram,其它服务提供商都没有这样的想法。
App 开发者的生活太苦了
移动操作系统的价值并不在于当下的基本操作系统,而在于生态系统。这也是 Ubuntu 最难攻克的难关。
从本质上讲,面向移动设备的 Ubuntu 不兼容任何之前存在的运行环境。你没有办法运行 Android、Windows、X11 或者 iOS App,不能跨平台编译 Android、Windows、X11 和 iOS App。图形系统、系统服务、限制、基本库,全都不同。移动 Ubuntu 和 Ubuntu Desktop 是完全不同的。你可以一而再再三强调说“它们是完全一样的 Ubuntu”,如果我们不能在桌面端测试我的 App,因为它甚至都无法运行 Mir,那就不能说它们是完全一样的 Utuntu,我必须接受两个不同的平台。
Canonical 开发了完整的 SDK,基于 Qt Creator 的“集成开发环境”( Integrated Development Environment),跨平台编译环境,以及一套全新的 Ubuntu QML 组件。我没有冒犯任何人的意思,除了不能重新使用现有代码,这样做还会给 App 开发者带来困惑,让人沮丧。从头到尾事情总是不顺利。有时 SDK 几周都没法用,然后团队又拿出了版本控制方案,你的 App 老是出问题。
有时,我必须在程序店内重建、升级我的 glmark 2 App,因为 OTA 内包含了更新后的 Mir 客户端库,但是 OS 的兼容等级仍然与之前一样。事情变得很明确:版本控制方案只能向你保证,用官方支持的方式编写 App,它才能正常运行,而官方支持的方式只有 QML、HTML5。glmark2 直接与 Mir 对话,还有许多其它程序也一样——比如用 SDL 开发的游戏。
每一次 OTA 之后,如果你不能持续检查、更新,程序店内的 App 就没法用了。在最新的 Android 手机上,你可以继续使用旧 Android App,不过你必须担心一件事:如果你长时间不维护,完成下一次 OTA 之后,你去年开发的 Click App 可能就没法用了。我还记得,2015 年年末曾经在 IRC 有过一场激烈的讨论,当时几名 Canonical 开发者发现了这个问题,他们质问 SDK 团队:到底 SDK 团队希望 App 开发者如何在这样的环境下工作?
最开始时,我是一名 App 开发者。当我想开发一些东西时,基本上都要从零开始。想开发 GUI?只能用带有 Ubuntu QML 组件的 QML 开发,而 QML 并不是什么成熟的生态系统,没有大量已有的代码存在,也没有什么好工具。是不是只想使用现有 UI 库中的一个?只能指望 X11 或者 Wayland,如果想等到 SDL 或者 Mir 后端出现,那样时间太长了。想与硬件或者系统服务对话?因为受到了限制,我必须通过D-Bus 与特殊 Ubuntu 服务对话,许多“标准”的东西(比如 NetworkManager)无法与限制之内的东西对话。想在后台下载一些东西吗?请与特定的 Ubuntu 下载管理服务连接。如果手机之外发生了什么事,你想收到通知,怎么办?你只要将所有东西与 Ubuntu Push Notification 整合才能做到。
正因如此,我开始开发基础系统。2015 年 1 月时,我想开发 Wi-Fi 和蓝牙扫描功能,但是需要的 API 和系统服务全都不存在,大多东西都缺少,API 与系统服务也永远不会出现。
因为上述种种原因,对于第三方开发者来说,平台没有什么吸引力。投入时间精力重新开发另一个版本的 App,实在看不出有什么价值,加上用户基数本来就不大,那就更不值得了。在 Click Store 内,我基本上找不到一个 App 是由“原始”开发者上传的。甚至连 Telegram 都是由 Canonical 自己开发的。
大多人只会跑去开发便宜的 WEB App,或者克隆现有 App。很快,这样的做法就碰到了问题,许多 App 依赖某些不自由的网络服务,而且服务的条款极不友好。例如,我自己开发了 BD Navigator,它相当于德意志联邦铁路 Navigator 的克隆体。我对客户端-服务器协议进行逆向工程,几乎可以复制所有东西,只是不能购买真正的火车票,因为德意志联邦铁路在程序内植入了加密信息,如果使用偷来的加密密钥,在德国可是犯法的。我问德意志联邦铁路,能否允许我这样做,他们说不行。最终我只能将整个 App 降级,将它变成一个 WEB 容器,里面包含从德意志联邦铁路的移动 WEB 页面收集的书签。
WhatsApp、Twitter、Instragram、谷歌 Plus、谷歌 Drive 等服务也碰到了相似的问题。大多东西我们都能复制,但是服务提供商不允许你这样做。例如 WhatsApp,如果你想获得授权,接入它的 API,必须支付一大笔钱(达到 7 位数),而且 WhatsApp 不允许别人开发可以运行的客户端 App。Instagram 封锁了 API,就连内置的 Instagram Scope 也不得不撤下。对于大多服务,谷歌甚至没有提供开放的 API。
原本想让项目变得开放、以社区来驱动,结果未能如愿
我知道,关于这个观点肯定有很大的争论,如果你不同意,那么请记住:这只是我自己的看法。我可能属于少数派。
照设想,面向移动设备的 Ubuntu 应该像“普通”Ubuntu 一样开放,但是事实并非如此。
——我们开发了一些东西,这些东西的源代码都在那里,放在某些地方,在 Launchpad 项目(不知道有多少)上扩散。
——内核源代码放在 GitHub,许多时候都过时了。
——所有专用 Android 驱动及其它内容的代码,只有一些 Canonical 员工才能看到。
——Canonical 和商务合作伙伴设立了一个 Launchpad 区域(完全私有),里面会在私密漏洞报告。许多时候,公开漏洞报告的链接会指向私密报告,这样一来,你只能看到一半的信息。
——大量数据会在无意之间泄露,主要通过 paste.ubuntu.com 泄露,关于即将到来的设备,许多信息通过搜索就能找到。
——当我们想了解即将到来的新功能时,经常会找到相似的 Launchpad 项目,这些项目早在几周或者几个月前就开始做了,以代号的形式进行,或者 Canonical 开发者已经私下开发了几个月。
——对于没有为 Canonical 工作的人来说,想了解它们做了什么、有何规划、你可以从哪里加入从哪里退出,真的有点难。
——如果你发现有些事情自己可以帮忙,想与 Canonical 开发者保持联系相当难。他们在工作日至少会工作 8 小时,但是你可没有 8 小时的闲暇时间,你的闲暇时间经常与他们的工作时间是不重叠的。
——用户和宽泛社区的愿望似乎对接下来要开发的功能、下一个 OTA 要做的事没有什么大的影响。许多时候,那些最热门的 Launchpad 漏洞报告、功能请求存在的时间最长。
FAQ
有些问题会被大家经常问到。
——为了做开发,你买了多少设备?
我买了两台新的 Nexus 7、两台旧 Nexus 4,三台新的 bq Aquaris E4.5,两台便宜的联发科手机(用于逆向工程),为 Ubuntu 做开发。我还从 Canonical 弄了一台 MX4 手机。我想我买了 7 台手机、2 台平板,花了 1000 多欧元。
——能估计一下你投入了多少时间吗?
可以。计算了一下,我发现,在长达 18 个月的时间里,我投入了 6 个人工月(一人一个月内完成的工作量),这样的工作量与 Canonical 聘请我、投入 30% 的兼职时间为他们工作差不多。
——你后悔投入这么多时间和精力吗?
不后悔。
——你什么时候开始怀疑项目会失败的?
如果记得没错,大概是 2015 年圣诞吧。当时项目的发展越来越不顺利,事情越来越清楚,我们不可能拥有完整的 WhatsApp、Twitter App,你开始看到,对于许多手机用户来说,再也没有什么真正重要的东西。Convergence 平板项目还在推行,但是拿到 bq Aquaris M10 平板的人并不多。
还记得我刚才说过吗,我曾开发过基本操作系统,因为在我想开发的 App 中,有一半没有办法开发。努力一年之后,我需要开发的 API 和系统服务没有一个完成的,我们还在与一些系统架构师争论:到底系统是不是应该拥有我们需要的所有东西。当你们的 APP 开发者告诉你,说他们需要一些东西,这样才能开发出很酷的 APP,你应该给他们一些东西,让架构师在可以预见的未来勉强度日。不必完美,但是相比开发者对你的需要,你更需要开发者。
——你是 2016 年年中离开的,比项目真正终结的时间早了很多。为什么?
我对软件开发的兴趣并不大。现在我将更多的闲暇时间留出来周游世界,摄影,制作糟糕的卡牌游戏、糟糕的漫画和糟糕的游戏。
另一方面,我觉得继续为项目工作无法再让我感到高兴。有时,坐在一台设备之前连续鼓捣 8 小时,我会想:“我做得不够好,这是我的错误。”既然用业余时间来工作,不应该这么无趣。