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 發現的話,可是要 走法律途徑 的。

org2c777a3" class="outline-2">

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-surfacemanager 、wam 這兩個項目,一個是用於 Wayland 的 Compositor (相當於 X11 的 Xserver + Window Manager),另外一個則是啟動 WebApp 時。用來控制程式的生命週期 (lifecycle) 的控制程式。

幸好,webOS OSE 使用的是自己以 Chromium 為基底移植的 Wayland 版本的 Chromium, 而非 LGPLv3 的 QtWebEngine ,因此假設你想要以 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 商業授權 你就什麼都不用煩惱了~