資深開發者:為什么Ubuntu移動操作系統會失敗?
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 小時,我會想:“我做得不夠好,這是我的錯誤。”既然用業余時間來工作,不應該這么無趣。