You are on page 1of 102

卷首语

卷首语

开放是文档互操作的前提

10 年前,全球电脑如何实现通话是困扰人们的一个主要问题,随着 IP 标准的出现,这个问题得到了

很好的解决,并主导了商业计算硬环境,推动互联网等技术抹平世界,对全球商业模式变革产生巨大影

响。今天,在我们的软件环境也有着众多互操作的困惑,如何进一步推动企业间软件互联互通,从而让

商业价值链真正实时灵动起来已经成为一块阻碍软件向前发展的绊脚石。

其实,互操作的问题随处可见,北方网通的用户无法打开服务器架设在南方电信的网站,这是电信

运营商的互操作问题;手机用户拨打小灵通用户总是占线,这是移动运营商的互操作问题;两个同样的

x86 硬件环境却无法运行同一个操作系统,这是硬件的互操作问题。在软件领域,互操作问题更是层出不

穷,兼容内核、Wine 等一经出现就受到人们的吹捧,其很大一个原因是这些项目的宗旨是解决 Linux 与

Windows 两大操作系统的互操作。

跨平台是我们经常听到的词汇,但是如何跨平台确是人们面临的难题,在 Windows 下运行的软件成

功移植到 Linux、Unix、Aix 等操作系统之上,能有效降低 IT 环境运营成本,更为主要的是能剔除人类的

重复劳动,凝聚人类的集体智慧。

操作系统间的互操作我们能通过软件的跨平台性解决,而现今,真正让人们关心是跨平台之下文档

格式的互操作性,因为它不只涉及到不同操作平台下文档格式互不相通,也涉及到同一操作系统平台上

不同厂商的文档格式也互不相通。文档如今从某种意义上已经替代了文字,起到了保存资料的作用,但

问题出现了,资料始终是需要传阅的,该文档资料使用保存资料的 Office 套件能成功阅读,但是阅读资

料的人们使用着五花八门的 Office 套件,很多套件根本无法阅读该种文档格式。

这就需要一个标准的出现,ODF 文档格式由于其开放性及良好的解决了互操作已被国际标准组织

(ISO、IEC、OASIS)批准为国际标准,并已为国际上很多国家的政府,以及美国的一些州政府确定为该政

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》


卷首语

府公文交换、信息存储的标准格式。而由微软公司力推的 OOXML 文档格式在首轮 ISO 的审判中并未获

得通过,究其原因是因为在 ISO 的 40 余个核心成员国的投票中,OOXML 并未获得超过 2/3 的支持,按

照 ISO 的投票惯例,投反对的选票中会有一个投票意见的批注,兼容性和互操作成为这些国家投出反对

票的主要原因。

ODF 文档格式顺利成为国际标准,微软的 OOXML 文档格式遇阻,兼容性和互操作性是人们质疑的

话题,但一个更深层次的原因是开放性。ODF 文档格式因为其开放性,各个私有厂商都能很清晰的了解

到 ODF 格式的架构及源码,能很好的解决互操作的问题,不仅促进了文档的互通互换,也实现了不同系

统之间的集成,使得在多种环境之下的实现和部署更具有灵活性和可靠性,更为重要的是用户可以控制

自己的数据,而不是依存于某单一厂商。

我们可以做个假设,一企业依靠 A 厂商的文档格式实施了企业的 IT 部署,有一天,由于价格、竞争

关系等诸多因素的影响,企业取消了与 A 厂商的合作,而采用 B 厂商的文档格式,但问题是 A 厂商的文

档格式并不开放,B 厂商根本无法对 A 厂商的文档格式进行继承,那么这样就造成了企业之前的核心数

据流失的灾害。我们再大胆的假设,由于目前文档已经是信息的重要载体,而信息则是人类文明的沉淀

及延续,当记载人类文明的信息依存于某单一厂商封闭的文档格式之时,那是非常危险的,谁能保证 50

年甚至 500 年后这家厂商还存在,这厂商都不存在了,那这种文档格式又应该怎样打开阅读呢?

ODF 文档格式的存在很好的解决了这样的问题,我国制订的适合我国国情的、基于 XML 的开放文档

格式 UOF 也正在酝酿与 ODF 融合,继续发展国际标准。而 ISO 对微软的 OOXML 文档标准也在进行最终

的表决,也许本期杂志出来之时,文档之争已经有所定论,但无论 OOXML 最终是否成为国际标准,我

们希望看到的都是具有开放性的文档标准,只有开放,才是迈向统一的新起点。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》


目录

目录

卷首语..................................................................................................................................................2
产业聚焦..............................................................................................................................................7
《开源》第二期下载次数突破 17 万............................................................................................7
Netscape 正式谢幕 向互联网元老道别........................................................................................7
龙芯 7 英寸笔记本亮相两会..........................................................................................................9
微软宣布支持两个重要 Eclipse 项目..........................................................................................10
IBM 入股开源数据库公司 EnterpriseDB....................................................................................10
Sourcesense 与微软 Office 产品套件合作 .................................................................................11
Packt 公司向开源项目捐赠超 10 万美金....................................................................................12
中科红旗总裁贾栋进入中央党校学习.......................................................................................12
博客文摘............................................................................................................................................14
评微软开放"API"的“举措”......................................................................................................14
开源软件与开放标准...................................................................................................................16
十问微软 .....................................................................................................................................21
开源社区............................................................................................................................................23
项目动态.......................................................................................................................................23
OpenOffice.org 2.4.0 Final 发布...............................................................................................23
GNOME 2.22.0 RC 版本发布..................................................................................................24
开源游戏:Nexuiz 2.4 正式发布............................................................................................25
7-Zip 4.58 Alpha 6 正式发布...................................................................................................26
聊天软件 Pidgin 2.4.0 版本发布..............................................................................................27
矢量图形编辑器 Inkscape 0.4.6 发布......................................................................................27
多媒体查看器 XnView 1.93 版本发布....................................................................................28
WordPress 2.5 RC1 中文版发布..............................................................................................29
Intel 开源峰会(美国 Skamania)纪行............................................................................................30
Drupal:给内容管理无限可能.......................................................................................................35

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》


目录

开源网管软件新思维...................................................................................................................40
知识学堂............................................................................................................................................45
了解 Linux 线程技术....................................................................................................................45
重读 2.4 内核(3).......................................................................................................................50
桌面应用............................................................................................................................................58
Linux 一句话精彩问答——系统配置篇(2)...........................................................................58
Linux 下制作屏保程序.................................................................................................................62
Linux 故障恢复技巧.....................................................................................................................67
linux 配置、编译内核实用工具..................................................................................................71
Ubuntu 安装 RealPlayer 全攻略...................................................................................................75
企业应用............................................................................................................................................78
如何选择 Linux 服务提供商........................................................................................................78
使用 Cacti 监测系统与网络性能.................................................................................................82
混源新视界........................................................................................................................................97
混源:开源之道...........................................................................................................................97
CIO 掌控混源之道......................................................................................................................101

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》


产业聚焦

产业聚焦

《开源》第二期下载次数突破 17 万

《开源》电子杂志推出仅两期得到了广大开源爱好者的厚
爱,尤其是第二期电子杂志,在第一期下载量达到 7 万余次的
基础上再攀新高,下载量突破 17 万次,虽然这仅仅是一个简
单的数字,但对于我们编辑部团队,却是极大的鼓舞。
最近一月收到很多朋友的来信,有咨询、有建议、也有鼓
励,我们深感肩上的责任,这么多朋友的关注,也让我们有了
坚持下去的动力。希望广大读者踊跃投稿,一本持续的、关注
开源的、永远免费的电子杂志,这是我们的愿景,也是我们共
同的奋斗目标。

Netscape 正式谢幕 向互联网元老道别

一个让许多人首次感受互联网的浏览器将要消失于世间。
自 2008 年 3 月 1 日起,现在由美国在线(AOL)拥有的网景领航员浏览器(Netscape Navigator)将
不再得到供应商支援。
在 1990 年代中期,随着商用互联网事业起飞,超过 90%上线者都在使用网景领航员。
不过,在微软的互联网探索者(IE)和火狐(Firefox)不断蚕食用户基础下,网景的市场占有率不断
下降到只有 0。6%。网景公司建议用户把浏览器升级到火狐或者 Flock 这两种同样建基于领航员技术基础
的浏览器。负责协调火狐软体开发的 Mozilla 基金会主席贝克女士告诉 BBC 新闻说:“我想我们代表了
人们从前对网景的期盼。”“我们选取了网景推出的许多东西,但是我们在开放(原代码)与公众参与
的层面把它们进一步提升。”贝克女士是 1994 年网景的首批雇员之一。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 7


产业聚焦

网上窗户

网景浏览器是由安德森开发的。当时还是学生的他也
是第一个大众互联网浏览器马赛克(Mosaic)的制作人之
一。安德森组成的网景通讯公司在 1994 年推出其第一版
浏览器。
根据 Flock 主席兼首席执行官哈丁的说法,网景在把
互联网变成“相关的庞大市场现象”的过程中扮演着重要
的角色。哈丁告诉 BBC 新闻说:“网景在组织那些零和
一——这些非常学术和技术性的环境——并把图像化的用
户界面呈现出来有着非常重要的角色,普通人都可以上网
并利用资讯。”他说:“在那风平浪静的日子,它真的有互联网的感觉,网景真的是同一件事情。”
一些企业在网景的成功基础上聚积资本,尤其是微软,就在那时候开始把 IE 捆绑到视窗作业系统之
上。纵使这引发了反竞争行为的法律抗争,IE 现在稳占 80%的市场占有率。
结果,网景变得难以维持。
去年网景的末日首次被公布之时,德雷派尔(网景品牌经理)在官方博客写道:“当美国在线内部
团体投资了许多时间和精力想要重振网景领航员的时候,这些努力却没能从微软的互联网探索者手中抢
回多少市场占有率。”

不日回归?

在过去的一个星期,网景的用户们看见了跳出告示,通
知他们产品将不会再得到支援。告示说:“在美国在线当前
的业务重心下,对网景浏览器的支援将从 2008 年 3 月 1 日起
终止。”
然后这份告示建议用户们选择升级到 Flock 或者是火狐。
火狐是 IE 的主要竞争对手,尤其在欧洲,根据一些统计,
它取得了 28%的市场占有率。
这个公开程式源代码的浏览器的开发,由 2003 年被裁
退的网景员工组成的 Mozilla 基金会负责。这浏览器在全球得到超过 5 亿人次下载,在芬兰等国家更成为
最受欢迎的浏览器。贝克女士说:“竞争带来的就是质量。”

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 8


产业聚焦

Flock 把自己形容为“社交型浏览器”,容许人们接收来自 Flickr 和 Facebook 等社区网站的供稿,并


在无需浏览有关页面的情况下发表博客内容。哈丁说:“人们参与对话的方式有很多,而 Flock 是在尽力
把这变成是毫无难度的,越方便越好。”
但是,不是所有网景的用户们都愿意换个新的浏览器。网景官方博客有这样一篇留言:“我很伤心。
Flock 还需要再改善,我也不喜欢火狐的界面。我成了孤儿!”也有人推测这浏览器会有一天卷土重来。
一个留言写道:“网景是了不起的浏览器,它在未来也将是一样。”

龙芯 7 英寸笔记本亮相两会

3 月 5 日消息,龙芯产业化研发机构——中科龙梦公司证实,该公司提供了 30 台采用龙芯处理器的 7
英寸迷你笔记本,供两会代表亲身体验。
中科龙梦的合资股东之一——江苏梦兰集团的董事长、梦兰村党委书记钱月宝为本次召开的“两会”
人大代表。钱月宝带了 30 台中科龙梦新研发的采用龙芯 2F 处理器的迷你笔记本到北京参加两会,让参会
代表们现场体验到龙芯笔记本。
中科龙梦提供的资料显示,这款 7 英寸笔记本采用的处理器频率从 800MHz 至 1GHz 不等,据称实际
性能相当于英特尔奔腾 4 处理器 1.5GHz 至
2GHz,内存采用了 512M 的 DDR2 内存,北
桥芯片被集成在了 CPU 内,南桥芯片为 AMD
CS5536,7 英寸屏幕的分辨率为 800*480,外
部存储设备是 1 至 4GB 的 SSD 固态硬盘,4
芯电池待机时间超过 3 小时,操作系统为
Linux,其他主要功能包括 10/100M 网卡、
802.11b/g wifi 无线网卡、视频输出、VGA 接
口、2 个 USB2.0 接口,在硬件接口上已经和
普通的笔记本相差无几。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 9


产业聚焦

微软宣布支持两个重要 Eclipse 项目

近日,在 EclipseCon 2008 大会上,微软一反往日的作风首次宣布微软将支持 Eclipse 两个重要项目,


并暗示这可能会促进微软与 Eclipse 团体进行更深层次的合作。

微软首席开源倡导者,也是微软平台技术策略主管的 Sam Ramji 公开表示,微软将支持 Eclipse 两大


重要技术,并暗示微软支持 Eclipse 的项目会越来越多。微软大力支持的 Eclipse 两大重要技术是 SWT 以
及 Higgins 身份管理项目。
这是微软首次与 Eclipse 合作,据 Ramji 介绍,在上次举行 MIX 08 大会的时候,他与 Eclipse 的执行
董事 Mike Milinkovich 就如何促进两家公司合作的问题已讨论了将近一年的时间。Milinkovich 称微软这次
的举措走出了“积极的一步”,尽管微软与 Eclipse 合作的步伐还很小,但这至少预示了未来进一步合作
的可能性。

IBM 入股开源数据库公司 EnterpriseDB

3 月 25 日,IBM 对开源数据库公司 EnterpriseDB 进


行投资,并获得该公司一小部分股权。IBM 长期以来对
开源项目很有兴趣。十多年来,PostgreSQL 一直是开源

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 10


产业聚焦

数据库市场的柱石。最近几年,EnterpriseDB 异军突起逐渐成为支持和推动 PostgreSQL 发展的领先厂商。


EnterpriseDB 宣布了新一轮总额达 1000 万美元的融资,而 IBM 参与了该公司的融资。该公司目前的
投资者 Charles River Ventures,Fidelity Ventures 和 Valhalla Partners 主导了该公司的本轮融资。
EnterpriseDB 首席执行官 Andy Astor 表示,筹集的资金将用于该公司的产品开发和销售。
EnterpriseDB 成立已经四年,目前的融资总额达 3750 万美元。
EnterpriseDB 设计的开源数据库 PostgreSQL 与甲骨文公司的主要数据库兼容,可以作为甲骨文数据
库产品的廉价替代者,并且较 MySQL 有更好的健壮性。今年早些时候,Sun 微系统公司以 10 亿美元的价
格收购了 MySQL。
EnterpriseDB 的融资显示了开源数据库在商业领域的竞争力。该公司目前有超过 200 家客户,并且预
计今年将盈利。EnterpriseDB 将在 IBM 的帮助下继续推动开源数据库市场的发展。 EnterpriseDB 将重塑
品牌形象,拓展 PostgreSQL 业务,与开源竞争对手 MySQL 和所有权竞争对手甲骨文展开更为直接的竞
争。
IBM 对 EnterpriseDB 的投资同时表明,该公司面临竞争压力。IBM 的 DB2 数据库目前受到开源软件
的竞争,尽管 IBM 在 2006 年推出了免费、低端版本的 DB2 数据库,但是并没有完全公开代码。在非开
源数据库中,甲骨文是毫无疑问的领先者。

Sourcesense 与微软 Office 产品套件合作

近日,微软和欧洲开源系统集成咨询公司 Sourcesense 宣布,将在微软 Office 产品套件的开源解决方


案战略、开发和部署等方面进行合作。
双方合作的基本目的之一是帮助开发 Apache POI 的新版本。Apache POI 是 Apache 软件基金会(ASF)
的顶级项目之一,作为一种领先的开源工具,它能够创建、编辑和读取用于 Excel、Word、PowerPoint 和
Visio 的微软 Office 格式,广泛应用于相关企业的金融服务和关键企业应用领域。
Apache POI 是一种 Java 应用程序界面,用于接入和管理微软 Office 的二进位格式,能够很方便地应
用于当前海量的二进位格式文件。由于 Apache POI 库被用于无数开源项目的缘故,开发未来用于支持
Ecma Office Open XML 文件格式的 Apache POI 库对于实现互操作性来说
十分重要。
微软开源软件实验室主管山姆·拉姆吉(Sam Ramji)称:“向 Apache 软
件基金会这样老资格的、以协商一致为基础的组织提供源码,将使我们

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 11


产业聚焦

的客户和该基金会同时获得好处。通过协助开发新的 Apache 解决方案,我们将可把想法变成现实,并回


馈给该基金会。”他表示:“我们对与 Sourcesense 合作感到十分激动,它在推进 Apache 技术和开源开发
实践方面具有丰富的经验,是我们理想的合作伙伴。”
今年 4 月 7 日到 11 日,以 Apache POI 项目管理委员会主席尼克·伯奇(Nick Burch)为首的专家将在荷
兰阿姆斯特丹就如何使用 Apache POI 展开每次为期半天的培训活动。

Packt 公司向开源项目捐赠超 10 万美金

Packt 出版公司日前宣布,他们已经向开源项目捐资超过十万美
金。
他们对开源项目的捐助是从 2004 年 4 月开始的,第一个受捐赠的
开源项目是 phpMyAdmin,到目前为止,他们已经给超过 30 个的开源
软件项目提供过无偿的资金援助。
在过去的四年中,Packt 出版公司通过设立开源项目版税机制和开源 CMS 大奖等方法来为那些开源
项目来提供资金援助。开源项目版税机制使得那些开源项目从开源项目图书的发行和销售中获得利益分
成。我们对所有的开源项目都有这项政策,只有和有关开源项目相关的图书发行,没卖出一本,我们就
为该项目捐出相应数额的资金。他们的市场经理 Damian Carvill 谈到此事的时候非常高兴,“我对我们的
开源项目版税机制非常满意,能坚持到现在,并且超过 10 万美金是一个了不起的事情,我们还将继续坚
持下去。”
开源 CMS 大奖评选已经是第三个年头了,真如这个评选奖项的名字,这个评选是为那些开源 CMS
项目设立的。07 年该奖项的获得者是 Drupal 项目组,该项目组曾经获得过 Packt 出版公司版税分成机制
的资助。

中科红旗总裁贾栋进入中央党校学习

由中共北京市委组织部、中共北京市委统战部、北京市人事局和中关村科技园区管理委员会联合举
办第一届的“中关村企业家中央党校培训班”于 3 月 1 日开课。中科红旗软件技术有限公司总裁兼 CEO
贾栋等三十多位赫赫有名的中关村企业家集中进入中央党校进行为期半年的学习。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 12


产业聚焦

中共中央党校是轮训培训党的高中级领导干部和马克思主义理
论干部的最高学府,是学习、研究、宣传马列主义、毛泽东思想、
邓小平理论和“三个代表”重要思想的重要阵地和党性锻炼的熔炉。
这次中央党校为中关村企业家举办培训班,还是有史以来第一次。

据悉,此次学习主要目的是为了进一步提高中关村企业家的理
论水平和创新能力,更好地发挥企业家在我国高科技产业发展和建
设创新型国家中的重要作用。培养这些企业家的历史使命感和社会
责任感,提高企业家的战略思维、爱国情怀、管理水平。他们将在
为期半年的集中培训课里接受马克思主义基本理论、宏观经济、领
导力、执行力、决策力等培训。
中科红旗总裁 贾栋

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 13


博客文摘

博客文摘

评微软开放"API"的“举措”

中国开源软件推进联盟主席 陆首群
博客地址:http://www.lupaworld.com/16128/

微软日前宣布:为促进互操作性,微软将开放部分产品的互操作信息和应用程序接口(API)。为宣
传此事,微软高层,如首席执行官 Steve Ballmer、首席架构师 Ray Qzzie、首席顾问 Brad Smith,以及微
软全球资深副总裁、中国区董事长张亚勤博士,纷纷出动。

对于微软关于“将提高产品开放性”,“促进互操作性的里程碑”的高调表态,国内外均有一些反
应。在国外反应中,大褒大贬者不多,主要是:(1)谨慎的欢迎,认为微软为使自己适应“采用开放标
准”的世界潮流和广大用户对互操作性的强烈需求,“参与了这个互操作进程”;认为微软这次采取的
是“有一定价值的举措”,“但微软的计划显然不是一个根本性的改变”;对微软这次举措抱“谨慎欢
迎”的态度。(2)开源世界和欧盟对微软的这次“声明”,还持一定怀疑的态度。国内开源社会的主流
反应尚未看到,有些反应的调子较高,如认为微软这次是“API 大开放”,“微软正在发生巨变”;他们
反而质疑开源社会和欧盟, “不要没完没了整治微软”,“开源世界正在失去优势”,“微软走向开放,
开源当如何?!”

我对这次微软"公告"的初步看法是:小步举措,有所进步,谨慎欢迎,尚待释疑。

实现异构信息系统的互操作性反映世界潮流和用户需求。早在去年 10 月 15 日我在与微软首席研究及
战略官 Craig Mundie 会晤,谈及微软接受欧盟处罚时,我曾要求微软(在中国、欧盟和全球)开放 API
和相应的源代码;12 月 14 日微软负责协议计划的总监 Ajay Sikka 访华跟我谈到,微软为落实对欧盟处罚
时的承诺,决定开放全部内外协议,当时我问:“对微软的这个举措,欧盟满意吗?”我也谈了我个人
的感觉:“开放协议层次的互操作不是最好的方式,当然不如开放 API 令人满意。”

对于今年 2 月 21 日微软关于部分产品开放的公告,我认为,应该肯定微软向开放互操作信息方面迈
出了一步,虽说是小步,但也是一个进步,应表示欢迎;但微软的开放还是十分有限的(当然我们也不
会要求过高),有些疑点尚待于进一步弄清楚,所以只能表示谨慎的欢迎。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 14


博客文摘

这次微软开放一些产品的互操作信息,其准确内容(如 API、源代码、专利、授权等)尚有待澄清;
对微软所谓开放 API,我原以为是对这次公告所列全部产品的 API 开放;深入看下去,不是,仅是对
Office2007 开放 API;再往下细看,似乎也不是 Office2007 的全部 API,只是开放在其上增添的若干新的
API 插件。因此所谓“微软将为 Office 2007 中的 Word、Excel 和 PowerPoint 应用程序”设计新的 API,是
否可理解为:仅开放其新的 API?不开放原来的 API?这就是说,全部 API 不完全开放?

昨天我在看到张亚勤博士在新闻发布会上的说法后,对微软的所谓开放 API 才进一步搞清楚了。张


博士说:“微软将在服务包 SP2 中为 Office2007 设计更多的应用程序接口,让开发者能够插入其他文件
格式”,如此看来,微软只是在 Office2007 上提供一些新的 API 插件,而不是对其 API 实行“大开放”。

我原来准备向微软建议,此时更应开放 Windows XP 和 Office(XP/2003)的 API,似乎不符合微软这


次计划的意图。

张博士还说,微软的这次举措,与本月底 ISO 第二次讨论批准 OOXML 为国际标准一事,纯属巧合,


我看似乎是“精妙设计”。开放 Office2007 新加的“API 插件”,无疑是让一些开放的文档标准,如
ODF,UOF 为 OOXML 背书;而所谓“支持 UOF 走向国际”,不过是一句空头承诺。

有人说微软的这次举措是应对欧盟的监管或反垄断的后续行动,这是不足为怪的,微软自己就说:
“未来将出台更多举措,以满足欧盟监管部门全部要求”,欧盟也说:“微软新举措未解决一个关键问
题,也就是捆绑销售问题”;有人说:“微软的这些声明是别有用心的,值得合理怀疑”,这可能不无
道理,需要微软加以澄清,但我主张还是不要炒作,不要忽悠,就事论事,务实处理;有人说“微软走
向开放,开源当如何?”

其实要明确两个概念:(1)微软是一家企业,开源是一个社会,微软是闭源的私有商业软件企业,
开源是开放的软件社会,两者不对等,不能这样提问;(2)开源的所有产品 API 完全开放,微软的所有
产品 API 原来都是封闭、不开放的,因此在互操作问题上,双方是不对等、不对称、不公平的,我们不
管微软这次有什么所谓“计谋”,考虑微软这次将其部分产品的部分互操作信息或 API(新加的 API 插件)
开放,局部地、有控制地进入开放的软件社会,迈出的步子虽小,但也值得鼓励,要肯定是其进步;其
实微软这样做,如果符合发展潮流,也对其自身是有益的。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 15


博客文摘

开源软件与开放标准

中国工程院院士 倪光南
博客地址:http://nign.vip.bokee.com/

今天我给大家说的开源软件和开放标准,这不是属于技术问题,而是怎么应用技术的问题。开放标
准我觉得这几年口号和趋势比较明显,因为我们比较注意的是去年年底丹麦政府给 WTO 的 TBT(技术贸
易壁垒)委员会一个报告,在公共部门新的 IT 系统中将强制实行 7 套信息技术开放标准。那么 TBT 的规
则应该用国际标准,所以丹麦在给 TBT 答疑的时候,我觉得他就给你说:“我打个招呼,我不用国际标
准,我用开放标准。”那对于我们是一个很好的契机,这个意思就是说中国你也可以,我们的信息系统
也可以用开放标准。我可以不理所谓的国际标准,外国的国际标准都是很好的,那么大家知道 NTOD 国
际标准,应用到我们 DVD 产业中就受不了,它也号称国际标准,很多国际标准都一样,并采用它都没有
多少好处,但开放标准又是另外一回事了。

当然我们需要讲的开放标准的好处很明显。

(1)有利于公平竞争。开放标准给用户以自由选择的权利,保证各个厂商产品之间的互操作性,使
竞争各方可以在市场上平等竞争,用户不会被锁定于某个特定的供应商,从而能避免产生垄断。

(2)有利于减轻用户负担。在开放标准下,市场上存在着健康的竞争,用户可以选择性能价格比优
越的产品。

(3)有利于增强安全性。采用开放标准,用户可以根据自己的需要,增强系统的安全性。例如中国
的一些单位在 Linux 开放标准下,已经开发出了安全操作系统。

这个潮流这个世界就是往互联网开展,开放标准越来越流行,跟互联网是分不开的,但是开放标准
的定义是什么?没有。我可以说现在没有一个统一的定义,下面是其中之一:这个标准必须是公开可获
得的,并且在所有细节都进行了记载备案;这个标准必须是可由自由实施的,无论现在或将来,其在执
行和使用时不受经济、政治或司法的制约;这个标准必须在一个开放的论坛中(标准化组织)通过开放
的程序进行标准化和维护。

目前,标准中专利收费问题是争议的焦点。其实我觉得开放顾名思义,比较难判断的专利收费,也
是利益的问题最重要。那么我们目前来讲,很多组织都是号称我们是(RAND/FRAND)公平合理且非歧
视,基本都是大家同意的,但实际上很难判断怎样才是“公平合理且非歧视”的,所以一些标准组织提
出了“可预见的低价许可”(例如“Ex Ante RAND”)原则。事先商量好的价格,比如说你要申请一个专

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 16


博客文摘

利,事先要跟大家说好,我这个专利不超过最后收费不超过销售价的 0.1%,预先讲好价钱,可预见性的。
在互联网在软件领域,标准中的专利免费使用已成为一个趋势(例如互联网的标准),互联网最明显,
目前互联网没有看到有专利问题,所以互联网的协议都是免费的,我们也认为这与主张软件不采用专利
保护的要求是一致的,现行的中国或欧盟的专利制度都不支持纯软件专利。我们主张声明软件是版权问
题,不是专利问题。

我们很希望用开放标准打破垄断,我们知道中国 DVD 产业基本完了,为什么呢?因为专利太多,专


利费太高,做的越多给人家的费用就越多,所以整个 DVD 产业就不行了,这个是很大的教训。我们主张
政府推行开放标准来引导,我们可以看到很多标准,如我国政府推行的一些开放标准:3G 通信的
TD_SCDMA 标准、音视频编解码标准 AVS、数字电视标准、信息设备资源共享协同服务标准 IGRS、文
档格式标准 UOF。通过标准我们给产业发展,包括安全、保证能够给一个很好方向。我们就不会受到制
约,理论上讲很简单,政策无非是两个方面,一部分是技术规格,创新方面的、标准方面的,另一部分
是销售方面的。

我下面给大家介绍一个 UOF 的标准,开放标准目前我们比较关注一个文档格式标准,自上世纪 90 年


代以来,文档格式被微软的事实标准(.doc 等)所垄断,所以每个人写个投稿一定要用 DOC 格式投出去,
所有的报刊杂志都能收,你写篇稿子用其他格式就不收,因为这个已经形成了事实标准,但是这个标准
不好,这个标准它不开放,存在安全隐患,几乎每个文件都含有若干用户不知情的私密信息。这一私有
文档格式也锁定了用户,使用户依赖于微软的软件,所以这个是一个很大的问题。

这几年世界上有个潮流,要开放要互联网带起来,中国做的比较早,02 年我们就开始做了,我国有
关部门组织开发了基于 XML 的文档格式标准 UOF(“标文通”),并于去年 4 月成为国家标准。

国际上的情况是三驾马车,一架是 ODF、ODF 是即 open office 开源社区,由 GOOGLE 等公司支持,


ODF 联盟制订的、基于 XML 的开放文档格式 ODF 已于去年 5 月被接纳为国际标准 ISO 26300。

同时微软开展的比较慢,因为微软不想动,它的 DOC 很好,帮了他很多忙,控制市场,但是大势所


趋又不能不做,随着 Office 2007 的发布,微软也推出了 OOXML,企图继承老文档格式事实标准,维护
其在办公软件领域的垄断地位。2006 年 12 月 OOXML 成为 ECMA 的标准,然后提交 ISO“快速通道”,
企图通过投票使 OOXML 成为国际标准,但在 2007 年 9 月 2 日的投票中被否决。

“ISO”于 2 月底召集 37 个成员国再次开会(BRM),审议对 OOXML 提出的意见,会议开了 5 天。


各国代表可以在 3 月 29 日之前改变自己的投票。前一时期世界各国对它共提出了了 3000 多条修改意见
(后被归并为 1100 条),指出了 OOXML 中已发现的各个技术缺陷和错误等等问题。后来 OOXML 方面
给出了一个 2293 页的答复报告,试图修正。但由于问题太多,时间匆促,看来,许多修正(有人估价达
到 1/4 左右)是很粗略的或不适当的,甚至有的修正还产生了新问题。如果通过了就出现一个笑话,一个
没有变成最好文本的标准最后通过了,也可能有这种可能,因为大国的控制很厉害,我们就不详细讲了。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 17


博客文摘

目前讲的是个共性的问题。

OOXML 的现状:标准的最后文本还来不及形成(估计总文档约 10000 页)。各国提出的数百个问题


还没有得到满意的解决,只有 18%提出的问题在 BRM 会议上得到了讨论。OOXML 将会形成多个不同的
标准,它和具体实现标准的产品(微软 Office 2007)之间的符合性也无法评估。

在这种情况下如匆忙将 OOXML 通过为国际标准,将影响 ISO 的公信力。考虑到 OOXML 有长达


6000 页的指标说明,现在又加上一个长达 2293 页的文件对超过 1000 个缺陷进行修正,OOXML 已与当初
提出时有很大的不同了,而这些重大变化根本还来不及进行评议,在这种情况下,如果匆忙地将它通过
成为国际标准,显然是不严肃的。

开放标准很重要,但是有些国际上的标准并不好,中国应抓住机遇,历史经验表明,文档格式基本
上只会有一个标准,在文档格式从老的二进制格式向新一代格式转变时,中国应抓住机遇,争取使国家
标准 UOF(或今后 UOF 和 ODF 融合起来的国际标准),取代老的事实标准,从此掌握信息资源控制权,
并在办公软件领域形成公平竞争环境。

把软件拿来看看是否符合我们的标准,这是一个很重要的关键。意义在什么地方,我们可以在一个
领域,特别是在文档这样一个重要领域,我们可以摆脱垄断,那么对产业内影响,我们觉得不是一个简
单的文档问题,因为有了这个文档标准,人家就知道国产 OFFICE 最好,比微软要好,我们的标准要比微
软的好,微软要学我们的标准,我们现做,因为国产 OFFICE 好,我们就可以说操作系统用 Linux,因为
OFFICE 很重要,Linux 好了国产的 CPU 就可以用,国产的 CPU 不能用 WINDOWS,对国家来讲就是个
产业链的问题,标准可以带动很多东西,带动办公软件,带动操作系统,带动 CPU,所以对我们的意义
还是很大的。

下面就讲一下开源软件,实际上开放这个标准和开源软件不是一回事,开放标准是一些接口规范、
文档格式规范、通讯协议等:开源软件就是一个代码、一个软件。不过在两者之间还是有很大的密切关
系,因为我刚刚说开放标准是一个潮流,开源软件也是一个潮流,特别在互联网来看,互联网主要应用
主要的系统就是开源的,比如 Google 就是全部用开源软件的,所以他能发展起来,如果用微软软件早就
被控制起来了,因为都是开源的。互联网本来就是互为支撑的,对中国来讲是一个很好的机会,我们的
软件可以在开源软件的基础上发展起来,不需要从零开始去做,因为发展的晚这几年才做,人家都做了
几十年了,怎么跟上人家,好在有开源软件,在这个基础上做你就能达到国际水平。推广开源软件有利
于中国软件业的自主创新,有利于建立中国自主软件产业体系,有利于实现低成本的信息化。

开源软件、开放标准本身是一致的,如果我们开源软件搞的很好,变成事实标准,windows 变成事实
标准,office 变成事实标准,开源软件可以很好地支持开放标准;即使开源软件的广泛使用形成了某些
“事实标准”,它们也仍然是开放标准。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 18


博客文摘

开源软件和开放标准有天生的互相融合的互相支持,所以我们可以看到某些国家还是很有眼光的,
比如荷兰,荷兰就是比丹麦更进一步,它强制在政府部门之中采用开放标准开源软件,丹麦上是一开始
讲到的是采用开放标准,目前荷兰除了开放标准以外,还规定这些政府部门采用开源软件,实际上国外
的比较好的比如巴西、委内瑞拉有些国家也是做的很好,也用立法来保证的,中国这个方面比较难做,
中国往往都说 WTO 啊,中国采用开放标准没有问题,像丹麦已经做的,中国如何采用开放标准,有些事
情中国还没办法做成,比如国产了人家说你违反 WTO 不太好做,中国实际上开放标准还是可以的,没人
能反对你,不好说你违反 WTO 了,所以应该学国际上这些做法,对于我们在信息化过程中,应该用开放
标准、开源软件加速我们的进度。中国应当学习这些国家的经验,加大推广开放标准和开源软件的力度,
促进软件领域的自主创新,推动软件产业的发展,加快信息化的步伐。

我们觉得开源软件特别是 Linux,我们值得注意的是一个是中国政府的预装操作系统,我们知道中国
政府这个说的很好,就是要求 PC 要当操作系统,正版的,那么正版的很多公司用 windows,也有的用
Linux,当然他们不一定真正用,他们会卸载掉,用盗版替代,但是我想以后随着正版化的加大力度,将
来保证我们有市场,去年中国一年 2000 多万的 pc 机,以后越来越多的有上千万的,没有精确统计,这个
就是一个市场。

《国家中长期科学和技术发展规划纲要(2006-2020 年)》确定了一些重大专项,包括“核心电子器
件、高端通用芯片和基础软件产品”专项,其中,基础软件(操作系统、数据库、中间件和办公套件等)
很多都基于开源软件。实施这一专项表明中国发展自主软件产业的决心,也表明以 Linux 为代表的开源软
件在中国有广阔的发展前景。这就规定了国家在时间内一定要重点的发展,这是一个很重要的决策,就
是我们很多技术软件属于开源软件,特别像操作系统之类的,特别是 Linux 操作系统,所以对开源软件从
国家政策上给予的保证。

俄国信息技术和通信部长 Leonid Reiman 称,到 2009 年俄国所有学校都将安装 Linux(Rissian


OS)。巴西官员称,巴西有 2/3 的操作系统采用 Linux。印度、德国、委内瑞拉、韩国等国政府都采取了
推广 Linux 的措施。HP、Dell 等大 PC 厂商推出预装 Linux 的 PC,华硕的采用 Linux 的 Eee PC 在市场上
很受欢迎。我们不敢说完全这样,我们要注意到市场上也是很好推广我觉得这个趋势来讲,Linux 的推广
也是没有问题的。

开源软件全方位影响中国软件产业,尤其是在基础软件领域,开源软件打破了跨国公司的垄断,许
多基础软件都是基于开源软件。对软件来讲对中国来讲,非常重要就是降低门槛,我们发展软件不需要
投入那么多,不需要那么多时间,因为我们可以在开源软件的水平上,我们要注意到世界的潮流,就是
开源软件应该说它的趋势大概就是每一年半左右翻一番,不断的发展越来越多,因为全世界越来越多的
人投入进去。开源软件特别有利于发展中国家,有利于自主创新,它大大降低了发展软件的门槛,节省
了时间和投资。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 19


博客文摘

开源软件已渗透到软件的各个领域,从 CPU 开始,我们看到从基本输入输出、虚拟化技术、操作系


统、数据库管理系统、中间件、一般应用软件、互联网应用软件、又到解析方案和服务,每一层都有相
应的开源软件可以用,只要按照一定的许可,都可以在这个基础上发展。开源软件是全世界大家的财富,
你不能自用,你应该用了以后把我们的发展回馈给开源软件,所以这个模式在全世界这个开源软件本身
是可以持续发展的,经得起时间的考验。

我们可以看到这样的模式将会给中国的整个软件给予很大的作用,特别是最重要的技术软件,技术
软件最明显,技术软件像 Linux 这些开源软件发展起来的,应用软件也有很多,不只开源软件,软件服务
有些在欧盟估计占到 16%,这个数目不断的在增加,我们看到系统集成也有开源软件的方案,中国牵手
软件这个手机,现在已经是第三了,第一个是诺基亚,第二是微软的 windows 这个模板的系统,第三就
是牵手的,现在发展很快而且我们中国将来会更多的应用,因为它不需要授权,最小的可能是外包服务
方面的费用,从整体来讲对中国软件各个部门都有很大的贡献,所以我今天就给大家提供一个观点,中
国进口的发展我们要加强,包括企业也一样,开放标准和开源软件是一会机会,如果加入这个计划,希
望中国的信息化更快的起来开源软件与开放标准。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 20


博客文摘

十问微软

袁萌
博客地址:http://blog.csdn.net/yuanmeng001

3 月 11 日,pieterh 撰文“十问微软”(英文原文“Once again, what`s wrong with OOXML”),阐明


一些重要观点。现摘译成中文,让我国读者看看国外是怎样反对 OOXML 的,再对照一下我们国内情况,
颇有意思(启发)。“十问”如下:

一、OOXML 格式本身是令人讨厌的(horrid),把一些遗留物(Legacy,指微软 Office 内容)倾倒在表


面上掩盖着的 XML 之下,而且称之为“Open XML”。

二、把 OOXML 提交“快速通道”是荒谬的(absurd),OOXML 很粗糙,充满 Bugs,体积过于庞大,


不利于在“快速通道”期间处理。

三、ISO 之腐败:ISO 为何接受把 OOXML 投入“快速通道”?为何在 OOXML 投入“快速通道”之


后的第 3 天,JTC1 的“快速通道”规则就(专门为 OOXML)而加以修改(ammended)?为何由 ECMA
的同一个人负责 OOXML 和“快速通道”事务?

四、微软控制了一些国家的标准组织,在其中“插入”(stuff)了微软人员,甚至担任了“主席”职
位,同时修改了“不得加入”该组织的规则。一些从未涉及标准讨论的国家,为何突然地就成为“p-成
员”国家(而且投 OOXML 的“Yes”票)?

五、制造“快速通道”的假象(illusion):为何在 5 天之内 BRM 就处理了 1,000 多个评论意见?不


经过进一步的讨论,BRM 召集人就让各国赴日内瓦代表团大批地就 ECMA 对 OOXML 的修改进行投票表
决,这是哪里的规矩?为什么让“O-成员国”(观察员)在 BRM 会议上参加正式的投票表决?BRM 的
议事规则为何不曾向任何人解释?为什么(事先)对赴日内瓦参会(参加 BRM)的代表团提出要求,要
求他们必须最终接受 ECMA 的文本或是对其提出的修改意见?

六、谎言和宣传。微软为何一直坚持说是欧盟委员会要求 OOXML 成为 ISO 标准?微软为何断言两


个标准就意味着“more choice”(“更多的选择”)?微软为何如此卖力地宣传这些谬论?

七、专利问题。据估计,OOXML 内含 200~300 微软专利。为何微软不能清楚地解释它的 OOXML


专利?为何微软对其专利许可条款解释不清?微软假装对自由软件友好,而不动真格的?

八、所有权问题。微软宣称要把 OOXML 的维护权交给 ISO 委员会,但是,ISO 委员会里面都是微

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 21


博客文摘

软的朋友,这里哪有“协商一致”的可能?各国标准团体的许多修改意见谈何吸收到 OOXML 之中?

九、烟雾与真实情况。实际上,OOXML 甚至不是微软 Office 所采用的文档格式。整个的


OOXML“标准化过程”就是一种欺诈(fraud),它是一种微软从未实现并且将来也不会正式实现的文档
格式。任何想要与微软 Office 实现交互的应用程序都必须发现和使用一些未曾被文字说明的扩张(标志
扩张),从而使得微软有可能及时修改它,很好地使用它,同时又假装与 ISO 兼容。

十、对 ISO 的损害。在微软看来,把合作伙伴“一古脑儿”(en-masse)推到投票会上,也许是


“commen sense”(“常识”),但是,对于那些严肃对待“标准过程”的人们而言,这简直就是一种
“冒犯”(“offensive”)。未经讨论,就叫各国家标准团体进行投票表决降低(demean)了他们的身份,
而且也侮辱(insult)了那些为标准事业贡献长达数十年时间的人们。

在当今形势下,我们虽然赞成 OOXML(可能投“Yes”票),但是,也要让微软明白它们的 OOXML


心肝宝贝儿实际上是怎样获得 ISO 标准“桂冠”的。该文作者的最后一句话是:“This fight won`t end on
March 31st”(“这场战斗不会在 3 月 31 日终止”)。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 22


开源社区

开源社区

项目动态

OpenOffice.org 2.4.0 Final 发布

OpenOffice 原是 Sun 公司的一套商业级 Office 软件:StarOffice,经过 Sun 公开程序码之后,正式命


名为 OpenOffice 发展计划,并由许许多多热心于自由软件的人士共同来维护,让大家能在 MSOffice 之外,
还能有免费的 Office 可以使用。

近日,OpenOffice.org 2.4.0 Final 正式发布。OpenOffice 是个整合性的软件,里面包含了许许多多的


工具,其功能绝对不比微软的 MS Office 差,不但可以有 Word 一样的字处理,制作简单的图形,更有功
能强大的图表功能,也能编写网页,还可以做出 MS Office 中很难处理的数学符号等等,支持了 XML、
微软的 doc、Excel、ppt 文件等格式。感兴趣的朋友可以通过 http://ftp.stardiv.de/pub/OpenOffice.org/stable/
2.4.0/OOo_2.4.0_LinuxIntel_install_wJRE_en-US.tar.gz 进行下载。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 23


开源社区

GNOME 2.22.0 RC 版本发布

近日,GNOME 开发团队发布了 GNOME 2.22.0 的 RC(候选发布)版,该版本显示的版本号为


2.21.92。据悉,这是 GNOME 2.22.0 在 3 月 12 号正式发布之前的最后一个不稳定版本。那么,GNOME
fans 就静待那一刻的到来吧。

这个版本对 GNOME 中所含的程序和组件有一些改进,并进行了除错方面的工作:

Totem:添加了对 audio/midi 的支持;

Nautilus:允许最小化进度条显示窗口,能够更好的处理桌面文件图标,修正了编译、崩溃等问题;

GVFS:添加了 gphoto2 后端,支持 Keyring 等;

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 24


开源社区

开源游戏:Nexuiz 2.4 正式发布

Nexuiz 是一个基于 DarkPlaces 引擎的第一人称射击游戏。最近,该游戏推出了 2.4 版本。新版本包


括全新的菜单设计和 UI 图形、添加了 Strength 和 BloodPrison CTF 两张地图、新的武器模型、新的爆炸和
倒影效果等。此外,Nexuix 2.4 还对性能和网络进行了改进,并减少了内存占用。

Nexuiz 是开源游戏,支持 Linux、Mac OS X 和 Windows 平台。您可以从这里下载:


http://www.alientrap.org/nexuiz/downloads.php。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 25


开源社区

7-Zip 4.58 Alpha 6 正式发布

7-Zip 是一款 GNU/LPGL 协议下分发的开源软件,是目前最有希望成为 zip、rar 之后的下一个主流压


缩格式的文件压缩格式了,日前,7-Zip 4.58 Alpha 6 正式发布。7zip 的压缩率是他最大的竞争优势,在选
择普通压缩率的情况下我们已经可以轻松击败 winrar 的最高压缩率了。但是 7zip 也不完美(要是完美了,
RAR 就已经被取代了),主要是软件的界面依然不够优秀,格式本身对于分卷压缩的支持也不好,但是这
不妨碍 7zip 成为最有潜力的压缩格式。有兴趣的朋友可以通过此地址进行下载:http://www.7-
zip.org/alpha/7z458a6.exe。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 26


开源社区

聊天软件 Pidgin 2.4.0 版本发布

近日,Pidgin 发布了 2.4.0 版本。新版本对 libpurple 库、Pidgin 及


Finch 都有所改进。比如,libpurple 添加了对 AIM 的离线消息支持、现
在支持 Yahoo!、 Messenger 7.0+以上版本的文件传输方法、Pidgin 聊天
窗口的文字输入区域能够自动调整大小等。另外,Pidgin 2.4.0 也对一
些 bug 进行了修正。有兴趣的朋友可以通过此地址进行下载:
http://pidgin.im/download/。

矢量图形编辑器 Inkscape 0.4.6 发布

如果有人在 Linux 平台上寻找类似 Illustrator 或 CorelDraw 这样的软件,那么 Inkscape 是不可回避的。


Inkscape 是一款自由开源的矢量图形编辑软件,它采用 W3C 标准的 SVG 文件格式。最近,Inkscape 开发
团队发布了 0.4.6 正式版,这是一次非常重要的发布。新版本不仅改善了程序执行速度和用户界面,而且
还增添了不少新功能,值得 Inkscape 的使用者为之升级。

Inkscape 0.4.6 主要具有以下发布亮点:

◆新增了油漆桶工具、调节工具和 3D Box 工具,并对渐变工具、书法工具、选择工具、节点工具、矩形


工具、椭圆形工具、钢笔/铅笔工具、滴管工具进行了增强;

◆支持打开包含 tref 元件的文件,为 SVG 添加了新


的滤镜效果;

◆增加了实时路径效果及扩展效果;

◆支持导入 PDF、AI、CDR、XAML、WMF 等文
件;

◆对色彩管理、网格、参考线等功能进行了改进。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 27


开源社区

多媒体查看器 XnView 1.93 版本发布

XnView 是一个图像浏览器和多媒体播放器,它能够支持大约 400 种文件格式,近日发布了其 1.93 版


本。XnView 同时还支持动画 gif、多页面 tiff、多图像图标以及 mpeg、 avi、 wav、aiff 和 Quicktime 格式
的文件。此外,XnView 还具有浏览器、幻灯片、屏幕捕捉、缩略图制作、批处理转换、十六进制浏览、
拖放、通讯录、扫描输入等功能。该软件支持 44 种语言,并能够在 Linux/FreeBSD/Irix/Solaris/HP-
UX/AIX 等操作系统中使用。感兴趣的朋友通过此地址进行下载:http://download2.xnview.com/XnView-
win-full.zip。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 28


开源社区

WordPress 2.5 RC1 中文版发布

经过漫长的耐心等待,WordPress 开发团队终于发布了 WordPress 第一个公开测试版,WordPress 2.5


RC1。与之前版本相比,WordPress 2.5 有很大的改进,包括可自定义的控制台,多文件上传,内置画廊,
插件一键升级,标签管理,内置头像,全文 Feed,以及更快的载入速度等,WordPress 2.5 吸引着许多
WordPress 用户的目光。

目前发布的 2.5 RC1 版,是一个公开测试的版本,尽管与正式版已经差别不大,但仍然建议大家不


要在生产环境中使用。

同时,WordPress 中文化网站已经完成了 WordPress 2.5 RC1 的全部汉化工作,包括语言包和若干相关


文件的翻译,供中文社区的 WordPress 爱好者测试安装。

WordPress 2.5 RC1 中文版以及中文语言包的下载地址:


http://code.google.com/p/wordpresschina/downloads/list

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 29


开源社区

Intel 开源峰会(美国 Skamania)纪行


——本刊副主编独家对话 Linus

陈绪

随着 Intel 在中国开源领域的深度参与和巨大贡献,中国的很多开源朋友都慢慢知道了,Intel 内部有


个 OTC(开源技术中心),是专门做 Linux 和开源的。而更为可喜的是,这个队伍在中国也有很庞大的
工程队伍。我有幸就是中国 OTC 的一员,参加了 OTC 2008 年的开源的峰会,2 月底在美国 Skamania 举
行。这次的美国之行,可谓收获颇丰,特以此纪行的模式,和开源爱好者共享、共勉,希望能找到世界
开源的大方向,找到中国开源届在大潮中搏浪的希望和切入点。

记事录

Skamania 是华盛顿州的一个地名,位于该州和俄勒冈州的交界处,为著名的休闲胜地。每年 2、3 月


为当地的雨季。于是我们的大会就选址于此。老板的说:cage you,就是将你们都关在这个旅馆里,不能
出去,但是有充分的时间,好好琢磨一下 team 的发展,琢磨今年的工作重点。

2 月 25 日

下午,我和北京 OTC 的三名同事坐上了久违的 CA 航班,到达美国旧金山机场的时间也是当地时间 2


月 25 日下午,然后是转机,于 2 个小时之后抵达俄勒冈的 Portland 机场。开上租来的雪佛莱,我们于 1
个小时之后抵达 Skamania lodge。很高兴看到上海的同事已经前期抵达,更高兴地看到天气居然非常之好,
没有任何下雨的迹象。

当天晚上是一个欢迎晚宴,就是简单的自助餐。但是宴会上,我看到了 OTC 所有的经理级成员。事


实上,作为一个特别注重全球交流的国际性公司,每年都有很多的 OTC 美国同事到中国做技术交流和市
场考察,我们也定期过去,但是要看到所有的人,恐怕非此次莫属。

Intel 有个规矩,每次开会之前都要问自己,开会的目标是什么,是要解决什么问题。这次大会概莫
能外。我的理解:

1.OTC 讨论本 team 今年的发展和规划;

2.和 Intel 其他的重要部门交流,讨论如何协作,并顺便扩大 OTC 在 Intel 内部的影响力;

3.和开源社区,特别是内核社区,交流,讨论,探讨开源形势,及进一步的合作和发展。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 30


开源社区

2 月 26 日

一个整天,是 OTC 的经理级会议。今年的核心重头其实是 MID(Mobile Internet Device)。我记得 1


月份的 CES(消费电子产品峰会)上 CEO Paul 就出场宣布,今年是 Intel 大举进军消费类电子市场的开始。
中国的落脚点是红旗,他们是迄今 Intel 在 MID 上唯一支持的一家中国 Linux 操作系统厂商。关键在于
MID 的定位,我的理解是:和使用电视机一样简单易用的手持式移动计算机。MID 是一种很酷的东西,
好不好自己用了才知道。

就在这天晚上,我第一次见到了 Linus 的真人。

2 月 27 日

早上是软件部门大领导—总经理 Renee James 女士的讲话,她讲的是 OTC 对软件部门,软件部门对


Intel 的巨大作用,以及开源给她带来的好处,我是做战略的,我印象最深的是一个词:Strategical
Freedom,这似乎是战略相关人员的理想境界,而 Linux 和开源这在方面对我们帮助巨大。Intel 在制定和
操作系统厂商相关战略的时候,有了更多的厂商可以合作和选择。

接着是 Linus 的讲话,典型的技术人员,不修边幅,说话也处处犀利。但是,我注意到,Linus 比较


认可 Intel 对 Linux 和开源的态度和奉献。

其他是一些技术讲座,我听的有如下:Using Linux inside Intel, writing Device Drivers for Linux, iCAP
& OSS, Open Source Industry Analysis: Trends and Implications to Intel, Linux in HPC。

说到这里,顺便提一句,Intel capital 对中国开源领域的投资也准备了充足的美金,有兴趣的朋友,


欢迎和我(linuxmine@gmail.com)联系。

晚上,和 Linus 聊了一会儿,顺便照了张合影。

2 月 28 日

早上是系统软件部的领导 Doug Fisher 的讲话,他是对 Renee 讲话的细化。

其他是一些技术讲座,我听的有如下:State of Linux (Greg KH), lesswatss.org – Saving the world a CPU


at a time, Moblin.org – The Intel mobile Linux software platform 等。

当天下午,大会结束,我们开车抵达 Jones Farm1 附近的旅店,Marriott。

题外话:就是在这天夜晚,也就是中国时间 2 月 29 日 17:17 分,《开源》杂志第二期正式上线提供


下载。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 31


开源社区

2 月 29 日

到 Jones Farm 的拜访和会议,巨大的变化,发生于办公环境的改革,布局变了,加上了游戏机,可


以在休息时候玩。

我的会议不多,只有一个。利用空余时间,我到处参观了一下环境。我终于了解和熟悉了 JF1 迷宫似


的布局,能够在没人带领的情况下,随意到达任何 cubicle 了。

3月1日

早晨 5 点起床,开车到波特兰机场。7 点的飞机,9 点到旧金山,下午 2 点多,我们坐上了熟悉的 CA


返程。

3月2日

下午 6 点,抵达首都机场。

Linus 访谈录

大家一般看到的是 Linus 的网上访谈录,正如 Linus 一直说的那样:我一般不开会,也不接受当面采


访。这次在 Skamania 看到他,也是非常幸运的,还是引用 Linus 的话:我比较喜欢 Intel。我加上一句,
他就住在 Oregon 州,近也是一个优势。

2 月 27 日晚上,大家都在吃茶点,我也凑过去,和 Linus 聊了一会儿。

陈绪:我是 OTC,从北京来的。

Linus(笑):很高兴见到你。

陈绪:你可能不知道,中国你有多少粉丝。根据我的记忆,你从来没有来过中国,为什么呢?

Linus:是的,我没有到过中国。10 年之前,我为了宣传 Linux,满世界旅行,到过很多国家,但是当时


也没有到过中国,因为当时中国就没有太多 Linux 的概念。现在,大家都理解 Linux 了,我也不用到处跑
了。另外,现在我不太喜欢旅行,因为太花时间,太累。

陈绪:你现在每年还去澳大利亚吗?

Linus:我一年有两次旅行。一次是澳大利亚,那里非常放松,而且我也习惯去了。另外一次是 Linux 内
核峰会,那是我的工作(笑)。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 32


开源社区

陈绪:是不是考虑去中国看看?

Linus:去年(2007 年)我夫人到中国去过。她是环球旅游,多个国家吧,也包括中国。她还带去了我们的
一个小孩,当时她让我陪她去,我说太忙了。

陈绪:我相信总有一天你会有机会到中国看看,那么你最希望看到什么?

Linus:看到社区的开发者,越多越好。

陈绪:其实,中国的社区对你个人也很感兴趣,比如说有个小问题还一直没有答案:你喜欢用什么编辑
器?

Linus:我用的编辑器比较少见,叫 MicroEmacs。是一个跨平台的编辑器,我在 mac、Linux 等系统上都


使用它,也十多年了。

陈绪:听起来和 Emacs 有某种关系,目前发展快吗?

Linus:不,和 Emacs 没有关系,开发也比较慢。

过了一会儿,我记起了我的相机,然后找美国 OTC 的同事帮着给我和 Linus 照了一张合影,在这里


和大家共享。

Linus 与笔者合影

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 33


开源社区

这里还有一张照片,也是 2 月份 Andrew Morton 到中国来,和我的一张合影,一并奉上。

Andrew Morton 与笔者合影

沉思录

旅行是辛苦的,倒时差,到处跑,听讲座……但是更为沉重的是,对中国 Linux 和开源届前途的思考。

客观来说,目前中国的整体水平比世界的水平要低,起步也是慢一拍。我们应该如何发展?中国的开源
爱好者,能够从国外的社区,跨国性企业,或者从 Intel 中国的庞大研发团队这里获得什么帮助呢。

Intel OTC 在支持所有的 Linux 发行版厂商,红旗、CS2C、Turbo、红帽、Novell、Ubuntu 等等。

我更喜欢把我的工作分为 6 个大方向:政府、教育、OSV、ISV、社区、媒体。社区是我花费时间最
多的,我希望更多的社区朋友,开源开发者,爱好者,能够从我这个 Intel 中国的开源窗口这里,得到帮
助,无论是资金支持,还是技术合作。

今年的 MID 是一个大方向,也希望中国开源届的朋友,能充分利用这个平台和机会。大家有时间可


以去 www.moblin.org 看看。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 34


开源社区

Drupal:给内容管理无限可能

朱珠

Drupal 是一款 PHP 核心的内容管理程序,使用 MySQL 或者 PostSQL 作为数据库引擎;以 GPL 授权


协议方式发布。通过长达 5 年的发展,现在它已远远超越了一个内容管理系统定义,对于一般用户,它
是一个功能强大的内容管理系统,对于高级用户(本身具有 PHP 开发经验的用户)来说,它还是一个功
能强大的内容管理开发工具,同时也可以作为一个单/多用户的博客系统,同时其强大的主题管理与定
制系统能让站点千变万化,拥有特色。毫无疑问,及高安全、快速度、易开发于一身的 Drupal 目前以是
内容管理系统中的闪亮明星。本文就将从各个方面对 Drupal 作完整介绍,让各位读者深刻感受这款开源
软件的魅力。

项目历史

Drupal 本来是 Dries Buytaert 所写作的一个论坛程序,到现在它已经发展成为一个内容管理开发程序,


内容管理系统和博客引擎,Drupal 的一个最大特点就是非常灵活的编程结构,使用极为严格的 PHP 代码
编写规范编写,这样使它能够很好的被升级、管理、扩展和二次开发;目前有很多著名的站点在使用
Drupal 作为内容管理系统,比如 Debian Palanet、Spread Firefox、NASA(美国宇航局)等。

提起 Drupal 的名称,它是由一个德文单词“druppel”的英文拼写变形而来,意思就是“drop”,这个
名字来自 Drop.org 站点(现在已倒闭),它的代码使 Drupal 发展的很慢。Dries 起初是想把这个站点起
名为“dorp”(德文中就是“村庄”之意,这主要是想突出开发社区的开源特性),但是为了发音更容易
就使用了现在“Drupal”这个名称,并且于 2000 年正式开始了 Drupal 项目。

目前动态

经过长达一年多的开发,Drupal4.7 终于在近期发布。五年多以来,Drupal 一共发布了 13 个主要的版


本,有超过 30 家的公司雇佣了 100 名 Drupal 的专业人员工作,当然这些公司都是使用 Drupal 作为其内容
管理系统的。并有 300 多个模块以及超过 55000 的使用者。值得注意的是在开发 4.6 的时候,Drupal 一共
有 50 个开发者提交了 523 个改进,而在 Drupal4.7 的开发过程中,338 位贡献者一共提交了 1500 个改进,
可见 Drupal 在这一年多来有了飞速的发展。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 35


开源社区

Spreadfirefox 站点

社区文化

Drupal 的开发社区成员众多,分部在不同国家,主要分为:核心开发人员、模块开发人员、主题开
发人员,其他的非正的开发者还包括测试人员、自愿国际语言翻译者等。Drupal 开发者社区还专门为开
发人员建立了专门的开发文档网站,开发者可以通过浏览器直接查阅 Drupal 的开发文档,包括主程序结
构、代码函数、开发指南能等;就算你不想成为一个正式的开发人员,你想要定制用 Drupal 定制你的站
点,这个站点是最好的指导与知识库。除代码开发外,还有一个专门的主题开发站点,这是专门为
Drupal 主题开发社区所建立;普通用户则可以在这里下载到非常丰富的主题资源。

不同语言的社区也有很多,其中规模比较大的是西班牙语和法语的社区,到笔者撰写本文时,得到
了 Druapl China 社区站点刚刚上线的消息,当然每个不同语言的社区都有自己的站点,通过网站和 IRC 聊
天室社区成员不停的交流经验,老成员帮助新成员,这样的良性循环让 Drupal 社区变得非常强大,同时
也让项目有了持续发展的动力。

Drupal 社区成员也常常通过邮件列表进行日常交流,在邮件列表上,你可以向其他人请教问题,也
可以发表自己的观点和看法,在 Drupal 社区里总有很多热心人会帮助你,并不在乎国籍、宗教、信仰,

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 36


开源社区

只要你的问题和观点于 Drupal 相关。如同一个大家庭一样,Drupal 社区成员还会经常举行一些聚会,比


如最近有“London Meet”、“Piars Meet”,当然也有一些非常正式的会议,主要是通过这些会议来讨论
Drupal 的发展规划与重大决策等。

因为 Drupal 本身就是开源社区的产物,所以它很容易的就被开源社区的其他项目所接受,目前有很
多开源项目就是使用 Drupal 作为其站点的内容管理系统,比如国内 Linux 用户熟悉的 MagicLinux 和
Hiweed 等;更值得一提是很多开源社区的交流站点也非常喜欢使用 Drupal 来运行自己的站点,比如中文
的就有 LinuxSir,debian Hongkong 等,这些都是 Drupal 的有力支持者,同时也为 Drupal 的宣传于普及作
出了巨大的贡献。

编程思想

Drupal 没有使用许多 PHP 的 OOP(“面向对象编程”的缩写,下同)特性,但是却使用了非常多的


OOP 结构,比如 Objective-C 的“categories”,然而这些都是 PHP 缺少的一些 OOP 结构。

在 drupal 中有许多结构符合“对象”的描述。Drupal 组成部分中可认为是对象的、最突出的一些有


模块、主题、节点(Nodes)和用户(Users)。下图为项目主页

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 37


开源社区

节点是一个 Drupal 站点的基本内容构件,即一些数据捆绑在一起构成一个典型站点的“页面”。操


作这一对象的方法定义在 node.module,通常由 node_invoke()调用。表现用户的 user 对象同样将数据包装
在一起,包括用户的账户信息、个人信息、和会话跟踪。在这两种情形下,数据结构都被定义在数据库
表中而不是在类中。Drupal 使用它支持的数据库的关系特性,使其他模块可以扩展对象,如增加额外的
数据域值。

节点也是传统意义上的多态。如果一个模块需要显示一个节点,例如,它可以对节点调用
node_view()得到节点的 html 表示。然而,实际的 html 生成过程完全取决于传递给函数的节点类型;这个
和有一个类按照接收到的消息类型决定自己的行为是直接类似的。Drupal 自身负责处理这种通常由 OOP
语言运行库处理的内部任务。

此外,这个例子中节点的 html 生成也受当前活动的主题的影响。主题也象 node 的方式一样是多态的;


主题接收到“表现这个节点”的消息,然后按当前活动的主题定义的方式响应,虽然接口是固定的,但
各个主题间的“表现”方式可能完全不同。

模块和主题同样也具有“对象”特性,在很多情况下充当“controller”的角色。每个模块都有一个源
文件,不但捆绑了一系列相关的函数,同时也遵从已定义的 Drupal Hook(调用-钩子)的模式。

模块和主题可以任意定义它们需要的功能。然而,它们都会考虑从基本的抽象类中继承它们的行为。
在主题中,这个基类是由 theme.inc 文件中的函数定义的;如果一个主题没有重载其中的函数,即使主题
提供了替代的“表现”函数,显示时也会使用缺省的“表现”函数。模块的情况也是完全类似的,Drupal
有很多 hook 可供选择,模块可以选择一些来实现。

此外,Drupal 的 Hook 系统是它的界面抽象层的基础。Hook 定义那些调用模块或由模块调用的操作。


如果一个模块实现一个 Hook,就是当 hook 被调用时按约定执行一定的功能。调用代码不用了解模块的任
何信息或者被调用时 hook 是怎样被实现的。

Drupal 内部结构中的大多数都比简单的继承和消息传递来得复杂,然而,系统中最让人感兴趣的特
性还是使用已有的软件设计模式获得的。例如,许多在经典的四人帮《设计模式》中描述的模式都可以
在 Drupal 中看到。

发展前景

在飞速发展的互联网上,Drupal 一直走在内容管理系统与开发的最前列,因为它有自己的活跃社区,
有着顽强的生命力;随着 WEB 2.0 时代的到来,Drupal 也会不断的升级和创新,如同一个生命周期一般,
可以说 Drupal 才刚刚出生,但正是这个刚刚出生的小生命却给了人们巨大的震撼与无限的希望。随着越
来越多开发者和用户的增加,Drupal 的发展将会更快更稳。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 38


开源社区

总的来说,Drupal 不但是一款值得用户信赖的开源软件,而且它的设计理念、开发模式也是值得我
们所学习的;随着网络应用的日益深入,相信 Drupal 也会随之进步,未来谁都不能确定,我们只能尽各
自所能做得更好,Drupal 也是一样,它会在不断更新最得更好,尽一切可能展示着来自开源项目与开源
社区的巨大魅力!

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 39


开源社区

开源网管软件新思维

顾宏军(来自 Linuxpk.com 学习方法版主 redarmy)

随着 SaaS、P2P 等各类在线应用的兴起,使得各类在线应用服务公司采购了大量的服务器等 IT 设施、


而如何对庞大的 IT 设施进行有效的监控和管理,一直是很头疼的问题。以往,网络监控软件都是商业软
件的天下,主要是 BMC Patrol、CA Unicenter、HP OpenView 或 IBM Tivoli,这些软件动辄都要花费一百万
美元,而很多在线应用企业多少新型创业公司,根本无力承担。另外,商业网络与系统管理软件给人们
留下的感觉还有部署周期长,同时集成和定制操作非常复杂等。在开源运动的驱动下,网络管理软件市
场讲有所改变。开源软件是一个巨大的现象,开源软件将向最终用户提供一种替代的选择。

开源软件厂商和开发者正在尝试消除人们对网管软件的这种感觉,为用户提供廉价、灵活和易于集
成的网络管理工具,如同开源软件进入 ERP、CRM 市场时一样,为广大用户带来平民级的网络管理软件。
虽然像 Multi Router Traffic Grapher(MRTG)和 Big Brother 这样的开源网管软件已经问世数十年了,它们
已经成为在无力采用商业软件,或商业软件不能满足需要时,大多数企业的 IT 部门选择的替代工具。但
是,由于可伸缩性和技术支持等问题,这些软件在企业环境中部署的比例很少。

以 Zenoss、GroundWork Open Source、Hyperic 为代表的开源网管软件公司推出了 IBM Tivoli、惠普


OpenView、CA 和 BMC 等商业软件之外的开源软件替代产品,它们开发开源网络管理和监控软件,付诸
商业化,进行"商业开源运营"。这些厂商为用户提供技术支持和维护服务,提供定制服务、提供开源版本
所不具备的某些功能,而这些功能与服务不是开源网管软件的一部分。虽然这些额外的工具或服务并不
是免费的,但是它们相比传统商业网管软件动辄百万美元的价格,降到了一般企业都能承受的范围。

价格优势

现有网络管理和监视解决方案一个最大的问题就是高成本,传统商业解决方案要投入大量资金,并
且不是所有的功能都能够使用,或者都需要使用。这些商业软件都有高的离奇的价格,而且都是采用许
可证形式分发,按照 CPU 数量等收费,现在运营各种在线应用的公司多是创业型企业,根本无力承担,
虽然它们中少量也有风险投资之类支持,但是对于企业而言,能节省的费用还是需要尽量节省。

通过使用开源网络管理与监控软件工具,企业的收取获取成本几乎为零,因为无需支付全部的许可
证费用,也无需为网络的扩展而支付额外的许可证费用,用户仅仅在需要保障技术支持或额外功能时才

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 40


开源社区

需支付少量费用;大量需要网络监控管理软件的企业一般都有自己的技术力量,因此使用开源软件时遇
到的一般问题多可以自己解决,不但培养了自己的技术团队,还能省却不少成本。

Zenoss 和 Nagios 等开源软件网络监视与管理工具整体正在获得增长势头,Groundwork 、


Zenoss、Hyperic 和 Qlusters 等公司提供了开源软件替代产品,其中一些厂商已经得到了足够的声誉。
Zenoss 公司的 Zenoss Core 是一个使用 Python/Zope 编写的开源网络和系统监控软件,功能包括自动的配
置变化跟踪,IT 系统故障自动补救以及其它对 IT 系统管理的重要功能,被 sourceforge 评为 2007 年 3 月的
优秀项目。UTStarcom、Pando、Mercy、Medifast 等公司都已采用 Zenoss 进行网络管理和网络监控。

定制的灵活性

灵活性对于企业采用开源软件监视计划有重要影响。很多用户反映,Tivolis 和 OpenViews 这类商业


软件很难客户化,非常不灵活,但是,其开源替代软件通常与上述软件相反。开源软件的一个重要特点
就是灵活性,客户可以根据自己的要求使用某个产品。通过开源软件社区,最终用户可以要求获得他们
需要的功能,讨论这个功能的利弊并且在许多情况下能够在相对短的时间里使用上这个功能。

由于开源软件用户可获得代码,对于 Nagios 和其它开源软件监视工具没有做的事情,最终用户可以


自行这个工具与其它工具结合在一起创建他们需要的环境。开源软件多支持一模块或插件方式进行扩展
和定制,广告业巨头 Ogilvy & Mather 公司利用 Hyperic HQ 来监测公司全球基础设施中的 Web 服务器和
Web 服务。它们充分利用产品的源代码,编写插件,以取得公司所需要的颗粒度水平。当然用户也可寻
找专门的技术公司代为进行整合和定制,这点相比采用商业软件有很高的灵活度,
Zenoss、GroundWork、Qlusters 等开源网管软件公司都提供了定制开发和部署服务,可以为客户满足客户
灵活性的需求。(图 1 GroundWork Monitor 网管软件体系结构)

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 41


开源社区

功能的多样性

传统商业网管软件为满足各种场合,各种客户的需求,提供的相当多的功能,而很多功能对部分客
户而言却是多余的,或是很少用的;就像我们日常使用的 Office 只用到了常用功能,其它大量功能并没
有用,而我们却也为它而付费了。

新兴开源网络管理软件公司并没有提供与其商业软件竞争对手提供的同样多的功能。他们采用
80%-20%的规则,开源软件做到商业软件做的 80%。开源软件永远不做商业软件做的一切功能,这里面
既有一般客户没有使用需求的缘故,也有开源网管软件公司自身利用的考虑,投入和产出的权衡。

制作开源软件网络管理与监视工具 OpenQRM 的 Qlusters 公司首席执行官 Ofer Shoshan 说,最近对开


源软件的兴趣来自于行业对能够处理更大部署的工具的需求增长。以前大多数开源软件工具都是以小企
业为目标的,这些工具都不是大企业级别的工具,无论功能还是可靠性、技术支持等方面。这些工具不
可靠、不稳定并且不能管理大量的系统。典型的像 Multi Router Traffic Grapher(MRTG)和 Big Brother 这
样的开源网管软件,它们只针对特定问题提供解决方案,不能全面解决网络管理问题。

Zenoss 公司制作集成的 IT 监视产品 Zenoss Core。这种产品能够让 IT 管理员通过一个基于网络的操


作台管理他们的基础设施的状况和健康。Zenoss 软件监视整个网络、服务器、应用程序、服务、电源和
相关的环境。然而,这个软件最大的好处是其开放性和灵活性。这就是说用户可以根据自己的系统选择
任何方法对这个软件进行调整。这是一个全面的企业 IT 监视产品。它的网络监视和管理、应用程序管理
和服务器管理都通过一个单一的控制台来完成。(图 2 Zenoss core 的重要功能)

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 42


开源社区

技术支持问题

人们对开源工具一直以来的诟病就是"缺乏技术支持",这将很多用户挡在开源工具门外,尤其是企业
级应用。因为没有一个首席信息官愿意冒丢掉饭碗的危险应用一种没有服务和技术支持的解决方案。现
在很多开源网络管理工具厂商都提供了多种级别的技术支持,能够支持大企业的应用部署。对开源软件
提供技术支持也是各家开源网管软件公司的主要盈利点。(图 3 Zenoss 的商业模式)

Zenoss 提供开源版和企业版两种版本,对开源版本,每个管理单元每年只需支付 66 美金,即可电话、


邮件、培训等技术支持服务。GroundWork Open Source Solution 一揽子软件包需 4 万美元,租赁服务为每
年 1 万美元。Hyperic 月租费为 65 美元,年租费为 780 美元。

这种带有技术支持的开源软件将更加促使一些最终用户使用开源软件替代工具。如果出现问题,有
一家公司负责,可以得到需要的帮助,对企业应用很重要。这将是一个良性发布的轨迹:企业开发开源
软件,用户为技术支持而付费,使得企业能够生活下去,得以持续的对开源软件进行完善和发展。

当然,对于那些愿意自己做一点研究工作的人来说,在使用开源软件遇到问题时,他们更愿意深入
研究这个问题并且找到一个解决方案,如果它的解决方案能够分享出来,对其所用开源网管软件的发展
和推广也是种帮助,开源的意义就是集群众的智慧解决问题。

客户的声音

美国的一家在线交友公司 eHarmony 的工程与运营副总裁 Mark Douglas 说,Hyperic HQ 所具有的“巨

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 43


开源社区

大覆盖面”吸引他选择这款产品,而该软件的开源特性则是另一个加分因素。他现在使用该软件监测网
络交换机、存储阵列和应用服务器。

Douglas 说: “它为我们提供了监测整个资产集的完整视图,包括硬件、软件,还有我们所使用的开源
工具。虽然开放源代码在我们的企业环境中还没有成为主流,但它无疑是其中的一部分。”

至于 Douglas 所提到的加分因素,他说,Hyperic HQ 不仅管理来自 EMC 的存储阵列,而且还管理来


自小厂商 3Par 的设备。他说:“我不知道这是否只是该软件一般的开放性,但是它支持我们拥有的几乎
所有东西,我们还可以编写专用于自己环境的插件。”

Hyperic 公司的 CEO Javier Soltero 说,Hyperic HQ 实际上算是一种混合产品,部分是开放源代码,部


分为专有技术。“实际部署开源产品的过程仍然常常令人头痛,但是客户还是会进行迁移。因此,我们
的产品同时采用了商用和开放源代码技术,尽量将安装时间减少到最低。”

网络管理软件市场的另一支新军 GroundWork 推出了 GroundWork Monitor。该产品是 Nagios 开源监测


应用的扩展。它运行在一台 Linux 服务器上,有无代理程序均可以使用。该厂商推荐的代理组件实际上是
使用运行在被管理设备上的 Perl 脚本,并且从设备的管理信息库中提取发送给中央服务器的管理信息。
用户还可以选择编写专用于自己环境的插件,以进一步扩展该软件的监测能力。

美国 Rudolph & Sletten 公司 IT 总监 Sam Lamonica 说:“GroundWork 为我监测 Windows 与 AS/400 服


务器、所有的网络设备、DSL 链路和数据库服务器。”

开源网管软件为需要网管软件而又买不起网管软件的公司,提供了一种高效的低成本应用方案;开
源网管软件的兴起也再次证实了开源存在的巨大价值,以及开源商业模式的可行性。随着开源软件服务
收费模式的更广泛接纳,网络管理软件市场也许将迎来一次巨大的变革。选择开源网络管理与监控软件
会是个更明智的选择。  

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 44


知识学堂

知识学堂

了解 Linux 线程技术

姜红

Linux 是一个多用户、多任务的操作系统。多用户是指多个用户可以在同一时间使用计算机系统;多
任务是指 Linux 可以同时执行几个任务,它可以在还未执行完一个任务时又执行另一项任务。在操作系统
设计上,从进程(Process)演化出线程(Thread),最主要的目的就是更好地支持多处理器,并且减小
(进程/线程)上下文切换的开销。

进程和线程的关系

根据操作系统的定义,进程是系统资源管理的最小单位,线程是程序执行的最小单位。线程和进程
十分相似,不同的只是线程比进程小。首先,线程采用了多个线程可共享资源的设计思想。例如,它们
的操作大部分都是在同一地址空间进行的。其次,从一个线程切换到另一线程所花费的代价比进程低。
再次,进程本身的信息在内存中占用的空间比线程大。因此,线程更能允分地利用内存。线程可以看作
是在进程内部执行的指定序列。线程和进程的最大区别在于线程完全共享相同的地址空间,运行在同一
地址上。

Linux 线程的定义

线程是在共享内存空间中并发的多道执行路径,它们共享一个进程的资源,如文件描述和信号处理。
在两个普通进程(非线程)间进行切换时,内核准备从一个进程的上下文切换到另一个进程的上下文要花费
很大的开销。这里上下文切换的主要任务是保存老进程 CPU 状态,并加载新进程的保存状态,用新进程
的内存映像替换老进程的内存映像。线程允许进程在几个正在运行的任务之间进行切换,而不必执行前
面提到的完整的上下文。

在 Unix 类系统中,曾经出现过一些不同线程标准,它们都支持可移植操作系统接口标准
POSIX(Portable Operating System Interface Standard)。POSIX 标准由 IEEE 制定,并由国际标准化组织接受

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 45


知识学堂

为国际标准。POSIX 1003.1c 是一个用于线程(在一个程序中当前被执行的代码段)的标准,以前是


P1993.4 或 POSIX.4 的一部分,这个标准已经在 1995 年被 IEEE 通过,归入 ISO/IEC 9945-1:1996。

本文介绍线程主要是针对 POSIX 线程,即 Pthread,因为 Linux 对它的支持最好。相对进程而言,线


程是一个更加接近于执行体的概念,它可以与进程中的其它线程共享数据,但拥有自己的栈空间,拥有
独立的执行序列。在串行程序基础上引入线程和进程是为了提高程序的并发度,从而提高程序运行效率
和响应时间。

也可以将线程和轻量级进程(LWP)视为等同,但其实在不同的系统/实现中有不同的解释。LWP 更
恰当的解释可能为一个虚拟 CPU 或内核的线程,它可以帮助用户态线程实现一些特殊的功能。Pthread 是
一种标准化模型,它用来把一个程序分成一组能够同时执行的任务。

那么在什么场合会使用 Pthread 呢?

◆在返回前阻塞的 I/O 任务能够使用一个线程处理,同时继续执行其它处理任务。

◆在有一个或多个任务受不确定性事件影响,比如网络通信的可获得性影响的场合,能够使用线程处理
这些异步事件,同时继续执行正常的处理。

◆如果某些程序功能比其它的功能更重要,可以使用线程以保证所有功能都出现,但那些时间密集型的
功能具有更高的优先级。

以上三点可以归纳为在检查程序中潜在的并行性时,也就是说找出能够同时执行任务时使用
Pthread。上面介绍了 Linux 进程模型已经提供了执行多个进程的能力,可以进行并行或并发编程,但是,
线程对多个任务的控制程度要更好,使用资源更少。因为一个单一的资源,如全局变量,可以由多个线
程共享,而且,在拥有多个处理器的系统上多线程应用会由用多个进程实现的应用执行。

Linux 进程和线程技术发展

线程技术早在 20 世纪 60 年代就被提出,但真正应用多线程到操作系统中还是在 20 世纪 80 年代中期。


现在,多线程技术已经被许多操作系统所支持,包括 Windows NT/2000 和 Linux。

在 1999 年 1 月发布的 Linux 2.2 内核中,进程是通过系统调用 fork 创建的,新的进程是原来进程的子


进程。需要说明的是,在 Linux 2.2.x 中,不存在真正意义上的线程,Linux 中常用的线程 Pthread 实际上
是通过进程来模拟的。也就是说,Linux 中的线程也是通过 fork 创建的,是“轻”进程。Linux 2.2 缺省只
允许 4096 个进程/线程同时运行,而高端系统同时要服务上千的用户,所以这显然是一个问题。它一度是
阻碍 Linux 进入企业级市场的一大因素。

2001 年 1 月发布的 Linux 2.4 内核消除了这个限制,并且允许在系统运行中动态调整进程数上限。因

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 46


知识学堂

此,进程数现在只受制于物理内存的多少。在高端服务器上,即使只安装了 512MB 内存,现在也能轻而


易举地同时支持 1.6 万个进程。

在 Linux 2.5 内核中,已经做了很多改进线程性能的工作。在 Linux 2.6 中改进的线程模型仍然是由


Ingo Molnar 来完成的。它基于一个 1:1 的线程模型(一个内核线程对应一个用户线程),包括内核内在
的对新 NPTL(Native Posix Threading Library)的支持,这个新的 NPTL 是由 Molnar 和 Ulrich Drepper 合
作开发的。

2003 年 12 月发布的 Linux 2.6 内核,对进程调度经过重新编写,去掉了以前版本中效率不高的算法。


进程标识号(PID)的数目也从 3.2 万升到 10 亿。内核内部的大改变之一就是 Linux 的线程框架被重写,
以使 NPTL 可以运行其上。

Linux 的另一种可选线程模型是 IBM 开发的 NGPT(Next Generation Posix Threads for Linux),它是基
于 GNU Pth(GNU Portable Threads)项目而实现的 M:N 模型(M 个用户态线程对应 N 个核心态线程)。

NPTL 的设计目标可归纳为以下几点:POSIX 兼容性、SMP 结构的利用、低启动开销、低链接开销


(即不使用线程的程序不应当受线程库的影响)、与 LinuxThreads 应用的二进制兼容性、软硬件的可扩
展能力、多体系结构支持、NUMA 支持,以及与 C++集成等。

对于运行负荷繁重的线程应用 Pentium Pro 及更先进的处理器而言,这些是主要的性能提升,也是企


业级应用中很多高端系统一直以来所期待的。线程框架的改变包含 Linux 线程空间中的许多新的概念,包
括线程组、线程各自的本地存储区、POSIX 风格信号,以及其它改变。改进后的多线程和内存管理技术
有助于更好地运行大型多媒体应用软件。

Linux 线程实现方法

目前线程有用户态线程和核心态线程两种方法实现。

1.用户态线程

用户态线程是一个精细的软件工具,允许多线程的程序运行时不需要特定的内核支持。如果一个进
程中的某一个线程调用了一个阻塞的系统调用,则该进程就会被阻塞,该进程中的其它所有线程也同时
被阻塞。因此,Unix 使用了异步 I/O 机制。这种机制主要的缺点在于,在一个进程中的多个线程调度中
无法发挥多处理器的优势(如上述的阻塞情况)。

用户态线程优点如下:

◆某些线程操作的系统消耗大大减少。比如,对属于同一个进程的线程之间进行调度切换时,不需要调

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 47


知识学堂

用系统调用,因此将减少额外的消耗,一个进程往往可以启动上千个线程。

◆用户态线程的实现方式可以被定制或修改,以适应特殊应用的要求。它对于多媒体实时过程等尤其有
用。另外,用户态线程可以比核心态线程实现方法默认情况支持更多的线程。

2.核心态线程

核心态线程的实现方法允许不同进程中的线程按照同一相对优先调度方法进行调度,这样有利于发
挥多处理器的并发优势。

目前,线程主要的实现方法是用户态线程。有几个研究项目已经实现了一些核心态线程的形式,其
中比较著名的是 MACH 分布式操作系统。通过允许用户代码对内核线程调度的参与,该系统将用户态和
核心态两种线程实现方法的优点结合了起来。通过提供这样一个两级调度机制,内核在保留了对处理器
时间分配控制的同时,也使一个进程可以充分利用多处理器的优势。

Linux 对超线程技术支持

超线程技术(Hyperthreading Technology)是 Intel 公司的创新设计。HT 技术就是利用特殊的硬件指


令,把两个逻辑内核模拟成两个物理芯片,让单个处理器都能使用线程级并行计算,从而兼容多线程操
作系统和软件,并提高处理器的性能。操作系统或应用软件的多线程可以同时运行于一个处理器上,两
个逻辑处理器共享一组处理器执行单元,并行完成加、乘、负载等操作。在同一时间里,应用程序可以
使用芯片的不同部分。虽然单线程芯片每秒钟能够处理成千上万条指令,但是在任一时刻只能够对一条
指令进行操作。而 HT 技术可以使芯片同时进行多线程处理,当在支持多处理器的 Windows XP 或 Linux
等操作系统之下运行时,同时运行多个不同的软件程序可以获得更高的运行效率。这两种方式都可使计
算机用户获得更优异的性能和更短的等待时间。

Linux 是第一个把超线程特性引入市场的操作系统,它在发布 2.4.17 内核时,就开始包含对 Intel P4


处理器的超线程的支持(Linux 2.4 内核最初的发布版本中不支持),它包括以下增强技术:

◆128 字节锁对齐。

◆螺旋等待循环优化。

◆基于非执行的延迟循环 。

◆检测支持超线程的处理器,并启动逻辑处理器,如同该机器是 SMP(多处理器构架)。

◆MTRR 和微码更新(Microcode Update)驱动程序中的串行化,因为它们影响共享状态。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 48


知识学堂

◆在逻辑处理器调度发生之前,当系统空闲时对物理处理器上的调度进行优先级排序时,对调度程序进
行优化。

◆偏移用户堆栈以避免 64K 混叠。

以上简单介绍了 Linux 线程的属性、与进程关系、线程的实现方法,以及 Linux 对超线程技术支持


等,希望对大家了解 Linux 线程技术有所帮助。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 49


知识学堂

重读 2.4 内核(3)

贺永利(来自 Linuxpk。com 程序设计版主 hyl)

本期将向各位读者介绍 arch/i386/mm/init.c 文件。

文件的开始的一段注释中,介绍了 BAD_PAGE, ZERO PAGE 的作用,应该好好读读。

前面已经说起过 pmd_bad, 这只是一个例行检查。但是 BAD_PAGE 则有另外的作用,再内核内存


耗尽的时候,现在的处理策略是将进程相应的 pte 写成指向此 BAD_PAGE。注释中说,used for page
faults,其实内存耗尽了,如何设置 pte 呢?

无论是不是在 page fault 的处理过程中,需要 pte 的时候内存耗尽,分配不出页面就使用此


BAD_PAGE。 bad pmd 作用是一样的。注释提到,以前,内核内存耗尽就杀掉此进程。

下面通过一个函数,分析以上种种……

pte_t *get_pte_slow(pmd_t *pmd, unsigned long offset)


{
unsigned long pte;

pte = (unsigned long) __get_free_page(GFP_KERNEL);


//可能睡醒之后已经被其他流程设置好了,(注意我们使用的是 pmd 的指针)
if (pmd_none(*pmd)) {//还没有就我们来设置
if (pte) {
clear_page((void *)pte);
set_pmd(pmd, __pmd(_PAGE_TABLE + __pa(pte)));
return (pte_t *)pte + offset;
}
//这里就是内核内存耗尽了,那就就设置成 BAD_PAGE
set_pmd(pmd, __pmd(_PAGE_TABLE + __pa(get_bad_pte_table())));
return NULL; //然后返回内存分配失败
}
free_page(pte);

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 50


知识学堂

//别人已经代劳了,我们就释放掉刚获取的页面
if (pmd_bad(*pmd)) {//做例行检查,保证页面属性可读写等
//检查没有通过就奇怪了!也恢复成 BAD_PAGE
__handle_bad_pmd(pmd);
return NULL;
}
//一切正常,返回已经设置的 pte
return (pte_t *) pmd_page(*pmd) + offset;
}

此函数中已经祥加注释了,希望有疑问的仔细阅读。首先要注意,内存分配失败后,返回的是
NULL,注意 get_bad_pte_table 却为页表提供了指向 BAD_PAGE 的 pte。希望你阅读 get_bad_pte_table 的
时候没有困难然后注意,对于其他流程代劳的页面做了检查,pmd_bad,如果检查通不过返回也是
NULL,并且也是用 BAD_PAGE 填充 pte,见__handle_bad_pmd,同样希望__handle_bad_pmd 你读起来轻
松自如。

通过 bad_pmd 的检查保证页面可读写,拥有 DIRTY,ACESS 属性,这在最大程度上保证了这个页


面"似乎"一切正常可以认为存在。我们怀疑一切,做 bad pmd 检测但是其实并"没有"bad pmd,起码,我
们没有主动破坏过,良好的内核中应该永远没有 bad pmd。 在__handle_bad_pmd 的时候输出了一个 log
信息:

void __handle_bad_pmd(pmd_t *pmd)


{
pmd_ERROR(*pmd);
set_pmd(pmd, __pmd(_PAGE_TABLE + __pa(get_bad_pte_table())));
}
通过这一点,可以知道,如果有 bad pmd 就一定是有什么不对了!!!(fix me)

到这里,此文件的前面一部分,关于 BAD_PTE 相关的部分就不再介绍了,看看 cpu quick list 的一些


东西:

int do_check_pgt_cache(int low, int high)


{
int freed = 0;
if(pgtable_cache_size > high) {
do {
if(pgd_quicklist)

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 51


知识学堂

free_pgd_slow(get_pgd_fast()), freed++;
if(pmd_quicklist)
free_pmd_slow(get_pmd_fast()), freed++;
if(pte_quicklist)
free_pte_slow(get_pte_fast()), freed++;
} while(pgtable_cache_size > low);
}
return freed;
}
此函数在 cpu idle 的时候从 per cpu 的页面缓存链表上取下页面返还给内存管理系统。 slow,fast 的
区别也在与此。(其他情况也有调用此函数释放内存的)。

下面的一个函数和 HIGHMEM 有关。在此之前,借此机会可以梳理一下内核对虚拟地址的使用布局。


参考 include/asm-i386/fixmap.h

内核在使用虚拟空间之前,先留了 8k 的空洞,从 FIXADDR_TOP(0xffffe000UL)开始使用。从高地址


到低地址排列如下:

+------------------------------------------------------------------
| 8K 空洞
+------------------------------------------------------------------
| FIXADDR_TOP(0xffffe000UL) (include/asm-i386/fixmap。h)
| fixed map(每项 4k 虚存,见 FIXADDR_SIZE)
| { //fix map 内容 (enum fixed_addresses)
| FIX_APIC_BASE,
| FIX_IO_APIC_BASE_0,
| FIX_IO_APIC_BASE_END = FIX_IO_APIC_BASE_0 + MAX_IO_APICS-1
|
| FIX_CO_CPU, /* Cobalt timer */
| FIX_CO_APIC, /* Cobalt APIC Redirection Table */
| FIX_LI_PCIA, /* Lithium PCI Bridge A */
| FIX_LI_PCIB, /* Lithium PCI Bridge B */
+--------------
#ifdef CONFIG_HIGHMEM /*为 fix KMAP 预留每 cpu 8k 的虚存,读写各 4k*/
| FIX_KMAP_BEGIN, /* 主要用于 kmap_atomic*/

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 52


知识学堂

| FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1,
#endif
+--------------
| __end_of_fixed_addresses
| }
| FIXADDR_START (FIXADDR_TOP - FIXADDR_SIZE)
+--------------------------------------------------------------------
| VMALLOC_END (FIXADDR_START) (include/asm-i386/pgtable。h)
| +------------------
| | xxxxx: kmap 和 vmalloc 相互重叠,2。6 已经修正
| | kmap 使用的 4M 虚存 (asm/highmem。h,LAST_PKMAP)
| | PKMAP_BASE (0xfe000000UL) (距离 4G 32M)
| +------------------
| vmalloc 映射区
| VMALLOC_START (((unsigned long) high_memory + 2*VMALLOC_OFFSET-1)
| & \~(VMALLOC_OFFSET-1)) /*down align 8M */
+--------------------------------------------------------------------
| 约 8M 空洞
+--------------------------------------------------------------------
| high_memory (见 003___arch_i386_mm_ioremap。c 对此的分析)
| 内核已经映射了的物理页面 MAX 896M
| 3G
+--------------------------------------------------------------------
| resoved for app 0-3G
+--------------------------------------------------------------------
003___arch_i386_mm_ioremap.c 对 high_memory 进行分析的时候提到 VMALLOC_RESERVE (ULONG)
(128<<20) arch/i386/kernel/setup.c。 从今天的分析可知,这 128M 中一部分给了 fix map,一部分是
kmap,vmallc,还有一部分被空洞占用。注意 2.4 中 kmap 使用的虚存和 vmalloc 的顶端有重叠,2.6 已经
修正。

总结一下:系统初始化的时候预留 128M 虚存,896M 用于直接映射物理内存。直接映射就是


virt_to_phy 可以工作,只差一个常量。见宏 MAXMEM,函数 setup_arch。这 128M 内存一部分用于 fix
map(enum fixed_addresses),一部分用于 kmap(PKMAP_BASE),然后用于 vmalloc。 kmap_atomic 使用了
fix map 项 FIX_KMAP_BEGIN 提供可以在中断环境使用的"kmap"。 HIGHMEM 由 kmap 和 kmap_atomic

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 53


知识学堂

构成,但是 vmalloc 机制也尽可能的使用 HIGHMEM,只是内核要直接访问 highmem 的物理地址时可以使


用 kmap,kmap_atomic。 003___arch_i386_mm_ioremap。c 分析__ioremap 时提到

/*

* 映射指定的物理地址的一段内存到内核的虚拟地址。

* 内核如果需要直接访问 high address 的内存则也需要这个函数先映射一下。

有些不够准确,通过这次分析,概念上更清楚些了。宏 vmlloc 就是分配的 HIGHMEM,如果非得使


用__ioremap,也是未尝不可……

003___arch_i386_mm_ioremap.c 中还提到了 page->virtual,这里借机补充说明一下。在初始化 page 的


mem_map 时候,free_area_init_core 对非 ZONE_HIGHMEM 的 page->virtual 进行了初始化。而
ZONE_HIGHMEM 则在需要的时候用 kmap 来映射页面并初始化 page->virtual,或者使用 vmalloc。 所以,
在任何时候 page->virtual 都可代表页面在内核的虚拟地址(只要非 0)。以后分析 mm/highmem.c 的时候可以
轻松多啦。

回到正题,看看 init.c 函数:

#if CONFIG_HIGHMEM
pte_t *kmap_pte;
pgprot_t kmap_prot;
#define kmap_get_fixmap_pte(vaddr) \
pte_offset(pmd_offset(pgd_offset_k(vaddr), (vaddr)), (vaddr))
void __init kmap_init(void)
{ /*为 HIGHMEM kmap_automic 使用的两个变量求值,最多 NR_CPU*2 项 pte*/
unsigned long kmap_vstart;

/* cache the first kmap pte */


kmap_vstart = __fix_to_virt(FIX_KMAP_BEGIN);
/*Fix KAMP 起始虚拟地址*/
kmap_pte = kmap_get_fixmap_pte(kmap_vstart);
/*顺着页表找到起始 pte*/

kmap_prot = PAGE_KERNEL;
}

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 54


知识学堂
#endif /* CONFIG_HIGHMEM */
其实调用此函数之前已经使用了 fixrange_init 对三级页表进行了部分初始化。 所谓部分,即,只有
pte 未设置,也就是说虚拟地址落实到物理地址的最后一步还没有进行。 fixrange_init 也在此文件中,分
析到这里阅读这个没有"逻辑"的函数当然应该没有问题了。不再赘述。set_pte_phys 逻辑亦是简单,注意_
_flush_tlb_one 在 cpu 支持 invlpg 指令的时候只刷新一个页面的映射。

pagetable_init 初始化内核页表,之后就可以废弃 head.s 中的临时表了。同时部分初始化 fix map,并


为 HIGEMEM 初始化 Permanent kmap 使用的 4M 虚存(1024 项 pte,刚好一个页面大小)。

static void __init pagetable_init (void){


。。。。。。。。。。。。。
#if CONFIG_HIGHMEM
/*
* Permanent kmaps: (即,kmap 使用的虚存,2。4 中和 vmallc 使用的虚存有重叠)
*/
vaddr = PKMAP_BASE;
fixrange_init(vaddr, vaddr + PAGE_SIZE*LAST_PKMAP, pgd_base);

pgd = swapper_pg_dir + __pgd_offset(vaddr);


pmd = pmd_offset(pgd, vaddr);
pte = pte_offset(pmd, vaddr);
pkmap_page_table = pte;
#endif
#if CONFIG_X86_PAE
/*
* Add low memory identity-mappings - SMP needs it when
* starting up on an AP from real-mode。 In the non-PAE
* case we already have these mappings through head。S。
* All user-space mappings are explicitly cleared after
* SMP startup。
*/
/*0-4M , 3G-4M 的恒同映射,smp 完成后用 zap_low_mappings 清除*/
pgd_base[0] = pgd_base[USER_PTRS_PER_PGD];
#endif

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 55


知识学堂

接下来是 paging_init,调用上面的 pagetable_init,初始化页表然后重新加载 cr3,flush tlb,然后使用


kmap_init 为 kmap_automic 使用的变量求值,不算复杂,重要的是 free_area_init,初始化了 zone-buddy 内
存管理系统(设置所有页面都是 PG_reserved(free_all_bootmem,负责重置))。

test_wp_bit -->检查 cpu 是否支持写保护位,不支持就提示用户重新编译内核。

接下来的重要函数就是 mem_init:

1.初始化变量 high_memory,参见以前说明。

2.调用 free_all_bootmem,清除 ram 页的 PG_reserved 位,并释放页面到 buddy 系统。

3.boot mem 无法处理 HIGHMEM,对 highmem,mem_init 自己清除 PG_reserved 位, 并释放页面到


buddy 系统。

4.打印一些统计信息,如果不是 SMP,就清楚 0-8M,3G-8M 的恒同映射。(所有用户空间 pgd)

最后只说一下 free_initmem,释放.data.init 段占用的内存。 顺便请注意 free_initrd_mem, 看到了


initrd,^_^。在整个系统启动过程中,关于内存的初始化如下:

setup。S->asmlinkage void __init start_kernel(void) (init/main。c)


|
+-->setup_arch ---> 处理 e820 内存报告
--> 关于内存的提示信息
---> 初始化 bootmem (init_bootmem)
---> paging_init--+
+-------+
| +--> pagetable_init(含 fix map,vmalloc init)
\/ +--> load cr3
。 +--> kmap_init
。 +--> free_area_init(zone-buddy 初始化)
。 --->smp,apic,roms 等处理
+--> idt gate modules,kmem_cache_init
|
+--> mem_init -->free_all_bootmem buddy 得到页面控制权
+

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 56


知识学堂

+--> proc_root_init,fork_init, ipc,inode


+--> smp_init
+
+--> 创建 kernel thread, init (init/main。c->函数 init)
+--->do_basic_setup
---->init pci,mtrr,sysctl,mca。。。。
---->filesystem_setup
---->mount_root (关注。。。)
---->。。。。。。
+---> free_initmem
+---> 打开 console
+--->execve("/sbin/init",argv_init,envp_init);
+--->execve("/etc/init",argv_init,envp_init);
+--->execve("/bin/init",argv_init,envp_init);
+--->execve("/bin/sh",argv_init,envp_init);

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 57


桌面应用

桌面应用

《Linux 一句话精彩问答》是 Linux 初学者很好的入门文档,想必很多朋友当时都是边看该文档,边


敲打键盘,玩着 Linux 过来的。该文档由本刊副总编陈绪主编,迄今已经收录近千个精彩问答。从本期开
始将在桌面应用栏目进行连载,希望能帮助到更多刚接触到 Linux 的朋友们。

Linux 一句话精彩问答——系统配置篇(2)

陈绪

鉴于目前中国 linux 的发展水平,90%以上的问题均可以用一句话作答,此为本文初衷。

1021 删除内有文件和子目录的目录

rm -rf 目录名

1022 查看系统信息

cat /proc/cpuinfo - CPU (i.e. vendor, Mhz, flags like mmx)

cat /proc/interrupts - 中断

cat /proc/ioports - 设备 IO 端口

cat /proc/meminfo - 内存信息(i.e. mem used, free, swap size)

cat /proc/partitions - 所有设备的所有分区

cat /proc/pci - PCI 设备的信息

cat /proc/swaps - 所有 Swap 分区的信息

cat /proc/version - Linux 的版本号 相当于 uname -r

uname -a - 看系统内核等信息

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 58


桌面应用

1023 去掉多余的回车符

sed 's/^M//' test.sh > back.sh, 注意^M 是敲 ctrl_v ctrl-m 得到的

或者 dos2unix test.sh

1024 切换 X 桌面

如果你是以图形登录方式登录 linux,那么点击登录界面上的 session(任务)即可以选择 gnome 和 kde。


如果你是以文本方式登录,那执行 switchdesk gnome 或 switchdesk kde,然后再 startx 就可以进入 gnome
或 kde。

(或者 vi ~/.xinitrc,添加或修改成 exec gnome-session 或 exec startkde,然后用 startx 启动 x)

1025 通用的声卡驱动程序

OSS www.opensound.com / ALSA www.alsa-project.org/

1026 改变 redhat 的系统语言/字符集

修改 /etc/sysconfig/i18n 文件,如

LANG="en_US",xwindow 会显示英文界面,

LANG="zh_CN.GB18030",xwindow 会显示中文界面。

还有一种方法

cp /etc/sysconfig/i18n $HOME/.i18n

vi $HOME/.i18n 文件,如

LANG="en_US",xwindow 会显示英文界面,

LANG="zh_CN.GB18030",xwindow 会显示中文界面。

这样就可以改变个人的界面语言,而不影响别的用户

1027 把屏幕设置为 90 列

stty cols 90

1028 使用 md5sum 文件

md5sum isofile > hashfile

md5sum 文件与 hashfile 文件的内容比对,验证 hash 值是否一致

md5sum –c hashfile

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 59


桌面应用

1029 一次解压多个 zip 文件

unzip "*",注意引号不能少

1030 看 pdf 文件

安装 Acrobat Reader

1031 查找权限位为 S 的文件

find . -type f \( -perm -04000 -o -perm -02000 \) -exec ls -lg {} \;

1032 装中文输入法

以 redhat8 为例,xwindow 及其终端下的不用说了,缺省就安装了,用 ctrl-space 呼出。

现在讨论纯 console,请到 http://zhcon.sourceforge.net/下载 zhcon-0.2.1.tar.gz,放在任一目录中,tar xvfz


zhcon-0.2.1.tar.gz,cd zhcon-0.2.1,./configure,make,make install。安装结束后,要使用 zhcon,请运行
zhcon,想退出,运行 exit

1033 把弹出的光盘收回来

eject –t

1034 cd 光盘做成 iso 文件

cp /dev/cdrom /tmp/xxx.iso 或 dd if=/dev/cdrom of=/tmp/xxx.iso

1035 快速观看开机的硬件检测

dmesg | more

1036 查看硬盘的使用情况

df -k 以 K 为单位显示

df -h 以人性化单位显示,可以是 b,k,m,g,t..

1037 查看目录的大小

du -sh 目录名

-s 仅显示总计

-h 以 K、M、G 为单位,提高信息的可读性。KB、MB、GB 是以 1024 为换算单位

-H 以 1000 为换算单位

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 60


桌面应用

1038 查找或删除正在使用某文件的进程

fuser filename

fuser -k filename

1039 安装软件

rpm -ivh aaa.rpm

tar xvfz aaa.tar.gz; cd aaa; ./configure; make; make install

1040 字符模式下设置和删除环境变量

bash 下

设置:export 变量名=变量值

删除:unset 变量名

csh 下

设置:setenv 变量名 变量值

删除:unsetenv 变量名

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 61


桌面应用

Linux 下制作屏保程序

毛希增

利用一些便捷的小软件把自己的数码相片做成绚烂多彩的屏保,放在自己的电脑上该是多么惬意的
一件事啊!虽然 Linux 下制作屏幕保护的软件比较少,但是我们可以利用 Linux 本身的特点,亲手制作一
个有 Linux 特色的屏幕保护程序。

XScreenSaver 概述

目前,大多数的 Linux 发行版中,X-Window 的屏幕保护程序都是由 XScreenSaver 提供的。


XScreenSaver 类似一个容器,可以容纳任何可以在根窗口绘图的 X-Window 程序,作为具体的屏幕保护程
序。现在的 XScreenSaver 聚集了很多漂亮的屏保程序,比如像各种曲线、3D 动画等。

利用 GLSlideShow 制作屏保

XScreenSaver 有一个 GLSlideShow 的模块,专门用来动态浏览目录下的图片,设置也很简单,只是


它需要用到 OpenGL 图形库。

GLSlideShow 设置如下:

1.确认安装 GLSlideShow

打开 XScreenSaver 配置管理器(从选单中选择或直接在控制台下键入“xscreensaver-demo”),确认
已安装了 GLSlideShow。

2. 设置图片所在目录

进入“高级”选项页,选择“Choose Random Image”选项,并设置图片的目录,见图 1 所示。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 62


桌面应用

图1

3. 设置 GLSlideShow

进入“Display Modes”选项页,从下拉选单中选择“只使用一个屏幕保护程序”,并且从下面多选框中
选中 GLSlideShow,见图 2 所示。

图2

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 63


桌面应用

4. 参数微调

单击图 2 右下角“Setting”按钮,进入参数设置窗口,调整以下几个参数,见图 3 所示。

图3

◆ Time until load a new image 载入图像需要的时间,这个时间的长度会严重影响画面播放的速度,如果


计算机硬件资源允许的话,最好调至最小。

◆ Always show at least this much of image 始终保留在屏幕上的图像大小这个选项对大于屏幕的图片很有


用,播放时会根据“Pan/Zoom Duration”的设置缓慢地调整图像的大小。不过最好是把这个选项和
“Pan/Zoom Duration”调制到最小,以减少画面的抖动。

◆ Crossfade Duration 屏幕锁定时载入第一幅图片所需要的时间。它有一个渐变的过程,可以根据个人喜


好设置。

5. 高级选项

如果上述参数设置还不能满足要求,那么可以单击“Advanced”按钮,进入高级选项对话框,手动调

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 64


桌面应用

整 GLSlideShow 的参数。例如,笔者为了加快图像载入速度,就把 duration 选项从 10 改为 1,见图 4 所示。


其它选项的含义,读者可以参考 GLSlideShow 手册页(在控制台下键入 manglslideshow 即可)。

图4

利用 chbg 程序动态制作屏保

XScreenSaver 是一个开放的框架,就像一个服务器,任何一个可以在根窗口显示图片的客户程序都
可以被它调用以增加其功能。chbg 就是这样的程序,它可以根据特效算法动态地调整桌面背景图片。

1.chbg 下载及安装

chbg 可以从它的官方网站 http://www.idata.sk/~ondrej/chbg/download.html 下载,其软件包有 tgz、rpm


和 deb 三种形式。

类 Red Hat Linux 系统安装:

rpm -ivh chbg-1.5-pixbuf_2.i386.rpm

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 65


桌面应用

类 Debian Linux 系统安装:

apt-get install chbg

tgz 源码包安装:

tar zxf chbg-1.5.tgz

cd chbg-1.5

./configure;make

make install

2.XScreenSaver 配置

在用户主目录下.xscreensaver 文件的 program 小节中,加入下面两行代码:

default-n: chbg -xscreensaver -mode smart -interval 0.05 -effect 1 -R $HOME/lymxz/photo/ \n\

其中,“-interval 0.05”选项代表图像变换间隔时间为 5 秒;“-effect 1”选项代表图像变换时随机选择


特效;“-R YOURDIRECTORY”代表递归地载入 YOURDIRECTORY 目录及其子目录的图片。如果还需
要其它的功能,请参考 chbg 的手册页。

打开 XScreenSaver 配置管理器,就可以看到 chbg 的屏保标志,选中它就可预览自己制作的屏保程序。


以后可以随时处理这个目录下的图片,处理的效果都会自动反映到屏保中。这个原因很简单,显示屏保
时 XScreenSaver 只是每次调用 chbg,动态地显示该目录下的图片而已,尤其是 chbg 可以选择子目录下的
图片文件。

利用这些优点,就可以把相关的图片分门别类地存放,随心所欲地处理各个图片,其它的工作让
XScreenSaver 和 chbg 自动去做。

综合上面介绍的两种方法不难发现,从硬件资源消耗和灵活性来看,使用 chbg 的方法有很大的优势。


它惟一的缺陷就是安装配置有些麻烦,不过还是值得一试的。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 66


桌面应用

Linux 故障恢复技巧

徐永久

不论你在运行什么操作系统,在很多情况下,你会面对灾难恢复操作。你的主引导区被覆盖,你的
硬盘不能启动,或者一个重要的文件被删除,或者你的显示卡启动时闪烁一下就黑屏了。本文会就这些
问题作一些技巧性的讨论,帮助你在遇到这些问题时,不致于手足无措。

首先需要的是一张应急启动软盘,在安装 Linux 时,一般会要求建立一张的,所以,你应该有这张


磁盘的,如果还没有建立的话,赶紧去建立一张吧,什么?不知道怎么做?很简单的,一般的 Linux 系
统下使用 mkbootdisk 命令就可以了。后面的那些参数,只要看看帮助,应该就明白了。

首先使用:

# uname -a

系统提示:

Linux albertxu 2.2.16-2.0 #1 Sun May 20 16:53:41 EST 2001 i586 unknown

来看看系统的内核版本。我们就知道系统的内核版本是 2.2.16-2.0。然后使用:

# mkbootdisk --device /dev/fd0 2.2.16-2.0

系统提示:

Insert a disk in /dev/fd0. Any information on the disk will be lost.

Press to continue or ^C to abort:

插入磁盘,等待一会,直到磁盘建立。这样,紧急启动软盘就这样建立了。除了采用以上的办法以
外,另外一个办法就是使用 tomsrtbt 来建立启动软盘。先介绍这个程序的安装步骤:

# gunzip tomsrtbt-1.7.218.tar.gz

# tar -xvf tomsrtbt-1.7.218.tar

# rm tomsrtbt-1.7.218.tar

# cd tomsrtbt-1.7.218/

# ./install.s

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 67


桌面应用

按照屏幕的说明,这个软件采用高密度的压缩方法把多种 Linux 工具压缩到单张 1.7 Mb 的软盘上。

缺省的磁盘包含下面的程序,驱动和内核:

2.0.37 3c589_cs BusLogic DEC_ELCP EEXPRESS EEXPRESS_PRO EL2 EL3 EXT2 FAT FAT32 FD IDE
IDECD IDEFLOPPY IDEPCMCIA IDETAPE ISO9660 JOLIET LOOP MATH_EMULATION MINIX
MSDOS NE2000 NFS PROC RAM SD SERIAL SLIP SMC SR ST TR ULTRA VFAT VORTEX WD80x3
ah152x_cs aha152x aha1542 aic7xxx ash awk badblocks bdflush bzip2 cardbus cardmgr cat ce ce.help
chattr chgrp chmod chown chroot clear cmp cp cpio cut date dd ddate debugfs df dirname dmesg ds du
dumpe2fs e2fsck eata echo egrep elvis emacs extend false fdflush fdformat fdisk fdomain filesize find
findsuper fmt fsck.ext2 fsck.msdos fstab grep gzip halt head hexedit hostname i82365 ifconfig ifport ile init
inittab insmod kill killall5 ksyms length less libc.so.5.4.13 lilo lilo.conf ln loadkeys login losetup ls lsattr
mawk md5sum memtest mingetty miterm mkdir mkdosfs mke2fs mkfifo mkfs.minix mklost+found mknod
mkswap mnsed more mount mt mv nc ncr53c8xx nmclan_cs ntfs pax pcmcia pcmcia_core pcnet_cs ping
plip ppa printf ps pwd qlogic_cs qlogicfas reboot rescuept reset rm rmdir rmmod route rsh rshd script
scsi_info seagate sed serial_cs setserial sh slattach sleep slip snarf sort split stty swapoff swapon sync tail tar
tcic tee telnet test touch tune2fs umount undeb update vi vi.help wc

最让人放心的是,tomsrtbt 是一个和发行版本无关的程序,甚至你可以把它用来恢复 Windows 9x。


丢失了主引导记录后, Linux 就不能启动了。使用 Red Hat 的启动软盘十分简单,只要在启动以后,用
root 登录,然后运行 lilo 就可以了。使用 tomsrtbt 的方法是,启动后用 root 登录,然后拿走软盘。

# mount -t ext2 /dev/hda4 /mnt

# chroot /mnt

# /sbin/lilo

Added linux *

Added dos

# exit

# cd /

# umount mnt

在 Red Hat 6.2 之前的版本提供了一个 rescue.img 文件,能用来建立一个单独的紧急磁盘,和启动软


盘一起使用。在 LILO: 提示符下,键入 linux rescue 然后按照提示操作,在 6.2 版本以后,Red Hat 把紧
急恢复功能做到了安装 CD 上,使用 CD 启动后,键入 "rescue" 就可以了。

现在假设你的 /etc/fstab 存在一个输入错误,你把启动磁盘 /dev/hda4 写成了 /dev/hda44 ,这样你的


系统就不能启动了。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 68


桌面应用

用 tomsrtbt 软盘启动,按照以下的办法修改 /etc/fstab 就可以了。

# mount -t ext2 /dev/hda4 /mnt

# vi /mnt/etc/fstab

# umount /mnt

另外一个常见的问题就是没有正常关机,可以采用 tomsrtbt 来修复一个损坏的磁盘分区。

# e2fsk -f /dev/hda2

对于一个严重损坏的分区,这个命令需要重复好几次。如果一个分区不能完整修复,你可以把重要
的文件写到磁盘上,当 tomsrtbt 启动时,把这些文件加载到内存,能把磁盘空间用于其他应用。

# fdformat /dev/fd0H1440

# mke2fs /dev/fd0

# mkdir /mnt/image

# mkdir /mnt/floppy

# mount -t ext2 /dev/hda4 /mnt/image

# mount -t ext2 /dev/fd0 /mnt/floppy

# cd /mnt/floppy

# cp /mnt/image/etc/*.conf .

# cp /mnt/image/etc/conf.modules .

# cp /mnt/image/var/named/* .

# cp /mnt/image/home/gwilburn/docs/myrecipes.txt .

# cd /mnt

# umount floppy

# umount image

以上步骤用到了 fdformat, mke2fs, mount, cd 和 cp 命令,这些命令都包含在 tomsrtbt 之中,在这个情


形中,我们把 /etc 目录的配置文件和 DNS 文件作了备份。下面的例子是使用 tomsrtbt 来恢复 Windows
的例子。

# mkdir /mnt/win

# mkdir /mnt/floppy

# mount -t vfat /dev/hda1 /mnt/win

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 69


桌面应用
# mount -t vfat /dev/fd0 /mnt/floppy

# vi /mnt/win/autoexec.bat

# cd /mnt/floppy

# cp /mnt/win/autoexec.bat .

# cp /mnt/win/config.sys .

# cp "/mnt/win/program files/netscape/bookmarks.htm" .

# cd /mnt

# umount floppy

# umount win

灾难并不会频繁发生,但是做好灾难准备的最重要事情就是备份数据。我们讨论的所有技巧只是对
数据可以恢复的情况下所能采取的一些措施。作为一名专业的系统管理人员,如果没有做好数据备份,
那么这个所谓的“专业”是名不符实的。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 70


桌面应用

linux 配置、编译内核实用工具

Linux 宝库整理

配置与编译内核用到的工具很多,在这里只对几个关键工具进行介绍,更多的内容请参考相关手册。

Make

Make 是一种帮助大型软件工程的编译工作实现自动化的编程语言。正确地使用 Make 可以大大减少


因编译程序而花费的时间,因为它可以消除不必要的再编译。Make 的基本设计思想是如果目标文件是在
最近一次对源文件的修改之后编译的,它就是“新的”,不需要重新编译;如果最近一次对源文件的修
改之后没有及时更新目标文件,那么该目标文件就是“旧的”,需要重新编译。为了理解 Make 如何执行
一个任务,需要了解一些术语:

◆目标 需要执行的一个任务。多数情况下它就是用户要生成的文件的名字,但是它也可以仅是个任务的
名字。

◆依赖关系 两个目标之间相互依存的关系。如果修改目标 B 会造成目标 A 的修改,那么就说目标 A 依赖


于目标 B,B 是 A 的先决条件。

◆变量 一种存储临时信息的载体。Make 中使用的变量应该加上括号,例如$(TEMP)。

◆命令 执行任务时使用的指令,可以是一条、多条,甚至没有。

◆规则 一条完整的规则具有以下格式:

目标(target) : 先决条件(prerequisites)

规则(command)

......

其中只有目标必须要有,其它成分可以没有。一条完整的规则描述了编译一个目标的方法和依赖关
系,是 Makefile 中最重要的部分。

◆Makefile 文件 描述如何生成一个或多个目标的文件。它列出目标依赖的各个文件,并提供正确编译这
些目标所需要的规则。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 71


桌面应用

接下来以 2.4.23 的 kbuild 为例,简要介绍一下内核的构建过程。首先,完整的内核构建过程由以下五


种 Makefile 封装。

1.根目录 Makefile

它是最重要的 Makefile,定义所有与体系结构无关的变量和目标。它读取.config 文件,并根据其信息


最终生成 vmlinux 和 modules。Make 通过向下递归调用子目录中的 Makefile 来编译这两个目标。

2.配置文件.config

执行“make ”会在根目录下生成该配置文件,其内容记录了具体的配置选择,也可以将旧内核的配置
文件放在这里。

3.arch/*/Makefile

这是与特定体系结构相关的 Makefile。它包含在根目录下的 Makefile 中,为 kbuild 提供体系结构的特


定信息。

4.子目录 Makefiles

它们存在于每个子目录下,大约有几百个。它们接受来自上层 Make 传递下来的信息,并根据这些信


息来构造一个需要编译的文件列表,并交由 Rules.make 处理。

5.Rules.make

几乎每个子目录 Makefile 都包含该 Makefile。根据子目录 Makefiles 构建的文件列表,Make 使用


Rules.make 定义的通用规则来编译所有来自列表的源文件。

kbuild 的执行过程是:Make 从根目录 Makefile 开始执行,从中获得与体系结构无关的变量和依赖关


系,并同时从 arch/*/Makefile 中获得体系特定的变量等信息,这些信息扩展了根目录 Makefile 提供的变量。
此时 kbuild 已经拥有构建内核需要的所有变量和目标。然后,Make 进入子目录,把部分变量传递给子目
录 Makefile。子目录 Makefile 根据配置信息决定编译哪些源文件,从而构建出一个需要编译的文件列表。
最后,Rules.make 根据其定义的编译规则决定这些文件的编译方式。

需要注意的是,由于 Make 的向下递归特性和无序性,其执行过程并不完全遵守顺序逐行执行的规则,


但无论 Make 的执行有多复杂,也只分为两个阶段。第一个阶段 Make 会读取所有变量和分析所有目标的
依赖关系,并最终建立一棵依赖关系树。同时,所有的立即型变量(通过“:=”赋值)在这个过程中被
扩展,就像 C 变量一样。而在这个阶段的最后,所有的延迟型变量才被扩展(通过“=”赋值)。这点
需要格外注意。第二个阶段 Make 会根据依赖关系树执行命令。

因此,一个目标和其先决条件的规则定义的顺序是无所谓的,很可能一个目标的先决条件的规则定
义在百行以后才出现。Make 会耐心读完所有的 Makefile 后分析得出依赖关系树。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 72


桌面应用

GCC

GCC 是 GNU 的免费编译程序,也是内核惟一指定使用的编译器。GCC 在执行一个完整的编译任务


时会经过以下步骤:

◆预处理 GCC 会调用 cpp 程序来分析各种宏指令,如#define、#if、#include 等。

◆编译 这一阶段根据输入文件产生汇编语言指令。由于通常情况下是立即调用汇编程序 as,所以输出一


般不保存在文件中,可以使用-S 选项强制输出源程序的汇编版本。

◆汇编 这一阶段将汇编语言源程序作为输入,生成.o 目标文件。

◆链接 这是最后一个阶段。该阶段中,各个.o 模块被链接在一起构成可执行文件。

as

用户可以明确地要求使用 as 来直接处理汇编文件。as 产生的目标文件可以分为文本段(.text)、数


据段(.data)和未初始化数据段(.bss)。

ld

与 as 相似,用户可以明确地要求使用 ld 链接程序将几个模块组合成一个单独的可执行文件。其链接
过程通常由一个叫 ld 链接脚本的文件来描述。该脚本使用 Linker Command Language 编写。使用“ld
--verose”命令可以看到这个默认使用的 ld 链接脚本。

ar

ar 是 GNU 的二进制文件处理程序,用于创建、修改及从归档文件中抽取文件。由它生成的.a 归档文


件实际上是一个包含许多可执行二进制代码子程序集合的库文件。

RPMBuild

使用“make rpm”可以把内核源代码制作成 RPM 包。在此之前,kbuild 会执行“make spec”生成


rpmbuild 程序用到的 spec 文件,详见“man rpmbuild”。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 73


桌面应用

中间件

根目录 scripts 下的各种脚本和 C 源文件都可以称作中间件。它们并不是内核组件的一部分,只是在


kbuild 执行过程中的辅助程序。以 split-include 为例,讲述配置文件的运作机理。

.config 由关键字/值对组成,其内容类似于:

CONFIG_MPENTIUMIII=y

# CONFIG_MPENTIUM4 is not set

CONFIG_REISERFS_FS=m

这些信息在执行“make ”时自动生成。同时 include/linux/autoconf.h 依照.config 的内容生成。它的格


式类似于:

#define CONFIG_MPENTIUMIII 1

#undef CONFIG_MPENTIUM4

#undef CONFIG_REISERFS_FS

#define CONFIG_REISERFS_FS_MODULE 1

对比一下不难发现,include/linux/autoconf.h 明确地洞悉了.config 的意图:哪些组件不编译,哪些需


要编译进内核,而哪些又要作为模块来编译?split-include 根据 include/linux/autoconf.h 在 include/config/下
建立相关的目录和.h 文件。每个.h 文件只包括 include/linux/autoconf.h 中的某一行,比如在配置内核选项
时支持 NTFS 文件系统,并把它编译进内核,在.config 中就会生成“CONFIG_NTFS_FS=y”,相应地在
include/linux/autoconf.h 中会生成“#define CONFIG_NTFS_FS 1”一项。这样,所有与 NTFS 文件系统相关
的 C 源文件都会包含 include/config/ntfs/fs.h 头文件。

如果以前编译过内核,并且没有使用过“make mrproper”,.config、include/linux/autoconf.h 和 include/


linux/config/就不会被删除。这里涉及到新旧内核的配置问题。一个全新的内核代码是未经配置的。如果
只在原内核的功能基础上增加对 NTFS 的支持,那么从头开始配置无疑是浪费时间。可以继续使用原内核
的.config 文件,而所有的配置信息不会有任何更改,并且可以直接在原配置的基础上增加新功能。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 74


桌面应用

Ubuntu 安装 RealPlayer 全攻略

Cheiron

其实虽曰“全攻略”,但也是只在我的电脑上测试通过。若有疑问,大家可以留言一起讨论;若有
错误,还望指正。综合的网上很多文章中提出的问题和解决方案,一并表示感谢。

目前,直接在默认的官方源上用 apt-get install 是不管用了。虽然可以通过添加源的方法用 apt,但我


还是喜欢直接在 Real 官网上下载安装文件来安装。具体步骤如下。

下载 RealPlayer for Linux 的安装文件

到 RealPlayer 官方网站上下载:http://www.real.com/linux/?src=020923home_cn_cn

建议将文件 RealPlayer10GOLD.bin 保存到主文件夹中,即/home/[yourusername]文件夹下,这样一会儿会


方便些…

开始安装

1.打开终端,输入如下命令:

$chmod +x RealPlayer10GOLD.bin

$sudo ./RealPlayer10GOLD.bin

【附】若终端有如下输出:error while loading shared libraries: libstdc++.so.5: cannot open shared object file:
No such file or directory。可以按如下方法处理:$sudo apt-get install libstdc++5 (注:libstdc++.so.5 是 g+
+-3.3 提供的 C++ Library,你的 RealPlayer 需要此库,说明它是用 g++-3.3 来编译的,但 Ubuntu 默认的
gcc 是 4.0,如果没有安装 g++-3.x,安装相关软件时,系统便提示缺少这个库。)

2.当终端输出如下信息时:

Welcome to the RealPlayer (10.0.8.805) Setup for UNIX

Setup will help you get RealPlayer running on your computer.

Press [Enter] to continue…

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 75


桌面应用

此时按下回车键,下一步开始,屏幕输出如下信息:

Enter the complete path to the directory where you want

RealPlayer to be installed. You must specify the full

pathname of the directory and have write privileges to

the chosen directory.

Directory: [/home/cheiron/RealPlayer]:

这里的提示是要你选择安装目录,默认安装在用户的主文件夹下的 RealPlayer 目录下,如果你不想选


择其他目录,直接按回车即可,如果想要选择其他目录,则在冒号后输入路径,然后回车。

假设按默认目录安装,回车后终端输出:

You have selected the following RealPlayer configuration:

Destination: /home/shixinyu/RealPlayer

Enter [F]inish to begin copying files, or [P]revious to go back to the previous prompts: [F]

这是安装程序提示的确认信息,如果确认,就按 F,然后回车,终端又输出:

Copying RealPlayer files…configure system-wide symbolic links? [Y/n]:

按下 Y 键,然后回车。然后就是静静的等待安装完成了。当重新出现提示符的时候,说明安装完成
了,这时,在“应用程序/影音”下就会有 RealPlayer10 的程序启动器(相当于 Win 下的快捷方式)。

解决和 SCIM 的冲突问题

如果你按上述操作顺利完成后,点击影音的下 RealPlayer 却没有任何反应,并且你的 Ubuntu 安装了


SCIM,则很可能是 SCIM 与 RealPlayer 的冲突,可以按以下方法解决。如果没有出现这样的问题,就不
需要看这一部分了。

打开终端,输入如下命令:

$sudo gedit /home/[yourname]/RealPlayer/realplay \\[yourname]指你的主文件夹名(如果你安装在其他


文件夹下,则路径有所不同,选择对应的路径即可)

之后会打开 gedit 文本编辑器,在第一行添加下面的内容:

export GTK_IM_MODULE=xim

然后保存文件,再次执行 RealPlayer 试试,应该就没问题了。如果还不能启动的话,就是其他问题了,


我在网上没看到过,自己也没遇到过,不妨留言我们一起讨论,或者百度一下,Google 一下,他们是最

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 76


桌面应用

好的老师了。

解决 RealPlayer 播放 rmvb 或者 rm 很卡的问题

如果你的 RealPlayer 很卡那是因为内核默认的 oss 驱动对某些声卡支持的不好, 而 RealPlayer 又默认


使用 oss 所以我们使用 alsa 模拟的 oss 就好了 即用 aoss realplay 启动 RealPlayer。

打开终端,输入如下命令:

$sudo apt-get install alsa-oss

安装好之后,在终端中,用如下命令启动 RealPlayer:

$aoss realplay

打开一个影片看看,是不是不卡了呢?如果是的话,就恭喜了,为了以后可以直接图形界面启动
RealPlayer,可以做如下工作:

在“应用程序”上点右键,选择编辑菜单,然后在影音下找到 RealPlayer,点右边的编辑,把命令改
为:

aoss realplay

或者(这个方法我没测试过):打开终端,输入:

$sudo gedit /home/[yourname]/RealPlayer/realplay

在 70 行 z 左右,找到 $REALPLAYBIN “$@”,修改成 aoss $REALPLAYBIN “$@”。保存后,退出。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 77


企业应用

企业应用

如何选择 Linux 服务提供商

斐迅科技 顾宏军

经过 Linux 爱好者、政府、媒体等各方多年的不懈努力,目前,Linux 在国内已拥有相当数量的用户,


占据了一定的市场份额,很多可以架构自己的 IT 基础设施的中型组织,开始运用他们现有的 Unix 技能,
使用运行 Linux 的商用 PC 来替代老化的 Unix 系统,这类组织也是目前 Linux 最大的市场。

Linux 市场的发展,也出现了大量的 Linux 服务公司,面对形形色色的提供 Linux 相关业务的公司或


机构,如何选择一个适合自己的呢?和很多技术不同,在 Linux 和开源领域要选择一个合适的服务商为我
们提供针对性解决方案,帮助解决特定问题还是有些麻烦的。

Linux 系统开发商

一般而言,软件开发商本身对其所提供的软件该是对了解,最熟悉的了,比如,我们使用的
Windows 系统,微软公司对该系统的各个方面该是最熟悉的,他们的服务该是最权威的。但是在 Linux 和
开源领域,却是个例外。因为包含在软件供应商或开发商光盘里的大量软件并不是他们自己开发的——
这就是开源商业的一大特色。比如 Novell 和 Red Hat 提供的 Linux 系统内很多软件都是第三方社区开发的,
因此,软件供应商自身可能对它所提供的软件的各个部分并不很熟悉。

还有,软件开发与能提供解决方案,提供可持续性的技术支持,还是相差很大的。我们常常有这样
的经验:软件出问题时,开发人员的回答,往往是"下个版本解决"。但是,如果是方案提供商那它可能通
过选择其它合适的组件来满足客户的需求。

一般而言,客户会使用软件制造商的软件升级服务,但是从其它地方寻求技术支持。经验告诉我们,
因为生产商的支持模型常常头重脚轻,而且价格昂贵。大家想想看,自己使用的各类软件,使用官方技
术支持的有多少?

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 78


企业应用

系统集成商

系统集成商是个相当广泛的概念,它包含从硬件厂商到真正的系统顾问服务的所有公司。曾经,大
型系统集成商对 Linux 系统是不屑一顾的,因为它不够来钱,而现在也有好多集成商提供 Linux 系统。系
统集成商知道如何合理选择各种组件以成功实施一个项目。好的集成商知道自己有哪些技能,并且知道
何时需要使用第三方的专家。系统集成商的解决方案里最重要的组成部分是它提供的专业的项目经理,
而不是其它东西。

如果你负担得起,并且是个大项目,那你该选择系统集成商,这样,你可将一些失败的风险转嫁到
项目经理身上,并且让他来选择各种系统组件。因为好的项目经理,有多年的项目实施经验,这些经验
可帮助降低项目失败的风险,集成商拥有让项目成功实施的各个环节的专家,这些特定领域的专家对保
障项目的成功实施起相当的作用。

硬件厂商

另外一种类型的集成商是硬件厂商,主要是 IBM、HP、Dell 等公司。现在市场竞争相当激烈,这些


公司要么为产品增加附加价值,提高自身竞争力,要么可能从市场上消失。因此他们一般会提供相当水
准的客户服务,但是以前这些公司多半,对 Linux 投入不怎么积极,这使得这些公司在下面各级市场上有
水平的 Linux 技术人员寥寥无几,虽然,这些都是大型公司,它们拥有相当强的技术中心。

这些硬件厂商常常没法接到足够的 Linux 项目,以在当地维持一个专门的 Linux 专家团队。在这些公


司里,一般“Linux 工程师”同时也为其它非 Linux 项目服务——是个多面手。还有个问题就是,Linux
是一个开源的系统,Red Hat 和 Novell 等 Linux 系统厂商提供的 Linux 广泛使用了各种的非商业的软件组
件,这使得很多硬件厂商传统的专有的技能无法发挥,虽然这些软件多有相当活跃的在线支持社区,但
这些和企业计算环境的需求差距还是很大的。

如果你有个简单的需求,并且主要预算都用在硬件上,那么选择硬件厂商提供 Linux 服务可能比较合


适。但如果您的项目包括一定程度的复杂性,比如设立一个 SAN,Oracle 解决方案,集群或负载均衡系
统,这时,你要么要求它们保证提供一个真正精通该领域 Linux 专家,要么就需要对可能的大量试验或潜
在的失败有心理准备。

因为曾经有客户买了大规模的 IBM 刀片服务器来使用 Red Hat 和 Novell 的集群方案,但是最终发现


无论 IBM 还是它们的各级合作伙伴都没法使这些系统正常工作,总之,我们在选择 Linux 服务伙伴时要
谨慎。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 79


企业应用

专门 Linux 支持公司

几乎每个国家有一个或多个 Linux 支持公司提供 Linux 相关的专门支持服务。这些公司一般是开源的


倡导者或企业顾问,他们为客户提供独立的方案建议,这些方案源自客户的真实需求,而非各种的捆绑、
推销或某一特定的技术或方案。

Linux 服务器领域依然是个很专门的领域,这些公司知道它们能提供的有别于系统集成商或软件厂商
的额外的价值。此外,它们还有足够经验和技能以将 Linux 方案与现有的 IT 系统进行集成。

专门 Linux 技术服务公司主要专注于 Linux 系统技术支持和顾问咨询。它们能提供最大化价值的目标


客户一般是运行几十到几百台 Linux 服务器的机构。因为这类机构多半面临大量系统管理问题:如升级,
补丁,还有如何保证关键业务的运行可靠性。

这些公司一般提供承包服务(包年,包月等)和按次服务两种服务模型。Linux 正在进入主流市场,而
软件供应商和硬件厂商提供的保障机制却没法满足需求,这就是这些 Linux 专门服务机构的机遇,我们可
与 Linux 技术服务公司建立特定水平的服务协议或者在需要时,让其提供现场服务。如果您的组织面临复
杂的相互作用的硬件,软件和操作系统引起的问题,那么选择专门的 Linux 支持公司就比较合适。

开源布道者

有很多开源布道者,鼓吹开源,鼓吹 Linux 的公司或个人也提供 Linux 服务。这些机构一般人数很少


就几个人,但是多声称提供各种的 Linux 服务,从 7x24 小时服务到咨询顾问。这些组织一般在公众领域
或学术领域非常活跃,但这些机构实际上只能基础简单的 IT 设施,如仅仅时架设个 DNS 或 DHCP。

如果你是个小组织,就一两台服务器,这时,这种公司可能适合你。它们能帮您通过很小的预算即
可用开源软件构造出一个替代微软的方案。你所支付的费用,不是软件费用,而是它们帮助进行简单设
置的费用。

根据以往经验,如果有超过一到两台 Linux 服务器,那么这种服务将很不可靠。当你的服务器被当成


小白鼠,试验所谓最新开源项目时,或它们不知道系统为何频繁的崩溃时,你和这种公司之间的关系也
将变得紧张。

这是因为这些人往往没有他们自己想象的那么厉害。他们不相信专有软件,而且一般比较傲慢——
半桶水——认为他们就是专家。知道什么是最好的;这时我们千万别害怕辩论,别被一些莫名其妙的学

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 80


企业应用

术头衔吓到,如果他们不乐意和你一起协商一些基本的商业条款,那就别和他们合作了。

如何分辨开源布道者?

一般而言,在他们的网站上有很多的“开源”的字眼,还能看到他们如何参与各个社区项目的说明,
还有一些技术文章,提到了诸如防火墙,DNS 之类概念。这些公司网站呢一般都写着某某大公司是他们
的客户,以此来唬住不少的人。但是如果细问下,可能出破绽了,也许,这些大公司只是雇佣它搞了几
天的活,或者让配置了个简单的 DNS 服务器之类的。

通常它们会搞出个新的 Linux 项目,Linux 发行版,而它们这种东西很少在商业上使用。更有甚者,会


宣传“微软将死”,而它们提供的“XX Linux 系统将活着”——即使他们的 Linux 系统根本没有用。

总结

总而言之,选择为自己效力的 Linux 服务商需要根据自身的组织状况,要实施项目的规模和复杂程度,


进行判断,才能做出合理的选择。每种 Linux 服务商都有它们的市场空间,但还是要提醒大家“市场有风
险,购买需谨慎”。

如果你是一个大型企业,有很强的内部 IT 部门,或者有外包的 IT 支持合同,那么软件厂商的升级和


技术支持服务,可能就足以满足您的需求。

如果你的内部 IT 部门已经负荷过重,或有其他需要优先处理的项目,而你有周期长,而有比较紧急
的项目,那么选择有实力的大型系统集成商,能帮助降低项目风险。

如果你是喜欢“一站式服务”的组织,那么从大的硬件厂商获得 Linux 支持比较合适,这些厂商一般


都提供了不同级别的服务供用户选择。

如果你是一个中等规模的组织,或者是大型组织的一个独立部分,并且在寻找能够将开源项目与现
有的 IT 架构进行有效整合的 Linux 服务商,这时专门的 Linux 服务公司比较合适。

最后,如果你是一个小型组织,有个简单的需求,那么在本地找个鼓吹开源的公司,应该能帮你搞
定问题,但是注意这是一种相当的冒险行为……

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 81


企业应用

使用 Cacti 监测系统与网络性能

岑锐坚

无论是稍有规模的 IT 公司还是大型的 ICP、ISP,都需要面对一个问题,就是如何实现对网络和服务


器的性能的实时监测。除了一些商用软件外,国内最常用的网络监测软件莫过于 MRTG 了。
MRTG(MultiRouter Traffic Grapher)是基于 SNMP 的网络流量统计分析工具。它通过 SNMP 协议从设备得
到并记录网卡信息,并将流量负载以图形的方式显示出来,系统负载小,使用方便。不过,MRTG 毕竟
是一套很老的软件了,而且存在许多不足的地方,其作者 Tobias Oetiker 在 1999 年就已经开始开发另一套
开源软件 RRDTool 来代替 MRTG。现在 RRDTool 在已经发展得成熟,在功能上 MRTG 难以与其相提并论。
既然有更好的选择,为什么我们还要用 MRTG 呢?

RRDTool 与 MRTG 对比
与 MRTG 一样,RRDTool 也是由 Tobias Oetiker 撰写的开源软件,但 RRDTool 并非 MRTG 的升级版
本,两者有非常大的区别,也可以说 RRDTool 是将用来取代 MRTG 的产品。下面是两个软件的一些优缺
点的对比:
1.MRTG
优点:简单、易上手,基本安装完了之后只要修改一下配置文件即可。
缺点:
◆使用文本式的数据库,数据不能重复使用;
◆只能按日、周、月、年来查看数据;
◆由于 MRTG 本来只是用来监测网络的流量,所以只能存储两个 DS(Data Source),即存储流量的输入
和输出(如图 1);
◆每取一次数据即需要绘图一次,浪费系统资源;
◆图像比较模糊;
◆无用户、图像管理功能;

图 1 MRTG 生成的图像

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 82


企业应用

2.RRDTool
优点:
◆使用 RRD(Round Robin Database)存储格式,数据等于放在数据库中,可以方便的调用。比如将一个
RRD 文件中的数据与另一个 RRD 文件中的数据相加;
◆可以定义任意时间段画图,可以用半年数据画一张图,也用半小时内的数据画一张图;
◆能画任意个 DS,多种的图形显示方式(如图 2);
◆数据存储与绘图分开,减轻系统负载;
◆能任意处理 RRD 文件中的数据,比如在浏览监测中我们需要将数据由 Bytes 转化为 Bits,可以将原始数
据乘 8。
缺点:
◆RRDTool 的作用只是存储数据和画图,它没有 MRTG 中集成的数据采集功能;
◆在命令行的使用非常复杂,参数极多。
◆无用户、图像管理功能。

图 2、RRDTool 生成多个 DS 的图像

简单的说,MRTG 是一个收集网卡流量的工具,而 RRDTool 则是一个强大的绘图的引擎。

MRTG 监测网卡流量很方便,但是如果需要监测其它的系统性能比如 CPU 负载、系统负载,网络连


接数等,就不是那么简单了。即使实现了这些功能,但管理起来非常麻烦。比如公司有 1、2 千个 被监
测点,分布在不同的机房,为了管理方便需要将这些服务器和网络设备分类,这样的话就需要将这些被

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 83


企业应用

监测点放在不同的 MRTG 配置文件中,运行多个 crontab,甚至还要自己写 HTML 页面对其进行管理。

那么,RRDTool 就能实现上述功能吗?实际上,RRDTool 的主要作用是数据的存储和将数据绘画成


图像。要实现数据的采集和管理,我们需要另外一个软件辅助 RRDTool 进行工作,那就是本文要介绍的
重点――Cacti。

Cacti 介绍
RRDTool 的绘图功能非常强大,不过由于 RRDTool 的命令非常复杂繁多,并且不包含数据采集的功
能,所以非常难以入门。有很多喜爱 RRDTool 的程序员为其写应用的平台或脚本,而 Cacti 就是其中的佼
佼者。

Cacti 是一套完全面向 RRDTool 的 B/S 系统,它在 MySQL 数据库中存储了所有 RRDTool 创建图像需


要用到的信息以及管理信息。
Cacti 的主要功能有:
◆ 数据定时采集
◆ 图像绘画与显示
◆ 树状的主机和图像管理
◆ RRDTool 信息管理
◆ 用户和权限管理
◆ 模板导入导出

Cacti 使用 snmpget 命令采集数据,使用 RRDTool 绘图。它的界面简洁直观,让你根本无需明白


RRDTool 的众多参数即可轻易的绘出漂亮的图形。此外,它还提供了强大的数据管理和用户管理功能。
在图像管理上,Cacti 采用了树状结构的查看界面,在用户的管理上,能对用户的权限进行细致的划分,
甚至支持使用 LDAP 进行用户验证。不得不提的是 Cacti 还提供模板的功能,自己可以为某项监测内容建
立模板,也可以导入别人做好的模板。

Cacti 的架构:
整个 Cacti 系统由 4 个部分组成(如图 3):
Cacti 页面(PHP)――用户控制的平台,用户在此进行所有的设置;
SNMP 采集工具――Unix 下使用 Net-SNMP 软件包自带的“snmpget”和“snmpwalk”等程序,windows 下
使用 php 的 snmp 功能;
RRDTool 绘图引擎――性能数据的存储和绘画图像;

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 84


企业应用

MySQL 数据库――储存 RRDTool 绘图所需的信息,如模板、rra、主机对应的信息等,要注意的是


MySQL 数据库并不保存性能数据,性能数据保存在 RRDTool 自己的数据库格式 rrd 文件中。

图 3、Cacti 的架构

Cacti 的工作流程(如图 4):


1. 定时采集数据:
Cacti 会定时运行数据采集脚本,使用“snmpget”命令或其它自己定义的方式进行数据的采集;
2. 存储数据:
使用 RRDTool 的“update”指令将采集到的数据储存到 rrd 文件中;
3. 用户要查看某台设备的流量:
在 Cacti 的 PHP 页面上点击该设备->
Cacti 在数据库中寻找该设备对应的 rrd 文件的名称 ->
Cacti 运行命令让 RRDTool 进行绘图;(图 4、Cacti 的工作流程)

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 85


企业应用

Cacti 的安装
该安装文档的平台是 Linux,其它平台上的安装方法请参照 Cacti 的官方网站。

运行 Cacti 需要 Apache+PHP+MySQL 的环境,搭建该环境的方法很简单,很多文章有过详细的安装


教程,就不在此赘述了。下面是安装 Cacti 的步骤:

1.设置 mysql

创建数据库、数据库用户,调整权限、密码:

# mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10 to server version: 4.0.23-standard
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>; create database cactidb;


Query OK, 1 row affected (0.00 sec)
mysql>; grant all on cactidb.* to root;
Query OK, 0 rows affected (0.01 sec)
mysql>; grant all on cactidb.* to root@localhost;
Query OK, 0 rows affected (0.01 sec)
mysql>; grant all on cactidb.* to cactiuser;
Query OK, 0 rows affected (0.00 sec)
mysql>; grant all on cactidb.* to cactiuser@localhost;
Query OK, 0 rows affected (0.01 sec)
mysql>; set password for cactiuser@localhost=password('cactipw');
Query OK, 0 rows affected (0.00 sec)
mysql>; exit

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 86


企业应用

2.安装 RRDTool

从 RRDTool 官方网站(见文章最后的“资源”)下载最新的 RRDTool 包,当前最新的版本是


rrdtool-1.2.12。在该下载页面上,还可以看到有一个“libs”的目录,里面的包也要全部下载。
那么,我们下载了下面的几个包:
◆libart_lgpl-2.3.17
◆libpng-1.2.8-config
◆zlib-1.2.2
◆freetype-2.1.9

安装方法:
. /configure –prefix=/usr #把东西装到 /usr 目录下
make ; make install #编译及安装

安装完上述 lib 包后,我们就可以进行 RRDTool 的安装了:


rrdtool-1.2.12 包的安装方法:
cd rrdtool-1.2.12
./configure --prefix=/usr
make && make install

测试: 运行 rrdtool –v
可以看到 RRDTool 的用法以及版本信息:
RRDtool 1.2.12 Copyright 1997-2005 by Tobias Oetiker <tobi@oetiker.ch>
Compiled Apr 30 2006 11:30:36

Usage: rrdtool [options] command command_options

Valid commands: create, update, updatev, graph, dump, restore,


last, first, info, fetch, tune, resize, xport

RRDtool is distributed under the Terms of the GNU General


Public License Version 2. (www.gnu.org/copyleft/gpl.html)

For more information read the RRD manpages

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 87


企业应用

RRDTool 官方的详细安装方法可以在下载的 RRDTool 源码里的 doc/rrdbuild.pod 文件里找到。

3.安装 SNMP 采集工具

SNMP 全名是简单网络管理协议,几乎所有的网络设备(交换机、路由器等)和操作系统默认都安装
了 snmp 服务。

Cacti 系统所在的服务器并不一定要安装 SNMP 服务,但是 Cacti 系统采集数据要用到 Net-SNMP 包里


面的几个工具,所以最好也在 Cacti 服务器上安装 SNMP 服务。我们可以直接在系统中运行 snmpwalk 和
snmpget 看是否有该命令,如果有则无需安装了。

如果操作系统没有安装 SNMP,可以到本文最后的资源里的 Net-SNMP 官方网站上下载源码或二进制包


进行安装。

4.安装 Cacti

Cacti 是一套 PHP 程序,当前最新版本是 0.8.6h。安装时需要对 Cacti 包文件和数据库进行部分设置。

假设 apache 的 DocumentRoot 目录为/www/htdocs:


cp cacti-0.8.6h.tar.gz /www/htdocs
tar xzvf cacti-0.8.6h.tar.gz
mv cacti-0.8.6h cacti
useradd cactiuser –d /www/htdocs/cacti

导入数据库、设置权限:

cd /www/htdocs/cacti
mysql -u root cactidb < cacti.sql
chown -R cactiuser rra/ log/

编辑配置文件/www/htdocs/cacti/include/config.php :

$database_type = “mysql”;
$database_default = “cactidb”;
$database_hostname = “localhost”;

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 88


企业应用

$database_username = “cactiuser”;
$database_password = “cactipw”;

定时让 Cacti 的 poller 取数据:

crontab –u cactiuser –e
加入:
*/5 * * * * /www/php/bin/php /www/htdocs/cacti/poller.php >; /dev/null 2>;&1

注意:不要使用 root 用户运行上面的“poller.php”命令,否则请再次运行 chown –R cactiuser


rra/ log/

基本设置:
Cacti 安装完成后,并不能立即进行数据的采集,我们还需要对 Cacti 服务器和客户端进行设置:

1. Cacti 端的设置:
Cacti 端主要是设置一些应用程序的路径和版本等信息,这些信息非常重要,因为不同版本程序的参
数会有差异,有时会让 Cacti 不能正常工作。
在浏览器上输入:
http://IP/cacti
进入 cacti 的初始设置页面:
在这里我们要输入一些原始的信息:
点击 NEXT ->
选择“New Install”,点击 NEXT ->
输入 Cacti 需要用到的程序的绝对路径、版本等信息(如图 5),点击“Finish”->
输入原始的用户和密码:admin/admin,点击“login” ->
更改 admin 用户的密码 ->
点击 “Save”即可进入 Cacti 的控制面板。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 89


企业应用

图 5 Cacti 安装设置

上述设置必须准确,否则 Cacti 可能无法正常运行,使用管理员用户登陆后可以在“Settings”面板中


进行修改。

2. 设置 Net-SNMP:
该设置针对的是被采集端而非 Cacti 服务端。一般的类 UNIX 操作系统均安装有 Net-SNMP 软件包,
但不同操作系统,甚至不同的 Linux 版本的安装路径和配置文件可能都不一样。如无特殊的需求,使用系
统自带的 SNMP 程序即可,请参考该操作系统的使用手册。

下面介绍从源码重新编译 Net-SNMP 的方法:

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 90


企业应用

从 Net-SNMP 的官方网站下载最新版本的 Net-SNMP 软件包,解压后进行编译:

# ./configure --prefix=/usr/snmp --enable-mfd-rewrites --with-default-snmp-version="2"


--with-sys-contact="yourname" --with-sys-location="China" --with-
logfile="/var/log/snmpd.log" --with-persistent-directory="/var/net-snmp"
# make && make install
# mkdir –p /usr/snmp/etc/snmp
# cp EXAMPLE.conf /usr/snmp/etc/snmp/snmpd.conf

修改/usr/snmp/etc/snmp/snmpd.conf 文件的 61 和 62 行,设置可以访问改 SNMP 的网段以及 community


名称。
比如设置为
com2sec loca localhost public
com2sec mynetwork 192.168.100.0/24 public

表示允许本地和 192.168.100.0/24 的主机使用 public 来访问该 SNMP 服务。


另外上述设置也只是针对 SNMP1 和 SNMPV2 版本,如果觉得有需要使用 SNMP3 请参考 SNMP 的资
料。

3. 设置交换设备:
除了监测每一台服务器的性能参数外,在实际的应用中,我们可能更需要监测交换机或路由器的流
量。同样的,我们需要开启交换设备的 SNMP 功能,让 Cacti 能取到数据。交换设备一般使用设备厂商自
己的 SNMP 软件,下面以 CISCO 设备为例进行设置:

Router>enable
Password:
Router#
Router#configure terminal
Enter configuration commands, one per line. End
with CNTL/Z.
Router(config)#

下面的命令可以创建一个只读的 community 名称“public”:


Router(config)#snmp-server community public RO

下面的命令可以创建一个可读写的 community 名称“private”:

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 91


企业应用
Router(config)#snmp-server community private RW

退出 config 模式:
Router(config)#exit
Router#
将设置写入 NVRAM 中::
Router#write memory
Building configuration...
[OK]
Router#

更详细的配置请参照最后一节“资源”中的“How to Configure SNMP Community Strings”链接。

4. 测试 SNMP 服务
在 Cacti 服务器上使用命令:
snmpwalk -v 2c -c public 192.168.0.1 if
该命令表示,使用 SNMPV2c 版本和 community 名称 “public”,取服务器(192.168.0.1)的所有
interface(网卡)的信息。

如果 192.168.0.1 的 SNMP 服务正常,则会返回服务器或交换设备的网卡信息。如果返回错误信息,


请检查你的 SNMP 配置或网络是否正常。

5. 安全
或许有人会说开启了 SNMP 服务后,服务器和设备会变得不安全了。其实这样的言论可能还停留在
多年前对 SNMP 的看法。其实 SNMP 最容易被利用的地方不是它的缺陷,而是它默认的查询
community――“public”。不负责任的管理员总会留下后门给黑客,这并非软件的错。当前 SNMP 协议的
版本是 SNMP3,该版本改变的之前只使用 community 进行查询的方式而是采用了用户名和密码验证,大
大改善了 SNMP 的安全性。即使不使用 SNMP3 版本,也可以在配置文件中限制能访问 SNMP 服务的网段。
当然,如果你对 SNMP 还是不放心,可以将 SNMP 服务 bind 在内网 IP 上。没有内网 IP?防火墙、ACL
总会用吧?

六、使用方法:

1.界面介绍

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 92


企业应用

登陆 Cacti 后,可以看到左上角是两个按钮(如图 6),“console”和“graphs”。console 表示控


制台,在此进行所有的配置等操作;而 graphs 则是用来查看所有服务器的性能图像的界面。

图 6 Cacti 菜单

2.console 菜单
Create:
New Graphs――创建新图像的快捷方式;

Management:
Graph Management――图像管理。可以在此删除、复制图像,Cacti 会自动创建图像。不过如果我们有特
殊的需要,比如将几张图上的数据合并在一张图像上的话也可以在此手工新建图像;
Graph Trees――图像树。在 graphs 界面里,图像或 devices 是树状结构显示的(如图 7),可以在此设置
树的结构;
Data Sources――管理 rrd 文件。一般无需修改,Cacti 会自己创建 rrd 文件;
Devices――设备管理。这是我们最经常需要修改的地方,可以在此创建新的设备或修改其名称等信息。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 93


企业应用

图 7、图像树

Collection Methods
Data Queries 和 Data Input Methods 是采集数据的方式,一般我们无需对这两项进行修改;

Templates
Graph Templates 、Host Templates 和 Data Templates 分别是图像模板、主机类型模板和数据模板。这些模
板可以导出、导入也可以自己编写,一般无需修改。

Import/Export
Import Templates 和 Export Templates,对上述模板的导入、导出。我们可以在 Cacti 的官方网站上找到这
些模板,不过需要注意模板对于的 Cacti 的版本。

Configuration
Settings ――Cacti 的主要配置菜单;
可以在此重新设置对应的程序的路径、版本等信息。也可以设置图像的输出方式(允许 ftp)、显示效果、
登陆方式(允许使用 LDAP)等。

Utilities
System Utilities ――显示 Cacti 系统的一些 cache 和 log 信息,如果 log 文件太大建议直接到后台查看;
User Management ――用户管理。可以在此添加、删除用户,并对每个用户设置详细的权限;
Logout User ――注销用户。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 94


企业应用

3、创建监测点

假设被监测的服务器名叫“My_Frest_Host”,IP 为 192.168.100.1,SNMP 的 community 为 public。


进入 Cacti 的 console 面板 ->
点击“Devices”进入设备面板->
点击“Add”添加新设备->
填写要监测服务器的各种信息,其中 Host Template 请选择“ucd/net SNMP Host”(如图 8)->

图 8 填写新建服务器信息

点击“Create”保存信息,如果 SNMP 连接没有问题,左上角会出现该服务器的信息,否则会出现


“SNMP error”的红色字样->
点击上部的“Create Graphs for this Host ”为该设备创建需监测的内容。监测的内容分两种,“Graph
Templates”和“Data Query”(如图 9),区别在于“Data Query”能根据 SNMP 信息 列出监测项目的信息。
例如 Data Query 里的“Interface Statistics”可以看到该主机所有网卡的信息,这样我们可以选择需要监测
的网卡。点击右侧的正方形选择框勾选上要监测的项目->

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 95


企业应用

图 9 选择要监测的内容

点击“Create”创建选择的监测内容,已经选择创建的内容会自动变成灰色并且不能再点选(如图
9)。Cacti 会自动创建该监测点的 rrd 文件(在 rra 文件夹中)、“Data Source”和“graph”条目。创建监
测点完毕。

4、查看监测点

点击“Graph Management”可以看到刚才创建的监测点对应的图像,注意由于 Cacti 默认每 5 分钟到监


测服务器上取一次数据,所以刚创建的监测点会出现图像不能显示的现象,需要等几分钟查看才会正常
显示。
为了方便查看,可以将刚才新创建的设备或图像加入到“图像树”上:
点击“Graph Tree”进入“图像树”面板->
点击分支名称或“Add”新的分支->
点击“Add”,添加新的“Tree Items”->
“Tree Item Type”中选择“Host”,“Tree Item Value”的“host”中选择刚才新添加的主机
“My_Frest_Host”->
点击“Create”。
这样,我们就可以在“graphs”界面中查看“My_Frest_Host”的所有监测图像了。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 96


混源新视界

混源新视界

混源:开源之道

顾宏军

在过去这几年里,软件产品数量急剧增长。现今设备不仅包含越来越多的软件,而且越来越多的功
能通过软件实现了。这种爆炸式的增长也抬高了软件开发的成本。外包(部分)软件开发只提供了一种
不完全的解决方案,而对适当的部件进行开源可以有效地节约开发成本,缩短产品开发周期,因此,某
些软件开发上就采取部分组件开源,部分组件闭源的战略,从而形成了独特的“混源”架构。

抛开开源和闭源各自的立场不谈,“混源”实际是一种实用主义,即一切从效用出发。所以,企业
需要了解开源风险、并有效控制开源风险,充分发挥开源和闭源的长处。

要采用“混源”架构,需要实施分两步走的战略。首先,将软件或系统的功能、组件区分为独有功
能、基本功能和可有可无功能,并且对每个功能组件进行判别,其使用开源架构或者闭源软件是否是最
佳选择;其次,软件架构设计应该和法律条款同步设计。这需要软件架构师、工程师与知识产权和法律专
家进行通力合作。

了解开源风险

“开源”所指的是软件开发模式,是程序的源代码在某种授权下公开,以提供用户修改和从新发布
该程序的权利,并期望(不是必须的)用户所作出修改和改进也可纳入“官方”版本。

开源软件的授权适用条款可能比较奇特。例如,有授权要求如果你的软件要包含开源软件,那么你
开发的新软件也需要进行开源。如果采用使用这种授权的开源软件,那么整个软件栈的所有软件产品,
可能都必须以开源方式进行发布。(这些条款只在把这些软件出售或转让给第三方时适用)。对专利持有人
额外风险可能是在发布第三方开源软件时需要提供一个免费的专利授权,而这有可能侵犯了别人的专利。
这一专利许可问题可只限于在开源组件中,但是在某些情况下甚至会影响整个软件栈。

公司可能因这些风险对开源的诱惑敬而远之,这并不是一种从商业角度做出的理性决定。在商业环

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 97


混源新视界

境中使用开源软件正越来越流行,甚至在商业产品中。忽略了这些,公司将与所有可能的高质量软件无
缘,并且无法享受开源带来的削减开支和时间的好处。有时一个商业产品简直没法保持和开源软件一样
丰富的功能。因此,唯一可行的是要了解风险,并懂得如何管理它们。

开源许可证

现在有 40 多种不同的开源许可证,每种都有其约束条件和影响力。他们大致可分为 3 类:

1.Free-for-all 许可证:

这类许可只需要将荣誉归功原作者即可。衍生作品,可以保持专有。有时这类许可被称为“学术许
可”典型的就是所谓 BSD 和 MIT 许可,以及用于 Apache 服务器的 Apache 许可证。

2.Keep-open 许可证:

根据采用这类许可的软件进行的修改,必须也采用这类许可进行开源化。大的包含该软件的新软件,
则可以使新软件保持专有。LGPL(Linux 系统库采用)授权和 Mozilla Public License 授权(Firefox 浏览器
采用)就是 Keep-open 授权。

3.Share-alike 许可证:

当软件采用这种许可时,无论软件被修改或是被扩展,所有的成果都必须进行开源化。有时用术语
“Copyleft”来描述这种授权。最有名的例子是 GPL 授权,它被 Linux 操作系统采用。另外一个例子是
Open Software License (OSL)。

公司为了避免出现必须开放其专有软件的问题,可能会禁止使用 Share-alike 甚至 Keep-open 许可的


开源软件,但这会严重限制使用开源的效用。因为约 65%的开源软件使用 GNU ,有另外 20%的采用
LGPL 协议。因此,开源策略应该是在哪里应用以及如何应用,而不是如何将不同种类的开源软件应用在
一个产品中。

选择合适的混源策略

采用开源策略的公司常常做出非黑即白的选择:一个产品要么开源,要么闭源。其实可以用一种更
微妙的方法—“混源”可获得更大的好处。 如果能对如上所述的授权进行有效的管理,公司可以对某些
部件使用开源软件,而对其它部件进行封闭开发或者商业授权,最终目标应该是最能保证产品的价值。
专有的组件或者方案应该被可供选择的开源产品替代,以体现出更大的价值,而不是保持该组件私有或

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 98


混源新视界

闭源。除了可以使用已有的开源实现,公司也可以以开源方式公开它自己的实现。

产品按功能进行分类,有三类功能:

1.特有的功能:

这类功能给产品带来附加值。它们使产品可和竞争对手区分开来,并且给出了客户乐意购买它们的
理由。

2.基本功能:

这类功能是客户需要和期望的功能。它们提供价值,但没有给产品增加附加值。举例来说,今天没
有人买便携式的音乐播放器,是因为它支持 MP3 格式。 另一方面看就是,如果不支持 MP3 格式,就没
有人买这样的播放器。

3.可有可无功能:

这类是隐藏的、不感兴趣的功能。产品需要它们才能工作,但客户并不关心它们。

对每个分类,最基本的问题“自己开发还是购买?”变成了“自己开发、购买还是采用开源?”要
回答这个问题,第一步就是要区别它是哪一类功能部件,特有的,基本的还是可有可无的?第二步,判
别每种选择对各个功能部件产生的影响。图 1 显示了每种选择的影响。

一般而言,特有功能应内部开发,以确保最大的市场优势。外包(购)这类功能组件,是一种选择,但
是这意味着公司产品最关键部分依靠第三方。如果第三方出现问题,将造成重大的风险。当然,对这类
功能进行开源也不是个好的决定,开源会使该功能部件成为基本功能。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 99


混源新视界

对于可有可无功能,公司不应该花时间和精力在内部开发或维护这类功能。 这部分使用开源节约时
间、精力和金钱,而且这通常是正确的选择。一个例子就是使用 Linux 作为一个嵌入式操作系统。

居于中间的是基本功能。这类功能需要逐个的作出决定,是开发、购买还是使用开源合适。 公司可
能采用一个策略,例如“如果该功能不向其它人收费,我们采用开源。”技术考虑可能阻碍某个基本功
能采用开源。举例来说,如果对基本功能进行开源,就也需要对特有功能进行开源,显然,基本功能应
该依然闭源。

在某些情况下采用开源可能不合适。一个经常听到的问题是,开源许可的条款对一个特定的产品过
于繁琐。这里可能也有技术原因使得公司需要进行闭源。例如,在一个小型嵌入式装置里,Linux 未必就
是最佳选择,因为它的系统需求较大。另外一个原因是,有些客户要求不用使用开源。

软件的合法问题

软件的合法问题理论上讲很简单,实际却有些复杂。源代码可以被复制和拷贝,库可以被链接,或
被远程进程调用。用面向对象语言像 Java 和 Web Services 可能的事件变得更多。这会造成软件组件间复
杂的相互依赖关系。对这样一个复杂的软件栈进行开源组件法律影响评估,有相当大的困难。

为确保实现被妥善管理,知识产权专家应当在产品设计的早期介入,在项目开始时就顾及,并贯穿
软件设计和实施的整个过程。

总之,对开源的态度,不应是明令禁止,而应该是作为战略的一部分,采用实用主义的“混源”策
略,对开源进行有效充分的利用。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 100


混源新视界

CIO 掌控混源之道

CIO 面临的挑战越来越大。其中,如何让混源的软件设施协调、高效运行,就是对 CIO 智慧的一大


考验。在异构的数据中心,IT 经理该如何管理,才能使开源和闭源软件相互配合、运作协调?这里有几
点建议:

适应它

未来,新的套装应用软件将是闭源软件和开源软件的混合体。这不仅将节省企业的 IT 支出,而且还
将使 IT 经理们在软件开发上拥有更大的控制权。

混源这种趋势是不可避免的。因此,IT 经理们现在就应该着手增加数据中心的开源组件。

忘记供应商锁定

在百分百封闭源代码套装软件的时代,有一件事情经常发生,那就是每个人都得习惯供应商锁定。
在这种情况下,许多企业的系统更新在很大程度上依赖于供应商,出于成本控制的考虑,他们的产品常
常落后而且几乎无法调换或者取代,而开放源代码将把 IT 经理从这种困境中解救出来。

平衡利用社区

在过去,试图让 IT 经理改变或者修改已经部署的应用,是一件很勉为其难的事情,因为他们把那些
应用看成是一个宝。“我有一家客户,他们只有一名员工懂软件。他们把他写的程序视作皇冠上的宝石
一般珍爱;事实是那不是软件,但的确出自那个人的大脑。”因此,如果考虑将你的新软件基于开源,那
么就不要依赖于独立的开发者。

不要担心开放你的源代码。很多人说 GPL 协议意味着他们必须将软件分发给任何人,但是这只是在


你试图成为一个商业版本发行者的情况下才需要那样做。从长远来看,IT 经理能够借助开源社区的力量
来获得大部分应用代码,从而能够节约成本。

真正的长期支持

也许你会说,如果一个开源项目不再获得支持,那么它的使用者将会比较麻烦。事实上,如果相同

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 101


混源新视界

的事情发生在闭源软件公司的话,那么它的使用者将什么帮助也得不到。对于开源,至少代码还能存在。
产品被停产或者公司破产后,闭源工具很难生存下来。开源却不是那样,有例为证。现在,一个基于
Linux 桌面的文件管理软件 Nautilus,即使其创建者 Eaze 公司已经不存在了,Nautilus 还在规则地更新着。
遇上这样的情况,也许微软还能够再继续提供 5 年的支持,但是其他的小公司就很难保证了。

避免升级风暴

微软刚刚发布了 Vista,如果用户试图升级使用的话,将不得不购买新的硬件来匹配,因为大部分的
应用对 Vista 来说都是新的,后端服务器需要新的软件来与新的桌面操作系统进行对话。 而开源项目是
组件化、模块化的,你可以像搭积木那样灵活更换,但并不改变它们原来的功能,显然这将帮助 IT 经理
避免诸如 vista 带来的升级风暴。

www.linuxpk.com 投稿邮箱:opensource@linuxpk.com 合作邮箱:xiaoli@Linuxpk.com 《开源》 102

You might also like