跨平臺(tái)程序開(kāi)發(fā)框架QT發(fā)展簡(jiǎn)史
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
Qt 和 MFC 一樣古老,同屬于上世紀(jì)使用 C++ 開(kāi)發(fā) Windows 應(yīng)用程序的重要框架。只是自 1990 年代中期發(fā)布以來(lái),Qt 不斷發(fā)展,逐漸能夠支持廣泛的平臺(tái)和多種使用場(chǎng)景。如今,使用 Qt,開(kāi)發(fā)者只需編寫(xiě)一次代碼,即可在多個(gè)平臺(tái)上部署,包括 Windows、Linux、macOS 以及移動(dòng)平臺(tái)如 Android 和 iOS。并且 Qt 還提供豐富的庫(kù)和工具,支持 GUI 開(kāi)發(fā)、網(wǎng)絡(luò)連接、數(shù)據(jù)庫(kù)訪問(wèn)等功能,不僅適用于桌面應(yīng)用,還適用于嵌入式和物聯(lián)網(wǎng) (IoT) 開(kāi)發(fā)方面。QT 官網(wǎng)列出的典型客戶(hù)案例,主要是索尼機(jī)上娛樂(lè)系統(tǒng)、AMD 圖形軟件之類(lèi)。 雖然 Qt 在 C++ 社區(qū)中享有盛譽(yù),擁有強(qiáng)大的跨平臺(tái)能力、豐富的組件庫(kù)和靈活的架構(gòu),但始終未能走出小眾圈子。特別是在 Flutter、Electron 和 React Native 等跨平臺(tái)框架大行其道的今天,Qt 似乎已經(jīng)逐漸淡出了大眾的視野。 在各大技術(shù)論壇上,我們經(jīng)常能看到這樣的討論:“為什么沒(méi)有更多的桌面應(yīng)用選擇 Qt 開(kāi)發(fā)?”、“Qt 功能如此強(qiáng)大,為什么不夠流行?”甚至有人直接提出“Qt 快要死了嗎?”這樣的疑問(wèn)。就連 Qt 官方的技術(shù)論壇上也存在類(lèi)似的討論,可見(jiàn)開(kāi)發(fā)者對(duì) Qt 的未來(lái)發(fā)展充滿了疑慮。 QQ 選擇 Electron 而不是 Qt 開(kāi)發(fā)桌面應(yīng)用,也從側(cè)面反映出了 Qt 目前所面臨的困境。QQ 官方曾表示,選擇 Electron 的主要原因是考慮到人才儲(chǔ)備。在國(guó)內(nèi),熟練掌握 Qt 技術(shù)棧的開(kāi)發(fā)者相對(duì)較少,這無(wú)疑增加了開(kāi)發(fā)和維護(hù)成本。 Qt 誕生于 1991 年,由 Haavard Nord 和 Eirik Chambe-Eng 兩位挪威程序員共同開(kāi)發(fā)。他們因?qū)缙脚_(tái) GUI 開(kāi)發(fā)的需求,創(chuàng)立了 Qt。1992 年,他們引入了創(chuàng)新的“信號(hào)與槽”機(jī)制,為 Qt 奠定了基礎(chǔ)。 1994 年,他們正式成立公司,立志打造一個(gè)“世界最佳 C++ GUI 框架”。該公司最初名為 Quasar Technologies,后來(lái)更名為 Trolltech。然而,創(chuàng)業(yè)初期并不順利。作為兩個(gè)年輕的程序員,他們想要進(jìn)入一個(gè)已經(jīng)相對(duì)成熟的市場(chǎng),但面臨著客戶(hù)少、產(chǎn)品未完成、資金不足等困境。幸運(yùn)的是,他們的妻子都有工作,因此能夠在 Eirik 和 Haavard 預(yù)計(jì)開(kāi)發(fā)產(chǎn)品并開(kāi)始賺錢(qián)的兩年時(shí)間內(nèi)養(yǎng)活丈夫。 Qt 的命名頗有趣味:選擇字母“Q”作為類(lèi)前綴,因?yàn)檫@個(gè)字母在 Haavard 的 Emacs 字體中看起來(lái)很漂亮。添加“t”代表“toolkit”,靈感來(lái)自 Xt,即 X Toolkit。1995 年 5 月,Qt 首次公開(kāi)發(fā)布,并提供了商業(yè)和開(kāi)源兩種許可。同年,挪威公司 Metis 成為 Qt 的首個(gè)商業(yè)客戶(hù)。 1996 年,歐洲航天局也采用了 Qt,他們購(gòu)買(mǎi)了 10 個(gè)商業(yè)許可證,而 Matthias Ettrich 則使用 Qt 構(gòu)建了 KDE,這使得 Qt 成為 Linux 上 C++ GUI 開(kāi)發(fā)的事實(shí)標(biāo)準(zhǔn),為 Qt 的發(fā)展奠定了堅(jiān)實(shí)基礎(chǔ)。 2008 年初,意識(shí)到自研軟件平臺(tái)競(jìng)爭(zhēng)力不足的諾基亞,以 1.53 億英鎊收購(gòu)了 Trolltech,并將其 C++ 框架作為其開(kāi)發(fā)者戰(zhàn)略的核心。彼時(shí),諾基亞的軟件平臺(tái)在用戶(hù)體驗(yàn)上已明顯落后于蘋(píng)果和谷歌。其界面設(shè)計(jì)老舊,操作繁瑣,與競(jìng)爭(zhēng)對(duì)手的簡(jiǎn)潔直觀形成了鮮明對(duì)比。而 Qt 已用于構(gòu)建成功的消費(fèi)軟件產(chǎn)品,如 Google Earth 和 Skype 客戶(hù)端,因此這是一筆不錯(cuò)的生意。 諾基亞的管理層希望通過(guò)引入 Qt,為開(kāi)發(fā)者提供一個(gè)更現(xiàn)代、更靈活的開(kāi)發(fā)平臺(tái),以提升其軟件的競(jìng)爭(zhēng)力。Qt 作為一款成熟的 C++ 框架,具有強(qiáng)大的跨平臺(tái)能力和豐富的功能,Qt 也沒(méi)有固定的外觀和風(fēng)格,這給了諾基亞很大的定制空間。 Trolltech 團(tuán)隊(duì)在 Symbian 平臺(tái)上引入了 Qt,并對(duì)用戶(hù)界面進(jìn)行了現(xiàn)代化改造。他們認(rèn)為,簡(jiǎn)單地對(duì)舊界面進(jìn)行修補(bǔ)是毫無(wú)意義的,只有全新的設(shè)計(jì)才能滿足用戶(hù)不斷變化的需求。 另一方面,諾基亞內(nèi)部存在著激烈的競(jìng)爭(zhēng),不同團(tuán)隊(duì)之間缺乏協(xié)作,導(dǎo)致了資源的浪費(fèi)和重復(fù)開(kāi)發(fā)。這種內(nèi)部競(jìng)爭(zhēng)的文化,源于諾基亞 2004 年的一項(xiàng)重組,旨在避免官僚主義的形成。然而,這種做法卻導(dǎo)致了多個(gè)相互競(jìng)爭(zhēng)的 UI 框架的出現(xiàn),包括 Symbian 原有框架團(tuán)隊(duì)設(shè)計(jì)的名為 Orbit 的項(xiàng)目,以及 Linux 團(tuán)隊(duì)開(kāi)發(fā)稱(chēng)為 libdui 或 Direct UI 的框架。 Qt 框架原本被視為統(tǒng)一諾基亞設(shè)備開(kāi)發(fā)的工具,但工程師們卻開(kāi)發(fā)了兩個(gè)不兼容的 UI API。這嚴(yán)重影響了源代碼的兼容性,導(dǎo)致開(kāi)發(fā)效率低下。諾基亞管理層似乎并未意識(shí)到這一問(wèn)題的嚴(yán)重性,繼續(xù)支持這兩個(gè)并行的 UI 項(xiàng)目。經(jīng)驗(yàn)豐富的 Epoc 開(kāi)發(fā)者 Sander van der Wal 對(duì)此感到非常失望,他指出諾基亞再次犯了碎片化 API 的錯(cuò)誤。 2010 年諾基亞換了一位新 CEO,他很快就認(rèn)定 Qt 不足以為諾基亞贏回開(kāi)發(fā)者或客戶(hù),并果斷地取消了 Orbit 和 Linux 團(tuán)隊(duì)的 DirectUI 項(xiàng)目。 然而,在這些內(nèi)耗的過(guò)程中,Symbian UI 的現(xiàn)代化工作被嚴(yán)重耽誤。諾基亞的產(chǎn)品設(shè)計(jì)師仍然不得不與一個(gè)過(guò)時(shí)的、用戶(hù)體驗(yàn)糟糕的界面打交道。 知情人士曾評(píng)價(jià)諾基亞的失敗是因?yàn)椤霸跓o(wú)效的用戶(hù)界面上浪費(fèi)了 2000 人年”:擁有 Linux 和 Symbian 兩個(gè)平臺(tái)后,80% 的代碼無(wú)需更改即可讓諾基亞重獲競(jìng)爭(zhēng)力。而 Symbian 的代碼已經(jīng)投入了數(shù)千人年的開(kāi)發(fā),只有前 20% 的代碼(最多)需要更新。然而,諾基亞未能實(shí)現(xiàn)這一點(diǎn)。正所謂“因缺少一顆釘子,整個(gè)王國(guó)都消失了”。 隨著蘋(píng)果和 Android 在市場(chǎng)上獨(dú)占鰲頭,Qt 對(duì)諾基亞來(lái)說(shuō)也就變得毫無(wú)意義了。2012 年,諾基亞正式放棄了這項(xiàng)技術(shù),Qt 被無(wú)情地“轉(zhuǎn)手”給了 Digia。諾基亞放棄 Qt 之后,人們對(duì)該平臺(tái)的信心一直在逐漸減弱。 從 Trolltech 到諾基亞,再到 Digia,應(yīng)用框架 Qt 的發(fā)展歷程充滿波折,盡管它始終在開(kāi)發(fā)者中保有擁躉。2014 年,Qt 從 Digia 分離出來(lái)成立了一個(gè)獨(dú)立子公司,專(zhuān)注于將商業(yè)版和開(kāi)源版 Qt 重新對(duì)齊。 事實(shí)上,Qt 從第一天起就有兩種許可證:商業(yè)開(kāi)發(fā)需要商業(yè)許可證,而開(kāi)源開(kāi)發(fā)則提供免費(fèi)軟件版本。 其許可證多次變更,最終在 2022 年形成了一套很復(fù)雜的許可方式:商業(yè)開(kāi)發(fā)者在購(gòu)買(mǎi) Qt 框架及相關(guān)工具時(shí),可以在應(yīng)用程序開(kāi)發(fā)和設(shè)備創(chuàng)建兩類(lèi)許可中進(jìn)行選擇。這些版本在提供的功能數(shù)量、工具支持以及部署目標(biāo)方面有所不同。價(jià)格從每月 302 美元起(僅適用于選擇一年預(yù)付的用戶(hù)),適用于專(zhuān)業(yè)應(yīng)用程序開(kāi)發(fā)許可;企業(yè)版則起價(jià) 329 美元,現(xiàn)有的 Qt 應(yīng)用程序開(kāi)發(fā)許可將自動(dòng)轉(zhuǎn)換為此企業(yè)版。 其許可也是導(dǎo)致 Qt 不夠流行的原因之一。 在 2000 年以前,Qt 的許可證并不友好于開(kāi)源軟件開(kāi)發(fā)。這在當(dāng)時(shí)導(dǎo)致許多注重開(kāi)源的人士拒絕使用 Qt。這也正是 GNOME 桌面環(huán)境誕生的部分原因。直到 2005 年,Qt 才允許開(kāi)發(fā)適用于 Windows 的免費(fèi)軟件。因此,許多早于這些年份啟動(dòng)的開(kāi)源項(xiàng)目無(wú)法采用 Qt 進(jìn)行開(kāi)發(fā)。對(duì)于商業(yè)軟件開(kāi)發(fā),則需要支付許可費(fèi)用。 另外,一些應(yīng)用程序的許可要求與 GPL、LGPL 或 Qt 的商業(yè)許可不兼容。GPL 不適用于商業(yè)軟件,LGPL 不適用于靜態(tài)鏈接軟件,而商業(yè)許可需要花錢(qián)——許多人都不愿意花錢(qián)。 截圖來(lái)源:https://news.ycombinator.com/item?id=14068652 截圖來(lái)源:https://www.v2ex.com/t/1023458 在社交平臺(tái)咨詢(xún) Qt 許可模式的不在少數(shù)。近期,還有開(kāi)發(fā)者在使用 Qt 開(kāi)發(fā)軟件后收到了 Qt 代理商的告知函,稱(chēng)其可能侵權(quán)。盡管開(kāi)發(fā)者僅是動(dòng)態(tài)鏈接了 Qt 的核心庫(kù)和控件庫(kù),并未修改源代碼,但仍感到困惑。這是因?yàn)?Qt 使用了 LGPL 許可證,該許可證的條款相對(duì)復(fù)雜,尤其是關(guān)于修改源代碼和開(kāi)源方面的規(guī)定,讓開(kāi)發(fā)者難以完全理解。此外,國(guó)內(nèi)外 Qt 授權(quán)的差異,以及代理商的告知函,加劇了開(kāi)發(fā)者對(duì) Qt 商用許可的困惑。 社區(qū)中對(duì)此也存在諸多爭(zhēng)議,一些開(kāi)發(fā)者建議避免使用 Qt,而另一些開(kāi)發(fā)者則建議在軟件中明確標(biāo)明使用了 LGPL 協(xié)議。 總的來(lái)說(shuō),Qt 的商業(yè)化應(yīng)用涉及到復(fù)雜的法律問(wèn)題,開(kāi)發(fā)者在使用 Qt 進(jìn)行商業(yè)開(kāi)發(fā)時(shí),務(wù)必謹(jǐn)慎對(duì)待,并尋求專(zhuān)業(yè)的法律建議。 參考鏈接: https://www.zhihu.com/question/3360014967 https://www.zhihu.com/question/2731975763 https://www.infoq.cn/article/99suibztx2be1fwvqjwg https://doc.qt.io/qt-5/licensing.html https://doc.qt.io/qt-5/licenses-used-in-qt.html https://www.theregister.com/2011/03/10/nokia_ui_saga/?page=3 https://www.theregister.com/2011/03/07/nokia_qt_bye/ https://www.theregister.com/2012/08/29/qt_android/ https://rtime.felk.cvut.cz/osp/prednasky/gui/the-qt-story/ https://softwareengineering.stackexchange.com/questions/88685/why-arent-more-desktop-apps-written-with-qt https://devclass.com/2022/02/02/qt-company-commercial-license-change/ https://news.ycombinator.com/item?id=14068652 該文章在 2024/11/11 10:53:36 編輯過(guò) |
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)... |