2008年10月22日星期三

(转) UML中文FAQ

(转) UML中文FAQ (OO) (UML)
V1.0 张恂 2003年10月29日

编者按:
一直很难找到中文的、适合国人看的UML FAQ,而英文的UML FAQ往往散落于各处不易收集和消化,导致很多看似简单却很基本、很关键的问题在网络论坛、BBS上被反复地提出,既浪费了提问者、解答者不少的时间和精力,也给大家学习总结、进一步提高带来了困难。于是,结合自己的所学所想试着编写了一个UML中文FAQ供各位参考。众人拾柴火焰高,有什么不足之处,欢迎大家多多提出宝贵意见,不断补充,一起来完善!
联系邮箱:zhangxun2001@hotmail.com

什么是UML?
UML有哪些特点?
UML有什么用?
UML不能做什么?
为什么要学习和掌握UML?
什么情况下不需要或不适合用UML?
什么情况下应该用UML?
促进UML普及和应用对于加强我国软件业的实力有什么重要意义?
UML的统一性表现在哪些方面?
UML是如何诞生的?
UML是一家之言,或少数派的观点吗?
UML之父是谁?
UML标准有哪些最新进展?
初学者如何开始学习UML?
世界上有哪些著名的公司、组织参与了UML标准的制订?

什么是UML?

Unified Modeling Language(统一建模语言)是国际对象管理组织OMG制定的一个通用的、可视化建模语言标准,可以用来描述(specify)、可视化(visualize)、构造(construct)和记载(document)软件密集型系统的各种工件(artifacts,又译制品)。

UML有哪些特点?
UML的"通用性"主要是指不仅仅可以用它来描述软件,而且还可以用它来描述一般企业或组织的业务流程以及由软、硬件共同组成、以软件为主的复杂系统(即所谓的软件密集型系统),甚至还包括非软件系统。

UML的"可视性"是指可以通过UML一系列的图形符号,组成多种视图(view)来直观、清晰地表达系统分析设计中方方面面的、许多复杂的概念。UML主要是为了人的阅读和使用而设计的,所以它采用了半形式化的,易于人们理解、交流的形式。

UML是一种分析设计专用的建模语言,它本身不是编程(programming)语言,不能直接用来生成可执行的软件。UML是一种抽象层次比C、C++、Java、VB、Delphi等文本高级语言更高的图形语言,通过它我们可以抽象地表示用高级编程语言编写的文本程序的逻辑结构和行为。相比传统的高级编程语言,UML能够更加高效、准确地反映软件设计的方案和思路,是真正用来"设计程序"(design programs)的语言。从这个意义上看,不妨称UML为"甚高级"程序设计语言。

UML基本上不能算作全新的发明,它并非学者教授、科研机构的研究成果,而是直接来自于产业界、工程界的实践总结,是在归纳基础上进行理论升华的产物,其核心内容反映了30多年来全球软件工业的领导者在软件设计构造领域的最佳实践和成功经验,因而具有很高的实用价值。

实践证明,OO分析设计(OOAD)方法比传统方法能更加准确、全面地描述现实世界。UML是用来表述OO概念的一种语言工具,而很奇妙,它本身作为一件产品同样也是用OO方法来设计的,这使得UML具有传统建模语言所不具备的很强的语义表达能力和非常灵活的可扩展性。

UML有什么用?

UML的用途非常广泛,可以概括为"描述、可视化、构造、记载"4种基本功能,在业务建模、需求分析、系统设计、实现和测试、数据建模、项目管理等阶段任务中均可根据需要采用。

UML建模是建立软件开发文档的一个有效手段,通过UML可视化地描述系统需求,记载软件构成,能够显著地提高文档的质量和可读性,减少编写文档的工作量。

UML实质上是一种系统分析设计专用语言,通过可视化的图形符号结合文字说明或标记可以帮助业务/系统分析员、软件架构师/设计师、程序员等各种建模者有效地描述复杂软件(或业务)的静态结构和动态行为,包括工作流(数据流和控制流)、功能需求、结构元素及关系、架构组成、设计模式、对象协作、事件响应和状态变化等等。

UML不能做什么?
UML不是高度形式化的语言,一般不能用于定理证明。
UML是基于OO方法的通用建模语言,不适合用户图形界面设计、超大规模集成电路(VLSI)设计、基于规则的人工智能等专业领域。
UML是一种离散型建模语言,适合对由软件、固件或数字逻辑构成的离散系统建模,不适合对工程和物理学领域中的连续系统建模。
本身作为语言,UML仅仅是一种表达形式,不是建模方法,在实际的软件项目开发中仅仅掌握一套标准的图形符号是远远不够的。用好UML首先需要掌握OOAD的基本原则和方法,并在一定的软件开发过程(如UP/RUP、XP等)的指导下进行有取舍的运用。

为什么要学习和掌握UML?

首先,UML对于当前大多数希望进一步改进质量的软件开发团队来说是必不可少或必须的。为什么这样说呢?因为,C++、Java等源码并不能直观、方便地反映复杂程序的设计:如内部逻辑结构、各种隐含的依赖关系、运行时的状态改变和特殊行为等等。写好的代码仅仅是一种实现方式,很难反映出现象背后的真实本质――设计,因此对于大多数稍稍复杂点的项目来说,仅有代码是不够的。

可视化建模历来是一种成功的工程实践做法,并非软件行业所特有。软件的设计方案在用C++、Java实现之前通常隐藏在人们的头脑当中,而设计正确与否是决定软件质量好坏的要害,一个前提是必须用适当的方式把它表达出来。通过程序代码来表达、讨论、评估和选择复杂软件的设计往往是很笨拙的,这一表达

方式的空欠唯有通过类似UML的建模语言来填补。

其次,OO方法是当代主流的软件开发技术。世界先进的软件团队和个人早已摆脱了对如何使用具体的平台API、个别编程语言特性的纠缠,而把更多的精力放在了需求、架构、设计机制和模式等对软件质量有重大影响的核心要素――分析与设计上。UML作为OO建模语言的事实上标准和主要的表达媒介,在这些场合能发挥关键的作用。所以,熟练地掌握并运用好UML是当今系统分析员、架构师/设计师以及程序员等软件工程师所必备的一项基本技能。

什么情况下不需要或不适合用UML?

对于一个特定的软件公司或开发团队,在下列情况下建议不采用UML:
1)传统的做法已完全适用,对OOAD的要求也不高,项目非常成功,无任何改进的必要;
2)开发的系统比较简单,直接用源码配上少量的文字就能解决问题,软件开发文档也无需添加图形来辅助说明;
3)开发人员更习惯于直接阅读源码,用源码交流,这样做不影响工作效率和质量;
4)开发的系统本身不属于OO方法、UML适用范围。

什么情况下应该用UML?

对于一个特定的软件公司或开发团队,在下列情况下建议采用UML:
1)OO方法是项目决定采用的方法论,是整个项目或产品成功的关键;
2)开发人员感觉用源码说明不了真正的问题,希望利用可视化建模语言简化文档,提高交流的效率,准确抓住问题的本质;
3)系统的规模和设计都比较复杂,需要用图形抽象地表达复杂的概念,增强设计的灵活性、可读性和可理解性,以便暴露深层次的设计问题,降低开发风险;
4)公司希望记录已成功项目、产品的公共设计方案,在开发新项目时可以参考、重用过去的设计,节省投入,提高成功率。
促进UML普及和应用对于加强我国软件业的实力有什么重要意义?

OO方法自上世纪80年代以来已经成为软件开发的主流技术,标准OO建模语言UML的问世说明OO技术的发展达到了一个新的高峰。推广普及UML的应用可以使我国软件开发人员、软件企业和客户乃至整个行业都从中获益:
1)个人
UML相关知识体系蕴含了非常丰富的当代软件工程先进知识。软件开发人员通过学习和掌握UML概念、表示法及相关的软件过程、软件工程技术,能够加深对OOAD原则、方法的理解,提高抽象思维能力,从而站在更高的层次上分析问题、解决问题,这是一条快速提高个人软件设计能力的有效途径。
2)企业
对软件企业内部,用好UML,不但能直接提升企业的软件设计开发能力,而且由于UML能形象直观地记录软件设计的核心思想,可以使软件开发管理透明
化,促进企业知识资产的保护和增值,促进软件重用和整体效益的提升。对外,由于UML是通行的软件行业国际标准,企业在业务交往中有效运用UML,无论对于开拓国内外产品市场还是保障工程承接、项目外包等业务的顺利开展都大有裨益。
3)行业
积极采用国际通行的软件描述和设计语言UML,一方面能增加信息透明度,显著降低软件企业之间、客户与开发商之间的沟通成本,减少项目失败的风险,另一方面能促进行业市场的规范化和标准化,增进国际技术交流,整体提高我国软件业的技术水平和参与国际市场竞争的能力。据悉,与UML有关的国家级标准目前正在考虑制定过程当中。

UML的统一性表现在哪些方面?

UML的统一性至少表现在以下几个方面:
1)随着OO技术的蓬勃发展,到上世纪90年代初OO方法已经多达50余种,它们之间既有很多共通之处也存在许多没有必要的细节差异,这妨碍了技术进步,不利于产业的发展。UML统一了多种互补的、最具代表性、最受业界欢迎的主流OO方法,这既是历史的必然,也OO方法成熟的一个重要标志。UML及与其配套的OO统一过程(RUP)在实现"合并同类项"的基础上又向前迈出了一大步,不愧为当代OO建模方法的集大成者。
2)UML适用于各个行业的信息化工程,包括电信、银行、保险、税务、办公自动化、电力、电子、国防、航天航空、制造、工业自动化、医疗、交通、商业、电子商务等诸多领域的业务建模和软件分析设计,尤其适合对大中型、复杂、分布式应用系统或软件产品建模,在这些广泛的领域中都可以统一使用一套标准的建模语言。
3)作为一种独立于具体实现的、抽象的表述方式,UML广泛地适用于各种现代程序设计语言、数据库和开发平台。
4)有了UML标准,面向各种不同的软件开发方法和过程(如重载/轻载,瀑布式/迭代递增式),在软件开发生命周期各个阶段的工作(如业务建模、需求分析、设计、实现、测试)中,都可以采用一套统一的概念和表示法,避免了语言转换的麻烦。
5)UML明确定义了一套公共的内部概念,建立了统一的关于建模语言的元模型,反映了在软件和信息建模技术领域的最新成果。

UML是如何诞生的?

识时务者为俊杰。为了突破上世纪90年代初OO方法论混战的局面,1994年杰出的Rational公司OO大师Grady Booch邀请通用电气公司著名OO大师James Rumbaugh博士加盟Rational,启动了OO方法的统一历程。他们于1995年发表了"统一方法0.8"。与此同时,另一位超一流OO大师、爱立信公司的Ivar Jacobson博士也在该年加入了二人的行列。

1996年,3人正式把他们的统一成果命名为"统一建模语言",UML于此诞生。同时,他们还做出了一个非常重要的决定――把UML提交到非赢利性的OMG进行标准化,让全世界的软件开发人员都可以自由地分享这一软件史上的重大成果。

于是,在全球软件界具有广泛影响力的国际对象管理组织OMG从此开展了一系列OO建模语言的标准化工作。1997年11月,UML 1.1经OMG各成员投票被正式采纳为行业标准。


UML是一家之言,或少数派的观点吗?

否,UML是全球工业界和学术界的领导者协同努力的成果。自从进入OMG程序后,UML就不再由Rational一家公司所有或由少数人控制,而成为凝结了百家之长的公共知识结晶。具有丰富企业信息系统和信息工程经验的OO大师、Martin/Odell方法的领军人物James Odell为此曾表明放弃自己的方法,并直接参与领导了UML 1.x系列标准的制订工作。另一位OO大师Coad/Yourdon方法的创始人之一Peter Coad,虽然没有直接参与UML制订,但却独具慧眼创办了TogetherSoft公司(已被Borland收购),开发了著名的UML集成开发环境Together ControlCenter,成为Rational Rose的有力竞争者。事实说明,UML的确促进了各种OO方法和流派的大融合,在OO建模语言领域具有不可替代的地位。

UML之父是谁?

UML之父有三位:他们是Grady Booch(Booch方法),James Rumbaugh(OMT方法)和Ivar Jacobson(OOSE方法)。人们亲切地称他们为"3 amigos"(即"三高",类似于大家给予合作举办世纪音乐会的,世界上3位顶尖男高音歌唱家的称谓)。

UML标准有哪些最新进展?

UML 1.x系列的最新版本是于2003年3月发布的1.5版本(http://www.uml.org/)。
OMG(http://www.omg.org/)从2000年起启动了UML 2.0标准的制定工作。U2P组织(UML2 Partners Consortium,http://www.u2-partners.org/)在UML 2.0标准的制定过程中发挥了主导作用。目前UML 2.0的上层结构(Superstructure)规范已经在2003年6月12日获得通过。
OMG已经与国际标准化组织ISO开展了合作,预示着UML将来有望成为ISO标准,值得关注。

初学者如何开始学习UML?

无外乎几种方式:读书、上网、实践、培训。

最近几年国内一窝蜂地出版了不少与UML有关的中英文书籍,但说实话,有点良莠不齐。初学者不管自学还是参加培训,选择合适的UML教材/读物是很重要的。

Craig Larman的《UML和模式应用》是一本非常好的内容丰富、真正实用的入门教材,在国际上也是用得最多的一本,无出其右者。纵观全书,以实案为中心,脉络清晰,组织老到,深浅适当,循循善诱,非常适合UML、UP、设计模式的初学者和一直对OOAD、UML的价值存有疑虑的结构化人士一读。对于熟悉OO的人来说,阅读此书也是再一次享受梳理知识、进行系统性训练的美妙体验。本人尤其推荐第2版(内容更新了不少,听说正在引进翻译,值得期待)。

如果希望与大师对话,全面深入地掌握UML的基本要领,通过领悟UML设计者的思想和意图来达到在实战中得心应手运用OO建模技术的目的,建议一定要阅读UML之父Grady Booch亲自撰写的《UML用户指南》。本书相当全面,偏重理论分析和概念阐释,这些内容和抽象技术对于真正理解UML是非常基本、必不可少的,所以它适合喜欢认真探究一切的读者。

用好UML离不开有好的过程作指导。RUP极其丰富的内容令人生畏,Ivar Jacobson大师在《统一软件开发过程》一书中从管理者和系统架构师的角度,通过实例分析系统地讲解了将UML用于分析设计实践的完整过程,深入浅出,言简意赅,可以说此书正是RUP的精华所在。带领自己的团队用好UML,得此书足矣。

此外,IT之源(http://www.iturls.com/)、UMLChina(http://www.umlchina.com/)等网站提供了非常丰富的学习资料和参考文章。

UML规范、《UML参考手册》内容深、篇幅大,主要面向UML工具开发者、专家和研究人员,不适合初学者阅读。

世界上有哪些著名的公司、组织参与了UML标准的制订?

历年来,参与UML标准制订的一些核心公司和组织包括(1.x、2.0):
全能型IT公司:HP, IBM, Unisys
大型软件公司:CA, Microsoft, Oracle
CASE厂商:I-Logix, Rational(已被IBM收购), Telelogic
电信供应商:Alcatel,Ericsson,Fujitsu,Motorola
行业组织:OMG
IT系统集成商:EDS
等等

UML在业界的影响力和地位由此可见一斑。

OpenOffice运行更快的技巧

OpenOffice.org 现在是我主力办公软件,要坚持在linux下也用。但它有一个令人诟病的地方:启动时总是慢吞吞的,这让人十分不爽。今天在 Zolved 上读到一篇可使 OpenOffice.org 提速的技巧文章,在试验后感觉效果很明显,记录并分享之。

首先,启动 OpenOffice.org Writer,在设置后,其他的 Calc、Impress、Draw 等组件也会生效。接着,执行"工具->选项"菜单命令,选择左边的"内存",设置要点如下:

在"撤销"选项,步骤数目建议设置为 20 或 30,总之应小于 100。

在"图形缓存"选项,OpenOffice.org 使用设置为 128MB,每个对象的内存设置为 20MB。

在"插入对象缓存"选项,设置对象数为 20。

选中"启用快速启动"选项。

然后,再选择左边的"Java",取消选择"使用 Java 运行环境"选项。最后点击"确定"保存你的设置。
现在你可以关闭 OpenOffice.org 并再次启动它以感受速度的变化了。

标准的makefile写法

一个很典型的Linux C/C++的makefile写法,其它的应用可根据此template修改。
(注意每一行的前面若有空格,是tab,不是space)

#Source file

SRC = ThreadQueue.cpp
#Object file
OBJ = $(SRC:.cpp=.o)

#Output execution file
PROGRAM = ThreadQueue

#Compiler
CC = g++

#Include
INCLUDE = -I/usr/include/ncurses -I/usr/include/

#Linker Parameter
LINKPARAM = -lpthread -lncurses

#Options for development

#CFLAGS = -ansi -g -Wall

#Options for release

CFLAGS = -ansi -O -Wall

all: $(PROGRAM)

$(PROGRAM): $(OBJ)

$(CC) -o $(PROGRAM) $(LINKPARAM) $(OBJ)

.SUFFIXES : .cpp

.cpp.o:

$(CC) $(INCLUDE) $(CFLAGS) -c $<

clean:

rm *.o

如果编译时出现了Makefile:8: *** 遗漏分隔符  停止的错误
原因是在编写makefile文件时:
gcc前的是tab分隔符,不能用空格,
make中规定每一Shell命令之前的开头必须使用字符。



郑弘仪「教你投资脑袋致富八招」

郑弘仪「教你投资脑袋致富八招」
1 乐于接近人们,学习新事物
2 大量阅读,成为杂食性阅读动物
3 每个月存3000 元,适当投资经营,退休将有六千万.(注:此处为台币,1元人民币大约等于4元新台币)
4 提早社会化,建立正确价值观
5 做自己擅长、喜欢的事,只做能力可负担的
6 不要太有自己的人际门坎,每个人都有值得学习的地方
7 如果没空研究股票,就别投资
8 学习阅读财务报表,收集信息、学习判断

2008年10月21日星期二

Verilog & Testbench学习笔记1

1. 验证自动化

自动比较的原理就是用计算机代替人去比较实际响应和期望相应是否相同,然后把相关信息显示出来,从而减少了人工的干预,提高了验证效率。

实现方法:利用时钟同步验证,or经过一定数据包再异步比较验证。

2. 增强testbench的重用性,避免因为重新开发而带来的风险和额外的开发时间。

3. reg类型定义了一种暂存数据的变量,但其物理模型并不一定是一个寄存器,也可能仅是一根连线:只有在时序逻辑中它对应的才是寄存器;而在组合逻辑中,它则表示一根连线。

在实际应用中,凡是在initial(initial是行为级语法,不可综合)、always块中的被赋值的信号都必须定义成reg。

4. wire与reg的差异? 什么时候该用wire?什么时候又该用reg?

    若参数出现在begin...end之内,则须使用reg;
    使用wire,须搭配assign;
    若wire和reg用错,compiler都会提醒,所以不必太担心。

     需要注意:在Verilog中使用reg,并不表示综合后就是暂存器(register)。若在组合电路中使用reg,综合后仍只是net,唯有在时序电路中使用reg,合成后才会以flip-flop形式表示成register。

5. Verilog中出现小数,Modelsim编译时不会报错or警告,虽然小数是不可综合的。而且利用小数进行比较的时候,如cnt <>

linux下查找字符串命令

1. set命令可以显示出当前shell下所有全局参量定义及其值;

2. 查找并删除当前目录下小文件:
find . -type f -size -10k -exec rm {} \;
说明:
-type f 查找文件
-size -10k,
小于10k的。"+"是表示要求系统只列出大于指定大小的文件,而使用"-"则表示要求系统列出小于指定大小的文件。

3. 遍历文件夹grep一个字符串
find . -name "*c" | xargs grep "strings"

在当前文件夹下所有c文件中查找字符串“string”

4. 在某目录下文件中查找某字符串
grep -r youcode dir
例如:查找home下文件中查找hello
grep -r hello /home

例如:在当前所有目录下文件中查找hello,不区分大小写
grep -ir hello .

(转)Qt简介

Qt 是一个跨平台的 C++ 图形用户界面库,由挪威 TrollTech
公司出品,目前包括Qt, 基于 Framebuffer 的 Qt Embedded,快速开发工具 Qt
Designer,国际化工具 Qt Linguist 等部分 Qt 支持所有 Unix 系统,当然也包括
Linux,还支持 WinNT/Win2k,Win95/98 平台。

Trolltech 公司在 1994 年成立,但是在 1992 年,成立 Trolltech
公司的那批程序员 就已经开始设计 Qt 了,Qt 的第一个商业版本于 1995
年推出然后 Qt 的发展就很快了,下面是 Qt 发展史上的一 些里程碑:
1996 Oct KDE 组织成立
1998 Apr 05 Trolltech 的程序员在 5 天之内将 Netscape5.0 从 Motif 移植到 Qt

1998 Apr 08 KDE Free Qt 基金会成立
1998 Jul 09 Qt 1.40 发布
1998 Jul 12 KDE 1.0 发布
1999 Mar 04 QPL 1.0 发布
1999 Mar 12 Qt 1.44 发布
1999 Jun 25 Qt 2.0 发布
1999 Sep 13 KDE 1.1.2 发布
2000 Mar 20 嵌入式 Qt 发布
2000 Sep 06 Qt 2.2 发布
2000 Oct 05 Qt 2.2.1 发布
2000 Oct 30 Qt/Embedded 开始使用 GPL 宣言
2000 Sep 04 Qt free edition 开始使用 GPL

基本上,Qt 同 X Window 上的 Motif,Openwin,GTK 等图形界 面库和
Windows 平台上的 MFC,OWL,VCL,ATL 是同类型的东西,但是 Qt 具有下列优点:
优良的跨平台特性:

Qt支持下列操作系统: Microsoft Windows 95/98, Microsoft Windows NT,
Linux, Solaris, SunOS, HP-UX, Digital UNIX (OSF/1, Tru64), Irix,
FreeBSD, BSD/OS, SCO, AIX, OS390,QNX 等等。
面向对象

Qt 的良好封装机制使得 Qt
的模块化程度非常高,可重用性较好,对于用户开发来说是非常 方便的。 Qt
提供了一种称为 signals/slots 的安全类型来替代 callback,这使得各个元件
之间的协同工作变得十分简单。
丰富的 API

Qt 包括多达 250 个以上的 C++ 类,还替供基于模板的 collections,
serialization, file, I/O device, directory management, date/time
类。甚至还包括正则表达式的处理 功能。

支持 2D/3D 图形渲染,支持 OpenGL

大量的开发文档

XML 支持

但是真正使得 Qt 在自由软件界的众多 Widgets (如
Lesstif,Gtk,EZWGL,Xforms,fltk 等等)中脱颖而出的还是基于 Qt
的重量级软件 KDE 。 有趣的是,KDE 也是使得 Trolltech
公司承受巨大压力的一个原因。下面我们将来看看这场 著名的自由软件圣战 --
"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。

由于 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
公司自然不能坐以待毙,于2000年 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 公司支付版权费用的。