著名的自由軟件圣戰- “KDE/QT .VS. Gnome/Gtk”

在 Unix 的圖形界面一向是以 MIT 的 X Window 系統為標準, 可是在商業應用上有兩大流派,一派是以 Sun 公司領導的 Openlook 陣營,一派是 IBM/HP 領導的OSF (Open Software Foundation) 的 Motif, 雙方經過多年競爭之后, Motif 最終勝出,成為最普遍使用的界面庫, 后來雙方又妥協出一個 CDE(Common Desktop Enviroment) 作為一個標準的圖形界面。 但是 Motif/CDER 的價格非常昂貴,在這同時微軟的 Windows 圖 形界面發展速度非常快,而 Unix 界的后起之秀 Linux 也急需一個可靠并且免費的圖形界面。
1996 年 10 月,由開發圖形排版工具Lyx的德國人 Matthias Ettrich 發起了 KDE 計劃。 KDE 的全稱為 K Desktop Environment,可以看出是針對 CDE。 KDE 本身 是采用 GPL 宣言的,但是 KDE 卻是使用 Qt 來作為其底層庫,因為當時 Qt 已經將其 Unix 版本自由發布了,但是 Qt 并不遵循 GPL, 因此 KDE 被很多自由軟件的作者攻擊,認為利用非自 由軟件開發違背了 GPL 的精神,于是 GNU 的狂熱信徒兵分兩路,一路是去制作 Harmonny,試圖重寫一套兼容于 Qt 的替代品,另一路是由一個 26 歲的墨西哥程序員 Miguel De Icaza 領導 下重新開發一套叫 GNOME(GNU Network Object Enviroment)來替代 KDE。 feedom.net
由于 Linux 界的老大 RedHat 不喜歡 KDE/Qt 的版權,因此 RedHat 甚至專門派出了幾個全職程序員來加入 GNOME 進行開發工作,于是一場同 Motif VS Openlook 相似的圣戰就這么打起來了。 Trolltech 為了 KDE 曾數次修改 Qt 的版權,從成立 KDE Free Qt 基 金會到采用 QPL,可謂是費盡心機,但是 GNOME 采用的 GTK 一開始就是完全的 GPL,因此在這個方 面 GNOME 有一定的優勢,加上 Qt/KDE 采用 C++ 開發,入門的門檻比較高,而 GTK/Gnome 采用 C, 因此 GNOME 吸引了更多的自由軟件開發者,但是 KDE 畢竟先走了一步, 推出的 KDE1.1.2 十分穩定, 而當時急忙中推出的 GNOME1.0 的系統穩定性奇差,有人甚至笑稱 GNOME1.0 還沒有 KDE 1.0 Alpha 穩定。但是 GNOME 后來發展比較快,大有迎頭趕上的勢頭。當時雙方的開發者在網絡 上炒得天翻地覆,連 Linux 之父 Linus 只是說了一句喜歡用 KDE 都倍受指責。
戰爭到了第三個年頭,也就是2000年,可謂是風云突變,一個接一個重大的事件先后發生: 首先是一批從 Apple 公司出來的工程師成立了一個叫 Eazel 的公司替 GNOME 設計界面,然后是一批 GNOME 程序員成立了一個 Helix Code 公司替 GNOME 提供商業支持,而大家期待以久的 KDE 2.0 也終于發布了,這恐怕是目前最為龐大的自由 軟件了之一, 除了 KDE 本身,還包括 Koffice 套件,和集成開發環境 Kdevelop 等等大批軟件,其主力軟件 Kounqueror 也是第一個可以同微軟的 Internet Exploer 相抗衡的瀏覽器。 而 Sun 公司,Red Hat 公司, Eazel 公司,Helix Code 等一批公司成立了一個GNOME 基金會, Sun 還宣布將把重量級辦公軟件 Star office 同 GNOME 集成, Trolltech 公司自然不能坐以 待斃,于今年 10 月 4 日將 Qt 的 free edition 變為 GPL 宣言,徹底解決了 KDE 的版權問題, 又推出了嵌入式 Qt ,給了 GNOME 陣營一個有力的回擊。
到現在為止,這場戰爭還在繼續,相信我們不能很快看到結果。一般說來, 目前 GNOME 吸引的公司比較多,但是 KDE/Qt 的開發的效率和質量比 GNOME 高,而且在 Office/嵌入式 環境中先走一步,在一定時間內還將處于優勢地位。
那么對于用戶來說,如何在 Qt/GTK 中作出選擇呢?一般來說,如果用戶使用 C++,對庫的穩定性,健壯性要求比較高,并且希望跨平臺開發的話,那么使用 Qt 是較好的選擇, 但是值得注意的是,雖然 Qt 的 Free Edition 采用了 GPL 宣言,但是如果你開發 Windows 上的 Qt 軟件或者是 Unix 上的商業軟件,還是需要向 Trolltech 公司支付版權費用的。

轉載于:https://www.cnblogs.com/cpx3216/archive/2010/04/08/1938086.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379291.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379291.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379291.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

匯編語言-019(匯編程序與c\c++相互調用)

1:在C程序中使用__asm塊插入匯編代碼程序(不能用LENGTHOF與SIZEOF運算符,而是LENGTH和SIZE) struct Package {long originZip; //4long destinationzip;//4float shippingPrice; //4 };int main(int argcount,char* args[]) {c…

kotlin 判斷數字_Kotlin程序檢查數字是偶數還是奇數

kotlin 判斷數字Given a number N, we have to check whether it is EVEN or ODD. 給定數字N ,我們必須檢查它是偶數還是奇數 。 Example: 例: Input:N 13Output:"ODD"Input:N 24Output:"EVEN"程序在Kotlin檢查偶數或奇數 (Prog…

微機原理與接口技術(第2版)考點

第一章 1,微型計算機的特點: 功能強、可靠性高價格低廉系統設計靈活,適應性強體積小,重量輕,維護方便 2,微型計算機的硬件組成 微處理器內存儲器I/O接口電路I/O設備系統總線 3,微機的工作過…

搜狗面試筆試一面二面全經歷

09.25 華科西十二教,搜狗招聘筆試: C搜索引擎研發。同時有威盛、烽火兩家筆試,就沒有去。 09.26 華科校內某酒店,搜狗一面: 筆試做的不錯,客觀題錯了3.5(20個),后兩個算法…

UltraEdit語法高亮

語法加亮分支位于配置-編輯器顯示之下,允許用戶配置語法加亮選項:語法加亮可以識別預定詞語,并用不同顏色顯示它們。該功能對于程序員來說尤其有用,并且對那些想用不同顏色顯示文檔中詞語的用戶也非常有用。提供二十種…

線性代數 向量長度_用戶定義長度的向量| 使用Python的線性代數

線性代數 向量長度Prerequisite: Defining a vector 先決條件: 定義向量 Linear algebra is the branch of mathematics concerning linear equations by using vector spaces and through matrices. In other words, a vector is a matrix in n-dimensional space…

順序表(代碼、分析、匯編)

目錄:代碼:分析:匯編:代碼: SeqList.h #ifndef _SEQLIST_H_ #define _SEQLIST_H_ typedef void SeqList; //定義鏈表數據類型,void因為要適用不同鏈表數據類型 typedef void SeqListNode; //定義鏈表節…

設有兩個16位整數變量A和B,試編寫完成下述操作的程序。

設有兩個16位整數變量A和B,試編寫完成下述操作的程序。 (1)若有兩個數中一個是奇數,則將奇數存入A中,偶數存入B中。 (2)若兩個數均為奇數,則兩數分別減1,并存回原變量中…

棋牌游戲服務器架構: 詳細設計(三) 數據庫設計

主要有3類Database: ServerInfoDB,UserInfoDB和GameDB。 ServerInfoDB主要存儲的是游戲列表的信息,UserInfoDB存儲玩家的全局信息,而GameDB就是積分以及積分變化情況。下面分別加以描述。 1. ServerInfoDB ServerInfoDB主要存儲游戲列表信息。主要有以下幾個表: 1. …

程序開發與性格特征

程序開發與性格特征 引言: 程序員給很多人的印象一般是不善于交際、表情嚴肅、思維緊密、做事認真、沉著冷靜等等。那么這些特征到底和程序開發有沒有關系呢?不同性格的人在團隊開發當中將面臨什么樣的問題以及不同性格的人在團隊開發中又將發揮著什么樣…

匯編語言編寫程序從1加到100要求使用循環結構。

匯編語言編寫程序從1加到100要求使用循環結構。 匯編思路:AX用于存放每次累加的結果—>09998…0 首先,DATA段中定義SUM用來存放結果和,STACK段定義一個200DB類型空間,用來存放數據。CODE段,AX清0,CX賦值…

c語言指針++_C ++此指針| 查找輸出程序| 套裝3

c語言指針Program 1: 程序1&#xff1a; #include <iostream>using namespace std;class Test {int VAL;public:Test(int v){VAL v;}Test* Sum(Test T1, Test T2){VAL T1.VAL T2.VAL;return this;}void print(){cout << VAL << " ";}};int mai…

線性表(代碼、分析、匯編)

目錄&#xff1a;代碼&#xff1a;分析&#xff1a;匯編&#xff1a;代碼&#xff1a; LinkList.h #ifndef _LINKLIST_H_ #define _LINKLIST_H_typedef void LinkList; //定義線性表類型 typedef struct _tag_LinkListNode LinkListNode;//定義線性表節點類型 struct _tag_Li…

WPF 操作 richTextBox

FROM:http://blog.csdn.net/wuzhengqing1/article/details/7010902 取出richTextBox里面的內容 第一種方法&#xff1a; 將richTextBox的內容以字符串的形式取出 string xw System.Windows.Markup.XamlWriter.Save(richTextBox.Document); 第二種方法&#xff1a;將richTe…

微軟企業庫4.1學習筆記(八)創建對象 續集2

3.3通過配置指定和Unity的整合 另外一種方法是在配置源中指定配置的需要&#xff0c;你可以指定下面的一條或者多條&#xff1a; 你可以在Unity配置中指定想要的BlockExtensions  你可以在Unity配置中的type配置節指定如何創建企業庫對象&#xff0c;指定類型映射的關系&…

已知有幾個數據存放在BUF為首址的字節存儲區中,試統計其中正數的個數,并將結果存入ZNUM單元中。

已知有幾個數據存放在BUF為首址的字節存儲區中&#xff0c;試統計其中正數的個數&#xff0c;并將結果存入ZNUM單元中。 P160 例4.17 匯編思路&#xff1a;DATA段&#xff0c;定義BUF存儲區&#xff0c;定義一下DB類型的數據&#xff0c;N為定義數據的總個數&#xff0c;ZNUM…

靜態鏈表(代碼、分析、匯編)

目錄&#xff1a;代碼&#xff1a;分析&#xff1a;匯編&#xff1a;代碼&#xff1a; StaticList.h #ifndef _STATICLIST_H_ #define _STATICLIST_H_typedef void StaticList; //空類型靜態表類型可以接收任何類型的靜態表類型 typedef void StaticListNode;//空類型節點類型…

c語言 typedef_C Typedef-能力傾向問題與解答

c語言 typedefC programming Typedef Aptitude Questions and Answers: In this section you will find C Aptitude Questions and Answers on typedef topics, defining/changing name of any data type, using and accessing the typedef values. C編程Typedef Aptitude問答&…

ios程序 調試log宏的添加

#ifdef DEBUG # define LOG(...) NSLog(__VA_ARGS__) # define LOG_CURRENT_METHOD NSLog("%-%", NSStringFromClass([self class]), NSStringFromSelector(_cmd)) #else # define LOG(...) ; # define LOG_CURRENT_METHOD ; #endif 使用 LOG_CURRENT_METHOD; NS…

Python的線程池實現

代碼 1 #coding:utf-82 3 #Python的線程池實現4 5 importQueue6 importthreading7 importsys8 importtime9 importurllib10 11 #替我們工作的線程池中的線程12 classMyThread(threading.Thread):13 def__init__(self, workQueue, resultQueue,timeout30, **kwargs):14 threadin…