是什么讓 Ubuntu 選用 Qt 而不是 GTK?
一個正在發生的事實,Ubuntu正在不斷Qt化!
我曾一直在抱怨的Software Center,
今日一看源碼,竟然有softwarecenter/ui/qml的分支,
雖然跑起來還挺難看的樣子,但是可以想像未來是肯定要取代GTK版本了
我曾一直在抱怨的Software Center,
今日一看源碼,竟然有softwarecenter/ui/qml的分支,
雖然跑起來還挺難看的樣子,但是可以想像未來是肯定要取代GTK版本了
-------------------------------------------------------------------------------------
這是Mark Shuttleworth下的一盤大棋....
兩年前, Mark Shuttleworth 宣布Ubuntu要支持Qt程序,給出的理由是軟件的易用性和方便集成的能力,是提供最終用戶體驗的關鍵價值所在。Ubuntu不是因為Gtk多么"純粹", 多么牛B,多么性感才被選中的,Ubuntu選擇的是像OpenOffice, Firefox這樣體驗上佳的軟件,軟件的技術框架只是附加選擇。當初之所以選擇Gnome是因為在當時條件下, Gnome桌面和其軟件家族,在功能和系統體驗的一致性上很好,而GTK被選擇,則僅僅是Gnome使用了GTK,如此而已。
然后Mark給出選擇軟件框架的幾個要求和Qt入選的理由:
* is it free software? Qt支持商業, GPL和LGPL三種授權,特別是LGPL稱為決定性的勝出因素
* is it best-in-class? Qt在軟件質量,功能,API設計,文檔等方面廣受贊譽
* does it integrate with the system settings and preferences? 當時Qt在這方面還稍有欠缺,為此Canonical決定贊助 dconf - GNOME Wiki!這樣的軟件集成進Qt, 結果就是 dconf-qt in Launchpad
* does it integrate with other applications? 原文未說明,不過這對Qt程序沒什么問題,現在Qt和GTK基本上都統一到了D-BUS作為應用交互的系統總線了
* is it accessible to people who cannot use a mouse, or keyboard? Qt給出的答案是QtQuick QML
* does it look and feel consistent with the rest of the system? Qt Style, QML表示沒有壓力
那么,選擇Qt是否意味着Ubuntu要親近KDE而疏遠GNOME了呢?
Mark對前者給予斬釘截鐵地回答:No。 並且用整整一個段落來斬斷這種遐想,表面上給出的理由是,KDE並沒有集成像dconf-qt這樣的軟件包,而Ubuntu也無法或不想一個個去說服KDE的程序去集成進Ubuntu。而骨子里,其實Mark就是看不上KDE,隨后不久, Canonical宣布解雇全職開發Kunbutu唯一的一個雇員,然后Kunbutu被迫變為完全社區驅動的發行版就是一個很明顯的注解。
那么,看不上KDE這小三是不是就是因為愛GNOME這大老婆愛得深沉呢? 是才怪!雖然為了安撫GNOME社區,Mark用了另一個整段來說明選擇Qt不等於棄GNOME,當然了,一起生活了這么久,即使一下子想休也不是那么容易休掉的,要慢慢來嘛! GNOME、GTK推3.x, 咱先不跟了,Gnome shell再慢慢用Unity換掉,嗯,X11, Wayland都不合口味,也扔掉,上Mir.... 哇,這下有點玩大了,釜底抽薪靠什么支持上面的應用, 這是就需要Qt登場了,有了錘煉了好幾年的QPA系統抽象層,換底層架構就方便多了。
有了這些鋪墊,今年初當Canonical宣布她的Ubuntu Phone OS就水到渠成了,被選擇的,既不是GTK和GNOME,更加不是KDE,而是最為一個跨越桌面,平板和手持設備的整體系統解決方案的Qt框架,如果你曾經開發過Symbian,MeeGo的Qt程序,當你打開Ubuntu Phone OS的SDK時,你會覺得非常熟悉,沒錯,Canonical原封不動地把Qt Mobility, QtQuick和Qt其它基礎模塊一股腦地接了過來。Qt將成為Ubuntu未來地官方API, QML則是跨桌面,平板,手機的原生UI解決方案。
這是從Ubuntu的發展和Canonical公司的戰略角度來看Qt被選擇的背后動機, 如果單純的比較GTK和Qt的話,Qt在以下方面是勝出的(當然不是各個方面都是Qt好,GTK也有自己的優勢):
1. 靈活的許可證
要說這是最核心的,狗血的是,Qt當初不靈活的QPL許可證也是催生GNOME/GTK的最大原因,然而此一時彼一時,Qt一直在進步,先是商業+GPL, 后被Nokia加上LGPL, 已經成了最開放的開源項目之一,無論你是開源,閉源和商業開發者,都可以放心使用Qt。GTK是LGPL,可以被閉源程序使用,但是沒有真正的商業License,基本上除了雇程序員自給自足,找不到地方花錢買服務,這對很多項目其實很關鍵。
2. 社區活躍度
Qt核心活躍開發者基本上是GTK的4+倍, 代碼commits是GTK的5+倍 (2011年數據),隨着Nokia棄用Qt,2012-2013的統計有所下降,不過還是比GTK高一個數量級,大家可以看Ohloh的詳細統計數據
3.性能
其實傳統的Qt Widgets和GTK相比,性能上彼此彼此。不過QtQuick出現以后,Qt開始甩開GTK好幾條街,更確切的說,GTK社區沒有拿出相對應的解決方案。
4. 分辨率無關開發
QtQuick/QML對現代的移動,嵌入式觸摸設備的GUI開發是必不可少的。現在的顯示設備的另一個特點是,像素密度很大,而且不同設備像素密度差異也很大,即使是桌面平台,隨着retina的出現,也開始了DPI競賽。而GTK+不支持“分辨率無關”開發,這樣GTK寫出來的程序,在現在的智能手機上看起來就像屎堆上的一對蒼蠅... 當然Qt Widgets寫出來的也是一樣,這就體現出了QtQuick的優勢來。而據說,GTK+對此的計划是... GTK4.x再提供支持...... 這樣以來,估計用不了多久,連GTK桌面程序看起來也只能是渣渣了。
5. 可移植性
這也是Qt的王牌之一, 除了三大桌面外,Qt還支持幾乎所有主流智能手機操作系統(讓我們略過Windows Phone...), 剛剛發布的Qt 5.1已經嘗試支持Android和iOS平台,Qt 5.2將正式支持Android和iOS, 加上本就支持的 Symbian(dead), MeeGo(dead), Tizen, WebOS, BlackBerry/QNX, VxWorks, Ubuntu Phone OS, Sailfish OS。而GTK只能勉強支持三大桌面(Linux/Unix基本上只能X11, Framebuffer支持有限,EglFS完全不支持)。
6. 其它
qt-creator 已經漸漸地稱為了VS之外的最佳C/C++ IDE, Qt還有開源社區非常少見的優美豐富的文檔,Qt框架覆蓋廣泛,不僅僅限於GUI,就這點來說拿Qt和GTK比,其實有點委屈了Qt。
參考:
1. http://www.cs.uta.fi/~TKOPS407/sd-seminar-25-2-2009.pdf
2. Qt apps on Ubuntu Mark Shuttleworth
3. GTK vs Qt - WikiVS
4. http://dot.kde.org/2003/03/31/george-staikos-quick-cost-analysis-qt-vs-gtk
5. App ecosystem
6. The Qt 5 Open Source Project on Ohloh
7. The GTK+ Open Source Project on Ohloh
8. ubuntu touch
9. GTK+/Roadmap
兩年前, Mark Shuttleworth 宣布Ubuntu要支持Qt程序,給出的理由是軟件的易用性和方便集成的能力,是提供最終用戶體驗的關鍵價值所在。Ubuntu不是因為Gtk多么"純粹", 多么牛B,多么性感才被選中的,Ubuntu選擇的是像OpenOffice, Firefox這樣體驗上佳的軟件,軟件的技術框架只是附加選擇。當初之所以選擇Gnome是因為在當時條件下, Gnome桌面和其軟件家族,在功能和系統體驗的一致性上很好,而GTK被選擇,則僅僅是Gnome使用了GTK,如此而已。
然后Mark給出選擇軟件框架的幾個要求和Qt入選的理由:
* is it free software? Qt支持商業, GPL和LGPL三種授權,特別是LGPL稱為決定性的勝出因素
* is it best-in-class? Qt在軟件質量,功能,API設計,文檔等方面廣受贊譽
* does it integrate with the system settings and preferences? 當時Qt在這方面還稍有欠缺,為此Canonical決定贊助 dconf - GNOME Wiki!這樣的軟件集成進Qt, 結果就是 dconf-qt in Launchpad
* does it integrate with other applications? 原文未說明,不過這對Qt程序沒什么問題,現在Qt和GTK基本上都統一到了D-BUS作為應用交互的系統總線了
* is it accessible to people who cannot use a mouse, or keyboard? Qt給出的答案是QtQuick QML
* does it look and feel consistent with the rest of the system? Qt Style, QML表示沒有壓力
那么,選擇Qt是否意味着Ubuntu要親近KDE而疏遠GNOME了呢?
Mark對前者給予斬釘截鐵地回答:No。 並且用整整一個段落來斬斷這種遐想,表面上給出的理由是,KDE並沒有集成像dconf-qt這樣的軟件包,而Ubuntu也無法或不想一個個去說服KDE的程序去集成進Ubuntu。而骨子里,其實Mark就是看不上KDE,隨后不久, Canonical宣布解雇全職開發Kunbutu唯一的一個雇員,然后Kunbutu被迫變為完全社區驅動的發行版就是一個很明顯的注解。
那么,看不上KDE這小三是不是就是因為愛GNOME這大老婆愛得深沉呢? 是才怪!雖然為了安撫GNOME社區,Mark用了另一個整段來說明選擇Qt不等於棄GNOME,當然了,一起生活了這么久,即使一下子想休也不是那么容易休掉的,要慢慢來嘛! GNOME、GTK推3.x, 咱先不跟了,Gnome shell再慢慢用Unity換掉,嗯,X11, Wayland都不合口味,也扔掉,上Mir.... 哇,這下有點玩大了,釜底抽薪靠什么支持上面的應用, 這是就需要Qt登場了,有了錘煉了好幾年的QPA系統抽象層,換底層架構就方便多了。
有了這些鋪墊,今年初當Canonical宣布她的Ubuntu Phone OS就水到渠成了,被選擇的,既不是GTK和GNOME,更加不是KDE,而是最為一個跨越桌面,平板和手持設備的整體系統解決方案的Qt框架,如果你曾經開發過Symbian,MeeGo的Qt程序,當你打開Ubuntu Phone OS的SDK時,你會覺得非常熟悉,沒錯,Canonical原封不動地把Qt Mobility, QtQuick和Qt其它基礎模塊一股腦地接了過來。Qt將成為Ubuntu未來地官方API, QML則是跨桌面,平板,手機的原生UI解決方案。
這是從Ubuntu的發展和Canonical公司的戰略角度來看Qt被選擇的背后動機, 如果單純的比較GTK和Qt的話,Qt在以下方面是勝出的(當然不是各個方面都是Qt好,GTK也有自己的優勢):
1. 靈活的許可證
要說這是最核心的,狗血的是,Qt當初不靈活的QPL許可證也是催生GNOME/GTK的最大原因,然而此一時彼一時,Qt一直在進步,先是商業+GPL, 后被Nokia加上LGPL, 已經成了最開放的開源項目之一,無論你是開源,閉源和商業開發者,都可以放心使用Qt。GTK是LGPL,可以被閉源程序使用,但是沒有真正的商業License,基本上除了雇程序員自給自足,找不到地方花錢買服務,這對很多項目其實很關鍵。
2. 社區活躍度
Qt核心活躍開發者基本上是GTK的4+倍, 代碼commits是GTK的5+倍 (2011年數據),隨着Nokia棄用Qt,2012-2013的統計有所下降,不過還是比GTK高一個數量級,大家可以看Ohloh的詳細統計數據
3.性能
其實傳統的Qt Widgets和GTK相比,性能上彼此彼此。不過QtQuick出現以后,Qt開始甩開GTK好幾條街,更確切的說,GTK社區沒有拿出相對應的解決方案。
4. 分辨率無關開發
QtQuick/QML對現代的移動,嵌入式觸摸設備的GUI開發是必不可少的。現在的顯示設備的另一個特點是,像素密度很大,而且不同設備像素密度差異也很大,即使是桌面平台,隨着retina的出現,也開始了DPI競賽。而GTK+不支持“分辨率無關”開發,這樣GTK寫出來的程序,在現在的智能手機上看起來就像屎堆上的一對蒼蠅... 當然Qt Widgets寫出來的也是一樣,這就體現出了QtQuick的優勢來。而據說,GTK+對此的計划是... GTK4.x再提供支持...... 這樣以來,估計用不了多久,連GTK桌面程序看起來也只能是渣渣了。
5. 可移植性
這也是Qt的王牌之一, 除了三大桌面外,Qt還支持幾乎所有主流智能手機操作系統(讓我們略過Windows Phone...), 剛剛發布的Qt 5.1已經嘗試支持Android和iOS平台,Qt 5.2將正式支持Android和iOS, 加上本就支持的 Symbian(dead), MeeGo(dead), Tizen, WebOS, BlackBerry/QNX, VxWorks, Ubuntu Phone OS, Sailfish OS。而GTK只能勉強支持三大桌面(Linux/Unix基本上只能X11, Framebuffer支持有限,EglFS完全不支持)。
6. 其它
qt-creator 已經漸漸地稱為了VS之外的最佳C/C++ IDE, Qt還有開源社區非常少見的優美豐富的文檔,Qt框架覆蓋廣泛,不僅僅限於GUI,就這點來說拿Qt和GTK比,其實有點委屈了Qt。
參考:
1. http://www.cs.uta.fi/~TKOPS407/sd-seminar-25-2-2009.pdf
2. Qt apps on Ubuntu Mark Shuttleworth
3. GTK vs Qt - WikiVS
4. http://dot.kde.org/2003/03/31/george-staikos-quick-cost-analysis-qt-vs-gtk
5. App ecosystem
6. The Qt 5 Open Source Project on Ohloh
7. The GTK+ Open Source Project on Ohloh
8. ubuntu touch
9. GTK+/Roadmap
參考:http://www.zhihu.com/question/20153991