webOS OSE 研究筆記: webOS OSE 與 Qt5

在測試 webOS OSE (webOS Open Source Edition) 的時候,我注意到了 webOS OSE 的核心組件是採用 Qt5 製作的,搭配的版本是 Qt 5.6.3

那又怎樣? 實際上 Qt 5.6.3 這個 LTS (Long Term Support) 的版本在今年 (2019) 的 3 月已經停止支援了,因此必須要來說說這件事對我們這群玩家以及想將 webOS OSE 用在自己商品上的人的影響。

你必須要知道的 LGPLv3

實際上, Qt 5.6 是最後一版維持 LGPLv2/LGPLv3 雙重授權的版本,而 Qt 5.7 以上都已經是走 LGPLv3 授權 (扣掉一些商業組件是 GPLv3 外)

LGPLv2 和 LGPLv3 到底有怎樣的差異? 簡單來說,LGPLv3 多增加一個 允許使用者自行更換 lib 的選項,也就是你必須告訴你的使用者如何換掉這個系統上的 Qt lib, 或是如何升級它。

這件事情對於 B2C (Business to Consumer) 的產品而言可能影響不大,畢竟我們都知道消費者裡面總是會出現一些 怪胎 ,整天想改東改西做些 Hack。但是如果你不希望讓消費者更改系統內的東西,那你也不能走 LGPLv3 的方案。

如果今天你是把 webOS OSE 放在機台之類的商業產品,也就是走 B2B (Business to Business) 的模式,這就影響很大了,畢竟我們都不希望合作夥伴因為亂改東西,導致機台故障因而導致必須賠償的事情發生。

由於筆者並非法律相關人士,因此建議看一下 Using Qt under LGPLv3 這份簡報,以及閱讀 LGPLv3 的授權條款,來理解一下事情的嚴重性。

所以到底怎麼了?

實際上,根據 LG: Building webOS with Qt 這場 keynote 的訊息,LG 自己販賣的 webOS TV 已經遷移到 Qt 5.9 上 (商業授權或是 LGPLv3 還不清楚,但推測應該為商業授權)

但如果我們的系統以 webOS OSE 為基底,並販售 Embedded Linux based 的產品的話,就要注意授權這一塊啦,到目前為止,webOS OSE 因為內建的是 Qt 5.6.3 ,因此只要你符合 LGPLv2 的授權,以及 Qt 的規範就好了 (詳見: Using Qt under LGPLv3)

可是開源版本的 webOS OSE 一旦跟著遷移到 Qt 5.9 的話,就 真的要小心囉 ,畢竟如果那時候產品不是走 LGPLv3,也沒有買 Qt 的商業授權, 結果又被 Qt 背後的公司 The Qt Company 發現的話,可是要 走法律途徑 的。

webOS OSE 用了多少 Qt?

了解到了 Qt 5.6.3 是最後一版具有 LGPLv2/LGPLv3 雙重授權的版本後,我們來看看如果要替換掉 webOS OSE 內的 Qt-based 的程式,有哪些要改掉:

程式名稱 用途 重要性 抽出 Qt 難易度
luna-surfacemanager QtWayland Compositor 難,要重寫
qtwayland-webos webOS 和 QtWayland 相關的擴充組件    
qt-features-webos 一些和 Qt 連動的設定檔    
qml-webos-framework QML 相關組件    
qml-webos-components QML 相關組件    
qml-webos-bridge QML 相關組件    
maliit-framework-webos 虛擬鍵盤    
wam 控制 Web App 用的 Web Application Manager
ime-manager 負責處理 input event,和 maliit-framework 連動    
luna-syservice 處理和設定、時間相關的 Luna bus 服務

由於 webOS OSE 的設計哲學是,一些速度要求比較快的部份採用 Qt 來實做,因此如果打算將 Qt 拔除的話,至少要有辦法替代掉 luna-surfacemanagerwam 這兩個項目,一個是用於 Wayland 的 Compositor (相當於 X11 的 Xserver + Window Manager),另外一個則是啟動 WebApp 時。用來控制程式的生命週期 (lifecycle) 的控制程式。

幸好,webOS OSE 使用的是自己以 Chromium 為基底移植的 Wayland 版本的 Chromium, 而非 LGPLv3QtWebEngine ,因此假設你想要以 webOS OSE 為基礎,設計自己的產品的話,還是有辦法避免掉 Qt 的授權問題的。

結語

由於 Qt 5.6.3 已經停止支援了 ,也許 webOS OSE 某一天就會說要升級到 Qt 5.7 以上的版本才能使用,到時候以 webOS OSE 為基底的產品,如果沒有注意到 LGPLv3 授權的要求的話,可能要預先準備一筆敗訴時使用的賠償費用才行。

webOS OSE 用了多少 Qt? 這邊的觀察結果來看,也許我們用別的 toolkit, 比如 gtk 去換掉這些 Qt 相關的組件,那我們還是有辦法避免掉 webOS OSE 升級 Qt libs 所帶來的影響的。

當然,因為主導者是 LG ,因此這部份還是要後續觀察,或是 購買 Qt 商業授權 你就什麼都不用煩惱了~