2010年9月

N年防毒经验总结,如何远离病毒侵袭 - 下篇

跨过上篇,如果你还没有看过上篇,可以点击进入:
https://2356.io/index.php/archives/129/

下面进入下篇,说说如何防毒!


有了以上的经验总结,下面就开始说说,如何防毒:
主要从以下几个方面进行防范:

1. 加强计算机自身的防护

及时安装最新的操作系统补丁

1.png

  这里不评判windows操作系统的洞满天下,谁让windows太流行,成为众矢之的呢?。
  windows的漏洞补丁基本上是每月出一次,主要用于修复系统已发现的安全漏洞,这个一定要及时修补,除非是没有接入互联网的离线计算机。windows由于流行最广,用户群很大,黑客很喜欢研究这样的操作系统,所以windows报漏洞的可能性很大,这责任不在开发者,因为开发者本身并非神人,出Bug是难以避免的,更何况是如此复杂的操作系统,一旦出现高危漏洞,发现者一般都会通过0day的方式进行公布,这其中一般都会包含Bug发现者的演示程序及shellcode,这样其他的低手就很容易在此基础上开发出利用程序,这也就是一旦出现高危漏洞,在微软发布补丁之前,网上一片叫苦声的原因所在,所以一定要及时修复系统漏洞,以降低系统暴漏给攻击者的可能性。

及时更新常用的应用软件

2.png

3.png
  更新应用软件的道理和打操作系统补丁是一样的,也是为了降低系统被攻击的可能行。
  尽管这可能比系统漏洞的危害要低一些,但是也要受到重视。

  比如腾讯QQ,我想我辈中人都会必装吧,QQ的客户群已经好几亿了,这是一个很庞大的数字,攻击者越来越乐意研究这类流行软件的漏洞,进而开发相应的漏洞利用程序,以达到大量抓肉鸡的目的,比如现在越来越多的QQ病毒就是此类。

4.png

5.png

  其他流行软件也是如此,像千千静听,迅雷等等,国外的流行软件也一样,所以及时更新是个好习惯

安装防毒能力较强的杀毒软件

安装防护能力较强的防火墙

6.png

7.png

  对于喜欢机器裸奔的朋友就跳过后面的吧,因为中毒是早晚的事,这已经不是当年的DOS时代了,中毒症状是很难凭经验发现的,尤其是现在rootkit技术越来越普及,病毒岂会被轻易发现?
  所以一定要安装一款较优秀的杀毒软件,注意不是多款,尤其对于普通使用者难以手动控制多款杀毒软件并存,很容易由于杀毒软件冲突导致系统死机/崩溃,因为病毒技术慢慢渗透进ring0层,这是操作系统的所在,多款杀毒软件往往会争夺ring0层的控制权,而导致出现冲突。
  这里推荐几款杀毒软件:

  • 卡巴斯基
  • BitDefence
  • Avast
  • ESET Nod32
  • 小红伞 Avira
  • 麦咖啡
  • 诺顿

等等

几款防火墙:

  • BlackIce
  • ZoneAlarm
  • 天网

等等
  仅仅是推荐,没有歧视其他杀软/防火墙的意思,上面的几个我大都用过,所以才敢推荐,以上杀软基本都有对应的互联网套装,会附带自家开发的防火墙,邮件过滤等功能,基本的网络防护够用了,其他专业的防火墙一般用户也很难操作,所以这里不推荐安装。

及时更新病毒库

8.png

  及时更新病毒库我想基本深入人心了,大家或多或少都领略过不更新的悲惨,呵呵
  而且现在的病毒每天都是以万为单位的蹦,更新尚且不一定能够包罗所有最新的病毒,不更新就会死的更惨。
  而且现在的杀毒技术尽管已经引入主动防御,虚拟机杀毒,行为特征分析等等功能,但是很不成熟,就像要完整分析一个善变的人一样,技术难度太大,正确率太低,很容易误杀,这也是各杀毒厂商不停地为误杀良民道歉的主要原因。
  所以,一定要及时更新病毒库!!!

关闭U盘/光盘等的自动播放功能

  这个是重中之重,这也是我上面说的手动围剿U盘病毒的重要前提。
  简单描述一下这个自动播放功能,这是windows的一个辅助性的功能,当有U盘接入时,如果U盘根目录下有Autorun.inf系统文件的话,操作系统会尝试解析其中的指令,以主动执行相关命令而不需用户确认,比如自动执行U盘中的可执行文件,挂钩U盘盘符鼠标右键的相关菜单命令等,这样病毒就有机会在你插入U盘的时候,神不知鬼不觉的做一些小动作。
有些所谓的U盘免疫功能,其实就是以其他手段在U盘中预先放置一个具有系统属性的autorun.inf的文件或文件夹,以阻止病毒向U盘中写入autorun.inf信息而达到防止U盘主动感染计算机的目的,这也有挂羊头卖狗肉之嫌,因为真正的病毒文件还是可以保存到U盘中的,只是废掉了病毒的自动运行能力而已。

  要关闭自动播放功能,需要修改注册表,修改如下键值,然后重启计算机即可,也可以使用一些系统设置软件,比如windows优化大师,超级兔子,TuneUp等关闭自动播放功能:
所在注册表键:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
将注册表值NoDriveTypeAutoRun修改为0:
9.png

  关闭该功能之后,就可以直接手杀U盘杀毒了,具体操作见下面的总结。

保护本机文件免受感染型病毒侵害

  熊猫烧香的文件感染能力我想大家都听说过,现在很多新型病毒大有模仿之势,感染型病毒会越来越多,而且PE文件感染技术被研究的差不多了,门槛降了很多,所以防范这类病毒可以很大程度上避免重要文件被破坏,因为病毒的这种感染往往是很难还原的,想要修复被感染的文件不是一般用户能够完成的,在被批量感染的时候就更加艰巨。
  可以将本机的重要文件,重点是可执行文件压缩保存,以避免被病毒感染。
10.png

11.png

12.png

  由于病毒为了达到快速传播的目的,一般都会要求病毒本身的文件要尽量小,一般都要控制在百K左右,过大的体积会影响病毒扩散,一般的病毒寄生都是基于可执行文件,只需要按照PE格式插入病毒代码即可,如果将可执行文件进行压缩,那么文件无法直接执行,病毒如果直接修改压缩文件是没有意义的,而如果要解压文件,修改之后再重新压缩,一来时间消耗太大,二来病毒需要集成相应的压缩库代码,会极大增加病毒本身的体积,所以病毒不会去主动感染这类文件。
  其他的比如office文件,由于宏病毒的存在,也需要避免感染而压缩存储。
  这算是一个小技巧吧^_^

2. 避免来自外界的病毒侵犯

防范来自网页的挂马攻击

  网页挂马是现在通过IE漏洞传播病毒的主要方式,特点就是在网站服务器上放置病毒文件,可以有很多类型,看具体利用的系统漏洞了,比如前一段的GDI漏洞的病毒文件可能是个图片,也可能是可执行文件,只要能够触发漏洞即可。
  这类病毒传播主要依靠IE内核,所以所有使用IE内核的浏览器都有可能中毒,比如,360安全浏览器,傲游浏览器,搜狗浏览器,世界之窗等等很多变种浏览器。
  这类病毒的防范可以靠勤打补丁,并且开启杀毒软件的主动防御功能来防范,同时要谨慎浏览网页,不三不四的站点最好别去,要去就全副武装好再去。
  更好的办法是使用非IE内核的浏览器,比如FireFox,Chrome,Opera,Safari等,这类浏览器由于用户群较低,研究它的黑客也就相对较少,爆发高危漏洞的可能性很低,所以不易被攻击,而且其他浏览器各有各的优点,多试试也没什么坏处

防范来自邮件的欺骗攻击

  这类攻击,也是主要针对操作系统和相关邮件软件的,比如针对Outlook漏洞的病毒,会在你浏览邮件的时候,直接执行内嵌的病毒代码进而攻陷计算机;
  更多的则是以欺骗的方式诱使用户打开邮件附件,进而感染病毒
  这类病毒的伎俩不算高明,基本开着杀毒软件加上一点防范意识就可以了

防范来自软件的捆绑攻击

13.png

  这个主要指的是安装软件时无意安装了其中的捆绑那个插件,尽管这些插件无大的害处,但是过于流氓,所以也要加以防范
  有的捆绑则是强制,只要执行安装程序,就可能被安装其他的恶意程序,这主要见于早期广告插件横行的时代,现在基本被360等驯服了。

  像这类被安装捆绑插件的主要是懒人,呵呵。大多都喜欢快速点击下一步来完成软件安装,这其中可能有一些插件是软件作者希望你安装的,但是你又不愿安装,结果中标,所以只要平时留个心眼就可以了

防范来自影音文件的挂马攻击

14.png

15.png

  这类攻击主要见于rm/rmvb格式的影音文件,因为Real公司在定义rm格式的时候允许其中插入网页链接,当影音播放到指定帧的时候,会自动打开,这样就给通过网页挂马的站点留下了乘虚而入的可能。
  这类攻击基本没有技术含量,会点编程的人都能写出一些简单工具进行过滤以删除其中的链接,如果你使用迅雷应该也会注意到,迅雷会自动过滤这类影音文件,对于这些攻击,只要在下载完影音之后,拿工具过滤一下就可以了

防范来自U盘的传播攻击

16.png

  接下来就说说如何手动围剿U盘病毒吧
  由于通过上述的办法已经关闭U盘的自动播放功能,所以当插入U盘之后,病毒无法自动执行,那就让我们去砍瓜切菜吧,当初写杀软的时候就是这样获取病毒样本的。。。

要切忌几点:
1。不要双击打开U盘,否则autorun.inf会由于双击而触发系统解析,进而执行相关的病毒程序
17.png

2。进入U盘后不要打开任何文件/文件夹,因为你看到的很可能不是你想要的
3。不要随意删除你不认识的东西,因为很可能你杀的是良民

好了,开工
1。打开系统显示隐藏文件和系统文件的功能
2。打开系统显示文件扩展名的功能
18.png

点击 文件夹选项,进入 显示,设置如下图:

19.png

3。打开U盘,通过地址栏进入
21.png

20.png

然后仔细观察你看到的文件,见以下文件,杀:
1。扩展名是.exe,但图标明显不是的
22.png

23.png

2。文件是隐藏的,扩展名是.exe/dll的
不要认为dll不能独立执行,因为系统有rundll32程序。。。
24.png

25.png

3。见属性为系统,但是明确不是你自己的文件的
26.png

4。autorun.inf本身
除非你确定这是你需要的文件
27.png

  然后,在发现上述类型的文件时,如果能够确定病毒类型为感染型(需要一定经验),需要将U盘中的可执行文件全部删除,至少要使用杀毒软件扫描一下其他文件,因为被感染的文件所遭受的破坏一般都是不可逆的,至少不是简单就能够恢复的,所以无法使用,只能删除,这也就是查杀感染型病毒之后,系统需要重装的主要原因。

28.png

最后,将被病毒隐藏的正常文件恢复显示。
29.png

  这类文件的特征就是具备隐藏属性,但是属性无法直接去除,这是windows对系统文件的特殊保护。

要恢复文件属性可以使用attrib命令行工具。
30.png

  要是和我一样懒的话,那就用这个小工具吧,这是我为了简化恢复文件属性操作而编写的,纯汇编写的,可以放心使用,要做的就是拖放文件/文件夹,但后点击。。。(内附源代码)
DelSysProperty.zip

32.png

33.png

防范来自局域网的ARP攻击

  ARP攻击主要表现是,Hacker使用工具伪造ARP协议包,将自己伪装为目标计算机和来源计算机进行通信,以截取目标计算机和来源计算机之间的通信数据,这样Hacker就有机会对数据进行修改,比如截取隐私数据,或者插入恶意数据,可能会导致目标计算机出现网络异常等情况。
  其实ARP攻击的技术难度并不高,主要是发送原始ARP包,以达到伪装的目的,但是由于技术门槛不高,导致相关的破坏工具不少,经常会出现网络异常的问题,所以值得重视。
这个问题比较好解决,如果你有兴趣可以试试反欺骗,你玩我,我就玩你!以彼之道还施彼身嘛,当然这可能需要一定的编程基础了。
  一般用户只要能够保证网络正常,免遭ARP攻击即可,安装一些ARP防火墙即可解决
34.png

防范来自网络钓鱼网站的攻击

  不知道大家有没有碰到过这样的网站,比如www.goog1e.com这样的网站,你能看出这和www.google.com的区别吗?其中就是将小写字母l换成数字1,足以以假乱真,这就是这里谈的钓鱼攻击,钓鱼网站主要会模仿一些银行网站的页面,并且网址和真实网站类似,在仔细的情况下,用户输入的账号和密码就会进入钓鱼者的囊中,进而。。。
  钓鱼攻击更谈不上什么技术,关键看使用者是否有甄别的意识,所以当涉及敏感信息时一定要注意保护个人隐私的意识,同事可以安装一些反钓鱼网站的软件,现在很多杀毒软件都会内置防钓鱼功能,会根据内置的钓鱼网站列表等信息辨别用户当前浏览的网站是否是钓鱼网站,并及时进行屏蔽,推荐使用。
35.png

  好了,大概就这么多了,基本总结完了。说到底,要说反病毒,与其等待中毒后不彻底的杀毒,不如注意平时的一些防毒意识,在杀毒软件的辅佐下,其实远离病毒也不难,希望我上面的总结能够起到一些作用,让朋友们远离病毒的干扰。

N年防毒经验总结,如何远离病毒侵袭 - 上篇

  很久没有中毒的历史了,不管是以前的台式机还是现在的笔记本。当年的熊猫烧香,机器狗,VKING等等病毒的消息都是从其他途径得知的。想测测这些病毒的感染能力,也都是通过虚拟机得到的,其实要做好反病毒并不难,因为病毒/木马的防范难度并不大,反而是感染之后的查杀才比较困难,往往不能根治,而且系统损坏往往难以完全修复,与其做好杀毒的准备,不如平时就注意好防毒。
1.png

  这里就简单总结一下经验,交流交流,也希望朋友们能够真正远离计算机病毒的干扰。

  原文有点长,这里分为上下两篇讲解,免得大家看到半截睡着了2.gif

  其中上篇主要探探使用计算机中的误区,这些误区很可能导致系统安全大打折扣,有必要先予以说明。

  下篇则主要介绍一些防毒方法以及简单的病毒手杀经验。


首先,在此之前,先纠正几个使用计算机的误区。

1. 只有杀毒软件是不够的,哪怕你装了世界顶级的卡巴斯基。

  杀毒软件要说是一种比较专业的软件,不管从杀毒技术本身还是从软件的使用难度来看,一般的计算机用户大都无法发挥其真正的病毒检测能力。
  而且计算机世界一直都是高手较量的天地,互相攻敌之短,所以论起查杀率,各类杀毒软件都不高:
  你有杀毒技术,我就有反杀毒技术;
  杀毒软件会根据特征码定位病毒类型,病毒就有花指令等策略抹去自身的特征码;
  杀毒软件有主动防御技术动态检测病毒动作,病毒就有迷幻的策略混淆自身的功能特征,比如通过无意义的操作
  杀毒软件会在ring3和ring0层挂钩API以部署防线,病毒就会通过正式或非正式的手段反挂钩,因为windows平台下,没有源代码的支持,杀毒软件永远不可能获取绝对控制计算机的能力,更何况还有各种各样的系统/软件漏洞可供病毒利用;

  杀毒软件界的高手和病毒界的高手从来都没有终止过技术切磋,否则李俊的熊猫烧香就不会有这般的威力了

  杀毒软件只是辅助工具,通过杀毒软件能够提高我们自己的识毒能力,在适当的时候进行参考,以决定对可疑文件是杀是赦。但是,它并不能完全根治病毒,反而很多时候会被病毒“查杀”。

2. 不推荐使用改版系统,而应该尽量使用原版系统

3.png

  喜欢使用番茄花园,Ghost版等系统的朋友很多,主要是因为这些系统在界面体验、安装速度、运行速度上有比较明显的优势,这些都是假象。
  他们的界面体验其实就是使用了theme patch之后,使用了第三方的界面主题而已。
他们的安装速度其实就是使用微软提供的工具,跳过了几个步骤而已。
  他们的运行速度其实就是关闭了几个系统服务,改了几个注册表项而已。
  
4.jpg

  除了微软自己,没人能够真正修改出一套实实在在具备优势的系统,这些所谓的修改都是建立在主观感受的基础上的,在现在各类三方软件的支持下,这些系统的制作难度并不大,真正有技术含量修改的很少,因为这帮人中真正懂windows内核的几乎没有。
所以,不推荐使用这些系统,主要是因为隐患很多,更何况多来自互联网,被嵌入病毒木马的可能性也很高。
  所以被感染的几率也会较高,当然只有用多了才会有明显的主观体验

  • 当年番茄花园系统因为修改错误而爆出远程连接漏洞就是一个典型例子。
  • GHOST系统在关机时中会强制终止文件操作,而导致分区损坏也是一个例子。
  • GHOST在打补丁时出现版本混乱,而导致VC在使用中出现吊死的CMD也是一个例子。
  • GHOST系统由于剥离原系统附带驱动而导致部分USB无法自动识别也是一个例子。

  原版系统都是经过系统级的参数调校的,稳定性和安全性是可以保证的,只是有部分服务暴漏于网络而已,这部分对于一般用户可以关闭,其他的修改往往都是过激的,而这些修改正是这些改版系统所做的。

3. U盘的病毒是最好杀的,尤其是手杀

5.gif

  我一般将手杀U盘病毒称为围剿,最为简单。
  但是很多朋友中毒都是因为U盘,主要是没有注意一些小技巧,后面我会一一总结出来,帮助大家防范U盘病毒,以杜绝U盘带来的病毒交叉感染。

4. 从网络下载软件,没有经过重重审核,不要下载,下载了也不要执行

  首先,下载软件要到一些大型的软件站点下载,或者直接到官方网站下载,比如华军,天空等。
  大型软件站,一般都有专人审核,并跟踪用户反馈,病毒在这种站点出现的可能性很低
所以下载使用能够让人放心。
  而其他的站点,尤其是国内的很多垃圾下载站点,有的就是直接从其他网站盗链;有的则是在下载链接中直接连接各类广告程序,以暴力谋取广告点击量;更有甚者直接挂马,浏览者一点即中。所以不建议普通用户登陆下载。

5. 谨慎使用所谓的绿色版和破解版

  绿色软件在软件开发界是有这个概念的,指的是软件开发人员将软件相关的参数和数据保存在软件所在的目录中,不写注册表,不修改系统配置,不干扰其他软件运行,安装时直接解压,卸载时直接删除,这才是真正意义上的绿色软件。
6.png

  而网络上的大多数软件都是经过破解爱好者修改的所谓的绿色软件,这类软件的特点就是安装简单,删除简单,但是会在系统中扔一堆无法控制的垃圾信息和数据,简直就是污染环境,根本谈不上绿色,而且这类软件没有官方安装程序的配置,如果制作者功力不足,往往导致出现莫名其妙的错误,更加有损开发者的名声。
  普通用户很难清理这类“绿色软件”带来的垃圾,所以不推荐使用,尽量使用原版。

  破解软件也是有的,这些都是与Hacker并列的Cracker制作的破解软件,主要目的就是解密软件注册流程已达到免费使用付费软件的目的,最好的破解是keygen,就是软件注册算法直接被跟踪破译,Cracker可以直接计算并获取注册码,以注册使用原软件;其次是内存破解,这类破解往往附带Loader,通过Loader将软件载入内存,然后修改其软件所在的内存指令,而达到不改原文件,而可以免费使用的目的;最后是爆破,这类破解主要是通过人为修改软件汇编指令的方式跳过软件的注册流程,达到不需注册直接使用的目的。
7.png

8.png

  但是网上很多破解软件就是挂羊头卖狗肉,恶意捆绑随处可见,因为破解本身就有种神秘色彩,让人觉得和Hacker挂钩,所以下载的杀毒软件会报警往往会被使用者自信的忽略掉,然而这其中很可能确实是被捆绑各类恶意程序的,必须要谨慎使用,并且推荐普通用户不要使用。
  网上的各类破解大都通过各类安全论坛发布,比如看雪,飘云阁PYG,UnPackCN等等,国外的也会通过0day发布,所以要注意甄别,并且谨慎使用。

6。懒得打补丁
9.png

  不打补丁的危害我就不多说,简单比喻一下,就像将军穿着满是窟窿的铠甲上战场,会轻松生还吗?


OK,上篇结束了,下篇登场。。。

(转)PHP中相对路径引起的嵌套问题的解决方案

这里说的相对路径嵌套指的是使用require/include包含库文件时,可能会出现库文件无法找到的问题。

将问题表现描述如下:
假如我在/include/func.inc中定义了一个函数func(),这个函数是公用的库函数,在不同位置都可能会使用。
但是func()又需要引用/include/init.inc中的init()函数

而func()本身的调用位置不确定,可能在/include中,也可能在/proc中,等等。
这时如果直接在func.inc中包含init.inc的话,就会出现我所说的嵌套问题

因为PHP中包含文件都是以正在解析的PHP文件所在目录当前目录(由于一般的网站空间无法修改php.ini文件,所以修改include_path的办法在此不适用)为准的,所以可能不是/include/func.inc文件所在目录
这时解析器在包含init.inc时,就会返回无法找到文件的问题

针对这个问题,我采用了将相对路径转换为绝对路径的办法来解决

有两种解决办法
1。使用$_SERVER['DOCUMENT_ROOT']
该预定义变量会获取网站的根目录,实际是返回网页服务器配置中的根目录配置
以此根目录为根,连接待包含文件即可,这样即可解决,文件的包含问题

例如:
require($_SERVER['DOCUMENT_ROOT'].'include/init.inc');

该方法有个问题,如果网站空间使用了虚拟目录,则虚拟目录可能和DOCUMENT_ROOT返回的不一致。
这时采用上述方法就会出现文件找不到的问题

2。使用锚点文件
这个方法,是在网站的根目录定义一个anchor.inc的锚点文件,然后通过FILE获取anchor.inc所在目录
代码示例如下:
getPath(); define("ANCHOR_PATH",$abs_path); ?>

这样ANCHOR_PATH存储的就是实际的网站根目录了,以该路径为根,连接其他的包含文件即可
例如:
require(ANCHOR_PATH.'include/init.inc'); 即可
不能在可能被包含的inc文件中包含anchor.inc文件,否则anchor.inc的包含又是一个问题
在可能被访问的php文件中以相对路径引入anchor.inc文件,然后再包含其他inc文件,方可

如果inc文件很多时,这样又会导致所有的php文件都要按照顺序引入很多头文件,可以在每个目录,引入一个公共的inc文件,然后加入公共的包含代码,然后对应目录的php文件即可

上述方法是我针对此问题的一个解决方案,应该会有其他更优的方法,欢迎大家一起讨论解决

SQLite多线程下的并发操作

这两天一直在捣鼓SQLite数据库,基本的操作就不说了,比较简单,打算有空的话另起一篇博文简单总结一下。

这里主要想探讨一下多路并发下的数据库操作

SQLite作为一款小型的嵌入式数据库,本身没有提供复杂的锁定机制,无法内部管理多路并发下的数据操作同步问题,更谈不上优化,所以涉及到多路并发的情况,需要外部进行读写锁控制,否则SQLite会返回SQLITE_BUSY错误,以驳回相关请求。

如果有朋友想了解SQLite相关的锁定机制,可以看看我转载的博文sqlite的事务和锁,讲解的比较透彻,也容易理解,这里就不再重复讲解了。

返回SQLITE_BUSY主要有以下几种情况:

  1. 当有写操作时,其他读操作会被驳回
  2. 当有写操作时,其他写操作会被驳回
  3. 当开启事务时,在提交事务之前,其他写操作会被驳回
  4. 当开启事务时,在提交事务之前,其他事务请求会被驳回
  5. 当有读操作时,其他写操作会被驳回
  6. 读操作之间能够并发执行

基于以上讨论,可以看出这是一个典型的读者写者问题,读操作要能够共享,写操作要互斥,读写之间也要互斥

可以设计如下的方案解决并发操作数据库被锁定的问题,同时保证读操作能够保持最大并发

  1. 采用互斥锁控制数据库写操作
  2. 只有拥有互斥锁的线程才能够操作数据库
  3. 写操作必须独立拥有互斥锁
  4. 读操作必须能够共享互斥锁,即在第一次读取的时候获取互斥锁,最后一次读取的时候释放互斥锁

具体的代码实现就不贴了,有了思路,实现就很简单了,欢迎大家一起讨论!

下面是我简单编写的一个共享锁,smutex是一个跨平台的锁实现,简单,不多说了:

// 共享锁,第一个进入时锁定,最后一个离开时释放
class shared_mutex
{
private:
static int taked_man_; // 当前持有该锁的线程数
static sp::smutex man_lock_; // taked_man_的修改锁

private:
// 自动模式
bool is_auto_;
sp::smutex *mutex;
public:
void aquire()
{
   sp::sguard<sp::smutex> auto_lock(shared_mutex::man_lock_);
   if(taked_man_ == 0)
   {
    mutex->acquire();
   }
   taked_man_++;
}
void release()
{
   sp::sguard<sp::smutex> auto_lock(shared_mutex::man_lock_);
   if(this->taked_man_ > 0)
   {
    taked_man_--;
    if(taked_man_ == 0)
    {
     mutex->release();
    }
   }
}
public:
shared_mutex(sp::smutex &mt, bool auto_ = true) : mutex(&mt)
{
   sp::sguard<sp::smutex> auto_lock(shared_mutex::man_lock_);
   this->is_auto_ = auto_;
   if(this->is_auto_)
   {
    this->aquire();
   }
}

~shared_mutex()
{
   sp::sguard<sp::smutex> auto_lock(shared_mutex::man_lock_);
   if(this->is_auto_)
   {
    this->release();
   }
}
};

(转)KDE/QT vs GNOME/GTK

  虽然在商业方面存在竞争,GNOME与KDE两大阵营的开发者关系并没有变得更糟,相反他们都意识到支持对方的重要性—如果KDE和GNOME无法实现应用程序的共享,那不仅是巨大的资源浪费,而且将导致Linux出现根本上的分裂。

  KDE 与GNOME是目前Linux/UNIX系统最流行的图形操作环境。从上个世纪九十年代中期至今,KDE和GNOME都经历了将近十年的漫漫历程,两者也都从最初的设计粗糙、功能简陋发展到相对完善的阶段,可用性逼近Windows系统。图形环境的成熟也为Linux的推广起到至关重要的作用,尽管 Linux以内核健壮、节省资源和高质量代码著称,但缺乏出色的图形环境让它一直难以在桌面领域有所作为,导致Linux桌面应用一直处于低潮。如果大家还有印象,一定会记得1999-2001年间Linux发展如火如荼,当时国内涌现出大量的Linux发行版厂商,但当用户发现Linux距离实用化还有十万八千里的时候,Linux热潮迅速冷却。业界也对此一度灰心失望,其中一部分厂商因无法盈利迅速销声匿迹,另一部分厂商则不约而同将重点放在服务器市场—与桌面市场形成鲜明对比的是,Linux以稳定可靠和低成本的优势在服务器领域获得了巨大的成功。

  在一些Linux厂商放弃桌面化努力的同时,国际开源社群却不断发展壮大,自由的理念吸引越来越多一流的程序员参与。与商业模式不同,自由软件程序员在开始时都只是利用业余时间开发自己感兴趣的东西,并将其自由公开,这是一种不折不扣的贡献行为。尽管开发进度缓慢,但认同自由软件理念的开发者越来越多,一个个开源项目逐渐发展壮大。

  在此期间一个被人忽视的重大事件就是商业巨头也积极参与进来,IBM、RedHat、SuSE、Ximian、 Novell、SUN、HP等商业公司都直接介入各个开源项目,这些企业或者是将自身的成果免费提供给开源社群,或者直接派遣程序员参与项目的实际开发工作,例如SuSE(现已为Novell收购)在KDE项目上做了大量的工作,RedHat、Ximian(现已为Novell收购)则全程参与Gnome 项目,IBM为Linux提供了大量的基础性代码,是推进Linux进入服务器领域的主要贡献者,SUN公司则将StarOffice赠送给开源社群,并资助成立著名的OpenOffice.org项目。这样,大量的自由软件程序员都可以从各个项目的基金会中领到薪水。在这一阶段,开源项目摆脱了程序员业余开发的模式,而由高水平的专职程序员主导,这也成为各个自由软件项目的标准协作模式。与商业软件公司不同,自由软件项目的参与者都是首先为个人兴趣而工作,他们的共同目标都是拿出品质最好的软件,在协作模式稳定成形之后,各个软件就进入到发展的快行道。进入2005年后,这些项目基本上都获得了丰硕的成果,其中最突出的代表就是Firefox浏览器的成功,而作为两大图形环境,KDE和GNOME分别发展到3.5和2.12版本,两者的可用性完全可以媲美Windows。更重要的是,开源社群的发展壮大为这些项目的未来发展奠定了坚实的基础:KDE项目将超越Windows作为自己的目标,力量更强大的 GNOME项目更是将开发目标定在超越Mac OS X的Aqua图形环境;Firefox则计划运用GPU的硬件资源来渲染图像,达到大幅度提高速度的目的;OpenOffice.org在努力提升品质的同时奠定了开放文档格式标准。除了上述主要项目之外,我们也看到如Mplayer播放器、Xine播放器、Thunderbird邮件客户端、SCIM输入平台等其他开源项目也在快速发展成熟之中,且几乎每一天都有新的项目在诞生。有意思的是,除了涉及到软件开发外,还出现了为Linux设计视觉界面的开放协作项目,全球各地有着共同目标的艺术家通过互联网组织到一起,共同为Linux系统设计一流的视觉界面、系统图标,而所有的自由软件程序员都有一个共同的目标,那就是开发出一流水准的软件提供给大众使用。这种基于挑战自我、带有浓烈精神色彩的软件开发模式成为商业软件之外的另外一极。现在,微软面对的并不是那些只在业余时间鼓捣代码的程序员,而是分布在全球各地、数量庞大、且拥有一流技术水平的开发者,这些开发者被有效地组织起来,形成一个个有序的协作团队,大量实力雄厚的商业公司在背后提供支持。虽然今天的Linux系统还无法在桌面领域被广为接纳,但只需要两、三年时间,高速进化的Linux平台将可达到全面进军桌面的水准,也正是看到其中的机会,Novell、RedHat等重量级Linux企业都不断在技术和市场推广方面加大投入,Linux 桌面化近在咫尺。

  在介绍完必要的背景之后,我们将进入关于KDE与GNOME的技术专题。如果你是刚刚接触Linux的新手,一定会对KDE和GNOME感到困惑不已—为何会有两个功能重复、操作习惯迥异的图形环境?这不仅麻烦也耗费开发者精力。通过本文,你将获得清晰的答案。而更重要的是,我们将在本文中向大家介绍KDE与GNOME的实际水平、各自的优点和未来发展趋势。如果你对Linux桌面应用有些兴趣,那么未来的 KDE/GNOME一定会让你感到震惊不已。

X Window打造桌面环境

  在介绍KDE和Gnome之前,我们有必要先来介绍UNIX/Linux图形环境的概念。对一个习惯Windows的用户来说,要正确理解UNIX/Linux的图形环境可能颇为困难,因为它与纯图形化Windows并没有多少共同点。Linux实际上是以UNIX为模板的,它继承了UNIX内核设计精简、高度健壮的特点,无论系统结构还是操作方式也都与UNIX无异。简单点说,你可以将Linux看成是UNIX类系统中的一个特殊版本。我们知道,微软Windows在早期只是一个基于 DOS的应用程序,用户必须首先进入DOS后再启动Windows进程,而从Windows 95开始,微软将图形界面作为默认,命令行界面只有在需要的情况下才开启,后来的Windows 98/Me实际上也都隶属于该体系。但在Windows 2000之后,DOS被彻底清除,Windows成为一个完全图形化的操作系统。但UNIX/Linux与之不同,强大的命令行界面始终是它们的基础,在上个世纪八十年代中期,图形界面风潮席卷操作系统业界,麻省理工学院(MIT)也在1984年与当时的DEC公司合作,致力于在UNIX系统上开发一个分散式的视窗环境,这便是大名鼎鼎的“X Window System”项目。不过,X Window(请注意不是X Windows)并不是一个直接的图形操作环境,而是作为图形环境与UNIX系统内核沟通的中间桥梁,任何厂商都可以在X Window基础上开发出不同的GUI图形环境。MIT和DEC的目的只在于为UNIX系统设计一套简单的图形框架,以使UNIX工作站的屏幕上可显示更多的命令,对于GUI的精美程度和易用程度并不讲究,毕竟那时候能够熟练操作UNIX的都是些习惯命令行的高手,根本不在乎GUI存在与否。1986 年,MIT正式发行X Window,此后它便成为UNIX的标准视窗环境。紧接着,全力负责发展该项目的X协会成立,X Window进入了新阶段。与此同步,许多UNIX厂商也在X Window原型上开发适合自己的UNIX GUI视窗环境,其中比较著名的有SUN与AT&T联手开发的“Open Look”、IBM主导下的OSF(Open Software Foundation,开放软件基金会)开发出的“Motif”。而一些爱好者则成立了非营利的XFree86组织,致力于在X86系统上开发X Window,这套免费且功能完整的X Window很快就进入了商用UNIX系统中,且被移植到多种硬件平台上,后来的Linux也直接从该项目中获益。当然,这些早期的X Window环境都设计得很简单,许多GUI元素模仿于微软的Windows,但X Window拥有一个小小的创新:当鼠标指针移动到某个窗口时,该窗口会被自动激活,用户无需点击便能够直接输入,简化了用户操作—这个特性在后来的 KDE和Gnome中也都得到完整的继承。

  由于必须以UNIX系统作为基础,X Window注定只能成为UNIX上的一个应用,而不可能与操作系统内核高度整合,这就使得基于X Window的图形环境不可能有很高的运行效率,但它的优点在于拥有很强的设计灵活性和可移植性。X Window从逻辑上分为三层:最底层的X Server(X服务器)主要处理输入/输出信息并维护相关资源,它接受来自键盘、鼠标的操作并将它交给X Client(X客户端)作出反馈,而由X Client传来的输出信息也由它来负责输出;最外层的X Client则提供一个完整的GUI界面,负责与用户的直接交互(KDE、Gnome都是一个X Client),而衔接X Server与X Client的就是“X Protocol(X通讯协议)”、它的任务是充当这两者的沟通管道。尽管UNIX厂商采用相同的X Window,但由于终端的X Client并不相同,这就导致不同UNIX产品搭配的GUI界面看起来非常不一样。

1.jpg

图1 X Window系统架构示意图 KDE项目的发起

  MIT 的X Window推出之后就成为UNIX图形界面的标准,但在商业应用上分为两大流派:一派是以Sun公司领导的Open Look阵营,一派是IBM/HP领导的OSF(Open Software Foundation)的Motif,双方经过多年竞争之后,Motif最终获得领先地位。不过,Motif只是一个带有窗口管理器(Window- Manager)的图形界面库(Widget-Library),而非一个真正意义上的GUI界面。经过协商之后IBM/HP与SUN决定将Motif与 Open Look整合,并在此基础上开发出一个名为“CDE(Common Desktop Environment) ”的GUI作为UNIX的标准图形界面。遗憾是,Motif/CDE和UNIX系统的价格都非常昂贵,而当时微软的Windows发展速度惊人并率先在桌面市场占据垄断地位,CDE则一直停留在UNIX领域提供给root系统管理员使用,直到今天情况依然如此。

2.jpg

图2 KDE 1.0尽管设计粗糙,但它奠定了整个KDE项目的基础。

  在上个世纪九十年代中期,以开源模式推进的Linux在开发者中已经拥有广泛的影响力。尽管X Window已经非常成熟,也有不少基于X Window的图形界面程序,但它们不是未具备完整的图形操作功能就是价格高昂(如CDE),根本无法用于Linux系统中。如果Linux要获得真正意义上的突破,一套完全免费、功能完善的GUI就非常必要。1996年10月,图形排版工具Lyx的开发者、一位名为Matthias Ettrich的德国人发起了KDE(Kool Desktop Environment)项目,与之前各种基于X Window的图形程序不同的是,KDE并非针对系统管理员,它的用户群被锁定为普通的终端用户,Matthias Ettrich希望KDE能够包含用户日常应用所需要的所有应用程序组件,例如Web浏览器、电子邮件客户端、办公套件、图形图像处理软件等等,将 UNIX/Linux彻底带到桌面。当然,KDE符合GPL规范,以免费和开放源代码的方式运行。

  KDE项目发起后,迅速吸引了一大批高水平的自由软件开发者,这些开发者都希望KDE能够将Linux系统的强大能力与舒适直观的图形界面联结起来,创建最优秀的桌面操作系统。经过艰苦卓绝的共同努力,KDE 1.0终于在1998年的7月12日正式推出。以当时的水平来说,KDE 1.0在技术上可圈可点,它较好的实现了预期的目标,各项功能初步具备,开发人员已经可以很好地使用它了。当然,对用户来说,KDE 1.0远远比不上同时期的Windows 98来得平易近人,KDE 1.0中大量的Bug更是让人头疼。但对开发人员来说,KDE 1.0的推出鼓舞人心,它证明了KDE项目开源协作的开发方式完全可行,开发者对未来充满信心。有必要提到的是,在KDE 1.0版的开发过程中,SuSE、Caldera等Linux商业公司对该项目提供资金上的支持,在1999年,IBM、Corel、RedHat、富士通-西门子等公司也纷纷对KDE项目提供资金和技术支持,自此KDE项目走上了快速发展阶段并长期保持着领先地位。但在2004年之后,GNOME不仅开始在技术上超越前者,也获得更多商业公司的广泛支持,KDE丧失主导地位,其原因就在于KDE选择在Qt平台的基础上开发,而Qt在版权方面的限制让许多商业公司望而却步。

  Qt是一个跨平台的C++图形用户界面库,它是挪威TrollTech公司的产品(2008年底被NOKIA收购)。基本上,Qt同X Window上的 Motif、Open Look、GTK等图形界面库和Windows平台上的 MFC、OWL、VCL、ATL是同类型的东西,但Qt具有优良的跨平台特性(支持Windows、Linux、各种UNIX、OS390和QNX等)、面向对象机制以及丰富的API,同时也可支持2D/3D渲染和OpenGL API。在当时的同类图形用户界面库产品中,Qt的功能最为强大,Matthias Ettrich在发起KDE项目时很自然选择了Qt作为开发基础,也正是得益于Qt的完善性,KDE的开发进展颇为顺利,例如Netscape5.0在从 Motif移植到Qt平台上仅仅花费了5天时间。这样,当KDE 1.0正式发布时,外界看到的便是一个各项功能基本具备的GUI操作环境,且在后来的发展中,Qt/KDE一直都保持领先优势。有必要提到的是,TrollTech公司实质性参与了KDE项目,如前面提到Netscape 5.0 的移植工作就是由TrollTech的程序员完成,而KDE工程的发起者、Matthias Ettrich本人也在1998年离开学术界加入TrollTech,并一直担任该公司的软件开发部主管,因此TrollTech公司对于KDE项目拥有非常强的影响力(当然不能说绝对掌握,毕竟KDE开发工作仍然是由自由程序员协作完成的)。我们前面提到,KDE采用GPL规范进行发行,但底层的基础 Qt却是一个不遵循GPL的商业软件,这就给KDE上了一道无形的枷锁并带来可能的法律风险。一大批自由程序员对KDE项目的决定深为不满,它们认为利用非自由软件开发违背了GPL的精神,于是这些GNU的狂热信徒兵分两路:其中一部分人去制作Harmonny,试图重写出一套兼容Qt的替代品,这个项目虽然技术上相对简单,但却没有获得KDE项目的支持;另一路人马则决定重新开发一套名为“GNOME(GNU Network Object Environment)”的图形环境来替代KDE,一场因为思想分歧引发的GUI之战开始了。

3.jpg

图3 Qt是整个KDE的基础,它采用双重授权。GNOME与KDE交替发展

  GNOME 项目于1997年8月发起,创始人是当时年仅26岁的墨西哥程序员Miguel De Icaza。关于GNOME的名称有一个非常有趣的典故:Miguel到微软公司应聘时对它的ActiveX/COM model颇有兴趣,GNOME(Network Object Model )的名称便从此而来。GNOME选择完全遵循GPL的GTK图形界面库为基础,因此我们也一般将GNOME和KDE两大阵营称为GNOME/GTK和 KDE/Qt。与Qt基于C++语言不同,GTK采用较传统的C语言,虽然C语言不支持面向对象设计,看起来比较落后,但当时熟悉C语言的开发者远远多于熟悉C++的开发者。加之GNOME/GTK完全遵循GPL版权公约,吸引了更多的自由程序员参与,但由于KDE先行一步,且基础占优势,一直都保持领先地位。1999年3月,GNOME 1.0在匆忙中推出,稳定性奇差无比,以至于许多人笑称GNOME 1.0还没有KDE 1.0 Alpha稳定,而同期的KDE 1.1.2无论在稳定性还是功能上都远胜于GNOME,直到10月份推出的GNOME 1.0.55版才较好解决了稳定性问题,给GNOME重新赢回声誉。由于思想分歧,当时GNOME的开发者与KDE的开发者在网络上吵得天翻地覆,几乎达到相互仇视的地步。但不管怎么说,GNOME都跌跌撞撞迈出了第一步,尽管那时KDE几乎是所有Linux发行版默认的桌面环境。

4.jpg

图5 KDE2.0拥有丰富的应用软件,实力明显超过GNOME。

  GNOME 的转机来自于商业公司的支持。当时Linux业界的老大RedHat很不喜欢KDE/Qt的版权,在GNOME项目发起后RedHat立刻对其提供支持。为了促进GNOME的成熟,RedHat甚至专门派出几位全职程序员参与GNOME的开发工作,并在1998年1月与GNOME项目成员携手成立了 RedHat高级开发实验室。1999年4月,Miguel与另一名GNOME项目的核心成员共同成立Helix Code公司为GNOME提供商业支持,这家公司后来更名为Ximian,它事实上就成为GNOME项目的母公司,GNOME平台上的Evolution 邮件套件便出自该公司之手。进入2000年之后,一系列重大事件接连发生,首先,一批从苹果公司出来的工程师成立Eazel公司,为GNOME设计用户界面和Nautilus(鹦鹉螺)文件管理器。同年8月,GNOME基金会在Sun 、RedHat、Eazel、Helix Code(Ximian)的共同努力下正式成立,该基金会负责GNOME项目的开发管理以及提供资金,Miguel本人则担任基金会的总裁。此时,GNOME获得许多重量级商业公司的支持,如惠普公司采用GNOME作为HP-UX系统的用户环境,SUN则宣布将StarOffice套件与 GNOME环境相整合,而GNOME也将选择OpenOffice.org作为办公套件,IBM公司则为GNOME共享了SashXB极速开发环境。同时,GNOME基金会也决定采用Mozilla作为网页浏览器。KDE阵营也毫不示弱,在当年10月份推出万众瞩目的KDE 2.0。KDE 2.0堪称当时最庞大的自由软件,除了KDE平台自身外,还包括Koffice办公套件、Kdevelop集成开发环境以及Konqueror网页浏览器。尽管这些软件都还比较粗糙,但KDE 2.0已经很好实现了Matthias Ettrich成立KDE项目的目标。也是在这个月,TrollTech公司决定采用GPL公约来发行Qt的免费版本,希望能够以此赢得开发者的支持。这样,Qt实际上就拥有双重授权:如果对应的Linux发行版采用免费非商业性的方式进行发放,那么使用KDE无须向TrollTech交纳授权费用;但如果Linux发行版为盈利性的商业软件,那么使用KDE时必须获得授权。由于TrollTech是商业公司且一直主导着KDE的方向,双许可方式不失为解决开源与盈利矛盾的好办法。TrollTech宣称,双许可制度彻底解决了KDE在GPL公约方面的问题,但RedHat并不喜欢,RedHat不断对 GNOME项目提供支持,希望它能够尽快走向成熟,除RedHat之外的其他Linux厂商暂时都站在KDE这一边,但他们同时也在发行版中捆绑了 GNOME桌面。

  在2001-2002年,火热一时的Linux运动开始陷入低潮期,几乎所有的厂商都发现桌面Linux版本不可能盈利,而易用性的不足也让业界不看好Linux进入桌面的前途。但在服务器市场,Linux发展势头非常迅猛,直接对UNIX和Windows Server造成威胁。不过,秉承自由软件理念的开发者们并不理会外界的论调,他们一直将Linux桌面化作为目标,GNOME项目和KDE项目都在这期间获得完善发展。2001年4月,GNOME 1.4发布,它修正了之前版本的Bug,功能也较为完善,但在各方面与KDE依然存在差距;同年8月,KDE发展到2.2版本。2002年4月,KDE跳跃到3.0版本,它以Qt 3.0为基础,各项功能都颇为完备,具备卓越的使用价值;两个月后,GNOME阵营也推出2.0版本,它基于更完善的GTK 2.0图形库。进入到2003年后,KDE与GNOME进入真正意义上的技术较量。1月份,KDE 3.1推出,而GNOME 2.4则在随后的2月份推出,两大平台都努力进行自我完善。也是在这一年,Linux商业界出现一系列重大的并购案:1月份,Novell公司宣布收购德国的SuSE Linux,而SuSE Linux是地位仅次于RedHat的全球第二大Linux商业企业;8月,Novell接着将GNOME的母公司Ximian收归旗下。这两起并购案让 Novell成为实力与RedHat不相上下的强大Linux企业,而Novell和RedHat就成为能够影响Linux未来的两家企业。在图形环境上,SuSE一向选择KDE,并在KDE身上投入相当多的精力,在被Novell并购后,SuSE的桌面发行版尽管还侧重于KDE,但同样不喜欢Qt授权的Novell已经开始向GNOME迁移。

5.jpg

图4 GTK库是GNOME项目的基础,它完全采用GPL授权因此获得广泛支持。GNOME获得商业公司的支持

  进入2004年后,KDE与GNOME依然保持快速发展,KDE阵营分别在2月份和8月份推出3.2、3.3版本,GNOME则在3月和9月推出2.6和 2.8,两者的版本升级步幅旗鼓相当。到3.3版本的KDE已经非常成熟,它拥有包括KOffice、Konqueror浏览器、Kmail套件、KDE 即时消息在内的一大堆应用软件,且多数都达到可用标准,功能上完全不亚于Windows 2000。而GNOME更是在此期间高速发展,GNOME 2.8版本的水准完全不逊于KDE 3.3,而且此时两者的技术特点非常鲜明:GNOME讲究简单、高效,运行速度比KDE更快;KDE则拥有华丽的界面和丰富的功能,使用习惯也与微软 Windows较类似。商业支持方面,RedHat还是GNOME的铁杆支持者,IBM、SUN、Novell、HP等重量级企业也都选择GNOME,而 KDE的主要支持者暂时为SuSE、Mandrake以及中科红旗、共创开源在内的国内发行商。2005年,厚积薄发的GNOME开始全面反超,3月份的 2.10、9月份的2.12让GNOME获得近乎脱胎换骨的变化,加之OpenOffice.org 2.0、Firefox 1.5等重磅软件的出台让GNOME如虎添翼;KDE方面则分别在3月和11月推出3.4和3.5,其中KDE 3.5也逼近完美境地,我们认为它的水平与GNOME 2.12不相伯仲。但KDE在商业支持方面每况愈下,Novell在11月宣布旗下所有的商业性发行版将使用GNOME作为默认桌面(仍会对KDE Libraries提供支持),SuSE Linux桌面版则会对KDE与GNOME提供同等支持,而社区支持的OpenSuSE仍将使用KDE体系—但谁都明白GNOME将成为Novell的重心,KDE只是活跃在免费的自由发行版中。

6.jpg

图7 KDE3.5可实现半透明和阴影效果,界面华丽、软件丰富。

  到这里,我们发现一个颇富戏剧性的结局:致力于商业化的KDE反而失去了重量级商业企业的支持,尽管一些中小规模的Linux企业因技术能力问题将继续支持 KDE,但它的商业前途有限。而遵循GPL、完全不以商业化为目的的GNOME反而在该领域大获成功。许多Linux发烧友都不明白为什么优秀的KDE会受到如此待遇,其实道理非常简单—没有哪一家重量级企业喜欢受制于人,也许KDE的Qt不需要很多授权费,但谁知道TrollTech公司以后会不会漫天要价?既然有免费的GNOME可以选择,那为什么不呢?基于此种理由,RedHat、Novell两家最大的Linux企业和SUN都采用GNOME,而它们对GNOME的鼎力支持也让该项目可拥有足够多的技术保证,为今后的高速发展奠定坚实的基础。需要纠正一个可能的误解,虽然Novell收购了 Ximian,但RedHat并没有受到太大影响,双方对GNOME的贡献都是相互共享的,因为GNOME以GPL自由版权公约发行,合作即共赢。至于 KDE项目,虽然它失去这些商业巨头的支持,但没有能力转换桌面的中小Linux厂商将继续追随KDE,而且在非商业的社区Linux发行版中,KDE依然有强大的生命力。

7.jpg

图6 GNOME 1.4解决了稳定性问题,功能初步完善。

  虽然在商业方面存在竞争,GNOME与KDE两大阵营的开发者关系并没有变得更糟,相反他们都意识到支持对方的重要性。如果KDE和GNOME无法实现应用程序的共享,那不仅是巨大的资源浪费,而且将导致Linux出现根本上的分裂。事实上,无论是GNOME的开发者还是KDE的开发者,他们都有着共同的目标,就是为Linux开发最好的图形环境,只是因为理念之差而分属不同的阵营。KDE与GNOME的商业竞争对开发者们其实没有任何利益影响(只有 TrollTech会受影响),基于共同的目的,KDE与GNOME阵营大约从2003年开始逐渐相互支持对方的程序—只要你在KDE环境中安装GTK 库,便可以运行GNOME的程序,反之亦然。经过两年多的努力,KDE和GNOME都已经实现高度的互操作性,两大平台的程序都是完全共享的,例如你可以在GNOME中运行Konqueror浏览器、Koffice套件,也可以在KDE中运行Evolution和OpenOffice.org,只不过执行本地程序的速度和视觉效果会好一些。在未来一两年内,KDE和GNOME将进行更高等级的融合,但两者大概永远都不会合为一体—GNOME还是 GNOME,KDE也还是KDE。或许你觉得这是浪费开发资源而且很可能让用户无从选择,但我们告诉你这就是Linux,它与Windows和Mac OS X有着绝然不同的文化。更何况全球有越来越多自由软件开发者(所以不必担心浪费开发资源),Linux用户的使用偏好也不可能总是相同,保持两个并行发展的图形环境项目没有什么不妥。至于GNOME项目和KDE项目的开发者们,曾经因为理念不同而吵得天翻地覆,但他们现在尽释前嫌,因为所有人都意识到,他们其实彼此需要,团结在一起可以让他们在硬件厂商面前有更大的发言权,从而促使厂商在推出Windows驱动的同时也提供相应的Linux版本,而且彼此可以相互借鉴优秀的设计,确保Linux拥有一个最出色的图形桌面环境。

8.jpg

图8 GNOME 2.12保持惯有的简洁和高效KDE与GNOME走向融合

  2006 年,GNOME与KDE都站在一个全新的起点,获得商业公司和更多自由程序员支持的GNOME踌躇满志,将超越的目光放在Mac OS X系统。也许你认为Windows Vista的半透明和三维界面将Linux远远抛在后面,那么我们告诉你这是绝对的误解,GNOME目前已经可以实现类似的效果,Novell在前几个月就向外界作过详细的演示。当前的KDE也可支持相当不错的半透明和阴影特效,技术上毫不落后于GNOME。现在,GNOME项目朝向革命性的3.0版本迈进,KDE则致力于开发同样有重大技术变革的4.0,这两个成果大概在2007年可进入现实,届时Linux系统将具备更卓越的可用性。也就是说,Linux桌面应用的全面铺开指日可待,而除了开发者和厂商的努力外,如何向企业和个人用户推广以及提供培训将是厂商要考虑的主要问题,我们今天恰好站在这样的一道门槛上。

原帖地址:http://blog.chinaunix.net/u3/100239/showart_2002154.html