You are on page 1of 116

卷首语

卷首语

For MID 软件将大行其道

“口袋电脑”是这段时期 IT 领域一个流行的词汇,“只有口袋大小、永远在线、提供全功能互联

网体验。”这就是口袋电脑贴切的描述。

在 4 月 2 日的 Intel IDF 大会上,将移动多媒体与互联网无缝链接作为核心思路的 MID(Mobile

Internet Devices,移动互联网设备)如期而至,英特尔在 IDF 上一口气推出了面向 MID 的 5 款凌动处

理器(Atom)和英特尔迅驰凌动处理器技术,以及其它嵌入式计算解决方案。一时间,“口袋电脑”

还未问世就完全地占据了人们的视线,不仅成为 Intel 下阶段的一个战略重点,也为软件厂商开辟了

新的一片蓝海。

2007 年 Intel 向社区宣布了新的开源项目 Moblin,和开源社区竭诚合作为促进移动 Linux 革新。

Moblin 项目主要为移动设备,数字医疗与数字家庭设备等消费类电子产品(Consumer Electronics)提供

互操作与可伸缩的创新解决方案。Moblin 旨在为移动设备开发合适的 Linux 系统与应用,这包括开

源的解决方案,工具和一个框架结构。在这个框架内,开源社区可以分享技术,创意以及使用模型。

在即将面世的第一代 MID 设备中,Linux 成为首选操作系统。选择 Linux 的原因主要是客户更加

看重 Linux 的小巧、省电、灵活、高性能与低价格,Moblin 就是首先为 MID 量身定做,当然 Moblin

也可应用到其它消费类电子产品。

事实上,由于 MID 设备的移动特性、较小的屏幕和全新的操作方式,传统的 PC 操作系统很难

适应,其优势已不存在。在此领域,Linux 开放、可定制、高性能高安全的特点注定了它的优势。目

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


卷首语

前 Intel 选择了中科红旗和 Ubuntu 社区作为 MID 设备的合作伙伴,中科红旗已经专门针对 MID 平台

定制了 Midinux 操作系统。

据中科红旗内部人士透露,MID 设备还没正式推出,但 Midinux 操作系统已经受到了很多企业

的认可,最近几个月业务成垂直性的增长。预计到明年,中科红旗在 Midinux 操作系统的收入将超

过在服务器和桌面端的收入。中科红旗作为一家老牌的开源操作系统公司,其 Midinux 业务出现了

比桌面和服务器领域更火热的状况,不能不说 MID 上蕴含着 Linux 的众多机会。

同样作为国内老牌 Linux 操作系统厂商中标软件也正在与 Intel 接洽,也尝试涉水这片新的蓝海。

同时,据消息人士透露,MID 可能在 2009 年的第二代产品完全放弃 Windows 的产品,全面支持开源

Linux 操作系统。如果这样的消息属实,Linux 也将随着 MID 设备的推广普及而取得众大的突破。

“软件是灵魂”,这句话也同样适用于 MID。Intel 只是提供了 MID 的“躯壳”,用户真正需要

灵动地使用起来,还得依靠各种功能的软件,操作系统是必须的,同时运行在操作系统之上的应用

软件才是促使 MID 成为移动新贵的决定性因素。

一些软件厂商已经嗅到了 MID 巨大的市场价值,率先将触角伸向了这一全新的领域,国产

Office 办公软件厂商红旗 2000 就推出了 RedOffice For MID。这款功能丰富的办公软件,将 PC 机上

常用的办公软件平滑移植到 MID 设备上,使用户轻松的感受移动办公的便捷。RedOffice For MID 包

含文字、表格、幻灯、绘图、数据库、公式六个组件,可快速的进行文档撰写、公文制作、报表编

制和幻灯演示等工作,RedOffice For MID 的推出吹响了传统软件厂商进军 MID 的号角。

在开源爱好者数次要求其推出 QQ for Linux 而未果的时候,腾讯居然率先推出了 QQ for MID,

由于 MID 运行的 Midinux 是一种 Linux 操作系统,更多的人愿意将此看作是腾讯重新开始关注 Linux

用户的一种转变。但更多的其实表明腾讯的一种战略思路,桌面 Linux 一直挣扎不前,这块是被很多

应用软件厂商放弃的市场,而 MID 是一个新兴的市场,并且具备未来成为主流消费市场的潜质,腾

讯的这种转变也就很好理解了。

不管是红旗 2000 的先拨头筹,还是腾讯 QQ 的转变,都向人们表明他们对 MID 市场信心百倍。

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


卷首语

MID 的设计理念是笔记本电脑,它不是一个简单的 PDA 设备,其问世的意义就在于取代笔记本电脑,

因此 MID 的性能是足够强劲的,应用是丰富多彩的。在移动越来越成为这个社会的主流思想,谁又

能怀疑 MID 不能达到今天 PC 电脑的高度?在这么一个全新的市场面前,软件厂商应该给予更多的

关注,或将其 for PC 的软件平滑移植到 MID 上,或开发一些针对 MID 的应用。MID 市场刚起步,

其需求覆盖了传统的软件生态链,也涵盖了诸多互联网的要素,从基础软件(如操作系统、Office)

到多样化的应用软件(如即时通讯、浏览器),可以预见,“for MID”将成为软件厂商的战略重点,

也是其时尚标签。

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


目录

目录

卷首语..................................................................................................................................................2
For MID 软件将大行其道............................................................................................................2

产业聚焦..............................................................................................................................................8
《开源》第三期下载抽奖获奖名单公布.....................................................................................8
intel IDF 落幕 MID 成最大亮点...................................................................................................8
现在可以索取 Ubuntu 8.04 LTS 免费光盘..................................................................................11
盖茨:开源模式即“无人能提高软件性能”..............................................................................11
KDE、GNOME 携手共创 Linux 桌面.........................................................................................12
赵晓亮:MySQL 坚持开源始终如一............................................................................................13
第二部开源电影将发布...............................................................................................................14
对话开源大师,感受前沿技术,立即注册赢取大奖!...........................................................15
Linux 的移动蓝海.........................................................................................................................17
Midinux 诠释移动互联新界面.....................................................................................................23
开源的道路...................................................................................................................................26

博客文摘............................................................................................................................................32
“Linux 桌面”含苞待放在今时.................................................................................................32
坚定不移地推进 UOF...................................................................................................................36
Ubuntu 8.04 给我们……系列文章 .............................................................................................37

开源社区............................................................................................................................................41
项目动态.......................................................................................................................................41
耐寒的苍鹭(Ubuntu 8.04)腾飞................................................................................................41
GNOME 2.24 的首个开发版发布...........................................................................................42
Solaris 10 5/08 操作系统发布..................................................................................................43
Linux Kernel 2.4.36.3 发布......................................................................................................44
Linux 实时系统 RedHawk 5.1 发布.........................................................................................45
Fedora 9 进入开发的最终冻结阶段........................................................................................46
如何帮助开源软件项目...............................................................................................................47
GPLv3,纷争与未来 ..................................................................................................................49
GPL v3,自由与机遇...................................................................................................................56

知识学堂............................................................................................................................................60
GCC 精彩之旅(上)..................................................................................................................60
Linux 内核组成和架构.................................................................................................................70

经验技巧............................................................................................................................................76
Linux 一句话精彩问答——系统配置篇(3)...........................................................................76

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


目录

Linux 下的计划任务.....................................................................................................................80
RPM 深入应用..............................................................................................................................86
linux 下如何 mount 网络目录?.....................................................................................................93

企业应用............................................................................................................................................94
使用 AWStats 分析站点状况........................................................................................................94
Snort 规则及预处理器................................................................................................................102

混源新视界......................................................................................................................................110
开源既往不咎立新规 混源软件进退维谷................................................................................110

编读往来..........................................................................................................................................114

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


产业聚焦

产业聚焦

《开源》第三期下载抽奖获奖名单公布

为了感谢开源爱好者对《开源》电子杂志的厚爱,在第 3 期杂志发布的同时,进行下载抽奖活动,
抽奖结果公布于第四期杂志发布之时。

现将第三期《开源》电子杂志下载获奖名单公布如下,同时感谢 Intel、中科红旗的支持,请以下获
奖者通过站内短信(kennycx)或 Email(opensource@linuxpk.com)与我们取得联系。

Intel 电脑包:九命怪猫、夏雨、zhongqun、cheiron

红旗钥匙包:Flyinmorning、kakaryan、pavel2006、锅盖头、
trucychen、watkins、id_sonic、迷茫的小猪、Richeal、zhengxistars

intel IDF 落幕 MID 成最大亮点

4 月 4 日,英特尔 2008 年全球唯一的一次春季 IDF 昨日在上海国际会议中心落下帷幕,英特尔携手


合作伙伴展示的 MID(移动互联网设备)成为本次 IDF 最大的亮点。

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


产业聚焦

英特尔展示多项前沿技术

作为英特尔技术“布道”工具的 IDF,最重要的一项功能便是展示英特尔的最新技术。在本届的 IDF


上,英特尔披露,最受业界关注的 8 核 Nehalem 处理器将于今年四季度量产,Nehalem 之后的新一代处理
器系列研发代号为 Sandy Bridge,它计划于 2010 年推出,英特尔将为 Sandy Bridge 开发的全新高级矢量
扩展(Advanced Vector Extension,AVX)指令集。
英特尔将在 2008 年年末推出英特尔防盗技术(Intel Anti-theft Techology),用于笔记本数据防盗管理与
数据保护、资产恢复等。
英特尔在本次 IDF 上发布了迅驰凌动处理器,这是英特尔迄今为止尺寸最小的处理器,也是在功耗
小于 3 瓦特的处理器中速度最快的处理器产品,主要用于各种小尺寸便携笔记本电脑,如 MID 及上网本、
上网机。

MID 成最大亮点

除了展示新技术外,本届 IDF 最大的亮点莫过于筹备了一年后正式推出的 MID(Mobile Internet


Devices,移动互联网设备)。
MID 使用了英特尔迅驰凌动处理器技术,它包括第一代英特尔迅驰凌动处理器及面向 MID 的英特尔
系统控制器中心,其研发代号为 Silverthorne。在经过了一年的筹备之后,英特尔在本次 IDF 上与合作伙

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


产业聚焦

伴首次展示了 MID 产品,引发了现场观众的轰动。MID 的主题演讲结束之后,大批的观众涌向台上去观


摩这个小巧的装在口袋里的上网终端。观众的热情导致了下一个媒体问答环节无法准时开始。
根据英特尔公布的资料,爱国者、华硕、明基、Clarion、富士通、技嘉、Hanbit、KJS、联想、LG
电子、NEC、松下、三星、夏普、Sophia Systems、Tabletkoisk、东芝、USI、WiBrain 和 Yuk Yung 等厂
商都已经或即将推出 MID 产品,这
些产品将在 6 月集中上市。
MID 目前最大的障碍是无线网
络的不完善,这不仅是中国特有的问
题,全球大部分国家都面临这样的困
境。随着中国 12 个城市、全球近
200 个城市的无线城市建设计划的推
进及全球 3G 网络的演进,相信无线
网络在未来会有突破。
在价格方面,目前 500 美元的价
格略显昂贵,不过有分析机构预测,
2010 年,MID 的价格将会降价到
250 美元左右,这将会是一个让消费者心动的价格。
英特尔公司预测,2011 年 MID 将引来大规模的爆发,因此,3 年之内都还是市场培育期。
有人将 MID 定位于继 PC、笔记本之后,消费者的第三台电脑。有了英特尔在产业链中的积极推动与
下游厂商的配合,相信这一融合性的产品将带给 PC 及消费电子行业一些震动。
除了 MID 外,英特尔还发布了第二代学生电脑及以上网及廉价为卖点的上网本与上网机。

IDF:整个 IT 行业的产品竞技台

尽管 IDF 是英特尔举办的一次信息技术峰会,但吸引了 1200 名技术人员参加,超过 100 个公司在会


场展示自己的产品与解决方案,探讨的话题中,超过 50%与英特尔无关。作为一家平台型的企业,英特
尔在 IDF 上再现了这一特质,将 IDF 办成了 IT 行业的一次技术与产品展示大会。
海尔电脑今日在英特尔 2008 年春季信息技术峰会(IDF)上发布了一款命名为“宝蓝 V9”的数字高清娱乐中
心电脑,方正则推出了贴牌第二代学生电脑的 8.9 英寸超便携电脑,爱国者、联想等多家公司展示了新发
布的 MID,同方也借机和英特尔在黑龙江试点 IT 远程管理。

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


产业聚焦

现在可以索取 Ubuntu 8.04 LTS 免费光盘


Ubuntu 8.04 LTS 正式版已经发布,光盘也开始接受预订。Ubuntu 不愧是“Linux for Human Beings”,
除了操作系统本身越来越趋方便和人性化,另外自费为全世界 Ubuntu 用户提供光盘更是体现了这一信念
申请 Ubuntu 8.04 LTS 的地址还是跟以前一样:

访问 https://shipit.ubuntu.com/ ,然后注册一下就可以申请了。

盖茨:开源模式即

“无人能提高软件性能”
据国外媒体报道,微软董事长比尔·盖茨(Bill Gates)近日在美国西雅图市
系统生物学研究所(Institute for Systems Biology)发表演讲时表示,与专利性
商用软件相比,开放源代码(以下简称“开源”)软件的最大不足是,正由于开

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


产业聚焦

放了源代码,将导致出现“无人愿意去提高软件性能”现象。
盖茨此前宣布,将于今年 7 月 1 日正式退出微软日常管理工作,而把精力专注于比尔-梅琳达·盖茨(Bill &
Melinda Gates)基金会的慈善工作。在本周举行的演讲中,盖茨首先谈到了科技对提高人类生活水平、战胜
疾病的重要性,并表示今后微软将致力于计算机技术与生物学的结合。
在接受台下听众提问阶段,盖茨指出,目前许多制药企业通常会投入大量资金,以研究治疗脱发等无关紧
要的药物,而不愿意研发可治疗发展中国家各种传染病的相关药品。
盖茨接着表示,各大制药企业之所以这样做,是因为他们面临着进退维谷的局面:如果自己成功开发了某
种可治疗公众传染病的药物,外界就会要求该公司对外开放这项技术。如果开放技术,就意味着赚不到钱,也
就无法收回前期研发投资;如果选择不开放技术,则又将面临着外界的严厉道德指责。
随后台下一名与会者问到,在医药技术开发过程中,是否可借鉴软件开发中的开源模式?盖茨对此回答
道,自己并不认同开源“通用公共许可证(GPL)”模式,但微软经常在发展中国家免费发放 Windows 操作系统
及其他软件产品。
盖茨表示,GPL 许可证导致的结果是,“没人愿意(或能够)提高既有软件性能”;如此一来,开源产业白白
浪费了大量人力物力,同时也错过了大量商机。盖茨说:“开源产业与前面所说药品研发难题之间有很大相
似性。如果我们研制了新药物,就应该对此收费,这样才能调动开发者的积极性。”

KDE、GNOME 携手共创 Linux 桌面


3 年前,如果有人告诉你 Linux 桌面环境的两大阵营:KDE 和 GNOME 将展开合作,甚至联合举办他
们的年会。这听起来就像《猫和老鼠》里面的 TOM 和 JERRY 牵手高呼和平共处一样可笑。但是,今天,
这两大阵营的合作的确发生了。
Linux 桌面的两个老对手,KDE 和 GNOME 已经协商同意将在 2009 年夏季一起举办组织的年会。
KDE 项目的主管 Cornelius Schumacher 说:两大社区之前都没有想到能够一起举办年会。而 REDHAT
的软件工程师兼 GNOME 项目的主管 Behdad Esfahbodof 也说:我们发现我们之间有很多共识,比如我们
通过我们的软件带给桌面用户自由感受的追求,还有自由软件事业赋予我们的共同使命。
KDE 和 GNOME 的合作其实已经开始了好几年,可以回朔到 2005 年启动的 PORTLAND 项目,而
Portland 项目意图在于通过开发所有应用程序都能使用的 API、提供开发工具来统一 Linux 桌面。
PORTLAND 项目采用两套界面:一套命令行工具和一个被称为 DAPI 的 API 库。Portland Project 能简化
GNOME 和 KDE 桌面环境中程序的移植和集成过程。Linux 开发人员可以利用 DAPI 来自定义服务,并在

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


产业聚焦

不同桌面版之间维持同样的界面集合,简化基础的桌面整合任务。
同时,两个社区还启动了 DAPI (Desktop Application Programming Interface)项目-基于 D-BUS。D-
BUS 本质上是进程间通信(inter-process communication)(IPC)的一个实现。不过,有一些特性使得
D-BUS 远远不是“只是另一个 IPC 实现”。有很多不同的 IPC 实现,因为每一个都定位于解决 特定的明
确定义的问题。CORBA 是用于面向对象编
程中复杂的 IPC 的一个强大的解决方案。
DCOP 是一个较轻量级的 IPC 框架,功能较
少,但是可以很好地集成到 KDE 中。SOAP
和 XML-RPC 设计用于 Web 服务,因而使
用 HTTP 作为其传输协议。D-BUS 设计用
于桌面应用程序和 OS 通信。
GNOME 项目的主管 Behdad Esfahbodof
认为共同举办年会将使桌面自由软件受益,
将众多开发者聚聚一堂将能激发更多的交流
与合作,并产生更多高质量的软件。Linux
基金会的 Jim Zemlin 也对此合作举动报以很大希望:这是一个非常正确的决定,我期待着在这次会议上
能产生对 Linux 桌面有重大影响的成果。

赵晓亮:MySQL 坚持开源始终如一
  近日,Sun 的 MySQL 预告了 MySQL 5.1 的发布计划。值得注意的是,其中,新版 MySQL 最引人瞩
目的特性是数据库的在线备份。但是,在线备份特性的一部分功能将不会在 MySQL 社区版本中出现,而
只会提供给付费的 MySQL 企业版。MYSQL 的这一举措引起了开源业界的极大不满,很多人谴责
MYSQL 是在背叛其成长所以依赖的开源社区。
  面对这样指责,在 4 月 23 日的 Sun MySQL 产品策
略发布会上,Sun 大中华区软件事业部总监赵晓亮愤怒
且带点无奈的谈到,“关于 MYSQL 部分高级功能闭源
的消息完全是一种谣言,不知道为什么会有这种声音出
来,可能,市场或者一些厂商太在意 MYSQL 的快速增
长,因此需要一些负面的东西来阻止 MYSQL 的高速增

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


产业聚焦

长。另外需要强调的是收费不等于闭源,这是一种误解。”
  当记者问道,“新版 MYSQL 中包含分区、事件调度、基于行的复制和基于磁盘的集群这些新功能
是否开源”时,Sun 公司 MySQL 全球开源社区关系副总裁 Kaj Arno 简短而坚定的回答—— “OPEN”。
  “以前 OPEN 的东西,我们不会有任何改变。新增加的功能也遵循开源的原则。今天没有开源的部
分,以后也会开源。没有开源的部分是因为涉及到第三方支持,牵扯到版权和专利。SUN 不是说在
MYSQL 上坚持 OPEN,而是 SUN 所有的产品线都是坚持开源,不仅仅是软件,还有硬件。” 赵晓亮补
充说道。
  对于有用户担忧“MYSQL 企业版中提供的高级功能因社区版用户无法体验,测试只能在有限的用户
中展开,从而导致这些功能可能是一些未经过充分测试的代码”。
  赵晓亮指出“MYSQL 社区版和企业版从技术本质上来说没太多的差别,只是说更高的特性支持更关
键的技术上会有所不同,所以不存在说这个产品没经过大规模用户测试。任何一个商业产品,包含我们
自己和社区都会进行严格的测试来满足关键业务的需求” 。

第二部开源电影将发布
你一定听说过开源软件,也可能听说过开源电影,因为世界上第一部开源电影《Elephants Dream》
早在 2006 年就已经发布。

这部电影来自 Blender Foundation,是一款完全使用开源软件制作的电影,今年 5 月 15 日,第二部电


影即将发布——《Big Buck Bunny》,它同样采用 Blender 的 3D 绘图技术,当然两年过去,技术的演变
会让电影效果更为精彩,这次发行的版本包含下载版 AVI (MPEG-4, AC3 5.1 surround),MOV (H.264 /
AAC Stereo)和 DVD 版,CC 授权发布。有兴趣的朋友们可以先关注一下他们制作组的主页。

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


产业聚焦

OLPC 再损失一员大将

4 月 22 日,百元笔记本电脑 OLPC 基金会日前宣布,负责软件及内容事务的前总裁 Walter Bender 已


经离职。

OLPC 发言人 George Snell 周一称,Walter Bender 因追求欣目标而辞职。最初,Bender 任 OLPC 总裁。


但 OLPC 重组后,Bender 被任命为调度主管。 Walter Bender
Snell 说:“近期,OLPC 进行了重组,将工作重心集中在开发、技术、
部署和教育四大领域。而 Bender 也因此忙得不可开交。”

事实上,今年 3 月份,OLPC 安全架构主管 Ivan Krstic 也因为


OLPC 重组而辞职。 Krstic 在博客中称:“不久前,OLPC 进行了大
规模的内部重组,伴随而来的是基金会目标和使命的改变。而我对新
目标又持有异议,因此决定辞职。”

在此之前,OLPC 首席技术官 Mary Lou Jepsen 也于去年底宣布


辞职,并成立了自己的公司。3 月初,OLPC 董事会主席尼葛洛庞帝
在接受采访时曾承认,对 OLPC 进行了重组,并正在为此而为物色一名 CEO。尼葛洛庞帝当时表示,正
在为 OLPC 物色一名 CEO,而他本人将继续担任主席一职。

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


对话开源大师,感受前沿技术,立即注册赢取大奖!

Best of BrainShare 2008 全球技术大会将于 5 月 20 日首次登陆中国,


作为美国 BrainShare 全球技术大会的精华版,本次会议将以全新视角闪
亮再现 BrainShare 的会议精华。

此次焕然一新的 Best of BrainShare 2008 不仅为您带来了业内最权威


的专家咨询团队,更从大洋彼岸带来了 BrainShare 年度最受欢迎、最振
奋人心的主题演讲及技术讲座,全心全意为您打造出零距离的优质交流
平台。

与此同时,我们还为您邀请到了 Novell 全球各大事业部总经理、高


级副总裁、亚太区总裁,以及 IBM、Intel、AMD、Dell 等全球 IT 行业
的领航者。

众业内权威人士亲临现场,齐聚一堂,为您呈现企业最高校最准确
的发展解决之道,带您体验最新 Linux 研发成果、最先进的虚拟化技术、
身份管理以及企业资源管理。

在此,我们诚挚的邀请您出席于 5 月 20 日在北京 JW 万豪酒店举办


的 Best of BrainShare 2008 全球技术大会,您将不虚此行。

出席 Best of BrainShare 2008,分享惊喜好礼!

Intel 笔记本、AMD 笔记本、iPod Video、Novell 旅行包、T 恤、吉


祥物,参与即获奖,奖品多多,大奖不断!

注册地址:
http://211.157.100.109/register/tracklink.aspxcam_id=novell200804081&url=http://211.157.10
0.109/edm/novell/20080408/edm1.html
产业聚焦

Linux 的移动蓝海

陈杰

去年末,由 Google、高通公司以及 T-Mobile、HTC、摩托罗拉和其它公司组成的开放手机联盟


(OHA,Open Handset Alliance)宣布开发首个为移动终端打造的真正开放和完整的 Android 平台。开
放手机联盟由 34 家公司组成,旨在开发可显著降低开发和分销移动终端与服务成本的技术。Android 平
台是朝这个方向发展迈出的第一步,它是一种由操作系统、中间件、用户友好界面和应用软件组成的全
面整合的移动“软件栈”。首款基于 Android 的手机有望在 2008 年下半年推出。

而此时,Google 也兑现承诺,对外发布了其移动设备平台 Android 软件开发工具包(SDK),程序员们


利用这个 SDK 可以开发出在 Android 平台上运行的手机应用程序。Android 开发包的发布,在全球范围内,
掀起一股“Android 热潮”,这是进军新一代“开放超微型计算机”的冲锋号,对于曾经神秘的移动计算
领域,Androud 将为我们开启一扇开放的大门。

并非又一“Linux 系统”

Android 平台发布不久,Symbian 首席执行官 Nigel Clifford 就对 Android 发表了评论,他认为 Android


不过是另一种 Linux 系统,现在手机市场有 10 个、20 个,甚至更多不同的 Linux 系统。有时候看起来
Linux 分裂的速度比其联合的速度更快一些。Clifford 同时表示,Symbian 承认 Android 对开放的承诺,并
且认为这是一件好事。

下图为使用开源平台的 Gphone

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


产业聚焦

在 Symbian
看来,Google 精
心打造的 Android
平台只不过是又
一个 Linux 平台,
与以往的移动
Linux 平台并没太
大的差别。但也
有开源社区的人
士表示,Android
将是媲美 Gun 计
划的一个新举措,
这将为移动 Linux
带来巨大的冲击。

Android 平台是否就如同曾经发布的众多移动 Linux 平台一样,又是一个打着开源旗号的噱头呢?首


先我们看看 Android SDK 发布的一些技术细节。

Android 是一个完全开放的开发平台,它包括有操作系统,中间件,用户界面和应用程序等一整套完
备的组件。Android 平台基于 Linux 2.6 内核,该内核包含一个名为 Dalvik 的虚拟机,可以最大化的提升
系统的性能,另外 Android 还集成了许多的应用程序,包括 Email 客户端,内存管理服务(SMS)程序,日
历,地图和基于 WebKit 引擎的浏览器。

同时,Google 表示,整个 Android 平台将从 2008 年起基于 Apache v2 开源许可对外开放源代码。而


SDK 则被设计成可以让程序开发人员随意地扩充,修改和替换原有的软件组件,并提供调试工具,库文
件,设备仿真器等。

由此可以认为,Android 平台并非只是一个单一的 Linux 操作系统,从加入 OHA 的企业就不难看出,


这个平台包括了底层的操作系统厂商、上层的软件开发厂商以及联合了众多的移动运营商。

Google 此次推出的是一个能开发应用程序的开放式平台,强调的是开放性,与此前也采用开源的
Linux 内核的企业或组织不同,Android 还开放了基于 Linux 内核以上的开发工具,等于说是以中间件的
形式推广手机平台,最终提供给上层应用开发者一个统一的内容,从而保证内容的可移植性和多样性。

用 Google 自己的解释就是,该项目是一个全套手机的软件方案,包括中间件、SDK、关键应用和
Linux Kernel 四个部分。而其最吸引人的地方在于,Android 平台将通过的开源授权推出,这为移动运营

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


产业聚焦

商和终端制造商设计产品带来关键的自由度和灵活性。

Google 中国区总裁李开复就表示,“Android 平台并不是属于 Google 的,而是属于全球的开发者,


任何的一个运营商都可以无偿去使用它。由于开源的特性,对消费者来说意味着可以更便宜买到一个手
机。”

统一 Linux 平台

近年来,Linux 在移动平台取得了快速的发展。在此之前,摩托罗拉就推出了 Motomagx 下一代


Linux 平台,并宣称向全球发货的 Linux 手机已经达到 900 万部,预计在未来数年内,发货的手机中将有
60%采用 Linux 平台。

ABI Research 2007 年 3 月 20 日发布的《智能手机与操作系统市场》报告中指出,由于手持设备平均


售价(ASP)持续盘旋下降,因此节约手持设备软件成本的需求则不断增长。Symbian 对于降低其授权费
用的决定,及 Linux 所受到的不断增长地关注均是此种趋势的最好证明。

同时,赛诺市场调查公司的数据也让我们看到,2006 年 1 月到 9 月,智能手机销售占到中国手机全
部销量的 7%,和上年同期相比增速相当高。许多专家预测中国智能电话市场今年还会持续增长。而在智
能电话市场上,Linux 预期将会占领越来越多的份额。

然而,虽然 Linux 在移动终端已经占据了一定的市场份额,但由于 Linux 的可定制性及开放性,导致


了 Linux 阵营分散化十分严重。MontaVista 国际业务副总裁 Art Landro 就表示,“Linux 只是一个内核,
本身的定义并不完整,因此让产业界以为是一个很容易抓住的机会,纷纷按照自己的设计,发展出了互
不连通的 Linux 手机方案,反而导致了移动 Linux 领域的分散化。”

而 OHA 也并不是第一个意图将 Linux 推进手机的组织,目前在移动 Linux 阵营活跃的组织有今年年


初由摩托罗拉、NEC、NTT DoCoMo、松下移动、三星和沃达丰集团六家成立的 LiMo 基金会(Linux
Mobile Foundation)和 2005 年 11 月由法国电信旗下 Orange 与收购了 PalmSource 的日本企业爱可信(Access)
为核心的 Linux 电话终端标准论坛——LiPS 论坛(Linux Phone Standards Forum)。这两个组织中,前者旨
在协调各方利益,形成一个基于 Linux 的统一 API,后者则是为了建立一个涵盖端到端的移动 Linux 生态
环境。

但此次因 Android 平台联合在一起的 OHA 则和其他组织有着很大的不同,最主要的区别在于 OHA 是


以产品导向为主,OHA 是想打造一项产品,而其他组织则是以提供统一规范为主,鼓励别的企业采用他
们的规范。OHA 组织的成立,无疑将对过去分散化的 Linux 阵营重新聚集起来,LiMo 基金会就公开表示
对这一计划表示欢迎,并相信 OHA 联盟有助于移动 Linux 作为移动领域的基础技术的发展。

甚至有激进人士认为 Linux 由于共享同一 Kernel,导致了 Linux 阵营的分散,此次 Android 平台将中

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


产业聚焦

间层也进行开源,如果确实可行,LiMo 或其他组织就没有太大存在意义了。

移动计算的第二战场

Android 平台的推出了,引爆了人们对于在移动设备上开发、使用开源软件的热情。与传统的移动设
备相比,MID(Mobile Internet Device)则是未来移动计算的一个发展趋势,它是由 Intel 推出的代表便携
式移动计算技术与发展方向的产品。根据 IDC 最新的数据显示,超便携移动终端年增长率超过 13%,到
2009 年,销售量将超过 8500 万台,这无疑也为 MID 设备带来了广阔的前景。

在未来世界,连接在互联网上的移动设备将是极为丰富的,而 MID 设备则是为取代笔记本电脑而诞


生的,不同于以往的移动终端设备,MID 能完整实现电脑的所有功能。目前,能运行在 MID 设备上有两
个系统,Linux 和 Windows Mobile,而面对众多的 Linux 操作系统,Intel 选择了中科红旗和 Ubuntu 作为
Linux 操作系统技术的全球合作伙伴,而与中科红旗已经合作推出了专门针对 MID 平台的 Midinux 操作系
统。

事实上,由于 MID 设备的移动特性、较小的屏幕和全新的操作方式,传统的 PC 操作系统很难适应,


其优势已不存在。在此领域,Linux 开放、可定制、高性能高安全的特点已经体现出来。

MID 的使用界面

Midinux 基于开源的 Linux 操作系统,为用户的移动设备和数据提供了充分的安全保证。用户不必担


心病毒、木马、流氓软件对系统的侵害,安心享受、放心工作。同时,由于 Linux 具有强大的可定制性,
因此可以根据各个 MID 设备提供商进行深入的定制,面向不同消费群体,打造成为个性化的产品。可以
对具体的硬件配置、应用方式和界面要求对 Midinux 进行定制修改,满足从消费市场到专用设备对操作系
统的要求。除了消费市场之外,Midinux 还可以面向各个行业的需求,定制为专用移动终端,例如医疗、

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


产业聚焦

物流、公安、餐饮、旅游等。

中科红旗市场总监耿增强表示:“MID 市场是一个新兴的市场,也是未来的一个发展趋势,在 MID


市场上,Linux 有着非常大的机会。Linux 的推广一直面临用户使用习惯的问题,这在 MID 设备上已经不
存在了,相反,Linux 的优势将得到更大的体现,比如可定制性,作为一款面向大众的消费电子产品,可
定制性是非常重要的一个指标。如果各大厂商生产出来的产品都是一个界面,一个模式,那肯定是缺乏
竞争力的,而 Linux 确能很好的解决这样的问题。”

MID 定位在移动消费电子,娱乐是重要内容

Linux 机会在移动

Linux 在服务器市场有着较大的优势,在这个已经发展成熟的市场,Linux 一直有着平稳的增长。与


服务器市场相比,桌面 Linux 的形式就不容乐观,由于用户使用习惯的问题,桌面 Linux 一直发展缓慢,
虽然最近两年,很多 OEM 厂商已经开始预装 Linux,但据消息人士透露,用户购买预装 Linux 的 PC 并一
直使用 Linux 操作系统的比例不足 10%,也就是说 90%的用户购买了 Linux PC 后马上改头换面成
Windows PC。

而在移动市场上,Linux 和 Windows 之间的差距在缩小,在 MID 市场上,Linux 与 Windows 甚至站


在了同一起跑线。耿增强在谈到未来发展 Midinux 也表现了十足的信心,“传统的服务器和桌面领域已经
达到了饱和的程度,在桌面市场,Linux 想要有个爆炸性的增长显然是不现实的。而在移动设备市场,由
于这个市场还不成熟,Linux 有着爆炸性增长的可能。比如我们现在开始做 Midinux 操作系统,最近几个

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


产业聚焦

月业务完全是垂直性的增长,我们现在担心的不是没有业务可做,而担心是否接的过来这么多业务。预
计到明年,我们在 Midinux 操作系统的收入将超过我们在服务器和桌面端的收入。”

MID 实现的 GPS 功能

Android 平台的产生,Intel 选择红旗和 Ubuntu 作为 MID 操作系统合作商,Linux 可谓在移动市场上


全面开花。微软 CEO 史蒂夫·鲍尔默曾经定义了微软的三个敌人,第一是 Google,第二还是 Google,第
三是 Linux,虽然在评价到 Android 平台时他用了“刚刚发布”、“一纸空文”等词汇,但 Google+Linux
——这由他定义的微软三大敌人的结合,无疑将给微软带来前所未有的挑战。而关于消息人士透露 Intel
将在 MID 第三代全面支持 Linux 而放弃 Windows 的言论,不知他听后又将作何感想。

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


产业聚焦

Midinux 诠释移动互联新界面

文玫

在 4 月初的 IDF 大会上,将移动多媒体与互联网无缝链接的 MID(移动互联网设备)如期而至,英特尔


在 IDF 上一口气推出了面向 MID 的五款凌动处理器(Atom)和英特尔迅驰凌动处理器技术。而移动互联网
也是本次 IDF 的重头戏,英特尔携手合作伙伴展示了多款 MID 设备,其合作伙伴中科红旗公司现场展示
的 Midinux 更是成为 IDF 的一大亮点。

口袋中的互联网

尽管笔记本电脑趋于小型化发展,但 7 英寸的最小尺寸在移动方面显然不能满足需求;而手机受制
于比较小的显示屏以及处理能力,无法提供最好的互联网体验,且互不兼容、通信不稳定等。

作为笔记本电脑与手机间的新产品形态,MID 瞄准的是那些想在任何时间和任何地点访问互联网的
消费者。与笔记本相比,它有着 4-6 英寸大小,消费者能随时随地将它放在口袋里。

按照英特尔阿德兰和浦大卫的说法,MID 提供的是一种“不做任何妥协的互联网计算能力”。换言
之,MID 集成了 WiMax、Wi-Fi 甚至 TD-CDMA 等无线技术,能像 PC 一样接入互联网,也能随时执行拍
照、摄像、听音乐、交友、GPS 导航等各种功能。对 MID 用户来说,真正吸引他们的是能够访问互联网
上的海量内容和服务(大部分是免费的),互联网上可供应的内容和服务无论从数量、质量、类别和吸引力
上都远胜 WAP,这是 MID 与当前手机相比的最大优势。

试想一下,因为屏幕够大,浏览网页可以全屏显示,不必像用手机般滑动屏幕,无论上 Youtube 看电
影,还是即时拍照并用邮件发给亲友同事,或是去 Myspace 上秀一把……

装载 Midinux 的 MID 产品,通过无线网络和全功能的浏览器高速访问互联网,收发电子邮件,了解


时事新闻或者与亲友视频聊天;使用办公软件,察看 PDF 文档,安排繁忙的商务计划;播放一段音乐,
欣赏一部大片;更可以 GPS 定位自己在旅途中的位置,用摄像头记录生活的点滴。

总之,这个巴掌大的设备,很快就会令你爱不释手。 它的使命是作为笔记本电脑和手机的有益补充。
有了它,在移动中,你可以实现网页浏览、在线办公、互动交流、乐趣分享。

新面孔 Midinux

之所以称 Midinux 为新面孔在于,MID 还未真正量产,但 MID 急剧增长的市场需求已预示着其操作

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


产业聚焦

系统的前景必然十分广阔, Midinux 正是在这一背景应运而生,成为 MID 量身定做的系统。

由于 MID 设备的移动特性、较小的屏幕及全新的操作方式,传统的 PC 操作系统很难适应。在此领


域,Linux 开放、高性能、高安全的特点注定了其优势。

作为一种全新消费电子产品的系统,Midinux 相应采用了更加友好、新颖的用户界面和交互方式,体
积小、反应速度快,并支持各种互联网和多媒体应用。目前在 Midinux 上的应用包括 CoolFox 浏览器、
CoolImage 图片浏览器、CoolMedia 播放器,OpenOffice 等办公软件,另有 GPS、即时通信、RSS 等各种
丰富的工具和应用。

此外,由于 Linux 具有强大的可定制性,Midinux 可根据 MID 设备提供商进行深入定制,面向不同消


费群体,打造成为个性化的产品。并对具体的硬件配置、应用方式和界面要求进行定制修改,满足从消
费市场到专用设备对操作系统的要求。除消费市场,Midinux 同样可以面向行业应用求,定制为专用移动
终端,如餐饮、物流、旅游等。

当然,更立竿见影的在于,采用 Midinux 可以有效降低 MID 的生产成本,其售价也有望大幅降低。


国内老牌 Linux 操作系统厂商,中科红旗早在 2005 年即在 MID 上与英特尔公司合作,并于 2007 年 5 月推
出 MID 上全球首个 Linux 操作系统——Midinux,目前已获多家设备提供商认可,一跃成为 MID 设备上
最成功的系统。

根据英特尔公布的资料,爱国者、华硕、明基、Clarion、富士通、技嘉、Hanbit、KJS、联想、LG
电子、NEC、松下、三星、夏普、Sophia Systems、Tabletkoisk、东芝、USI、WiBrain 和 Yuk Yung 等厂
商都已经或即将推出 MID 产品,这些产品将在 6 月集中上市。据预估, Midinux 系统一年内将成为中科
红旗继服务器和桌面端外的第三条支柱,这也从一个侧面彰显了 MID 的普及趋势。

08 年时尚新宠

针对 UMPC(便携式电脑)存在的一些问题,MID 放弃商务应用转向个人消费领域,对硬件性能的
要求降低,采用 Linux 取代 Windows,采用低功耗的新处理器和更省电的小屏幕,加强便携性的同时延长
了续航时间,使 MID 更加贴近用户的体验。毋庸置疑,MID 即将成为手机和笔记本之间的主打产品。

不过,MID 并不准备替代笔记本电脑和智能手机,相反,拥有笔记本电脑或是智能手机的消费者更
有可能购买 MID,因为上网已经成为了他们的日常需要。当他们在办公室或家以外的地方时,MID 将是
比个人电脑和智能手机更好的上网选择。因为 MID 的目标客户正是想在随时随地访问互联网的消费者。

英特尔高级副总裁兼超移动部门总经理 Anand Chandrasekher 坦言,MID 的市场要比 UMPC 大的多,


原因在于其极有可能吃掉现有的可携式多媒体播放器、GPS 设备、MP3 随身听等随身设备的市场。根据
英特尔的调查,四成左右上述设备使用者,表示愿意用 MID 来取代前者。

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


产业聚焦

“在 2008 年 MID 价格下滑到 500 美元之后,到了 2010 年,MID 的市场规模将超过笔记本电脑。”


Chandrasekher 如是说。

咨询机构 In-Stat 则认为,2008 将是 MID 元年,在消费者的移动互联网需求增长、移动环境逐渐成熟


和硬件平台持续改进的驱动下,2007-2011 年中国 MID 市场的年复合平均增长率将达到 205.9%,2011 年
出货量将达到 500 万。三种消费者将成为 MID 的早期用户:以媒体为中心的用户、职业商务用户和年轻
人群。

分析机构预测,2010 年 MID 的价格将会降价到 250 美元左右,这将会是一个让消费者心动的价格。


或许用不了多久,我们也会看到消费者排队购买 MID 的场面。

图为中科红旗 CEO 贾栋介绍 MID

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


产业聚焦

开源的道路

陈绪 赵健平

开源技术以及开源运营方式可以说是最近一年来 的一个热点 ,下文是我们对一直活跃于这一领域


的, 来自 Intel 中国 Linux 与开源战略经理陈绪先生的一个采访。

记者: 什么时候开始对开源的事情感兴趣,都对那些方面比较有兴趣?

陈绪:想来是 1995 的事情了,当时是 slackware 进入中国。我记得,使用的安装介质是软盘,根据不


同的功能模块分为不同的组。先安装核心盘,然后可以选择安装某些功能组。后来 1997 年开始安装
redhat 4.2。后来也使用过各种版本,包括 suse/ubuntu 等等。

我对开源的正式参与,做 coding,始于 2002 年我博士毕业后,进入 SUN 中国工程研究院,从事


Openoffice.org/Staroffice 的开发。同时也感谢宫力博士创建了这一机构,为中国的软件开发行业培养了很
多人。

我的兴趣主要集中在理解整个 linux OS 的架构,以及从内核底层到应用高层的整个软件 stack,现在


对 linux 产业的商业发展也有所关注。我现在的工作,负责 Intel 中国的 linux 和开源战略方面的工作。

记者:Intel 中国 linux 中心主要做的是什么?

陈绪:Linux 中心,这个名词指的是 IBM 的一个团队,我们 Intel 的部门不这么叫。我们的团队叫做


OTC,全称是 Opensource Technology Center,开源技术中心。

OTC 是 Intel 内部专注于 linux 和开源的一个团队,负责 linux 和开源软件的开发工作。主要有以下工


作:

1、intel 硬件的 linux 驱动开发(包括无线、图形等);

2、虚拟技术的开发(Xen/KVM);

3、MID(mobile internet device)linux 的开发;

4、内核中的一些模块,包括 ACPI 等;

5、x.org 的维护;

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


产业聚焦

6、对 linux OSV(Operating System Vendor),就是 redhat、novell、redflag、cs2c、turbo 等厂商的支持;

7、对开源项目的支持,比如 linux kernel、apache、mysql 等,包括直接代码贡献和资助等等。

Intel 直接从事 linux 相关工作的有 700 多人。OTC 的团队主要分布在美国和中国。

OTC 中国的团队在 120 人左右,主要是 Fleming Feng 领导的上海(上海紫竹科技园区,约 100 人)团队


和 Elton Yang 领导的北京团队(北京融科资讯中心,约 20 人)。值得指出的是,中国的 OTC 团队承担着诸
多核心项目的开发工作,比如虚拟技术方面,基本上所有的工程师(XEN 和 KVM 开发)都在上海,美
国那边很少。

美国 OTC 里,更多的是在 Intel 资历很深的一些工程师(对 Intel 产品体系结构比较熟悉),还有一些是


内核开发和项目开发的领袖。简单说几个:Keith Packard(x.org 的创立者和维护者),Len Brown(linux 内核
ACPI 模块维护者),Jesse Barness(linux 内核图形系统维护者)等等。

记者:商业公司和开源是对立的吗?你怎么看?

陈绪:这是个经典话题了。这次 linux world 2007 中国大会的演讲中,我分析过开源发展的三个阶段。


一是纯自愿工作者,二是商业公司介入,三是商业公司发挥更大作用。

如果商业公司和开源是对立的,有几件事情不会发生:

1 、Redhat、Mysql 这样的公司不会像现在这样壮大和有影响力。

2 、Intel、IBM 等商业公司不会推动 linux 和开源技术的发展。

3 、我这个开源爱好者不会成为 Intel 的员工。

事实上,商业公司的巨大支持,成了诸多企业采用开源技术的一个推动力。Linux 和开源技术在企业
中的应用可以分为三个阶段:

1 、本企业员工的自发要求,对决策者造成影响。

2 、竞争者对 linux 和开源技术的成功应用,展示了使用开源技术的紧迫性。

3 、使用开源技术,降低了企业成本,提升了竞争力,增强进一步拥抱开源的信心。

而企业应用 linux 和开源技术的难点则在于:

1 、终端用户对原有非开源系统的依赖性和惯性。

2 、各种不同 linux 发行版本之间的差异性和不统一性。

3 、缺乏驱动程序和其他应用程序的支持。

以 Intel 为代表的商业公司,在下面这些方面做出了巨大努力。

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


产业聚焦

1、 我们为所有的 Intel 硬件提供完备高效的 linux 平台驱动。

2 、积极推动标准的制定,如 LSB、CGL 等。

记者:现在开源的经营模式都有哪些,有什么人,做了什么探索?

陈绪: 从整个产业链的发展历史来看,开源还算一个新生事物。由于各种模式都在探索过程中,所
以现在的开源商业模式是百花争艳。既然是开源,那么前提条件是:软件是开放源码的。基于此,我展
开一下:

1 、订阅模式

以 redhat/mysql/jboss 为代表。

订阅模式是一种首创,其实是一种软件免费,服务收费的体现。那么服务体现在哪些方面呢?

1)软件的下载,我记得不交订阅费,是比较难以到官方下载 iso 文件的,或者速度会比较慢。

2)升级补丁的获取,如果交了订阅费,则可以自动升级,方法非常简便,同时,时效上要高一些,
没交订阅费的朋友只能自己编译源码或者等待第三方发布补丁。

3)技术支持,根据费用不同,可获取不同层次的技术支持,包括电话、上门等等。当然,订阅的高
级模式,就是定制,客户单独付钱,可要求厂商进行修改。

2 、赞助模式

以 eclipse/apache 为代表。

这两家都属于基金会支持模式,软件从来都是免费发放,不收取服务费。他们的运营费用来自哪里
呢?来自于各大厂商的赞助。

就 Intel 而言,我们每年会交会费(赞助),因为你是基金会的成员。同时,对于这些基金会组织的
大会和技术研讨会,我们也会积极赞助,并派出技术专家参与。

3、 内嵌广告模式

这种模式,Firefox 算是个代表。

Mozilla 基金会的主要收入来自于内嵌的广告,目前主要是来自搜索引擎,如 Google 等。为什么呢,


因为全球 10-20%的 http 流量来自 Firefox。这个比率是非常重要的,它对在线业务的影响力也是不可忽视
的。假设按照业界的估计,2008 年全球范围内,Firefox 的市场份额能达到 30%,那么可想而知,Mozilla
基金会的营收会增加多少。

目前 Mozilla 基金会最主要的合作伙伴是 Google,在 2006 年,其总收入 6900 万美元的收入绝大多数


来自与 Google 的合作,我想 2007 年以来,他们应该会寻求和其他搜索引擎厂商的合作,包括全球各个地

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


产业聚焦

区的。

4 、外链广告模式

这是以 Discuz/Phpwind 为代表。

他们可以说是中国的开源软件代表,他们有商业模式,而其他很多项目还停留在纯粹的开发者阶段。

这种模式和 Baidu 联盟和 Google adsense 类似,属于页面广告。因为 Discuz/Phpwind 的软件占据了中


国 bbs 市场的 80-90%,也就是说这么多的网站使用了这些开源软件。那么,可以认为这两家公司成了广
告联盟,联盟的成员就是使用这些软件建站的站长。以插件的方式提供广告,依托页面浏览量来做形象
广告,简直是价廉物美的创新。

5 、集成和管理模式

以 SpikeSource, SourceLabs, GlueCode 为代表

全世界的开源项目以百万计,一个企业要选择使用开源软件,会陷入迷茫。那么以上的公司,正是
从全世界的项目中,选择典型的软件,进行测试、集成、整合,并可以用搭积木的方式为企业提供服务
和咨询。

我们可以把以 SpikeSource 为代表的企业称为开源服务商。以 spikesource 为例,他们将应用软件和合


适的组件相结合,并建立了一个自动化的测试框架(日测试 30 万次以上),以创建、测试和分销这些开放
源代码解决方案。

通过测试和认证开源应用产品,SpikeSource 向之前可能没有配置开放源代码的企业提供一系列
SpikeCertified 和 SpikeIgnited 解决方案。公司通过基于名为 Spike(TM) Net,交付这些解决方案。企业有
了 SpikeSource 的可信度支撑,就可以确信这些应用软件是根据他们特定的业务需求而配置和定制的。

6 、企业特性收费模式

以 Sugarcrm 为代表

Sugarcrm 是世界开源 crm 厂商的典型代表。作为一个完备的 crm 系统提供商,sugarcrm 将大部分的


crm 特性和模块,开源发布,供用户免费使用。

但是企业级的特性和模块,则需要付费才能获取。

7 、以开源换流量的模式

以 YUI of Yahoo 为代表

Yahoo! User Interface (YUI)库是一套工具和空间的集合,用 javascript 编写。可供全世界爱好者,以最


简单的方式,创建各种交互式 web 应用。Yahoo 还免费提供 YUI 的 hosting 服务,包括 YUI 中用到的

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


产业聚焦

css,javascript 以及图片。在 alexa 普遍受到关注的今天,网站的流量和排名是网站是否成功的重要衡量标


准之一。这样多可以给 Yahoo 带来更多的流量。

8、 以开源换硬件销售的模式

这个就太多了。主要是硬件厂商和系统厂商会采用这个模式。大家将驱动程序和一些硬件相关的应
用程序采用开源的协议发布,如 GPL、LGPL 等。使整个开源界能充分发挥硬件的潜能,针对硬件编写应
用程序。从而达到提升硬件占有率的效果。

总之,在开源的运作模式方面,探索的人很多,包括我也在不停思考。我想,会有更多的探索者,
用不同的方式总结,得到的结果应该与上述的这几种模式相差不多。

记者: 有一种说法,似乎中国程序员对开源的贡献不大,这是什么原因?

陈绪: 不妨将问题中的“中国程序员”分为两类。其一,中国的开源社区开发人员;其二,在跨国
企业的开源部门中为开源做贡献的人。后者的贡献是很大的,但是我想你主要说的是第一类人。

贡献不大的原因有很多方面。我认为,主要有三点值得考虑。

其一,时间问题。我到美国去,看到 Intel 内部的工程师,动辄在本公司干了 10 年 20 年,在 IT 业界


20-30 年,谈什么技术,他都知道来龙去脉,因为他就是参加者和贡献者。5 年前,你要在中国找内核开
发工程师,恐怕是非常困难的,现在也不容易,但是相比之下,要容易多了。这就是时间会起作用,再
给中国 5-10 年,看看我们的水平是否能和国际接轨,看看我们的贡献是不是能更大,我坚信这个答案是
肯定的。

其二,贡献的回报。我认识很多中国的开源人士,包括项目在国际上大名鼎鼎的,我问他们从项目
上获得了什么。答案是:直接来说,没有回报,但是从其他渠道获得了收益。这一点来说,和上面我们
探讨的商业模式是息息相关的。他们没有从直接的项目中获得回报,这是一个不容忽视的问题。

其三,中国程序员的贡献其实并不是大家想的那么小。我刚进 Intel 的时候,老板让我从总结中国的


知名开源项目入手。开始是觉得比较困难,实际找了才发现,有不少优秀的项目,有不少优秀的贡献者,
只是他们没有获得应用的推广,没有获得合适的商业模式支持。

记者:开源下,你认为比较有意思的项目?

陈绪 : 国际上的项目太多,我这里主要谈一下中国人主导的项目。这个问题也是我的工作内容之
一。我在给老板的汇报中列举了 12 个。

1 、LumaQQ:跨平台 qq 解决方案。

2、 EvaQQ: 基于 KDE 的 QQ 客户端。

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


产业聚焦

3、 Minigui::嵌入式的图形系统软件。作者:魏永明。

4 、SkyEye::在 x86 系统上,模拟典型的嵌入式系统。作者:陈渝。

5 、文泉驿字体:最著名的开源汉字字体。

6 、Fcitx: 开源的 X 输入法。

7 、discuz+xspace+supesite: 典型的 web 2.0 组合。discuz->bbs, xspace->blog, supesite->cms。公司


CEO:戴志康。

8 、phpwind+lxblog+verycms: 前者的前有力竞争者。phpwind>bbs, lxblog>blog, verycms>cms。公司


CEO:王学集。

9、 ecshop::在线电子商城软件,已经被 comsenz 收购。作者:高春辉。

10、 Linux Virtual Server(LVS):高伸缩和高可用行的,基于真实服务器的集群解决方案。作者:章


文嵩。

11 、Linux Intrusion Detection System (LIDS)::通过实现 Mandatory Access Control (MAC),以内核补


丁和管理工具的方式,提升内核安全性。作者:谢华刚。

12、 Stardict:跨平台的字典,用 gtk2 编写。作者:胡正。现在 Redhat 中国公司。

这里透露一下,Intel 非常欢迎著名的开源领袖加入我们的 OTC,加入我们的研发队伍,不久大家就


会知道有更新的相关消息发布。

记者:最后一个问题,linux 桌面的发展前景怎么样?

陈绪:不妨说,这是问开源系统桌面的发展前景,因为我们还有 solaris、bsd 等等。

还是借用我上面的一个观点:时间。用户的接受需要时间,企业的接受需要时间,产品的成熟需要
时间。

OpenSuse/Ubuntu/Fedora 等等发行版,包括 sun 的 solaris10,都已经能作为实际的工作桌面使用。我


看到很多爱好者已经这么做了,而且他们感觉很愉快。我相信随着时间的推移,linux 桌面的发展前景也
会是很愉快的,包括用户的愉快感觉。

借用我们 Intel 常说的一句话,我们提供的是一个 platform of choice。你可以选择你喜欢的桌面,无论


是专有的,还是开源的。但是无论你选择什么桌面,我们一定会确保 Intel 的硬件会支持你的系统跑得更
快更好更稳定。

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


博客文摘

博客文摘

“Linux 桌面”含苞待放在今时
中国开源软件推进联盟主席 陆首群

博客地址:http://www.lupaworld.com/16128/

敢于挑战 迎接竞争

  Linux 发展的软肋是“Linux 桌面”(即桌面 Linux 操作系统),几年来它的市场占有率徘徊于 1-


3%,与 Windows 不好比(Win 的市场占有率达 92-95%),甚至还不如 MacOS-X(4-5%)。

微软,全球软件产业的“巨无霸”,其 80%的收入来自“桌面”,微软的核心技术主要掌控在“桌
面”,微软的经营重点也在“桌面”。Linux 的崛起,特别是“Linux 桌面”要挑战微软的“Windows 桌
面”,要达到由微软技术、经营和用户使用习惯优势形成的“高度”,Linux 的挑战有很大难度和风险,
而且在挑战过程中,还不时会遭遇来自某些“团队”或“个人”的贬伐和讥讽。年青的、顽强的、富有
生命力的“Linux 桌面”开发者们偏不信邪,敢于挑战权威,敢于迎接竞争。

  

去年中国“Linux 桌面”销售业绩惊人增长

  据 COPU 的调查分析, 2007 年中国各 Linux 发行商的 Linux 销售额一览表见表 1:

表1

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


博客文摘

2007 年中国市场的 Linux 销售额总计为 27734 万元,比 2006 年(21832 万元)增长 27%。

  2007 年中国“桌面 Linux”的销售额总计为 5241 万元,比 2006 年(3974 万元)增长 31.9%;中国


“桌面 Linux”的销售量总计为 1212.1 万套,比 2006 年(407 万套)增长 198%;中国“桌面 Linux”,在
2006 年每套平均售价为 9.8 元,2007 年每套平均售价下降为 4.3 元。

  2007 年中国各 Linux 发行商销售“Linux 桌面”一览表见表 2:

表2

  有关说明:

  1)在这里我们采用广义的“Linux 桌面”的概念,即把与台式计算机、笔记本计算机、便携式
PC(Laptop)和超移动 PC(UMPC,Ultra-Mobile PC)或移动互联网设备(MID,Mobile Internet
Devices)配套的 Linux 操作系统均归类在“Linux 桌面”的范围内。

  2)2007 年作为 Ubuntu 的 OEM 商(海尔、浪潮、七喜)在其出口成套设备中预装的“Ubuntu Linux


桌面”约 30 万套,未计在内。

  3)2007 年由龙梦销售的 4000 台 PC(与龙芯配套的“Linux 桌面”),未计在内。

  4)2007 年从网上下载并自行组装、配置而完全免费的各种社区版“Linux 桌面”约 2 万多套,未计


在内。

  5)由 Novell 总部承接中国市场的“Linux 桌面”份额不计入 Novell(中国)的销售业绩之中。

如何看待“Linux 桌面”的市场占有率

  如果以既往的销售额来计算,2007 年中国桌面 Linux 操作系统的市场占有率为 1.26%(比前几年下

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


博客文摘

降了)。市场占有率之所以如此之低,是因为中国“Linux 桌面”今天是以每套 4-5 元(已下降至极低)


来计算的。

  必须指出,国外已采用“把软件看作服务(SaaS)”这样的经营方式。

  过去我曾指出,可以把软件的组成看作为:

  软件=程序+文档+支持+服务+培训

  一些开源软件的商业模式是,所谓软件免费,其实是软件的程序和文档免费,而对于技术支持与服
务是要收费的。Ubuntu 收取“支持服务”费用的规范是,对服务器,向用户年收 750-2450 美元,对桌
面,向用户年收 250-900 美元,这个价格是不菲的。

  我们经常听到有人说,“Ubuntu 是完全、绝对免费的自由软件”,其实如果你从网上下载并自行安
装配置,不需要人家提供“支持服务”,人家也不保证你所下载软件的质量,至于下载软件质量如何,
也只能由你自负其责了;这时你所获得的免费软件,可以说与我们前面讲的要人家提供支持服务的“免
费软件”是完全不同的。

  SaaS 要结合国情在国内推行,恐尚需时日。

  我认为,科学地对待市场占有率应采用计算销售量(出货量)的概念。按销售量来计算,2007 年中
国桌面 Linux 操作系统的市场占有率约为 33%,这个数字表明,中国“Linux 桌面”今天在市场上已具有
相当规模和价值以及挑战能力,忽视和贬低它都是不现实的,而把 Linux 早期出现的卸载率高的现象拿到
今天来说也无济于事。

当然,理解深层次的市场占有率还要注意累积计算,如按市场拥有量来说事,上述比率可能要降低一些。

中国“Linux 桌面”的完善、创新与开拓

  近年来,“Linux 桌面”正在集中全力解决第三方驱动支持和开发、移植大量应用软件的问题;围绕
中国 Linux 新兴企业的“Linux 生态系统”正在形成之中;以中国“Linux 桌面”而论,它还有很大改进、
完善的空间,我们要清醒认识到,它还有不尽人意的地方。我不久之前曾说过,对于“Linux 桌面”的发
展,将出现一个拐点,从而步入快速发展的轨道。现在看来,这个拐点正在孕育中出现。

  中国“Linux 桌面”在技术上已趋于成熟稳定。中国目前已涌现出 50 多个开源社区(具有新颖而 优


秀的开发机制),其中有 20%办得较好,开始出成绩,出人才。从不久前召开的《2008Linux 开发者研讨
会-中国》大会上可看到,一批年青的中国开发者“精锐”登上了讲坛,如吴峰光的“预读算法与 I/O 性
能”对 Linux 内核的 I/O 性能进行优化,董耀祖的“Linux 虚拟化”提高了 Linux 内核编译性能,黄灜的

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


博客文摘

“基于 Kexec 的休眠实现”改善了 Linux 的存储性能等。中国人正在从国际开源社区资源消费者的形象,


加快了变为贡献者的步伐。

在中国涌现出一批国际公认的新兴的 Linux/OSS 企业

  Intel, IBM, SUN, Oracle,Google, Dell, HP 等一批 IT 跨国公司(甚至还有微软),以及广大的


ISVs、IHVs、SIs,均谋求与他们进行合作。

  中科红旗(Linux 发行商)在国内 Linux 市场占有率居首位,最近和 Intel 合作推出移动网络设备


(MID,Mobile Internet Device),由 Intel 提供参考硬件平台,由中科红旗开发 MID Linux 操作系统(嵌
入式),目前已发展日立、联想、明基、爱国者等为 OEM 厂商,还与腾讯、QQ、大智慧、灵图等第三
方驱动或应用开发商合作,大家集结到一起共同构筑 Linux 生态系统。去年中科红旗已销售 MID 系统
252.96 万套,销售额达 1070 万元。

  中标软件(Linux 发行商)的 Linux 产品已出口 40 多个国家。近年中国“Linux 桌面”的大发展,既


反映市场的充分认可,也反映市场的巨大需求。市场是无情的,市场需求是不会以某些人的炒作为转移
的。中国“Linux 桌面”销售市场,已从早期的政府、教育领域的优惠政策、应用试点或零星采购,逐步
走向并开拓企业、金融、通信、邮政、铁路、电力、石油、公安、航空等大市场。

  龙梦去年生产 4000 台 Linux PC 机,今年承接了 90 万套的大订单。

  Dell、HP、华硕、七喜、神州数码等与中国 Linux 发行商在 2006、2007 年每年都签订了几百万套


OEM 预装协议。

  在今天的中国大地,Linux 盼来了春天,Linux 一片春光,而“Linux 桌面”正在含苞待放。

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


博客文摘

坚定不移地推进 UOF

中国工程院院士 倪光南

博客地址:http://nign.vip.bokee.com/

虽然遭到包括中国在内的许多国家的反对,OOXML 还是被通过成了国际标准。不过,人们并没有看到
它的最后文本(有关文档总页数可能比当初的 6000 页还多),更无从进行评估;在 2 月底的技术评审会议上仅
讨论了各国提出的 1100 条意见中的 18%,其余 82%意见均来不及讨论。但即使是这样,OOXML 仍然成了
国际标准,整个过程表明,标准本身的成熟与开放程度似乎已变得不重要了,而公关起了更大的作用,这种动
向值得关注。据报道,欧盟反垄断部门正就微软申报 OOXML 为国际标准中的不正当竞争行为进行调查,建
议我国有关部门也对微软在中国的类似行为进行深入的调查。

在目前,中国国家文档格式标准 UOF 面临严峻的考验。微软说,OOXML 可给用户“多一种选择”,但


由于 OOXML 和 UOF 之间的精确的双向转换(或精确兼容)需要若干年时间才能实现,所以现在这二种格式
在实用系统中不能共存,用户要么选择 UOF,要么选择 OOXML,在不得不在二者之间作出诀择的情况
下,OOXML 因挟有继承老文档格式事实标准的优势,很可能轻易地灭掉 UOF。

那么,怎样才能使 UOF 生存、发展呢?中国可以仿效丹麦、荷兰等国在公共信息系统中强制采用开放


标准的做法,要求采用开放的国家标准 UOF,而对另外二个国际标准 ODF 和 OOXML 实行标准开放性评估
(例如丹麦计划用一年时间评估 ODF 和 OOXML 的开放性),其间可要求 OOXML 在开放性等方面进行改进。
如能通过标准开放性评估,它还需通过 UOF 标准符合性认证,保证它能和 UOF 之间做到精确的双向转换,以
便在实用系统中共存。这样,不但将为 UOF 的成熟和推广应用嬴得时间,而且,如 OOXML 最后真能通过这
些评估和认证,那么,二者就可以共存,UOF 将仍能继续使用下去,不致于被 OOXML 轻易消灭。

应当指出,自去年 9 月我国对 OOXML 投反对票后,微软对 UOF 的态度有了改进,从置之不理转变为口


头上承诺“支持 UOF 成为国际标准”,新近又开放了二进制文档格式(虽然实质上还未完全开放),并资助开
发 OOXML 与 UOF 之间的“转换器”。如中国坚持推进 UOF,可以预料,微软为了能进入中国市场,还会加
大对“转换器”的投入和增加 OOXML 的开放程度。

总之,我们必须坚定不移地推进 UOF 标准,带动中国的办公软件、操作系统、CPU 等核心技术和产业


的发展。在新一代基于 XML 的文档格式方面,中国的 UOF 标准及其推广应用已略占先手,只要坚持自主创
新和采用开放标准,UOF 及其相关产业将能得到迅速的发展。

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


博客文摘

Ubuntu 8.04 给我们……系列文章

袁萌

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

Ubuntu 8.04 给我们的商机

4 月 24 日,Ubuntu8.04 的服务器版本的发布,给予我们重新考虑(reconsider)“Linux 产业的经营模


式”的机会。这里我们要特别说明的是,“重新考虑”,这 4 个字是取自正式公布的 Ubuntu8.04 官方文
件,是一种“官方说法”。Ubuntu8.04 发布者敢于采用这个“重新考虑”说法,可见其“口气不小”。
这是为什么呢?

大家知道,Ubuntu 是个“另类”,它是个“集成商品包”(IntegratedCommercialProducts),定价却
为零。它有很好的技术支持,但却绝对不强制你(事先)“接受”,也就是说,Ubuntu 的技术支持,你
用还是不用,随你的便。但是,Ubuntu 的发布者,绝对建议你取得这类(付费的、商业的)技术支持,
其中好处多多(注意:这种技术支持不论来自何方,当然,取自某些特定的厂商,效果更有保证)。这
里要说明的是,Ubuntu 的“技术支持”是一种常见的“商品”,可以有自己的品牌,有自己的定价、有
自己的规格,有自己的......。Canonical 公司是 Ubuntu 开发社区的主要支持者、赞助者,它所提供的多语
种技术支持,毫无疑问,绝对是世界一流水平的。这里有一个非常重要的“关键点”,需要我们注意,
即产品(Ubuntu8.04)与有关它的支持服务是完全分离的,相关的“技术服务供应商”可以有各自不相同
的(独立)品牌,可以属于不同的国家和地区。

根据 Yankee 集团“2008 服务器操作系统可靠性全球调查”(byLauraDiDio)发现:有 22%的被调查者


在它们的服务器集合中至少有一台 Ubuntu 服务器在运行,这些 Ubuntu 服务器具有很高的可靠性,每台
Ubuntu 服务器的平均“年宕机时间”(“downtime”)只有 1.1 小时。根据国内《Ubuntu 实验室》
(2005.1.18~至今)以往的实际运行经验,从未发现运行中的 Ubuntu 服务器出现异常,影响工作。由此
可见,Ubuntu 服务器是可靠的、安全的(不会“寄生”病毒、木马和碟件)。

Ubuntu8.04 给予我们的商机是,独立、自主地进行 Ubuntu 的商业技术支持服务,包括满足客户的定


制应用、知识培训、系统咨询和工程规划,等等,不会产生“厂商依赖性”(即被“不良锁定”)。当
今,全球 Ubuntu 服务商,遍及全球各个地区(中国地区除外,不含台湾省),已有相当规模(数百家之
多)。但是,值得我们注意的是,Ubuntu 作为一个“品牌商标”是不能随便使用的,需要得到 Canonical

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


博客文摘

的许可(注:金牌、银牌伙伴需付费,一般盟员不需付费。)。

可以预见的是,Ubuntu 服务业必将在全球范围内逐渐兴起。Ubuntu 是全球自由软件运动成就的集大


成者,因而,我们可以说,Ubuntu 服务商的先行者是很有远见的,是很值得骄傲的。

(注:很明显,Ubuntu8.04 桌面版已经呈现出 Windows 的优良特征(byJason Brooks),而“谁能够赢得


桌面,谁将最后赢得服务器(市场)”,这是知名 IT 评论家 TristanRhodes 说的话。)

Ubuntu 8.04 给我们的启示

4 月 24 日,这一天终于过去了。在这一天里,一个“小生命”在互联网上诞生了,它就是
Ubuntu8.04(性别:中性)。Ubuntu8.04 是个“混血儿”,它有一个 Windows“襁褓”(“Wubi”),一生
下来,就安安静静地在 Windows “襁褓”中“睡着”。它看上去简直就是 Windows 大家族的“一员”。这
是怎么一回事情呢?

在当今世界上,PC 计算机大多预裝 Windows 来到人间。任何“新玩意儿”都必须有个 Windows“外


衣”。Ubuntu8.04 就有个安装工具“Wubi”(缩写词“Wubi”的来源大概就是从
Windows+ubuntu+bylateral+installer 来的),它可以把 Ubuntu8.04 一古脑儿当成一个“Windows 应用”安
装到 Windows 平台上,启动时有个“选项”:“Windows?,还是 Ubuntu?”。在 Windows 平台上,能够
“平滑”运行 Ubuntu8.04,不能不说是一个让一般人意想不到的事情。

Ubuntu 的哲学是,Ubuntu 本身是不折不扣的自由软件包,但是,Ubuntu 和 Windows 两者却能够“亲


密无间”、“和谐相处”。由此可见,人们很容易把 Ubuntu8.04 看成是 Linux 发行版的“异类”,另眼
相看它,其实实在委屈它了。Ubuntu8.04 的怪异行为,具有很深刻的思想背景。在当今时代,一方面,
微软要“吃掉”雅虎(实为 Linux 的“大礼包”),另一方面,Ubuntu8.04 又在 Windows“襁褓”出世,
你说,滑稽不滑稽?4 月 21 日,Ubuntu 奠基人 MarkShuttleworth 对 BBC 技术编辑 DarrenWaters 说,一旦
微软“合并”了雅虎,微软将拥有一支两万来人的“坚定的自由软件拥护者”(“firmfree software
advocates”)向 SteveBallmer“报告”。结果会怎样呢?MarkShuttleworth 认为,此举有助于微软文化向着
健康方向发展。他认为,微软自己心里面“明白”:与雅虎“合并”之后,他们不可能再把公司完全变
回到基于 Windows 平台上,除非把这批人统统杀掉(killingit)。他认为,微软会因此(指“合并雅虎”)
变得“更为正常”一些(morenormal)。 Ubuntu8.04 给予我们“思想启示”是:今后,Linux 不必处处
跟 Windows“较劲”,两者应该“和谐相处”。

Ubuntu 8.04 给我们节省了时间

4 月 24 日,PercyCabello 发表文章,题为“在欧洲,火狐市场占有率高达 29%”(“FireFoxreached

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


博客文摘

29% in Europe”),引用了法国“XiTiMonitor”在今年 3 月份发布的最新调查数据。法国“AT 互联网”公


司在 2000 年 6 月份确立了所谓“XiTi 监视器”(“XiTiMonitor”)计划,随时监视全球互联网 Web 页面
的访问动态,至今,在全球范围内“XiTi 监视器”已有 33 万个网站用户。借助这些用户,法国“XiTi 监
视器”利用“自动扫描”技术可以准确地发现世界各个地区人群使用浏览器的实际情况。“XiTi 监视器”
发现,欧洲、美洲、大洋洲地区人群使火狐浏览器(FireFox)的比例在 22%至 29%之间(今年 3 月份)。
在星期天(周日),这个比例更高一些,可达 30.1%,原因是,在这个时候,人们往往在家中使用浏
览器,可以更自由一些,喜欢用什么就用什么,不受机关单位的“约束”。亚洲、非洲地区国家,使用
火狐浏览器的比例低一些,只有 16~17%。但是,非洲国家使用火狐浏览器的比例提高速度极快,每一
个月提高近 3 个百分点。根据法国 www.W3counter.com 的统计数据,今年 3 月份,全球火狐浏览器使用
版本多为 2.0(占 23.18%),火狐浏览器 1.5 老版本的市场占有率才有 4.39%。根据台湾省有关人员的研究发
现,火狐浏览器 3.0 版本要比 2.0 版本打开网页的时间平均要快上 0.7 秒钟(别的许多性能改进我们暂且
不说),由此不难想见,数亿人使用的火狐浏览器升级到 3.0 版本的重大现实意义。时间就是最宝贵的资
源! Ubuntu8.04 版本就包含了火狐浏览器 3.0 版本(Beta5),一千万 Ubuntu 用户,因浏览器升级到
3.0 版本每天所节省的时间就近 2 万小时。同时,Ubuntu8.04 版本包括了 OpenOffice.org2.4 新版本,较之
2.3 老版本,有 63 项性能改进或创新,据初步估计,一千万 Ubuntu 用户,因此每天所节省的时间将接近
20 万小时。但是,我们要注意,Ubuntu8.04 版本,是绝对免费的自由软件啊!它凭空为人类每天节省 22
万多小时(至少,我们暂时不谈别的节约方面),而无须人类为之支付什么“知识产权”成本,这是何
等壮观的革新和贡献!金钱就是财富,时间就是效率,难道不是吗?

Ubuntu 8.04 给我们的优势

4 月 11 日,JohnLeyden 撰文指出,根据《Panda 实验室》的一项研究,在当今条件下,即使升级杀毒


软件也未必能够逃脱(摆脱)恶意软件(Malware)的伤害。《Panda 实验室》技术经理 LuisCorrons 认为,
“Thesituation is getting out of control”(“这种情况已经失去控制”)。实际情况是怎样的呢? 《Panda
实验室》根据一项去年进行的从 150 万用户中的取样分析研究,发现:即使(不断)升级“安全软件”,
在 72%的企业网络中仍然有恶意软件存在;23%的家庭用户也受到病毒感染。就是采用多家杀毒厂商的
“工具”,也无济于事。这种情况使得《Panda 实验室》认为“情况失去控制”,得另外“想办法”。他
们提出一个口号:“Securityas a Service ”,搞出了一个“联网杀毒”解决方案。但是,再好的办法,也得
用户心里面喜欢和实际上可行。 Ubuntu8.04 服务器版本,在安全性方面,采取了许多新措施,新考虑,
安全性提高不少。比如:

1、在开放的网络端口上,不安装缺省服务,以防止没有经验的管理员通过建立一项新服务而在无意之中
伤害系统;

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


博客文摘

2、采用基于角色的管理模式,不设置缺省的“根访问” (“rootaccess”),只有在确保操作安全的前提
下,才去除这项缺省设置;

3、在最初设计上,就去除所谓“XServer”,一般而言,服务器总是在远方控制的,不必当成一台 PC 计
算机服务器,鼓捣来鼓捣去;

4、Canonical 公司采用一套称为“Landscape”网络工具,对广大用户提供免费安全监视服务;

5、强化操作系统内核和编译器,防止入侵者袭击一台经过“强化”处理过的服务器,比如:采用内核地
址保护,NuLL 地址(低于 64K 的内存不得分配)保护,可有效抗击外来恶意攻击。很明显,Ubuntu8.04
带给广大用户一种相当坚固的服务器运行环境,而且,网络安全工具“Landscape”的运行模式符合
《Panda 实验室》的安装“新思路”,即把“安全问题”视为一种网络服务(“Securityas a Service”),
大方向正确,,具有很大优势。实际上,至今我们还没有发现存在所谓“Ubuntu 病毒”。 我们可以预见,
Ubuntu8.04 服务器版本堪与微软 WindowsServer 8 相媲美,只要不带“偏见”的话。网络用户,希望用
Ubuntu8.04 服务器来抵抗外来入侵,而用 Windows 服务器处理内部事务,是一个不错的“选择”。我们
何必把 Linux 与 Windows 两者搞得“水火不相容”,成为“你死我活”的“死对头”?我看,就不必费
那个劲了。

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


开源社区

开源社区

项目动态

耐寒的苍鹭(Ubuntu 8.04)腾飞

经过 5 个测试版、一个 Beta 版和一个 RC 版之后,Ubuntu 最新发行版耐寒的苍鹭(Hardy Heron)终于


起飞。这个发行版是一个重大的升级,属于 LTS 长期支持的系统,比上一版本更高更快更强大。

Ubuntu 8.04 下载:


桌面版:http://tw.releases.ubuntu.com/8.04/ubuntu-8.04-desktop-i386.iso
64 位桌面版:http://releases.ubuntu.com/releases/8.04/ubuntu-8.04-desktop-amd64.iso
Kubuntu 8.04:http://releases.ubuntu.com/releases/kubuntu/8.04

现有用户请运行: sudo apt-get update


sudo apt-get dist-upgrade

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


开源社区

GNOME 2.24 的首个开发版发布

近日,GNOME 团队发布了 GNOME 2.24 的首个开发版——GNOME 2.23.1。由于这是继 GNOME


2.22 之后的又一个重要发布 GNOME 2.24 的第一个开发版本,因此新东西和改进甚少。

在通读 GNOME 2.23.1 的 NEWS 文件后,我们除了确认新版本中的大多数组件和应用在修补缺陷外,


仅有少部分程序得到了改善和更新。这主要包括:

◆Cheese - 添加了 Hildon 支持;

◆Deskbar Applet - 新增了 Yahoo! 建议和 Google 代码搜索模块、实验性的 Capuchin 支持、以及可在系


统托盘运行;

◆GDM - 改善了会话和语言处理、添加了登录倒计时动画;

◆GNOME Media - 默认禁用 GNOME-cd、CDDB-slave-2、vumeter,gnome-sound-recorder 支持 UTF-8 文


件名;

◆Nautilus - 支持新的 GNOME 会话自动启动语义、允许反向选择。

的确,如上所述,GNOME 2.24 的首个开发版改进很少。那么,从 GNOME 2.24 中,我们到底可以


期待什么?

◆GNOME 的 Ekiga VoIP 软件将获得改善和增强,不仅要整修


Ekiga 的用户界面,而且要加入 SIP Presence 支持。

◆Empathy 即时通讯软件将采用 Telepathy 通讯框架。

◆GNOME 文件管理器 Nautilus 将加入 Compact 视图模式。

◆GNOME 默认的网络浏览器 Epiphany 将放弃 Gecko 后端,


全面采用 WebKit 作为后端。

◆Evolution 的 Exchange MAPI Connector 可以连接 M$


Exchange 2007 servers。

◆从 GNOME-VFS 完全移植到 GVFS。

◆有望计划加入 Conduit、Empathy、Hamster Applet 等新模块。

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


开源社区

Solaris 10 5/08 操作系统发布

近日,Sun 发布了最新的 Solaris 操作系统 Solaris 10 5/08,经过同 Intel 一年的合作,大幅度增强了同


Intel 硬件的兼容性,增加了众多新的特性,更新了应用程序和设备驱动。

关于此次更细的详细信息,感兴趣的朋友请参考:docs.sun.com/app/docs/doc/817-0547/gghpo

Sun 的操作系统最初叫做 SunOS,它的出现主要归功于 Sun 公司创始人之一的 Bill Joy。1977 年,还是伯


克利的研究生 Bill Joy 完成了伯克利版本的 UNIX,也就是 BSD(其现代衍生版本包括
FreeBSD、OpenBSD 和 NetBSD 乃至苹果的 Mac OS X 操作系统也在很大程度上归功于 BSD),SunOS 主
要基于 BSD,从 SunOS 5.0 开始开始转向 System V Release 4,并且有了新的名字叫做 Solaris 2.0。Solaris
2.6 以后,SUN 删除了版本号中的 2,SunOS 5.10(Solaris 2.10)就称为 Solaris 10。

Bill Joy 早年突出的成就包括实现 BSD 版的 TCP/IP、vi 编辑器、cshshell 及 NFS,另外在 SPARC 处理


器、Java 语言的开发中也扮演了重要角色,他还根据 Nerds 2.0.1,在一个星期内就重写了整个 BSD。

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


开源社区

Linux Kernel 2.4.36.3 发布

Linux 内核是一个用 C 语言写成,Linux 最早是由芬兰黑客 Linus Torvalds 为尝试在英特尔 x86 架构上


提供自由免费的类 Unix 操作系统而开发的。技术上说 Linux 是一个内核。“内核”指的是一个提供硬件
抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核不是一套完整的操作系统。一套基
于 Linux 内核的完整操作系统叫作 Linux 操作系统,或是 GNU/Linux。

该版本较上一个版并没有多大的变化,如果计算机能在 2.4.36.2 版内核上正常运行的用户没有必要升


级,除非的该版修正的错误恰好是你所遇到的。

内核 2.4.36.3 版较 2.4.36.2 版的变化:

Files added: 0
Files changed: 21
Files removed: 0
Lines added: 957
Lines changed: 606
Lines removed: 367

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


开源社区

Linux 实时系统 RedHawk 5.1 发布

RedHawk Linux 系统是美国并行计算机公司开发的 Linux 实时操作系统,该系统主要应用于多处理器


环境,并能在多处理或多核心环境下确保应用程序的可靠性,举例来说,它通过一种机制屏蔽当前处理
器的进程,给予具体用户应用程序较高的优先级。

据其白皮书中介绍,RedHawk 内核可以将控制权由低优先级进程转交给高优先级进程。这样就保证
了正在等待外部事件发生的高优先级进程能够在事件 发生时被立即响应,即使 CPU 正在被占用也不受影
响。这种操作系统目前的主要支持对象是美国军方,美国海军的神盾级巡洋舰的反空袭,反水面舰艇,
反潜武器 系统均采用的是这种操作系统。

据悉新版本的改进如下:

◆2.6.23 Linux 内核;

◆全面兼容 Red Hat? Enterprise 5.1 系统;

◆支持最新的 Intel、AMD 四核心处理器及芯片组;

◆用户级设备驱动支持;

◆NVIDIA 显卡驱动实时性能优化;

◆增强 Lockless 内核实时调试及分析性能。

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


开源社区

Fedora 9 进入开发的最终冻结阶段

Fedora 9 进入了开发的最终冻结阶段,这预示着 Fedora 9 的开发开发已经进入收尾工作,不会再加入


新的特性了,目前我们所看到的应该和正式版相差不大了。Fedora 9 已基本定型,剩下的就是细节完善和
Bug 修复了。Fedora 9 正式版将于 2008 年 4 月 29 日发布。其定于 2008 年 4 月 29 日发布,很大的原因是
要和定于 2008 年 4 月 24 日发布 Ubuntu 8.04 一决高下,竞争 Linux 桌面的份额。两者的发布时间只差 5 天。

回顾一下 Fedora 9 带来的新特性:

◆Firefox 3.0 集成;

◆GCC 4.3 集成;

◆增强型 NetworkManager,支持移动宽带设备(GSM/CDMA);

◆PackageKit;

◆Upstart 取代之前的 SysVinit;

◆GNOME 2.22(目前还是 GNOME 2.21.92);

◆Linux Kernel 2.6.25 RC;

◆X Server 1.5.0 RC0;

◆OpenOffice.org 2.4.0。

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


开源社区

如何帮助开源软件项目

斐迅科技 顾宏军(Linuxpk.com redarmy)

我们知道很多人天天都要使用开源软件,从 openoffice 到 gimp 和 Linux,开源软件几乎能满足各种人


们的使用需求。但是普通用户怎么样才能回馈开源软件软件开发社区呢?相当多的项目也都正需要大家
的帮助。

很多时候,我们让人参与开源社区,回馈社区时,很多人是讲“我不是技客,不是程序员,没有能
力,虽然我很想参与社区,回馈社区。”然后就没有下文了。

其实这是一种误解;他们都误以为软件开发就是编程,只有程序员才能参与开源社区。任何人都可
以帮助自己喜欢的开源项目或社区,即使你不懂技术,你仍然可以从以下五个方面帮助开源项目。一般
而言,在开源软件项目的官方网站上,也有如何帮助该开源软件的说明。

赞助开源项目

一般而言开源软件是可免费提供的,因此,开源软件就没有了传统的靠授权收费的收入,而开源项
目本身很多时候都需要钱,有开支。很多开源软件开发人员通过获得“赞助”,以解决项目主机空间、
开发会议等经费需求。有时一点点钱也能帮助解决问题。我个人也曾经赞助过部分开发项目,包括资金
赞助和主机赞助。

在国外赞助非盈利项目等,很多时候可以免税的,呵呵,可惜啊,我们在中国,即使可以也繁琐。

软件项目文档

软件是由程序和文档组成的,好的软件一般都有很完备的文档。但是大部分开源软件本身都缺乏文
档,我们作为普通用户,天天使用该开源软件,是否可以帮助撰写部分的用户手册,或其他一些说明文
件呢?这将能帮助开发人员和其他用户解决不少问题。部分开源项目,因为软件本身免费提供,为了维
持生存,也通过付费方式,提供文档--相当于变相的赞助。

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


开源社区

软件翻译

一般开源软件最初都支持两种语言:英文与开发人员所用语言;如果需要开源软件支持您所使用的
语言,那就需要志愿者的帮助:如 Openoffice 的中文支持,中文语言包等就是有个中文化支援小组帮助进
行;您喜欢的开源软件,没有支持您使用的语言?那帮助它建立吧;开源软件中文化,有很多人,很多
团体在做:如 linux 系统的中文化,Ubuntu 中文小组,Debian 中文小组,KDE 项目也有专门 KDE 小组-
-个人也参与 Debian,i18n,zope 等多个项目,帮助进行中文化与多语言支持,但感觉山头越发多了,呵呵。

BUG 与问题报告

没有什么软件是完美的,都会有这样那样的问题,开源软件用户最好及时将软件使用中的问题,及
时向开发人员反馈,以利于开发人员改进软件。商业软件的开发一般都会配备相当比例的测试人员,而
开源软件开发者多是志愿者,缺乏专门的测试团队,这时更需要用户的及时反映。这也是开源的一种开
发模式:核心开发+用户参与的广泛测试,经常发布新版本。大的开源项目一般都已建立了专门的志愿
测试团队--如 Firefox 浏览器,就提供每日构建,提供了测试用例,让 QA 志愿团队参与进行手工测试,
自动测试等。

鼓吹开源软件

你喜欢使用开源软件么?在自己享受开源软件的同时,也别忘记对周边的朋友说,向大家宣传开源
软件,开源运动。当然,要宣传开源软件,前提是你自己要理解好开源软件的概念,如果误解开源软件,
以为它等同于免费软件,那就要“误人子弟”了,对开源软件的发展也不利。开源软件仅仅是指软件提
供源代码,不能和免费软件花上等号,虽然很多时候开源软件可以免费获得,但这不代表不能通过提供
开源软件服务而获益。

如果把一个开源软件,作为一个小的生态链,如果我们大家只求索取,而不愿奉献,那开源软件的
大餐,迟早会失去,只有形成“开发人员奉献,用户广泛参与”良性互动循环,开源软件才能一直的发
展和存在。

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


开源社区

颜勋

在 GPL v2 推出 16 年后,FSF 推出了 GPL v3,由于其加入禁止数字版权的条款,所以其


草案推出时就备受争议,可以说,GPLv3 就是在争议和反对声中诞生的,而且这样的纷争将
继续的持续下去。

GNU 通用公共许可证(简称为 GPL),是由自由软件基金会发行的用于计算机软件的许可证。GPL


是一份针对软件和其他种类作品的、自由的、公共的授权文件。我们使用的大多数软件的授权剥夺了使
用者共享和修改软件的自由,而 GPL 可以保护使用者分享和修改自由软件地自由。GPL 与其他一些更
“许可的”自由软件许可证(比如 BSD 许可证)相比,GPL 寻求确保上述自由能在复制件及演绎作品中
得到保障。它通过一种由 Stallman 发明的 Copyleft(非赢利版权)的法律机制实现,即要求 GPL 程序的
演绎作品也要在 GPL 之下。相反,BSD 式的许可证并不禁止演绎作品变成版权所有软件。

缘起:GPL 前生今世

GPL 是自由软件和开源软件的最流行许可证,根据 FreshMeat 网站的统计,目前超过 65%的项目使


用了 GPL 协议,如图 1 所示。许多优秀的自由软件都是遵循的 GPL 许可证,比如 Linux Kernel 与 GNU
Compiler Collection(GCC)。一些其他的自由软件具有双重许可,其中一个许可证通常采用的是 GPL。

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


开源社区

GPL 由 Richard Stallman 撰写,用于 GNU 计划。以 GNU Emacs、GDB、GCC 的许可证的早期版本为


蓝本,这些许可证都包含有一些 GPL 的版权思想,但仅只针对特定程序。为了创造一种可以普遍适用的
许可证,在 1989 年诞生了 GPL 第一版本。

第 2 版 GPL,在 1991 公布。在接下来的 15 年中,一些 FOSS(Free and Open Source Software)社区


的成员认为一些软件和硬件商找到了 GPL 的漏洞,允许 GPL 许可的软件可以用于与程序编写者最初意愿
相悖的其他目的。这些关注的问题包括 Tivoization(将 GPL 许可的软件内置于硬件,软件与硬件相关,
修改后的版本不能在运行于原硬件上);在 Web 接口后使用非开源的,修改的 GPL 软件的版本; 还有专利
权在 Microsoft、Linux 与 Unix 发行者之间的分发,这些发行者可以尝试使用许可证专利权作为与
GNU/Linux 系统竞争的武器。

第 3 版 GPL 试着解决关注的这些问题,其于 2007 年 6 月 29 日官方正式发布。GPLv3 的变化有如下


几点:与 2.0 版本的 Apache 协议相兼容,使得开发人员更容易的开发软件;针对类似“Microsoft-
Novell”方式合作的相关规定;限制基于 GPLv3 协议的软件的商业应用;增加了一些附加条款等。

一些人认为 GPL 提供的非赢利版权对于 GNU/Linux 的成功是至关重要的,给了捐献项目的程序编写


者信心,因为软件或许会给整个世界带来利益而且会保持自由的状态,而非被一些软件公司只是索取而
不回馈的使用,还有一些人认为 GNU/Linux 在 BSD 许可下也会有一样好的发展。

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


开源社区

改进:GPLv3 之变

第 3 版 GPL 许可证未更改 GPL 的核心观念,也就是:凡是受 GPL 管理的计划,其基本原始码都可供


任何人检视、修改或再传布。不过,凡是修改和再传布该软件者,都必须公开自己做了哪些改变。但是
最新版授权附加了几项新条款:

◆第 3 版 GPL 附带明确的专利许可,意思是任何贡献软
件给 GPL 计划者,都连带把适用该软件的专利授予 GPL
永久使用,而且不收权利金。

◆另有一项条款,阻止未来再签订类似 Novell 与微软所


签的那种合约。该合约让微软销售 Novell Suse Linux
Enterprise Server 的优惠券,所以客户不必担心会吃上侵犯微软专利权的官司。但在 GPL 3 里,FSF 指称,
所有的 GPL 软件使用者都将受惠于 Novell 与微软的协议。FSF 授权法令遵循工程师 Brett Smith 说:“如
果你透过安排,对向你买软件的人提供专利保护,那个保护的范围就自动扩及任何领受该软件的人,不
论他们是用什么方法取得该软件。”

◆一项“反 TiVo 化”条款(anti-tivoization)。这项条款的用意,是确定倘若某装置内含 GPL 软件,则装


置所有人可以更改那项软件。TiVo 个人录像装置使用 Linux,有人主张明文规定,倘若装置所有人修改软
件,就不适用,但 FSF 表示反对。FSF 最近在草案中对这项条款轻描淡写,但这项条款至今仍是 Torvalds
反对 GPL 3 的一大理由。

纷争:GPLv3,GNU 的繁荣还是没落

GPLv3 支持之声

GPLv3 首先阻止了一个主要危险,即 Tivoization。Tivoization 是计算机(或者叫电子产品)含有 GPL


许可软件,但这些软件却不能改变,改变了之后的软件是不能直接在原有硬件上运行的。这些计算机软
硬件的生产商享受了自由软件提供的自由,但它们却没有赋予大家同样的自由。比如在“数字版权管理
(DRM)”的领域内,数字签名的设计限制了你使用自己电脑中已有的数据。而且根据数字版权法以及
其他相似法律,在美国和许多其他国家,如果在销售 DVD 机的时候没有根据 DVD 同
盟的规定对用户做出法律规定的相应限制,那是非法的。GPLv3 确保你能自由地去除
这种手拷,它不禁止 DRM,同样也不禁止任何功能。但是他要求厂商不能在功能性设
置任何限制,用户可以为一个程序添加功能,也可以删除它。虽然 GPLv3 也容忍一些
Tivoization,但仅限于产品仅在商业机构内或组织内排它性地使用。

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


开源社区

GPLv3 的制定弥补的另一威胁就是专利协议,比如类似于 Novell-Microsoft 的协议。微软可以利用该


协议迫使 GNU/Linux 用户付费,同时让 Novell 的客户受到一定程度的微软专利保护。GPLv3 可以利用这
个协议的一些漏洞,把此有限的专利保护扩展到整个自由软件社区。如果微软将来让发行商向软件用户
收取微软专利费的话,使用 GPL 第 3 版发布的程序就会受到保护。针对程序的贡献者和发行者,GPLv3
同样为用户提供了明确的专利保护。如果使用 GPLv2,用户只能依赖于暗含的专利授权,希望提供软件
的公司不会因专利侵权而控告他们或者接受他们拷贝的用户。其实我们的理想是想让分发 GPL 代码的所
有人都交出全部软件专利。因为软件专利看起来是一个邪恶的荒谬的制度,它让所有的软件开发者都处
于被起诉的境地,被那些他们从未听说过的或巨型的公司控告。大型软件总是包含了成百数千个专利。
大公司会这些专利来威吓小开发者。因此,专利已经阻碍了自由软件的发展,让软件开发更安全的唯一
途径就是放弃软件专利,这是我们想到达成的目标。但我们并不能通过一个软件许可证就达成这一点。
任何软件,不论自由与否,都可能被一个毫不相关的第三方手中的软件专利扼杀,而软件授权并不能防
止这个发生。GPLv3 也不能解决这个矛盾,它只是寻求限制并疏导这个危险。GPLv3 中明确的专利授权
确保使用 GPL 的公司给予用户不可收回的 4 种自由,并且不能将某些用户排除在外,也防止了专利权人
相互勾结。同时 GPLv3 还更好的支持了国际化,支持 BitTorrent,以及同 Apache 许可兼容。

GPLv3 反对之音

同时也有很多人认为 GPLv3 使得 GNU 的前景堪忧。特别是 Linux 的开发者对此持有异议。他们认为


现有 GPLv2 没有太多的问题,并不需要做大的修改,而且现有的 GPLv2 在开源界是占有统治地位的。

2006 年 9 月 22 日草案 2 刚公布的时候 FOSS 社区 Linux Kernel 开发者针对 GPL 的进行了一轮投票,


其结果显示了一边倒的结果。29 位 Linux Kernel 维护者没有一位投票对 GPLv3 表示赞成,全部持悲观的
态度,认为 GPLv3 并不优于 GPLv2。

还有人提到 GPLv3 对于开发者和用户来说增加了许多的限制和规定。FSF 说,在 GPLv3 中在专利权


许可证以及硬件性能的新的限制和规定会使得我们对于软件的使用更加的自由,这听起来是十分荒谬的。
GNU GPLv 3 引入了许多自由软件基金会许可的软件许可证的限制。这个许可证要求所有修改了 GPLv3
软件的人对于软件可能有的专利授予一个"非独家的, 全世界的, 没有特权的专利权许可"。而且, GPLv3 规
定你必须不能使用"反欺骗技术", 甚至是放弃"安装信息", 如果不这样的话,你就需要提供所有的解锁或是
控制硬件的文件和数据。这对于 DVD 和 DRM 厂商来说当然是不合情理的。

当前草案的附加规定部分使得 GPLv3 可以变得更为挑剔。而且, 附加条款使得众多的自由软件许可证


变的相互分裂, 这样的话就变得很难结合与分发(因为需要明确每个许可证独立的规定)。 因此, 这使得
人们很难快速的升级和转移到新的许可证上。

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


开源社区

对于公司来说将一个 GPLv3 许可的程序使用到他们的网站将会危及公司的专利权公文。 因为 Linux


软件系统依赖来自公司的一些捐赠,所以这样做的话有可
能打消公司对开源和自由软件的热情。而且,一些公司也
承担了当前 Linux 发行者的角色也有重要的专利权公文; 因
此这个条款产生了另外一个分发 Linux 的阻碍。

Linux 的开发者认为,首先 GPLv2 经历了很长的时间,


而且因为它是开发者合约的基础,使得 Linux 和其他的一些
自由软件成功的发展到了今天。迄今为止,在 GPLv2 的历
史上,产生了许多成功的项目,但是对于 GPLv2 没有什么
显著的问题需要对其进行修改。Linux 发行版,不仅仅包含 Linux 之父 Linus Torvalds

内核,他们也包含各异的开源组件,内核仅仅是一部分(虽然内核是重要而且是不可或缺的),这些一
起构成了可以使用的系统。开源许可证逐渐的变得越来越多使得版本的发行变得越来越麻烦,甚至是花
上大量的时间来检查和评定以不同的许可证发布的(甚至是相互矛盾的),互相关联的软件包分支-确
实,有的时候因为许可证的考虑,不得不将一个软件包排除在外。为了方便起见,应该对开源的许可证
加以整理,而 GPLv2 无疑在当前的开源界是占有统治地位的。Linxu 的成功也依赖于广泛捐助者和用户社
区,他们对于 Linux 的革新起了非常大的作用。协同的努力,而非针对不同目的的妥协,是 Linux 良好的
管理富有热情的开发者与商业利益的一个重要的原因。目的不同的个体是可以互惠互利的走到一起来的。
因此,为了维护基本的开发协同和顺应 Linux 革新的潮流,我们不应该支持 GPL 的任何改变,这些改变
有可能危及基本的自由。

而且以 GPLv3 禁止 Tivoization 的条款为例,TiVo 使用 Linux 作为其数字视频存储器产品,TiVo 使用


了数字签名进行加密。虽然 FSF 是表示强烈反对的,但 Linus Torvalds 认为,GPL 不应该针对硬件做某种
程度的规定。而且有人提出,修改 GPL 的人的动机是强迫硬件商重新设计其设备,以符合 FSF 的怎样运
行硬件的想法。TiVo 遵守了 GPLv2,将修改后的源码发布,但数字签名是否也应该作为修改的源码的一
部分加以公布是值得商权的。而且许多自由软件的开发者认为,如果 FSF 真的想要反对 DRM 的话,应
该单独作为一个草案而不应把这部分的内容全部放入新的 GPLv3 许可证中。

如果 GPLv3 使用的话。许多项目以及贡献者将不会包含 GPLv3 软件, 这可能会造成将旧的 GPLv2 版


本分支或是使用 BSD-许可的软件加以替代。甚至有人认为这将会是"GNU/Linux" 的结束。因为在 BSD 领
域已经有许多开源的软件代替了 GNU 项目程序。

未来:GPLv3 何去何从

从兼容性来说,GPLv2 和 GPLv3 是不兼容的,目前还没有一个很好的的方法将 GPLv2 许可下的代码

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


开源社区

同 GPLv3 许可下的代码在一个单独的程序中结合起来。这是因为,GPLv2 和 GPLv3 都是反版权许可:其


中类似于“如果你在一个大型程序中包含了本许可管理下的代码,那个大型程序就必须置于本许可之
下。”的表述没有办法让它们两个兼容。但是只有在你想把来自两个不同程序中的代码连接、引入或合
并起来的时候,许可不兼容才会发生影响。而把一个 GPLv3 程序和一个 GPLv2 程序一同放入一个操作系
统中是没有问题的。举例来说,TeX 的许可和 Apache 的许可都和 GPLv2 不兼容,但这不会影响我们在同
一系统上和 Linux、Bash 以及 GCC 一块运行 TeX 和 Apache。这是因为它们都是单独的程序。同样,如果
Bash 和 GCC 升级到 GPLv3,而 Linux 仍然保持 GPLv2,也不会有冲突。

FSF 代表 Brett Smith 说,有大约 150 软件项目在 GNU Project 中,其版权归属于 Free Software
Foundation。在这些项目中, 至少 15 个一定会转变到今天的 GPL 版本 3。哪些项目最终会升级到 GPLv3 还
没有最终确定,但应该包括基本的 GNU/Linux 系统工具 sed 和 tar,Internet 软件套件 FTP 和 telnet servers
以及客户端 inetutils,以及 Texinfo 文件系统。

OpenBSD 项目还没有决定是否在 OpenBSD base system 中采用 GPLv3 许可的软件。像其他的 BSD 一


样,OpenBSD 有非常少量的 GPL 程序,而且可以将一些现有的工具使用 BSD 许可的工具来替代。大多
数的 OpenBSD 中的 GPL 程序很旧而且打了许多补丁,所以对 GNU 项目最新的包依赖很少。

而 FreeBSD 核心团队成员这样说:“如你所知,FreeBSD 项目有很长的历史将源码以自由的 BSD 开源


许可证来发布。这个许可证允许我们的软件没有限制的以开源或是非开源的方式重用源码。我们确实依
赖了一些 GPL 组件,最关键的是 GCC 开发工具套件,但我们工作的核心目标是将 FreeBSD 打造为完善
的操作系统,有 BSD-许可的内核、系统库、服务,以及命令行工具。而现在还不好对 GPLv3 发表评论。”

Sun 已经表示未来它的 OpenSolaris 项目在 GPL 3 的授权下进行。这样的迁移为扩展 GPL 授权的代码


带来了很大的机会,同时由于符合自由软件规则,FSF 可以说服 Linux 内核项目也来遵循 GPL 3。随着在
同一授权下的多平台可用性的提升,将会有各种各样新的代码合并的机会。

微软长久以来就反对 GPL,并且喜欢发展拥有自主权的软件。因此自然会采取步骤来摆脱 GPLv3 的


纠缠。微软知识产权与授权副总裁 Horacio Gutierrez 表示,微软没有参与 GPL v3 授权,该公司的任何行
动也都不能解释为接受 GPL v3 的约束,或者对此类协议有法律义务。Gutierrez 指出:“事实上,我们认
为微软不需要根据 GPL 协议执行与 Novell 的合作,即使 Novell 今后选择发行 GPL v3 代码也是如此。另
外,微软不承认 GPL v3 直接或间接带来的专利权,GPL v3 授权人无权以任何方式约束微软。”

Linux Kernel SCSI Maintainership 的负责人 James Bottomley 也反对 GPLv3。 Bottomley 表示,GPLv2
和 v3 两个版本并不兼容,在可预见的将来,Linux 核心仍然将坚持使用 GPLv2。 之前,Linux 的核心发
展人 Linus Torvalds 也反对 GPLv3,因为担心其中的数字版权管理(digital rights management)条文会引
起困扰.

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


开源社区

对于硬件而言,新的 GPLv3 要求硬件厂商不能把 GPL V3 的代码放到硬件中去,然后进行锁定,让


它不能够被其他能用的东西取代。这个要求可以理解,但是它肯定不会被大厂商接受的。

其实,GPL 版本的改进是依据现有的自由软件许可证使用中出现的问题进行的修补,随着新技术的出现,
GPL 的变化不会随着 GPLv3 的发布而终止。如果有一天新的威胁再次危害到用户的“自由”开发,
GPLv4 也是会出现的。而 GPLv3 对自由软件团体和开发者以及商业软件厂商的影响也会在今后逐渐的显
露。GPLv3 在“自由”与“利益”的冲突间,或许还需要很长一段时间来找到两者平衡点。

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


开源社区

开源公共许可协议 GPL 于 2007 年 6 月 29 日发布了第三版本,该版本的发布对开源运动中所涉及到的知

识产权问题作了一个比较全面的考虑,在开源许可证协议的发展历程中具有重要意义。

GPL v3,自由与机遇

余水清

随着 GPL v3 的发布,各种争论之声也随之而来,有支持的也有反对的,但从开源软件社区的反应以
及相关法律专家的观点来看,支持的占绝大多数。而且,随着时间的推移,GPL v3 必将广泛的被整个开
源社区各个开源项目所接受,开源项目对 GPL v3 的接纳并向之进行迁移也是时间问题。

历时 16 年,经过无数次的修改才面世的 GPL v3 无疑考虑到了开源软件可能涉及到的知识产权的各


个方面的事情,可以说是集开源知识产权保护方法于一身,而不能仅将其看作是在 GPL v2 基础上的简单
修改。在此,笔者并不对 GPL v3 进行全面的分析,而只想从以下两个方面简述一下 GPL v3 的发布带来
的意义以及一些个人设想。

GPL v3 与国内软件知识产权保护现状

根据笔者理解,在国内现有的
法律框架下,对于软件(无论是开
源还是私有软件)而言其知识产权
保护的法律体系结构如图 1 所示(该
图借用了软件 UML 模型中的类图对
相关法律,协议之间的关系进行描
述)。

    

图 1 软件知识产权保护框架

从上述软件知识产权保护框架
的图中可以看出,GPL 协议应该归

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


开源社区

入合同法的范畴。也就是说该协议应当是所有使用、修改、传播某项开源软件的所有用户必须遵守的协
议。从合同法的角度来看,协议的一方为软件的使用者(使用,修改,传播等)另一方应该是开源软件
基金会(FSF)以及整个开源社区,因此该协议应当看作是三方的合意一致的产物。GPL 协议涉及到的三
方即开源软件使用者,开源社区以及自由软件基金会(FSF)之间的关系如图 2 所示。

这里整个开源社区作为协议第三方应该是某种虚拟的角色,但实际上确实是有必要将其纳入协议第
三方的。开源软件的使用者只要违犯了该协议的内容,都有可能被视为对相关合同条款的违反,从而导
致侵权诉讼。从国内的实际情况看来,遵不尊守 GPL 协议往往完全在于使用者本身的知识产权意识以及
自律,再者就是依靠开源社区的监督,发生了侵权行为时依靠 FSF 去进行侵权诉讼往往是不可能的。

  

图 2 GPL 协议三方

   从著作权法的角度来看,开源软件应当在著作权法的保护范围之内。著作权是典型的法律上的
一体两权,即既有人身权也有财产权的内容。从 GPL 的内容来看,凡是自愿接受 GPL v3 约束的自由软件
的作者基本都放弃了财产权的绝大部分内容,甚至连人身权也仅仅是保留了署名权而放弃了修改权以及
维护作品完整权。获得该自由软件的使用者可以自由的修改,翻译,传播该软件而无需支付版权费用。
但是正如法律上权利与义务是平等的表述一样,在获得上述自由的情况下,使用者也必须承担一定的义
务那就是必须将同样的许可传播给他人,也就是对其他使用者来说必须放弃绝大部分著作财产权的内容,
否则就是对该协议的违反。

从专利法的角度来看,GPL v3 对软件专利问题进行了特别处理。GPL v3 规定任何发行新(版本)自


由软件的人(或发行商)都必须自动地(明确)保证每一个用户都有权使用一切相关(软件)专利。也
就是说,任何使用自由软件的软件或者自由软件中使用的软件必然要向整个自由软件社区放弃专利权,
自由软件的用户在有关 GPL 专利的法律诉讼中,都会得到有效的保护。这样在类似微软 Novell 专利联盟

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


开源社区

中,按照该协议微软已经在事实上放弃了相应的专利权。

从国内专利法以及专利保护情况来看,目前专利法中并没有提供对计算机软件进行保护的相关条款。
但实际专利审查中已经有一些计算机软件以方法的形式申请了发明专利保护,因此可以获得 20 年的保护
期。但在现有的专利法框架下,笔者认为获得方法专利对计算机软件保护本身的意义并不太大。其一是
因为法律上并没有明确的条款(这一点就没有美国的专利法那么明确),现有的专利授权大都是打得"
擦边球";其二,正是因为法律上的不明确必然导致已经获得的授权具有不确定性,也就是说该授权并
不能发挥常规专利权的作用。因此,GPL v3 如果在国内的开源社区被采用的话,软件专利这块基本可以
不用去考虑。

计算机软件保护条例基本是在著作权法的基础上发展起来的,只是对某些权利作了特别规定,因此
其对软件的保护与著作权法大同小异,在此不再赘述。

影响及新的立法思路

从国内的软件发展来看,目前不接触或者依赖自由软件完完全全自主开发的软件项目并不是很多,
并且政府已经明确表示对开源项目的支持。因此 GPL v3 的发布有可能为国内的知识产权立法带来一些新
的建议或者思路。笔者看来,大致有以下几点:

◆明确对软件专利保护的问题。也就是说在专利法中加入相应的条款明确提供对软件的专利保护或者明
确不对软件提供专利保护。这样,一方面可以减少专利申请成本,避免不必要的专利诉讼(有些甚至导
致巨大的财力物力等资源的浪费),另一方面也并不会导致与 GPL v3 的冲突,并且有利于国内软件公司
的自主创新和研发工作。

◆GPL 协议的相关内容向其它知识产权法律领域渗透。国内的著作权法保护对象的体系如图 3 所示。可


见著作权法的保护对象包括了文字,艺术作品,具有一定原创性的建筑物,以及计算机软件。但计算机
软件是被归入文字艺术作品一类的。

图 3 计算机软件与著作权保护对象

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


开源社区

GPL 协议鼓励对计算机软件创作的自由共享,而计算机软件与文字,艺术作品一样也是人类独立智
力活动创造的成果。如果将 GPL v3 的这种自由共享的精神上升到著作权法的相关内容中,必然导致著作
权法的重大修改,有些甚至是颠覆性的。至于这种自由的精神能否上升到法律的阶段,以及现行的著作
权法能在多大限度内接受这种精神那还有待于进一步探讨。但有一点是肯定的,那就是这种自由的精神
必将给人类的一切创造活动带来极大的鼓舞,也许当前出现在开源软件领域内的欣欣向荣的景象有朝一
日也会出现在文学艺术作品创造领域。

◆计算机软件保护条例。也就是说在该条例中规定相应的软件权利的同时,明确加入对 GPL 相关协议支


持的条件。或者说,在该条例中主张的权利都是有条件的,那就是排除对相关开源协议的遵守。

总之,开源 GPL 协议 v3 版本的发布对开放源代码运动来说是意义深远的,对开源知识产权甚至知识


产权保护法律体系的完善与发展也会带来一定的影响,因此,GPL v3 具有里程碑的意义。我们应该在做
好充分理解该协议的基础上对开源项目进行合理的利用,以在进一步发扬自主研发精神的同时,不侵犯
现有的知识产权。

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


知识学堂

知识学堂

GCC 精彩之旅(上)
肖文鹏

在为 Linux 开发应用程序时,绝大多数情况下使用的都是 C 语言,因此几乎每一位 Linux 程序员面临


的首要问题都是如何灵活运用 C 编译器。目前 Linux 下最常用的 C 语言编译器是 GCC(GNU Compiler
Collection),它是 GNU 项目中符合 ANSI C 标准的编译系统,能够编译用 C、C++和 Object C 等语言编
写的程序。GCC 不仅功能非常强大,结构也异常灵活。最值得称道的一点就是它可以通过不同的前端模
块来支持各种语言,如 Java、Fortran、Pascal、Modula-3 和 Ada 等。

开放、自由和灵活是 Linux 的魅力所在,而这一点在 GCC 上的体现就是程序员通过它能够更好地控


制整个编译过程。在使用 GCC 编译程序时,编译过程可以被细分为四个阶段:

◆ 预处理(Pre-Processing)

◆ 编译(Compiling)

◆ 汇编(Assembling)

◆ 链接(Linking)

Linux 程序员可以根据自己的需要让 GCC 在编译的任何阶段结束,以便检查或使用编译器在该阶段


的输出信息,或者对最后生成的二进制文件进行控制,以便通过加入不同数量和种类的调试代码来为今
后的调试做好准备。和其它常用的编译器一样,GCC 也提供了灵活而强大的代码优化功能,利用它可以
生成执行效率更高的代码。

GCC 提供了 30 多条警告信息和三个警告级别,使用它们有助于增强程序的稳定性和可移植性。此外,


GCC 还对标准的 C 和 C++语言进行了大量的扩展,提高程序的执行效率,有助于编译器进行代码优化,
能够减轻编程的工作量。

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


知识学堂

GCC 起步

在学习使用 GCC 之前,下面的这个例子能够帮助用户迅速理解 GCC 的工作原理,并将其立即运用


到实际的项目开发中去。首先用熟悉的编辑器输入清单 1 所示的代码:

清单 1:hello.c
#include <stdio.h>
int main(void)
{
printf ("Hello world, Linux programming!\n");
return 0;
}
然后执行下面的命令编译和运行这段程序:

# gcc hello.c -o hello

# ./hello

Hello world, Linux programming!

从程序员的角度看,只需简单地执行一条 GCC 命令就可以了,但从编译器的角度来看,却需要完成


一系列非常繁杂的工作。首先,GCC 需要调用预处理程序 cpp,由它负责展开在源文件中定义的宏,并
向其中插入“#include”语句所包含的内容;接着,GCC 会调用 ccl 和 as 将处理后的源代码编译成目标代
码;最后,GCC 会调用链接程序 ld,把生成的目标代码链接成一个可执行程序。整个编译过程如图 1 所
示:

为了更好地理解 GCC 的工作过程,可以把上述编译过程分成几个步骤单独进行,并观察每步的运行


结果。第一步是进行预编译,使用-E 参数可以让 GCC 在预处理结束后停止编译过程:

# gcc -E hello.c -o hello.i

此时若查看 hello.cpp 文件中的内容,会发现 stdio.h 的内容确实都插到文件里去了,而其它应当被预


处理的宏定义也都做了相应的处理。下一步是将 hello.i 编译为目标代码,这可以通过使用-c 参数来完成:

# gcc -c hello.i -o hello.o

GCC 默认将.i 文件看成是预处理后的 C 语言源代码,因此上述命令将自动跳过预处理步骤而开始执


行编译过程,也可以使用-x 参数让 GCC 从指定的步骤开始编译。最后一步是将生成的目标文件链接成可
执行文件:

# gcc hello.o -o hello

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


知识学堂

在采用模块化的设计思想进行软件开发时,通常整个程序是由多个源文件组成的,相应地也就形成
了多个编译单元,使用 GCC 能够很好地管理这些编译单元。假设有一个由 foo1.c 和 foo2.c 两个源文件组
成的程序,为了对它们进行编译,并最终生成可执行程序 foo,可以使用下面这条命令:

# gcc foo1.c foo2.c -o foo

如果同时处理的文件不止一个,GCC 仍然会按照预处理、编译和链接的过程依次进行。如果深究起
来,上面这条命令大致相当于依次执行如下三条命令:

# gcc -c foo1.c -o foo1.o

# gcc -c foo2.c -o foo2.o

# gcc foo1.o foo2.o -o foo

在编译一个包含许多源文件的工程时,若只用一条 GCC 命令来完成编译是非常浪费时间的。假设项


目中有 100 个源文件需要编译,并且每个源文件中都包含 10000 行代码,如果像上面那样仅用一条 GCC
命令来完成编译工作,那么 GCC 需要将每个源文件都重新编译一遍,然后再全部连接起来。很显然,这
样浪费的时间相当多,尤其是当用户只是修改了其中某一个文件的时候,完全没有必要将每个文件都重
新编译一遍,因为很多已经生成的目标文件是不会改变的。要解决这个问题,关键是要灵活运用 GCC,
同时还要借助像 Make 这样的工具。

警告提示功能

GCC 包含完整的出错检查和警告提示功能,它们可以帮助 Linux 程序员写出更加专业和优美的代码。


先来读读清单 2 所示的程序,这段代码写得很糟糕,仔细检查一下不难挑出很多毛病:

◆main 函数的返回值被声明为 void,但实际上应该是 int;

◆使用了 GNU 语法扩展,即使用 long long 来声明 64 位整数,不符合 ANSI/ISO C 语言标准;

◆main 函数在终止前没有调用 return 语句。

清单 2:illcode.c
#include <stdio.h>
void main(void)
{
long long int var = 1;
printf("It is not standard C code!\n");
}
下面来看看 GCC 是如何帮助程序员来发现这些错误的。当 GCC 在编译不符合 ANSI/ISO C 语言标准

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


知识学堂

的源代码时,如果加上了-pedantic 选项,那么使用了扩展语法的地方将产生相应的警告信息:

# gcc -pedantic illcode.c -o illcode


illcode.c: In function `main':
illcode.c:9: ISO C89 does not support `long long'
illcode.c:8: return type of `main' is not `int'
需要注意的是,-pedantic 编译选项并不能保证被编译程序与 ANSI/ISO C 标准的完全兼容,它仅仅只
能用来帮助 Linux 程序员离这个目标越来越近。或者换句话说,-pedantic 选项能够帮助程序员发现一些不
符合 ANSI/ISO C 标准的代码,但不是全部,事实上只有 ANSI/ISO C 语言标准中要求进行编译器诊断的
那些情况,才有可能被 GCC 发现并提出警告。

除了-pedantic 之外,GCC 还有一些其它编译选项也能够产生有用的警告信息。这些选项大多以-W 开


头,其中最有价值的当数-Wall 了,使用它能够使 GCC 产生尽可能多的警告信息:

# gcc -Wall illcode.c -o illcode


illcode.c:8: warning: return type of `main' is not `int'
illcode.c: In function `main':
illcode.c:9: warning: unused variable `var'
GCC 给出的警告信息虽然从严格意义上说不能算作是错误,但却很可能成为错误的栖身之所。一个
优秀的 Linux 程序员应该尽量避免产生警告信息,使自己的代码始终保持简洁、优美和健壮的特性。

在处理警告方面,另一个常用的编译选项是-Werror,它要求 GCC 将所有的警告当成错误进行处理,


这在使用自动编译工具(如 Make 等)时非常有用。如果编译时带上-Werror 选项,那么 GCC 会在所有产
生警告的地方停止编译,迫使程序员对自己的代码进行修改。只有当相应的警告信息消除时,才可能将
编译过程继续朝前推进。执行情况如下:

# gcc -Wall -Werror illcode.c -o illcode


cc1: warnings being treated as errors
illcode.c:8: warning: return type of `main' is not `int'
illcode.c: In function `main':
illcode.c:9: warning: unused variable `var'
对 Linux 程序员来讲,GCC 给出的警告信息是很有价值的,它们不仅可以帮助程序员写出更加健壮
的程序,而且还是跟踪和调试程序的有力工具。建议在用 GCC 编译源代码时始终带上-Wall 选项,并把它
逐渐培养成为一种习惯,这对找出常见的隐式编程错误很有帮助。

库依赖

在 Linux 下开发软件时,完全不使用第三方函数库的情况是比较少见的,通常来讲都需要借助一个或

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


知识学堂

多个函数库的支持才能够完成相应的功能。从程序员的角度看,函数库实际上就是一些头文件(.h)和库
文件(.so 或者.a)的集合。虽然 Linux 下的大多数函数都默认将头文件放到/usr/include/目录下,而库文件
则放到/usr/lib/目录下,但并不是所有的情况都是这样。正因如此,GCC 在编译时必须有自己的办法来查
找所需要的头文件和库文件。

GCC 采用搜索目录的办法来查找所需要的文件,-I 选项可以向 GCC 的头文件搜索路径中添加新的目


录。例如,如果在/home/xiaowp/include/目录下有编译时所需要的头文件,为了让 GCC 能够顺利地找到它
们,就可以使用-I 选项:

# gcc foo.c -I /home/xiaowp/include -o foo

同样,如果使用了不在标准位置的库文件,那么可以通过-L 选项向 GCC 的库文件搜索路径中添加新


的目录。例如,如果在/home/xiaowp/lib/目录下有链接时所需要的库文件 libfoo.so,为了让 GCC 能够顺利
地找到它,可以使用下面的命令:

# gcc foo.c -L /home/xiaowp/lib -lfoo -o foo

值得好好解释一下的是-l 选项,它指示 GCC 去连接库文件 libfoo.so。Linux 下的库文件在命名时有一


个约定,那就是应该以 lib 三个字母开头,由于所有的库文件都遵循了同样的规范,因此在用-l 选项指定
链接的库文件名时可以省去 lib 三个字母,也就是说 GCC 在对-lfoo 进行处理时,会自动去链接名为
libfoo.so 的文件。

Linux 下的库文件分为两大类分别是动态链接库(通常以.so 结尾)和静态链接库(通常以.a 结尾),


两者的差别仅在程序执行时所需的代码是在运行时动态加载的,还是在编译时静态加载的。默认情况下,
GCC 在链接时优先使用动态链接库,只有当动态链接库不存在时才考虑使用静态链接库,如果需要的话
可以在编译时加上-static 选项,强制使用静态链接库。例如,如果在/home/xiaowp/lib/目录下有链接时所
需要的库文件 libfoo.so 和 libfoo.a,为了让 GCC 在链接时只用到静态链接库,可以使用下面的命令:

# gcc foo.c -L /home/xiaowp/lib -static -lfoo -o foo

代码优化

代码优化指的是编译器通过分析源代码,找出其中尚未达到最优的部分,然后对其重新进行组合,
目的是改善程序的执行性能。GCC 提供的代码优化功能非常强大,它通过编译选项-On 来控制优化代码
的生成,其中 n 是一个代表优化级别的整数。对于不同版本的 GCC 来讲,n 的取值范围及其对应的优化
效果可能并不完全相同,比较典型的范围是从 0 变化到 2 或 3。

编译时使用选项-O 可以告诉 GCC 同时减小代码的长度和执行时间,其效果等价于-O1。在这一级别


上能够进行的优化类型虽然取决于目标处理器,但一般都会包括线程跳转(Thread Jump)和延迟退栈

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


知识学堂

(Deferred Stack Pops)两种优化。选项-O2 告诉 GCC 除了完成所有-O1 级别的优化之外,同时还要进行


一些额外的调整工作,如处理器指令调度等。选项-O3 则除了完成所有-O2 级别的优化之外,还包括循环
展开和其它一些与处理器特性相关的优化工作。通常来说,数字越大优化的等级越高,同时也就意味着
程序的运行速度越快。许多 Linux 程序员都喜欢使用-O2 选项,因为它在优化长度、编译时间和代码大小
之间,取得了一个比较理想的平衡点。

下面通过具体实例来感受一下 GCC 的代码优化功能,所用程序如清单 3 所示。

清单 3:optimize.c
#include <stdio.h>
int main(void)
{
double counter;
double result;
double temp;
for (counter = 0;
counter < 2000.0 * 2000.0 * 2000.0 / 20.0 + 2020;
counter += (5 - 1) / 4) {
temp = counter / 1979;
result = counter;
}
printf("Result is %lf\n", result);
return 0;
}
首先不加任何优化选项进行编译:

# gcc -Wall optimize.c -o optimize

借助 Linux 提供的 time 命令,可以大致统计出该程序在运行时所需要的时间:

# time ./optimize
Result is 400002019.000000
real 0m14.942s
user 0m14.940s
sys 0m0.000s
接下去使用优化选项来对代码进行优化处理:

# gcc -Wall -O optimize.c -o optimize

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


知识学堂

在同样的条件下再次测试一下运行时间:

# time ./optimize
Result is 400002019.000000
real 0m3.256s
user 0m3.240s
sys 0m0.000s
对比两次执行的输出结果不难看出,程序的性能的确得到了很大幅度的改善,由原来的 14 秒缩短到
了 3 秒。这个例子是专门针对 GCC 的优化功能而设计的,因此优化前后程序的执行速度发生了很大的改
变。尽管 GCC 的代码优化功能非常强大,但作为一名优秀的 Linux 程序员,首先还是要力求能够手工编
写出高质量的代码。如果编写的代码简短,并且逻辑性强,编译器就不会做更多的工作,甚至根本用不
着优化。

优化虽然能够给程序带来更好的执行性能,但在如下一些场合中应该避免优化代码:

◆ 程序开发的时候 优化等级越高,消耗在编译上的时间就越长,因此在开发的时候最好不要使用优
化选项,只有到软件发行或开发结束的时候,才考虑对最终生成的代码进行优化。

◆ 资源受限的时候 一些优化选项会增加可执行代码的体积,如果程序在运行时能够申请到的内存资
源非常紧张(如一些实时嵌入式设备),那就不要对代码进行优化,因为由这带来的负面影响可能会产
生非常严重的后果。

◆ 跟踪调试的时候 在对代码进行优化的时候,某些代码可能会被删除或改写,或者为了取得更佳的
性能而进行重组,从而使跟踪和调试变得异常困难。

调试

一个功能强大的调试器不仅为程序员提供了跟踪程序执行的手段,而且还可以帮助程序员找到解决
问题的方法。对于 Linux 程序员来讲,GDB(GNU Debugger)通过与 GCC 的配合使用,为基于 Linux 的
软件开发提供了一个完善的调试环境。

默认情况下,GCC 在编译时不会将调试符号插入到生成的二进制代码中,因为这样会增加可执行文
件的大小。如果需要在编译时生成调试符号信息,可以使用 GCC 的-g 或者-ggdb 选项。GCC 在产生调试
符号时,同样采用了分级的思路,开发人员可以通过在-g 选项后附加数字 1、2 或 3 来指定在代码中加入
调试信息的多少。默认的级别是 2(-g2),此时产生的调试信息包括扩展的符号表、行号、局部或外部
变量信息。级别 3(-g3)包含级别 2 中的所有调试信息,以及源代码中定义的宏。级别 1(-g1)不包含
局部变量和与行号有关的调试信息,因此只能够用于回溯跟踪和堆栈转储之用。回溯跟踪指的是监视程
序在运行过程中的函数调用历史,堆栈转储则是一种以原始的十六进制格式保存程序执行环境的方法,

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


知识学堂

两者都是经常用到的调试手段。

GCC 产生的调试符号具有普遍的适应性,可以被许多调试器加以利用,但如果使用的是 GDB,那么


还可以通过-ggdb 选项在生成的二进制代码中包含 GDB 专用的调试信息。这种做法的优点是可以方便
GDB 的调试工作,但缺点是可能导致其它调试器(如 DBX)无法进行正常的调试。选项-ggdb 能够接受
的调试级别和-g 是完全一样的,它们对输出的调试符号有着相同的影响。

需要注意的是,使用任何一个调试选项都会使最终生成的二进制文件的大小急剧增加,同时增加程
序在执行时的开销,因此调试选项通常仅在软件的开发和调试阶段使用。调试选项对生成代码大小的影
响从下面的对比过程中可以看出来:

# gcc optimize.c -o optimize


# ls optimize -l
-rwxrwxr-x 1 xiaowp xiaowp 11649 Nov 20 08:53 optimize (未加调试选项)

# gcc -g optimize.c -o optimize


# ls optimize -l
-rwxrwxr-x 1 xiaowp xiaowp 15889 Nov 20 08:54 optimize (加入调试选项)
虽然调试选项会增加文件的大小,但事实上 Linux 中的许多软件在测试版本甚至最终发行版本中仍然
使用了调试选项来进行编译,这样做的目的是鼓励用户在发现问题时自己动手解决,是 Linux 的一个显著
特色。

下面还是通过一个具体的实例说明如何利用调试符号来分析错误,所用程序见清单 4 所示。

清单 4:crash.c
#include <stdio.h>
int main(void)
{
int input =0;
printf("Input an integer:");
scanf("%d", input);
printf("The integer you input is %d\n", input);
return 0;
}
编译并运行上述代码,会产生一个严重的段错误(Segmentation fault)如下:

# gcc -g crash.c -o crash


# ./crash

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


知识学堂
Input an integer:10
Segmentation fault
为了更快速地发现错误所在,可以使用 GDB 进行跟踪调试,方法如下:

# gdb crash
GNU gdb Red Hat Linux (5.3post-0.20021129.18rh)
……
(gdb)
当 GDB 提示符出现的时候,表明 GDB 已经做好准备进行调试了,现在可以通过 run 命令让程序开始
在 GDB 的监控下运行:

(gdb) run
Starting program: /home/xiaowp/thesis/gcc/code/crash
Input an integer:10

Program received signal SIGSEGV, Segmentation fault.


0x4008576b in _IO_vfscanf_internal () from /lib/libc.so.6
仔细分析一下 GDB 给出的输出结果不难看出,程序是由于段错误而导致异常中止的,说明内存操作
出了问题,具体发生问题的地方是在调用_IO_vfscanf_internal ( )的时候。为了得到更加有价值的信息,可
以使用 GDB 提供的回溯跟踪命令 backtrace,执行结果如下:

(gdb) backtrace
#0 0x4008576b in _IO_vfscanf_internal () from /lib/libc.so.6
#1 0xbffff0c0 in ?? ()
#2 0x4008e0ba in scanf () from /lib/libc.so.6
#3 0x08048393 in main () at crash.c:11
#4 0x40042917 in __libc_start_main () from /lib/libc.so.6
跳过输出结果中的前面三行,从输出结果的第四行中不难看出,GDB 已经将错误定位到 crash.c 中的
第 11 行了。现在仔细检查一下:

(gdb) frame 3
#3 0x08048393 in main () at crash.c:11
11 scanf("%d", input);
使用 GDB 提供的 frame 命令可以定位到发生错误的代码段,该命令后面跟着的数值可以在 backtrace
命令输出结果中的行首找到。现在已经发现错误所在了,应该将

scanf("%d", input);

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


知识学堂

改为

scanf("%d", &input);

完成后就可以退出 GDB 了,命令如下:

(gdb) quit

GDB 的功能远远不止如此,它还可以单步跟踪程序、检查内存变量和设置断点等。

调试时可能会需要用到编译器产生的中间结果,这时可以使用-save-temps 选项,让 GCC 将预处理代


码、汇编代码和目标代码都作为文件保存起来。如果想检查生成的代码是否能够通过手工调整的办法来
提高执行性能,在编译过程中生成的中间文件将会很有帮助,具体情况如下:

# gcc -save-temps foo.c -o foo


# ls foo*
foo foo.c foo.i foo.s
GCC 支持的其它调试选项还包括-p 和-pg,它们会将剖析(Profiling)信息加入到最终生成的二进制
代码中。剖析信息对于找出程序的性能瓶颈很有帮助,是协助 Linux 程序员开发出高性能程序的有力工具。
在编译时加入-p 选项会在生成的代码中加入通用剖析工具(Prof)能够识别的统计信息,而-pg 选项则生
成只有 GNU 剖析工具(Gprof)才能识别的统计信息。

最后提醒一点,虽然 GCC 允许在优化的同时加入调试符号信息,但优化后的代码对于调试本身而言


将是一个很大的挑战。代码在经过优化之后,在源程序中声明和使用的变量很可能不再使用,控制流也
可能会突然跳转到意外的地方,循环语句有可能因为循环展开而变得到处都有,所有这些对调试来讲都
将是一场噩梦。建议在调试的时候最好不使用任何优化选项,只有当程序在最终发行的时候才考虑对其
进行优化。

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


知识学堂

Linux 内核组成和架构

Intel 开源技术中心 刘宏

Linux 内核从 90 年代初由 Linus 发布第一版开始,经过开源社区十几年的共同努力,现在已经发展到


了最新的 2.6 内核。它已经从 Linus 作为学习 Intel 386 架构的一个玩具项目发展成一个成熟的可以商用的
操作系统。由于 Linux 是一款开源的操作系统,这就给了我们一个非常难得的机会去学习一个成熟的商用
的操作系统是如何实现的。本文主要介绍 Linux 内核的进程管理、内存管理、文件系统和进程间通信四个
子系统,希望通过本文的介绍,能使读者对 Linux 内核有所了解。

进程管理

Linux 内核支持所谓的多任务运行(multiprogramming),即可以有多个用户程序同时运行,用户可
以一边听音乐一边写文档。为了在一个单 CPU 的系统中支持多任务,Linux 内核使用了进程的概念(内
核中用 task_struct 的结构表示),一个进程就是一个运行中的用户程序。整个系统运行时,每个进程都会
分得一定的时间片(从几十毫秒到几百毫秒),Linux 内核的调度器负责选择不同的进程运行。当这个进
程的时间片用完后,调度器会选择一个新的进程运行。由于切换的时间和频率非常快,给用户的感觉是
有多个程序在同时运行。而实际上,在一个 CPU 上每一个时间点上其实只有一个进程在运行。

1.Linux 的进程

一个用户程序开始运行时,内核会负责把存储在磁盘上的二进制可运行程序调入内存中,同时会分
配一个 task_struct 来代表这个要运行的用户程序。task_struct 是一个非常重要的数据结构,所有关于这个
正在运行的用户程序的信息都会保存在这个结构中,包括用户程序打开的文件,所使用的内存空间等等。
Linux 内核所有对于进程的管理都是通过这个结构进行的。

2.进程调度器

  进程调度器是整个系统非常关键的一个子系统,在系统中有多个进程可以运行时,它负责选择哪个
进程来运行。每个进程都是 CPU 计算和 I/O 请求的交替,不同的是,有的进程大部分的时间是花在 CPU
计算上,而有的则把几乎所有的时间花在 I/O 等待上。一个好的调度器,既能够让用户交互程序有很快的
反应时间(如编辑程序必须能够快速地将用户的敲键快速地反映到屏幕上),也能够让 CPU 密集型

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


知识学堂

(CPU-bound)的进程有很好的吞吐量(throughput)。

Linux 内核调度器是基于优先级的调度器,通过一套非常复杂的算法来决定一个进程当前的优先级,
同时进程的优先级又是动态调整的:一个很久没有得到运行的进程的优先级会被暂时增加,以增加得到
运行的机会;一个花了较多时间睡眠的进程则会被认为是用户交互程序,它的优先级也会被增加,当这
类进程需要运行的时候就会有较大的机会被调度器选到,这样整个系统对用户的输入就会有较快的响应。

早先的 2.4 版本的内核把所有可运行的进程连接在一个链表上,每次调度时都要循环遍历链表上的每


一个进程,计算其优先级以决定选择哪一个进程运行。这种方法的扩展性不是很好,调度器选择一个可
运行的进程的时间将随着系统内进程数的增加而线性增加。在 2.5 开发版本时,Linux 内核采用了由 Ingo
Molnar 开发的 O(1)调度器。O(1)调度器采用一个链表数组,根据进程的优先级把进程放进不同的链表中,
每次调度时,总是从优先级最高的链表中取出第一个进程来运行。同时使用一个位图表(bitmap)来记录
每一个优先级链表中是否有可运行的进程,搜寻这张位图表就可以找到优先级最高的链表。O(1)调度器
的调度时间并不会因为系统中进程数的增加而改变,拥有极好的可扩展性。

内存管理

如何有效的管理整个系统的物理内存,快速地响应内核各个子系统对内存分配的请求是操作系统一
个很重要的功能。我们从下往上看 Linux 内核的内存管理子系统是如何有效地管理系统的物理内存。

1.页帧 (page)

在操作系统启动的初期,内核会通过一定的方法来得到系统中物理内存的分布信息(x86 PC 从 BIOS

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


知识学堂

得到物理内存的信息,包括总共有多少内存,各个分块的地址信息等等,可以通过 #cat /proc/meminfo 看


到整个系统的物理内存分布)。Linux 内核是以一个物理页帧为单位对系统的物理内存进行管理的。对每
一个物理页帧通过一个 page 的结构进行状态的跟踪。页的大小由不同的 CPU 体系结构决定(在 Intel x86
上通常大小为 4K 字节)。

2.内存区域(Memory zone)

Linux 内核把所有的动态的 RAM 分为几个区域,ZONE_DMA,ZONE_NORMAL 和


ZONE_HIGHMEM。根据实际的内存情况,内核会将内存分配给不同的区域。每个 Zone 会分配一个 page
的数组来跟踪它所管理的物理内存页的信息。为了有效地管理、同时又能快速地响应内存请求,Zone 通
过一种叫 buddy system 的算法来组织这些页。

3.Slab 分配器

由于 Zone 的内存分配是以页为单位进行的,对于小的内存分配请求(几十到几百字节),如果也使
用页为单位进行分配的话就会造成内存的大量浪费。而且内核中,分配和释放某种数据结构是非常常见
的操作,必须快速地完成这些操作。

在 Zone 的页分配器的基础上,Linux 内核实现了 Slab 分配器很好地解决了这些问题。Slab 分配器以


对象为单位进行管理,把不同的对象组织在不同的 Cache 中。这种方式很好地解决了内存浪费的问题,
同时又能快速的分配各种不同大小的对象。(关于 buddy system 算法和 slab 分配器,请参阅《Linux 内存
和地址空间的管理》一文)。

虚拟文件系统 VFS

Linux 内核支持许多不同的文件系统,在 Linux 系统里,你可以访问 Windows 系统的文件。实现这一


功能的关键是 Linux 内核中的虚拟文件子系统(Virtual Filesystem)。VFS 的关键是用一个通用的文件模型来
表示各种不同的文件系统。这个通用模型主要由以下几个对象来表示 superblock、inode、dentry、file,你
可以用面向对象的概念来进行理解,VFS 定义的这些对象就像是基类(base class),它们定义了一些基
本的信息,同时为每个类定义了一系列的操作函数。各个不同的文件系统的主要工作就是给每个类加上
自己的信息(继承这些基本类),同时提供自己的操作函数的实现。在硬盘上如何组织存放整个的文件
系统,如文件系统控制信息、数据文件以及根目录存放位置等都因各个文件系统的实现而异。Linux 内核
只能依赖于各个文件系统自己实现的操作函数来读取这些信息以达到支持各种不同文件系统的目的。

1.文件系统的安装(mount)

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


知识学堂

  在 Linux 系统中,为了要操作某个磁盘上分区的文件,首先必须要将这个磁盘分区的上的文件系统安


装到根文件系统(通常为 ext2/ext3)的某个目录上。如为了访问某个磁盘分区上的 Window FAT 文件系统
上的文件,需要运行以下命令:

# mount –t vfat /dev/hda2 /mnt/tmp

这个操作会把第一个硬盘的第二个分区上的文件系统安装到根文件系统的/mnt/tmp 目录下。安装完后,
就可以通过/mnt/tmp 来访问此分区上的文件了。

每种文件系统都必须定义一个 file_system_type 的结构,这个结构最重要的就是 get_sb 函数的实现。


在安装一个新的文件系统时,Linux 内核会通过这个文件系统的名称来找到相应的 file_system_type,调用
其 get_sb 来得到这个文件系统的 super_block(如 vfat 文件系统的 vfat_fs_type->vfat_get_sb)。Linux 内核
同时也会读取这个文件系统的根目录(利用刚得到的 super_block 的 read_inode 来读取)。这些信息都会
被存储起来,以后在这个文件系统中进行文件操作时,需要找到这个 super_block 进行操作。super_block
中存储的是文件系统级别的信息,比如这个分区上一共有多少数据块,哪些是空闲的,那些已经被文件
占据了;以及根据这些信息,在创建新文件决定如何分配数据块。这些都因各个文件系统的实现而异。

2.文件的打开

  假设我们想访问刚才安装的文件系统中的一个文件/mnt/tmp/test,内核需要进行一系列的操作。Linux
内核得到了用户想要打开的文件名称后,从根目录“/”开始一级一级的往下找。

首先,在 dentry 缓存中查找“mnt”目录项:如果没找到,则说明以前还没有别的用户查找过这个目

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


知识学堂

录项。这时,内核就需要从硬盘上读取 mnt 这个目录项相应的 inode,这就得借助各个文件系统的不同实


现来完成这个操作。通过 mnt 的父目录即根目录(dentry->d_inode->i_sb)我们可以找到这个文件系统的
super_block,通过 super_block 的 read_inode 负责读取相应的 inode。同时建立 mnt 目录相应的 dentry 并把
它加入到 dentry 缓存中,以备以后的查询使用。如果找到,则再在 dentry 缓存中继续从 mnt 目录里查找
tmp 的目录项。找到 tmp 这个目录项后,内核会发现在这个目录项上安装了一个文件系统,这时它会把当
前找到的 tmp 目录项替换成所安装文件系统的根目录,从这个根目录开始继续查找。这时如果我们再要
读取某个文件的 inode 时,我们会找到这个新安装的文件系统的 super_block,所有查询、读取等 inode 的
操作都会使用这个文件系统的实现。正是通过这种方式,Linux 内核实现了多种文件系统的支持。

最后我们会在 tmp 目录里找到 test 目录项,并会将表示这个文件的 inode 从磁盘上读出。最终将所有


的这些数据结构通过下图的组织方式连接到表示用户进程的 task_struct 上。同时,file->f_op 会被更新成
文件系统特定的实现。以后用户对这个文件的所有操作都会最终调用 file->f_op 中的函数来完成。

进程间通信

Linux 提供了几种进程间的通信方式,用于不同的进程之间在用户空间进行同步、数据的共享和交换。
因为不同的用户进程都拥有自己独立的进程空间,进程间的通信就必须通过内核来进行中转,进行数据
的共享和传递。

1.管道(pipe)和命名管道(named pipe 或 FIFO)

  用户可以通过系统调用 pipe()来创建一个管道,这个系统掉调用会返回两个文件描述符,一个用于读
一个用于写。通常管道会用于父子进程之间,因为它需要两个进程能访问同一个 files_struct(见上图),
读的一方会关闭写文件描述符,写的一方关闭读文件描述符;这样两个进程之间就形成了一个单向的数
据通道。命名管道是为了在任意两个进程之间进行通信而设计地,它通过在当前的文件系统中创建一个
节点(通过 mknod 系统调用,指定 S_FIFO 文件类型),任何进程只要去打开这个文件就可以进行同管道
的另一方进行通信了。在 Linux 内核中,管道的实现是通过 pipefs 文件系统实现的。

2.System V IPC

AT&T 的 System V UNIX 中提供的进程间通信接口,Linux 内核实现了信号量、信息队列和共享内存


这三种 IPC 机制。当用户进程需要一个 IPC 资源的时候,需要指定一个唯一的 IPC KEY,Linux 内核会创
建一个相应的数据结构并记住这个 KEY,同时返回一个 32 位标识符,以后用户进程就通过这个标识符引
用这个 IPC 资源,进行同步操作。

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


知识学堂

以信息对列为例,为了发送一个信息报文,用户进程将 32 位标识符、报文内容和大小通过 msgsnd 系


统调用传给内核,内核通过标识符找到相应的数据结构,同时将数据报文从用户空间拷贝到内核空间,
并将这个报文放入这个数据结构的链表中。接收时,进程通过 msgrcv 系统调用,同样指定这个 32 位的标
识符,内核找到相应的数据结构后,把保存在链表中的信息报文传递给这个接收的进程。

用户进程之间就必须通过一定的机制来共享这个 IPC KEY,通过这个 KEY 并借助内核的帮助来达到


进程间通信的目的。

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


经验技巧

经验技巧
《Linux 一句话精彩问答》是 Linux 初学者很好的入门文档,想必很多朋友当时都是边看该文档,边
敲打键盘,玩着 Linux 过来的。该文档由本刊副总编陈绪主编,迄今已经收录近千个精彩问答。从第二期
期开始将在桌面应用(即经验技巧)栏目进行连载,希望能帮助到更多刚接触到 Linux 的朋友们。

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

陈绪

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

1041 ls 如何看到隐藏文件(即以.开头的文件)

ls –a 或 l. (适用于 redhat)

1042 查看 rpm 中文件的安装位置

rpm -qpl aaa.rpm

1043 使用 src.rpm 编译出二进制 rpm

rpmbuild --rebuild *.src.rpm

1044 设置 vim 中显示或不显示字体颜色

首先确保安装了 vim-enhanced 包,然后,vi ~/.vimrc; 如果有 syntax on,则显示颜色,syntax off,则不显


示颜色

1045 linux 是实时还是分时操作系统

标准的内核是分时的,但是有些厂商也改造出了实时 linux 系统

1046 make bzImage -j 的 j 是什么意思

-j 主要是用在当你的系统硬件资源比较足的时候,用改选项可以加快编译速度,如-j 3

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


经验技巧

1047 如何安装内核源码包

把你光盘上的内核源码包装上即可,rpm -i *kernel*source*.rpm

1048 修改系统时间

1 设置你的时区: timeconfig 里选择 Asia/Shanghai (如果你位于 GMT+8 中国区域)

2 与标准时间服务器校准: ntpdate time.nist.gov

当然,如果你是李嘉诚,也可以跟自己的手表校准: date -s STRING (STRING 格式见 man date),修


改后执行 clock -w 写到 CMOS

date -s “2003-04-14 cst”,cst 指时区,时间设定用 date -s 18:10

3. 将当前软件系统时间写入硬件时钟: hwclock –systohc

1049 把命令结果传给一个变量

aa=`grep _GQAdd $1`,注意这个`是反引号

1050 linux 怎么用这么多内存

为了提高系统性能和不浪费内存,linux 把多的内存做了 cache,以提高 io 速度

1051 /etc/fstab 配置项里最后两个数字是什么意思

第一个叫 fs_freq,用来决定哪一个文件系统需要执行 dump 操作(dump 执行 ext2 的文件系统的备份操作),


0 就是不需要;

第二个叫 fs_passno,是系统重启时 fsck 程序检测磁盘(fsck 检测和修复文件系统)的顺序号,0 表示该文件


系统不被检测,1 是 root 文件系统,2 是别的文件系统。fsck 按序号检测磁盘

1052 让用户的密码必须有一定的长度,并且符合复杂度

vi /etc/login.defs,修改 PASS_MIN_LEN

1053 翻译软件

星际译王 xdict

console 下还有个 dict 工具,通过 DICT 协议到 dict.org 上查 11 本字典,例如:dict RTFM

1054 让显示器不休眠

setterm -blank 0

setterm -blank n (n 为等待时间)

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


经验技巧

1055 用 dat 查询昨天的日期

date --date='yesterday'

1056 xwindow 下如何截屏

使用 Ksnapshot 或者 gimp

1057.a 解压小全

tar -I 或者 bunzip2 命令都可以解压.bz2 文件

tar xvfj example.tar.bz2

tar xvfz example.tar.gz

tar xvfz example.tgz

tar xvf example.tar

unzip example.zip

rpm2cpio example.rpm │ cpio -div

arp example.deb data.tar.gz | tar zxf -

tar -jvxf some.bz,就是把 tar 的 zvxf 改成 jvxf

zip/tar rh8 下有一个图形界面的软件 file-roller 可以做这件事。另外可以用 unzip *.zip 解开 zip 文件,unrar


*.rar 解开 rar 文件,不过 unrar 一般系统不自带,要到网上下载:

http://www.linuxeden.com/download/softdetail.php?softid=883

下载 rar for Linux 3.2.0,解压开后 make,然后可以用 unrar e youfilename.rar 解压 rar 文件

Alien 提供了.tgz, .rpm, .slp 和.deb 等压缩格式之间的相互转换:

http://sourceforge.net/projects/alien

sEx 提供了几乎所有可见的压缩格式的解压接口:

http://sourceforge.net/projects/sex

1057.b tar 的压缩和解压用法

解压:x

压缩:c

针对 gz:z

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


经验技巧

针对 bz2:j

用于显示:v

解压实例:

gz 文件:tar xzvf xxx.tar.gz

bz2 文件:tar xjvf xxx.tar.bz2

压缩实例:

gz 文件:tar czvf xxx.tar.gz /path

bz2 文件:tar cjvf xxx.tar.bz2 /path

1058 在多级目录中查找某个文件的方法

1 find /dir -name filename.ext

2 du -a | grep filename.ext

3 locate filename.ext

1059 不让普通用户自己改密码

[root@xin_fc etc]# chmod 511 /usr/bin/passwd

又想让普通用户自己改密码

[root@xin_fc etc]# chmod 4511 /usr/bin/passwd

1060 显卡实在配不上怎么办

去 http://www.redflag-linux.com/,下了 xfree86 4.3 安装就可以了

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


经验技巧

在 Windows 中可以使用计划任务来定时执行一系列操作,那么 Linux 中如何实现类似的功能呢? 本文


就和大家分享 Linux 计划任务的方法。

Linux 下的计划任务

陈杰

在 Linux 下,用户有时需要在一个指定的时间运行一个指定的程序,或者在一段时期内重复运行一些
程序,尤其是作为服务器的管理员,每天会重复做许多同样的工作,例如备份日志、数据库和重启服务
等。有什么方法来简化这些令人繁琐的操作呢?这就需要用到类似于 Windwos 下计划任务的的程序。本
文介绍在 Linux 下通过 cron 和 at 实现计划任务的功能。

cron 循环执行定期任务

cron 来自希腊语的 chronos(时间)一词,它是一个可以用来根据时间、日期、月份和星期的组合来调


度对重复任务的执行的守护进程。cron 假定系统是持续运行的,如果当某个任务被调度时系统不在运行,
该任务就不会被执行。

1.启动 cron 服务

cron 是 Linux 中内置的服务,但有的发行版并不是自动启动的,可以通过以下命令启动这个服务:

#/etc/init.d/crond start

如果想开机就自动运行此服务,那么可以将其加入到启动脚本里:

# vi/etc/rc.d/rc.Iocal

在文件的末尾加入如下内容:

# /etc/init.d/crond start

保存退出,这样每次系统启动时都会开启此服务。

2.cron 使用上的安全设置

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


经验技巧

出于安全性的考虑,一台机器不是所有的使用者都可以使用 cron 安排定时任务,用户可以利


用/etc/cron.aIlow 和/etc/cron.deny 两个文件进行 cron 的使用限制。这两个使用控制文件的格式都是每行
一个用户。需要注意的是, 这两个文件都不允许有空格。如果使用控制文件进行了修改,则 cron 守护进
程不必被重启。使用控制文件在每次用户添加或删除一项 Cron 任务时都会被读取。这里介绍一下这两个
使用控制文件的优先级。

/etc/cron.allow 将可以使用 crontab 的账号写入其中,若不再这个文件内的账号将不能使用 crontab;


而/etc/cron.deny 将不可以使用 crontab 的账号写入其中, 记录在其中的账号将无法使用 crontab。就优先
级而言,/etc/cron.allow 优先于/etc/cron.deny。也就是说系统先搜寻/etc/cron.allow 文件,如果这个文
件不存在就搜寻/etc/cron.deny。如果这两个文件都不存在,那么只有 root 账号可以使用 crontab。其实判
断使用者账号是否有执行 crontab 的权限,以上两个文件只需要一个来进行限制就可以了, 笔者在此建
议只需保留一个, 以免出现不必要的错误或者影响自己在设定时的判断, 通常只需保留
/etc/cron.deny,将不能使用 crontab 的账号写入其中,如没这个文件,创建一个即可。

当用户使用 crontab 命令来建立定期任务后,这项任务就会被记录在/var/spool/cron/这个目录里, 并


且是通过账号来识别的。比如,笔者通过 kennycx 账号使用 crontab 后,

那么下达的任务将会记录在/Var/spool/cron/kennycx 目录里。cron 执行的任何一次任务都会被记录


在/var/Iog/cron 这个文档里边,管理员可以定期查询该文档,看是否存在错误的任务或执行了非法任务。

3.给 crontab 下达任务

cron 服务提供 crontab 命令来设定 cron。crontab 命令的具体参数如下:

◆ -u 设定某个用户的 cron 服务;

◆ -l 列出某个用户 cron 服务的详细内容;

◆ -r 删除每个用户的 cron 服务;

◆ -e 编辑某个用户的 cron 服务。

下面笔者在此分别举例说明 crontab 各参数的使用,比如 root 用户需要查看自己的 cron 配置:

#crontab -u root -l

root 用户需要删除 Kennycx 用户的 cron 配置:

#crontab -u kennycx -r

查询当前使用者 cron 服务的详细内容:

#crontab -l

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


经验技巧

移出当前用户的所有任务:

#crontab -r

每天的 12:00 执行/home/kennycx/test.sh 脚本:

#crontab -e

此时将进入 vi 的编辑模式,用户以一个任务为一行的格式来编辑,编辑完后保存退出离开 vi 就可以


了。

0 12 *** /home/kennycx/test.sh

cron 的时间设定是有约定的,前面的 5 个*代表着 5 个数字,数字的取值范围和含义如下:

◆ 分钟(0-59);

◆ 小时(0-23);

◆ 日期 (1-31);

◆ 月份(1-12);

◆ 星期(0-6)。

需要注意的是,星期中的 0 代表星期天。除了以上这些数字外,cron 还有一些辅助字符,笔者在此分


别介绍几个辅助字符的含义:

◆ “*”代表所有有效的值,比如月份为星号,意思就是满足其他时间的制约后的每月都执行。

◆ “,”代表分隔时段的意思,比如小时为 6,12,意思就是满足其他时间的制约后的 6 点和 12 点都执行。

◆ “-”代表一段时间范围内的意思, 比如小时为 6-9, 意思就是满足其他时间的制约后的 6、7、8、9


点都执行。

◆ “/n”代表指定间隔频率,n 为数字。比如月份为*/3,意思就是满足其他时间的制约的情况下每三个月
执行一次。

明白这些辅助字符后就举例说明。例如,每 8 小时运行一次备份脚本,并将日志输出
为/var/Iog/mysqldns.log,可以使用如下命令:

0 */8 *** /backups/Sh/mysqldns.sh >>/var/log/mysqldns.log

每周的星期五下午的 4:30 将 message.log 日志发到指定的邮箱,可以使用如下命令:

30 16 ** 5 mail kennycx@gamil.com </var/log/message.log

4.编辑/etc/crontab 文件配置 cron

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


经验技巧

使用 crontab 命令配置任务是针对某个用户的,用户还可以编辑/etc/crontab 文件下达任务,而这个下


达的任务则是针对系统任务的。cron 服务每分钟不仅会读取一次/var/Spool/cron 目录下的所有文件, 还
会读取一次/etc/crontab 这个文档中的配置,所以当用户以 root 账号编辑完这个文档时,cron 就会自动执
行了。现在向大家介绍下这个文档的内容:

#more/etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/Sbin:usr/bin
Mailto=root
HOME=/
#run-parts
01 **** root run-parts /etc/cron.houdy
02 4 *** root run-parts /etc/cron.daily
22 4 *** root run-parts /etc/cron.weekly
42 4 1 ** root run-parts /etc/cron.monthly
其实上面的内容和用 crontab 命令的“-e”参数下达的内容几乎完全一样,只有几个小的差别:

◆ SHELL=/bin/bash,是指用 bash 作为 shell 执行任务。

◆ PATH=/sbin:/bin:/usr/sbin:/usr/bin,这里是指定执行程序的搜索路径,使用默认的已经足够了。

◆ MAlLTO=root,这个项目是指当/etc/crontab 这个文档中的任务执行发生了错误时,系统会直接发一封
邮件给 root,由于 root 账号不一样是管理员常用的,而是希望将其发到指定的邮箱中以便随时了解系统的
运行,可以单独指定,例如 MAILTO=kennycx@gmail.com。

◆ 01 **** root run-parts /etc/cron.hourly, 这个是定期执行的任务内容,root 代理执行这个任务的身份


为 root,当然也可以改为其他的身份。而 run-parts 后面接的是/etc/cron.hourly 这个目录,意思是每个小
时的第一分钟,系统会以 root 的身份去/etc/cron.hourly 这个目录下寻找所有可以执行的文档, 如果用户
需要每小时执行一次的程序都可以放到这个目录下。

此外,/etc/crontab 这个文档支持两种下达任务的方式,一种是直接执行一个指令,另一种则是执行
一个目录下的所有指令,例如:

0 5 *** root/etc/init.d/resin restart

每天的五点以 root 的身份重启一遍 resin:

*/20 **** root run-parts/root/runcron

建立一个 runcron 目录,将需要每隔 20 分钟执行一次的程序放到该目录下,系统就会以 root 的身份

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


经验技巧

每 20 分钟执行一下该目录中的所有程序。

atd 执行单一定期任务

前面介绍了通过 cron 服务执行循环的定期任务,但有时并不需要循环的去执行一个同样的任务,而


只需要执行一次这个任务就让它消失,Linux 同样的为用户提供了这样的服务 atd,大多数的 Linux 发行版
并没有启用它,用户必须手动开启:

#/etc/init.d/atd start

1.atd 的安全设置

既然是定期执行的任务,就必然需要写入档案,atd 服务是通过 at 命令记录定期任务的,而写入的档


案则放置在,var/spool/at 目录下,一旦通过 at 命令下达了定期任务,那么这个任务就会在排序中等待执
行。

当然,出于安全原因的考虑,应该禁止不必要的用户使用这个服务,很多黑客入侵 Linux 主机后,就


是将木马后门程序通过 at 命令写入到排序中,和 cron 服务同样的,atd 服务也可以利用/etc/at.allo 和/etc/
at.deny 这两个控制文档来限制 at 命令的使用。atd 服务首先搜索/etc/at.allow 这个控制文档,在此文档
中的账号才能使用 at 命令。如果没有/etc.allow 文档,则继续搜索/etc/at.deny 文档,在此文档中的账号
无法使用 at 命令。如果这两个文档都不存在,那么就只有 root 账号可以使用 at 命令了。

2.用 at 命令下达任务

atd 服务是通过 at 命令来下达任务的,at 的命令格式:

#at [-m]TlME

-m 参数的意思是当 at 下达的任务完成以后,将会以 E-mail 的方式通知使用者。TIME 为时间格式,


也就是定义在什么时间执行 at 下达的任务,时间格式的表达非常的灵活, 可以用 HH:MM 表示,就是
在今日的 HH:MM 时刻进行此项任务,比如 16:00;也可以用 HH:MM YYYY-MM-DD 表示,意思是强
制在某年某月的某一天某一时刻执行 at 下达的任务,比如:16:00 2006-3-8;还可以用 HH:MM
+number[minutes|hours|days|weeks]来表示,意思是在某个时刻以后的某个时刻执行这个任务,比如 now +
5 minutes。

讲了 at 的基本用法,在举例说明一下,加深下读者对其应用的理解:

#at now+10 hours


at>/etc/init.d/httpd restart
at> <EOT>

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


经验技巧

job 3 at 2006-03-11 17:20


当输入完一个任务以后回车然后输入“Ctrl+d” 就会出现<EOT>的字符,代表任务下达结束,上面这
个 at 命令是下达了一条从现在开始的 10 小时后重新启动 Apache 服务的任务。

#at 01:O0 2006-03-12


at>/bin/sync
at>sbin/shutdown-h now
at> <EOT>
iob 4 at 2006-03-11 17:30
细心的读者一定看出来了,at 还可以在一个任务重输入多个命令的。其实当执行 at 命令时,at 会自
动分配一个 bash Shell 让使用者下达命令,建议使用绝对路径来下达命令,不容易出问题。如果需要将执
行的结果输出到指定的邮箱,则可以使用 at-m 这个参数。

用 at 命令执行一个任务还有个优点就是它在后台执行的,读者经常就遇到在远程连接到服务器上进
行一些操作,操作还没完毕,突然网络断开了,那又只有重新登录服务器进行同样的操作,过程非常繁
琐,而使用 at 命令下达任务后就可以立即断开于服务器的连接,而并不怕网络的不稳定给执行程序带来
的影响,实在是管理员进行服务器维护时进行长时间操作中达命令的不二选择。

3.移出下达的任务

如果在任务下达后发现下达的任务出错了或者需要取消已下达的任务时,atd 服务为使用者提供了 atq


和 atm 这两个命令来实现任务的移出。atq 是列出已下达的任务,atrm[jobnumber]是移出已下达的任务。
举例说明下这两个命令的用法:

#atq
4 2006-3-11 17:3O a root
atq 列出通过 at 下达的任务的,上面显示出来的意思是在 2006 年 3 月 11 日的 17:30 下达了一条任务,
下达者为 root,该项任务的工作编号为 4。

#atrm 4

移出工作编号为 4 的任务。结合 atq 和 atrm 两个命令实现对下达任务的删除是不是非常的简单。

通过 cron 和 atd 服务不仅能实现一些有趣的操作,而且能简化对整个 Linux 系统的管理。笔者个人感


觉完全胜过 Windows 的计划任务,操作非常方便,可定制性和扩展性都非常强。其实 Linux 下有许多服
务和小工具,能简化对系统的操作, 当用户发现并掌握了这些服务和工具的用法后,一定能深刻体会到
Linux 的实用性和高效性的。

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


经验技巧

RPM 深入应用

PHPChina 肥同小可

RPM(Red Hat Package Management,Red Hat 软件包管理)提供了一种构架,在这种架构下,可以


在 Red Hat Enterprise Linux、Fedora Project、SuSe Linux Enterprise、CentOS、Mandriva Linux 等基于 RPM
系统的 Linux 发行版本上实现对软件包的管理。

RPM 从某种意义上来讲有点像计算器,它具备众多实用的功能,但大多数人只使用它来对软件包进
行安装、升级、卸载,就好像大多数人只用计算器计算加减法一样。然而,如果多深入了解 RPM 一点,
就会发现它的查询、校验等功能可以做更多软件包维护管理、系统故障排除、文件安全性检测等工作。

RPM 将所有的安装软件信息记录到 RPM 数据库中,存放于系统的/var/lib/rpm 目录下,可以利用


RPM 数据库对系统中已安装软件包进行查询、校验等操作。本文结合作者实际工作中的案例,介绍几个
RPM 的深入应用,希望能够对 Linux 的初学者了解 RPM 有所帮助。

查询软件包帮助信息

在一次讲解 Vim 应用的课程中,学生问了一个这样的问题:“在 Vim 的配置文件中如何注释?”。


Vim 的配置文件存放于用户的宿主目录下,缺省文件名为“.vimrc”,可以写入“set nu”等设置命令,问题
是写入到此配置文件的命令如何注释使其不生效。一般来讲 Linux 系统或系统软件的配置文件可以在行首
使用符号“#”来注释,可是当用“#”注释了 Vim 配置文件保存退出后,编辑文件发生了这样的情况:

# vi /etc/inittab
Error detected while processing /root/.vimrc:
line
1:
E488: Trailing characters: # set nu
系统提示错误,所以“#”并不是 Vim 的有效注释符号。

诸如此类问题要如何查询得到结果,以下给出一个操作步骤的示例:

思路:Linux 中安装的软件包大多都包含应用示例或说明文档,可以查找到其内容,就可以知道此问

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


经验技巧

题的答案。

1)查找系统中所有 Vim 的安装包

# rpm -qa | grep vim


vim-minimal-7.0.109-3
vim-common-7.0.109-3
vim-enhanced-7.0.109-3
2)查询安装包的内容,查找是否有应用示例文件,看英文含义,“minimal”为最小应用软件包,
“common”为通用的基础软件包,“enhanced”为增强功能的软件包,所以先查看“vim-common”软件包
安装到系统中的文件是否有示例文件(如含关键字“example”或“sample”的文件):

# rpm -ql vim-common | grep example


/usr/share/vim/vim70/gvimrc_example.vim
/usr/share/vim/vim70/macros/urm/examples
/usr/share/vim/vim70/vimrc_example.vim
根据查找到的文件名称,判断“vimrc_example.vim”应为 Vim 配置文件示例,查看其内容:

# head -4 /usr/share/vim/vim70/vimrc_example.vim
" An example for a vimrc file.
"
" Maintainer:
Bram Moolenaar <Bram@vim.org>
" Last change:
2006 Aug 12
当看到此文件中“作者”、“最后更新日期”等信息前面的双引号,我们就已经清楚了它一定就是
Vim 配置文件的注释符号!

这是一个在应用 Linux 中碰到的问题,很有代表性,像最常见的配置网络服务器(如 DNS、DHCP


等),查找它们的配置文件示例,都可以采用类似方法。解决此类问题要多利用系统软件本身的帮助信
息,使用 RPM 查询命令解决问题。

RPM 软件包校验

RPM 使用“-V”选项进行校验,可以根据 RPM 数据库对比系统所有文件属性(大小、日期、所有者、


md5sum 值等),列出不同之处。如果执行没有输出,表示自从软件包安装之日起就没有发生过任何变化。

RPM 检测结果中包含系统上每个文件的八个属性,每个属性表示如下:

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


经验技巧

S:文件大小被改变

M:文件的权限或文件的属性被改变

5:md5 校验值被改变(表示文件内容被改变)

D:设备编号被改变

L: 链接属性被改变

U:文件所有者被改变

G:文件所属组被改变

T:文件的时间戳被改变

校验软件包 openssh-server 示例:

# rpm -V openssh-server
S.5....T c /etc/ssh/sshd_config
执行结果表示软件包 openssh-server 的文件/etc/ssh/sshd_config 文件大小被改变了(如添加或删除了字
符)、文件内容被改变了(注意:内容改变和文件大小改变不同,因如果只将文件中某个字符替换为另
一个字符,文件大小不会有变化,但是内容变了)、时间戳被改变(最后修改时间变了)。如果校验的
文件变更在预料之中,那么就没有什么大问题,但如果是非预期的,是否被入侵了呢?这一点非常值得
注意。

检测系统上的所有软件包(及其所有文件),可以执行:

# rpm -Va

此命令需要占用大量系统资源,所以一般将 RPM 检测的输出发送到 grep 中以便进行过滤,如只检测


丢失的文件:

# rpm -Va | grep missing

或者,限制只输出文件路径中有字符串 bin/的命令文件:

# rpm -Va | grep ’bin\/’

如果一个或多个重要的命令文件发生了变化,就可以检测系统是否被攻击。黑客侵入系统后,会更
改或替换如/bin/vi、/bin/login、/usr/bin/passwd、/bin/ps 等命令,如将/bin/vi 命令设置 SetUID:

# ls -l /bin/vi
-rwsr-xr-x 1 root root 594740 Sep 29
2006 /bin/vi

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


经验技巧

则以后任何用户登录系统,都可以使用/bin/vi 更改所有文件(包括/etc/passwd、/etc/shadow 等),关


于 SetUID 概念请参见其他资料。

系统故障排除

若 Linux 系统上的某些软件不能正常运转,就需要查看最近添加或升级软件是否是问题所在(类似
Windows 系统发生因安装、升级软件或补丁包,导致系统无法正常引导,在安全模式修复的情况),使
用“--last”选项以安装的时间次序列出 RPM 软件包(从最近安装的软件包开始),针对问题进行故障分
析。

# rpm -qa --last


bind-chroot-9.3.2-41.fc6
Sat Apr 14 08:37:49 2007
samba-swat-3.0.23c-2
Sat Apr 14 06:51:04 2007
xinetd-2.3.14-8
Sat Apr 14 06:50:53 2007
……
如果某个服务启动出现问题,如:

# service sshd start


Starting sshd: /etc/ssh/sshd_config: No such file or directory
[FAILED]
类似的问题如何解决,请参考以下步骤:

1)如果报错信息详细报告了服务哪一个文件丢失,则只需要针对此文件恢复即可;如果报错信息不明确,
可以使用“rpm -V”命令进行检测:

# rpm -V openssh-server
missing
c /etc/ssh/sshd_config
结果中出现“missing”标示,即可判断它对应的服务配置文件丢失。如果有此文件的备份则进行恢复
即可,如果没有备份请参考第二步。

2)有两种方法可以恢复此文件,一种是覆盖安装此文件对应的 RPM 软件包,如果不确定丢失文件所属


软件包可以通过以下命令查询(即便文件丢失,但是因为 RPM 数据库有记录,所以依然可以查询到结
果):

# rpm -qf /etc/ssh/sshd_config

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


经验技巧
openssh-server-4.3p2-10
然后执行命令:

# rpm -ivh --replacepkgs /mnt/cdrom/Fedora/RPMS/openssh-server-4.3p2-10.i386.rpm

即可从光盘覆盖安装此 RPM 包,恢复丢失文件。

另一种方法是把 RPM 包中对应的文件提取出来,拷贝到原所在目录,执行命令:

# rpm2cpio /mnt/cdrom/Fedora/RPMS/openssh-server-4.3p2-10.i386.rpm | cpio -idv ./etc/ssh/sshd _config

# cp etc/ssh/sshd_config /etc/ssh/

通过使用 rpm2cpio 命令可以将 RPM 软件包转换成 cpio 格式,cpio 是一个标准工具,它用于创建软件


档案文件和从档案文件中提取文件。其中选项“i”表示提取文件、“v”表示指示执行进程、“d”表示根据
包中文件原来的路径建立目录,如果需要保持原文件的更新时间还可以增加选项“m”。

注意此命令执行时不能将文件直接恢复至/etc/ssh 目录,只能提取到当前目录下,且恢复的文件名称
所在路径要写完整的绝对路径(./etc/ssh/sshd _config)。提取文件成功后,将其复制到/etc/ssh 目录下即可。

RPM 数据库问题

有时 RPM 数据库也会出现故障,其结果是当安装、删除、查询软件包时,请求无法执行,此时需要
重建数据库。

首先,删除当前的 RPM 数据库:

# rm -f /var/lib/rpm/_db.*

重建数据库:

# rpm --rebuilddb

这一步需要花费一定的时间来完成。

黑客侵入系统后,有时为混淆管理员视线,避免管理员通过 RPM 校验功能检测出问题,会更改 RPM


数据库(理论上来讲,系统被入侵后,一切都将不再可信),此时我们可以按照以下步骤对文件进行检
测:

1)对于要检查的文件或命令,找出它属于哪个软件包:

# rpm -qf /etc/rc.d/init.d/smb


samba-3.0.23c-2
2)使用--dump 选项查看每个文件的信息,使用 grep 命令提取对应文件信息:

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


经验技巧
# rpm -ql --dump samba| grep /etc/rc.d/init.d/smb
/etc/rc.d/init.d/smb 2087 1157165946 b1c26e5292157a83cadabe851bf9b2f9 0100755 root root 1 0 0 X
其中:

“2087”为文件中最初的字符数

“b1c26e5292157a83cadabe851bf9b2f9”为 smb 文件内容的 md5 校验值

“0755 root root”为文件权限及所有者、所属组

3)接下来检查实际的文件,看内容是否被更改过:

# ls -l /etc/rc.d/init.d/smb
-rwxr-xr-x 1 root root 2087 Sep
2
2006 /etc/rc.d/init.d/smb
# md5sum /etc/rc.d/init.d/smb
b1c26e5292157a83cadabe851bf9b2f9
/etc/rc.d/init.d/smb
检测文件大小、所有者、所属组、权限、md5 校验值是否匹配。

4)此例子中 smb 文件与--dump 选获得项信息匹配,如果确信 RPM 数据库可能遭到修改,就要基于从光


盘或者其他值得信赖的来源处获得 Samba RPM 文件进行检查,如:

# rpm -ql --dump -p /mnt/cdrom/Fedora/RPMS/samba-3.0.23c-2.i386.rpm | grep /etc/rc.d/init.d/smb


warning: samba-3.0.23c-2.i386.rpm: Header V3 DSA signature: NOKEY, key ID 4f2a6fd2
/etc/rc.d/init.d/smb 2087 1157165946 b1c26e5292157a83cadabe851bf9b2f9 0100755 root root 1 0 0 X
如果得到的结果与基于 RPM 数据库运行的命令结果不同,就可以判断一定是数据库被更改,需要修
正文件错误和系统漏洞,重建 RPM 数据库。

检查软件包的脚本

很多 RPM 软件包都包含脚本,包括在安装、卸载、升级软件包过程中要运行的脚本,以及安装期间
满足某些条件时将触发的触发器脚本。这些脚本对于了解 Linux 系统管理、了解软件的应用很有帮助。

使用带“--scripts”查询选项的 rpm 命令来查看安装、卸载软件包前后要运行的脚本。举例如下:

# rpm -q --scripts openssh-server


preinstall scriptlet (using /bin/sh):
/usr/sbin/useradd -c "Privilege-separated SSH" -u 74 \
-s /sbin/nologin -r -d /var/empty/sshd sshd 2> /dev/null || :

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


经验技巧
postinstall scriptlet (using /bin/sh):
/sbin/chkconfig --add sshd
preuninstall scriptlet (using /bin/sh):
if [ "$1" = 0 ]
then
/sbin/service sshd stop > /dev/null 2>&1 || :
/sbin/chkconfig --del sshd
fi
……
这个例子显示了 openssh-server 软件包中包含的脚本,安装 openssh-server 软件包之前(preinstall),
调用 useradd 命令添加 sshd 用户;软件包安装后(postinstall),调用 chkconfig 命令打开 sshd 服务(--add
sshd);卸载软件包之前(preuninstall),停止 sshd 服务(service sshd stop)并删除服务(chkconfig --del
sshd)……

触发器脚本在安装期间如果条件满足就会运行。如在升级的时候,如果软件包有不同的安装动作发
生,触发器脚本将特别有用。

# rpm -q --triggers openssh-server


triggerun scriptlet (using /bin/sh) -- ssh-server
if [ "$1" != 0 -a -r /var/run/sshd.pid ] ; then

touch /var/run/sshd.restart
fi
……
查看 RPM 脚本信息对于了解系统软件的安装、卸载时所做的操作,对出现问题时的解决,将会有更
清晰的思路。

本文所有操作在 Fedora Core 6 系统上测试通过,获得更多 RPM 使用信息请访问 RPM 项目网站:


http://www.rpm.org ,RPM 软件包下载网站 http://www.rpmfind.net 可获得各种 Linux 发行版本的 RPM 软
件包。

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


经验技巧

linux 下如何 mount 网络目录?

Linuxpk.com cnangel

在 linux 下怎么 mount 网络硬盘或者目录呢?

这里提供一个工具:fuse

从 fedora8 安装如下:

yum install fuse-sshfs-1.9-2.fc8 fuse-libs-2.7.3-2.fc8 fuse-smb-0.8.7-1.fc8 fuse-2.7.3-2.fc8 fuse-


devel-2.7.3-2.fc8 fuseiso-20070708-2.fc8

完成对 fuse 的安装;该软件也是开源的,若想从源码安装,请参观官方开源网站:

http://fuse.sourceforge.net/

1、如何 mount?

# sshfs [user@]host:[dir] mountpoint

或者使用如下命令:

# sshfs [user@]host:[dir] mountpoint -o allow_other

2、如何卸载?

# fusermount -u mountpoint3

注意事项有些平台的需要进行内核装入 fuse 才能使用,所以编译时要么使用该 fuse 内核版本的包安


装,或者源码和内核一起编译安装,对于有些发行版本,可以采用如下方式:#modprobe fuse。加载一下
fuse 模块,然后 mount。

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


企业应用

企业应用

知己知彼,百战不殆。对于一个网站管理者来说,清楚了解自己网站的状况,是十分重
要的。本文介绍的 AWStats 能通过对各种服务日志的分析,将结果整理为以 html 形式显示的
图表,帮助管理者进行正确的决策。

使用 AWStats 分析站点状况
岑锐坚

对于一个网站管理者来说,了解自己网站的访问量、独立 IP 数、用户访问的来源等信息是十分有必
要的。有多少用户从首页进入?有多少用户通过搜索引擎进入?哪个关键字是被匹配最多的?如果有了
这些信息,管理者能更清晰的了解自己网站的状况,并对网站内容进行更有效的调整,也可以让广告的
投放更有效率。
目前获取网站访问统计资料通常有两种方法:一种是采用第三方提供的网站流量分析服务;另一种
是通过在自己的网站服务器端安装统计分析软件来进行网站流量监测。
第三方提供的网站流量分析服务有很多,一般是提供一段 javascript 代码让网站管理员将其放在要统
计分析的页面上,当用户访问到该页面的 javascript 代码时,即在数据库中进行一次记录。常用的第三方
提供的网站流量分析服务有 Google Analytics、performancing 的 metrics 等。第三方提供的服务比较方便、
灵活,能针对特定的页面进行分析和统计,其缺点是由于嵌入了第三方额外的链接,可能会导致页面变
缓慢。而且免费的第三方分析服务功能比较有限,商业的服务则价格不菲。
通过在自己的服务器上安装日志分析软件,对网站状态进行分析是一个不错的办法。目前开源的日
志分析软件有很多,比如 awstat、webalizer、Analog 等。相比起在页面中嵌入代码的方式,由于每条日志
都是有效的点击的记录,所以分析服务器日志的方式更准确和详细,而且是它是可控的。这种方式的缺
点是需要开启和接触到服务器日志,针对的是专业的人员。本文要介绍的就是日志分析软件中的新秀,
AWStats。

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


企业应用

日志分析利器 AWStats
AWStats 是一个基于 perl 的开源软件,它能对 web、ftp 或邮件等各种服务的日志进行统计分析,
并产生 html 页面和图表。AWStats 可以分析的日志格式包括 Apache 的两种日志格式(NCSA
combined/XLF/ELF 或 common/CLF)、WebStar、IIS (W3C) 、 wap 服务、流媒体服务、邮件服务和一些
ftp 服务的日志。
相比起其它的开源日志分析软件,AWStats 具有鲜明的特点:
 界面友好、美观,可以基于浏览器调用相应的语言,包括简体中文;
 输出项目非常丰富,比如对搜索引擎和搜索引擎机器人的统计是其它软件少有的;
 入手简单,首次使用只需要修改配置文件的 4 个地方即可;
 良好的扩展性,有不少针对 AWStats 的插件;
 缺点是分析日志的速度稍慢,相比其它基于 C 的软件,AWStats 的分析的速度无可避免会慢一点;
具体的 AWStats 和其它日志分析软件的对比,可以在以下网址里找到:
http://awstats.sourceforge.net/docs/awstats_compare.html
通过 AWStats,我们可以看到什么数据呢:

参观人次—访问网站的 IP 总数;
参观者—访问网站的独立 IP 数;
网页数—也就是常说的 pv 数,是访问所有网页的次数;
文件数和字节;
每个 IP 的访问次数;
访问的文件类型;
参观所花费的时间;
参观者从什么 URL 链接过来的;
操作系统、浏览器;
搜索引擎机器人的访问次数;
从哪个搜索网站跳转过来的次数等,如图 1:

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


企业应用

图 1 统计数据

AWStats 的安装

AWStats 的安装很简单,其实就是将 AWStats 的 perl 脚本拷贝到 apache 的 CGI 目录。安装的环境是


能支持 perl 的操作系统加上 apche 即可,一般的 linux 和 bsd 默认已经带有 perl。如果需要在 windows 的
IIS 中安装 AWStats,需要设置 windows 的 perl 环境。本文中举例使用的环境是 Debian 加上 apache,分析
的是 apache 的 combined 类型的日志。

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


企业应用

从 AWStats 官方网站(http://awstats.sourceforge.net)下载最新版本,当前最新的稳定版本是 awstats-6.5。


下载并解压后我们会看到 AWStats 包含如下几个文件和文件夹:
docs
README.TXT
tools
wwwroot

其中 docs 文件夹里面是一些 html 格式的文档,里面有 AWStats 的安装和使用方法;


README.TXT 是该软件的介绍和版权信息等;
tools 文件夹里面是一些脚本和配置文件,比如批量 update 的脚本、转换静态 html 文件的脚本、
httpd.conf 的配置文件等;
wwwroot 文件夹里面的文件是最重要的,包括了 AWStats 的主要程序。

wwwroot 文件夹里面又有 5 个子文件夹:awstats、css、js、icon、和 classes。


真正需要用到的只有 awstats 和 icon 文件夹。awstats 文件夹中是 AWStats 的主程序,而 icon 是
AWStats 的需要用到的一些图片和图标。如果我们可以控制服务器并且自己能更改 apache 服务的配置文
件,那么我们可以使用 tools 目录下面的 awstats_configure.pl 脚本来进行安装。awstats_configure.pl 脚本是
一个交换式的脚本,运行脚本后会自动检查安装目录和权限等,一般情况下只需要指出 apache 的配置文
件 httpd.conf 的位置即可完成安装。
如果我们使用的是虚拟主机,自己并没有完全控制 apache 的权限,那么我们只需要将
wwwroot/awstats 文件夹放有 cgi 权限的目录下,比如 http://www.joecen.com/awstats,然后将 wwwroot/icon
目录拷到你到网站的根目录下比如 http://www.joecen.com/icon 即可完成安装。

配置与使用 AWStats
接下来我们为站点建立配置文件,在 wwwroot/awstats/目录下有一个名叫”awstats.model.conf”的配置
文件,将它改为“awstats.www.joecen.com.conf”。然后编辑该文件,有几个选项是必须要修改的:
1、LogFile
该选项指定了日志文件的路径和名称,比如:
LogFile="/home/apache_logs/access.log.2006-07-06"
也可以用动态的变量指定:
LogFile="/home/apache_logs/access.log.%YYYY-24-%MM-24-%DD-24″
这样,如果 apache 做了 rotate,就可以自动取到上一天的日志了。
另外如果日志文件是压缩了的,我们也可以在这里直接使用命令来进行读取,而无需另外解压,比

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


企业应用

如:
LogFile="gzip -d </var/log/apache/access.log.gz |"
2、LogType=W
该选项指定我们要分析什么类型的日志;
W – web 服务日志
S – 流媒体服务日志
M – 邮件服务的日志
F – ftp 服务的日志
3、LogFormat=1
指定使用的日志的格式。
1 – NCSA combined/XLF/ELF 格式,也就是 apache 中的 combined 格式的日志;
2 – IIS 或 ISA 格式;
3 – WebStat 格式;
4 – NCSA common/CLF 格式,也就是 apache 中的 common 格式的日志;
除了这 4 种默认的日志格式外,我们还可以自己定义要分析的日志格式。比如 IIS 和 apache 就可以自
己对日志进行定义,要分析这样的日志我们必须使用与其相对应的格式,如:
LogFormat = "%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot"
4、SiteDomain=”www.joecen.com”
指定站点的名称。
5、HostAliases=”localhost 127.0.0.1 REGEX[joecen\.com$]”
如果站点有其它的域名,希望数据能统计在一起的话,也可以在这里加进来,会一并计算入内。
6、DirData=”/data”
指定存放数据文件的目录,默认是当前目录,为了与其它文件区别,我将其放到一个新的“/data”目
录中,注意该目录需要运行脚本的用户有写入权限。awstats 默认按照月来存放文件,也就是说每个月一
个文件(注意必须使用绝对路径)。
上面前四项配置是必要的配置,只需要设置好前四项 AWStats 即可以正常工作。该配置文件中还有
很多选项,可以做一些细微的调节或者添加插件等,在配置文件中都有详细的介绍。
设置好配置文件后,接下来是正式对系统日志进行分析,运行命令:
/path/to/awstats-6.5/wwwroot/awstats/awstats.pl -config=www.joecen.com -update
awstats.pl 脚本是 AWStats 最重要的一个脚本,使用它可以进行日志的分析以及查看分析结果等操作。
上面命令的意思是对 www.joecenn.com 域名的日志进行“update”操作,awstats.pl 会在当前目录查找名称
为“awstats.www.joecen.com.conf”的配置文件,并根据配置文件中的选项对日志文件进行分析。最后将分
析的结果按照月份放在 data 目录中(根据配置文件的设置),比如 2006 年 10 月份的文件

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


企业应用

“awstats102006.www.joecen.com.txt”。
将该命令写入 crontab 中,每天自动进行日志的分析:
* 1 * * * (/path/to/awstats-6.5/wwwroot/awstats/awstats.pl -config=www.joecen.com -update)
这样,每天晚上一点钟会自动运行脚本,对 www.joecen.com 的网站日志进行分析。

查看结果:
查看数据也是使用 awstats.pl 脚本,在浏览器中键入:
http://www.joecen.com/awstats/awstats.pl?config=www.joecen.com
其中“config”参数指定要查看的域名。查看的部分界面如图 2、图 3:

图 2 摘要

图 3 月历史统计

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


企业应用

加入 IP 插件
AWStats 可以使用 GeoIP 的 IP 库和 perl 库,加入该插件能在 AWStats 中统计访问者的国籍以及城市。
从 http://www.maxmind.com 中下载需要安装两个软件包:C 库 GeoIP C 和 Perl 库 GeoIP Perl ,并解包。
建议使用的“GeoIP-1.3.17”和“Geo-IP-1.27”两个版本。

安装 C 库:
cd GeoIP
./configure
make
make install
要注意的是,GeoIP 需要 zlib 库支持,否则 configure 不能完成。请先确认系统中已经安装了 zlib 库。

安装 perl 库:
cd Geo-IP
perl Makefile.PL
make
make install
从 http://www.maxmind.com 下载免费的 City 的 IP 文件,解压保存为
“/usr/GeoIP/share/GeoIP/GeoLiteCity.dat”。

修改 atstats.www.joecen.com.conf 配置文件,将 Plugin:GeoIP 和 Plugin: GeoIP_City_Maxmind 打开,如:


LoadPlugin=”geoip GEOIP_STANDARD /usr/GeoIP/share/GeoIP/GeoIP.dat”
LoadPlugin=”geoip_city_maxmind GEOIP_STANDARD
/usr/GeoIP/share/GeoIP/GeoLiteCity.dat”

这样就可以在 awstats 里面看到来源 IP 的国家和城市的信息,如图 4。

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


100
企业应用

图 4 显示国籍和城市信息

上述的操作如果没有 root 权限,,则需要在安装 GeoIP 的时候加上“prefix”参数,将其安装在指定的


路径上。
因为我们使用的是 maxmaind 公司免费的世界城市 IP 的数据,所以数据并不算很完整。有需要的话
可以到 maxmaind 公司购买收费版本的数据。

AWStats 是一个强大而简洁的日志分析工具,它的分析和统计结果客观可靠,能帮助网站管理者作出
正确的决策。AWStats 的功能和插件还有很多,由于篇幅所限,本文也不一一赘述,读者可以到 AWStats
的官方网站上查看或到网上搜索相关的文章。

资源
http://awstats.sourceforce.net,awstats 官方网站
http://www.maxmaind.net GeoIP 的开发公司

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


101
企业应用

Snort 是开源世界最著名的网络入侵监测系统。本文将对 Snort 的组成、Snort 规则的结构进行简要的


介绍,使读者对 Snort 的基本原理有所了解;同时结合应用案例说明 Snort 在互联网环境的应用的基本方
法及 Snort 管理工具 BASE。

Snort 规则及预处理器

凌晓明

Snort 是一个开放源码的跨平台、轻量级的网络入侵检测软件,可以免费使用。Snort 采用基于规则的


网络信息搜索机制,对数据包进行内容的模式匹配,从中发现入侵和探测行为。Snort 的发行版可以在其
官方网站 http://www.snort.org 获得,目前最新的版本为 2.6.0。本文对 Snort 进行概要性的介绍,并通过示
例说明 Snort 的基本应用。

Snort 的构成

Snort 在逻辑上分成多个部件,这些部件共同工作,检测特定的攻击,并产生特定格式的输出。一个
基于 Snort 的 IDS 包含包解码器、预处理器、探测引擎、日志和告警系统、输出模块等主要部件,如图 1
所示。任何来自 Internet 的包到了包解码器,都会被送到输出模块,选择被丢弃或产生日志和告警。

图 1 Snort 部件关系图

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


102
企业应用

1.包解码器

包解码器从不同的网络接口中获取包并准备预处理或送到探测引擎。网络接口可能是以太网、SLIP
和 PPP 等设备。

2.预处理器

预处理器是 Snort 在探测引擎做出一些操作发现数据包是否用来入侵之前排列或修改数据包的组件和


插件。一些预处理器也可以通过发现数据包头部异常来执行一些探测工作,并产生告警。预处理器也进
行数据包分片的组装。

3.探测引擎

探测引擎是 Snort 中最重要的部分,其作用是探测数据包中是否包含着入侵行为,探测引擎通过


Snort 规则达到目的。规则被读入到内部的数据结构或链表中,并与所有的数据包比对。如果一个数据包
与某一规则匹配,就会有相应的动作(记录日志或告警等)产生,否则数据包就会被丢弃。

Snort 可以剖析数据包并把规则应用在数据包的不同部分,包括 IP 头部、传输层头部、某些应用层头


部及包载荷。如果解码器不支持,应用层头部信息也可以用位偏移的方式实现。对包载荷的解析意味着
Snort 可以用规则来寻找所传输数据中的字符。

4.日志和告警系统

依据在数据包中所找到的数据特征,一个包可以用来记录行为或产生告警。日志可以保存为简单的
文本文件、tcpdump 格式文件或其他格式的文件。

5.输出模块

输出模块或插件可以根据指定的保存日志和告警系统产生的输出信息方式来执行不同的动作。基本
这些模块用来控制日志和告警系统产生的输出信息格式。根据配置,输出模块可以将告警日志记录到文
件和发送 SNMP trap,记录日志到 MySQL 或 Oracle 数据库、产生 XML 输出、修改路由器或防火墙配置、
发送 SMB 消息等。其他一些工具可以用来发送如 E-mail 信息或 web 页面浏览等格式的告警。

Snort 规则概述

Snort 采用基于规则的网络信息搜索机制,对数据包进行内容的模式匹配,从中发现入侵和探测行为。

1.Snort 规则的组成

所有的 Snort 规则都可以分为两个逻辑组成部分:规则头部和规则选项,如图 2 所示。

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


103
企业应用

图 2 Snort 规则基本结构

规则的头部包含规则所做动作的信息,也包含与包所比对的一些条件。选项部分通常包含一个告警
消息及包的哪个部分产生的这个消息。一条规则可以用来探测一个或多个类型的入侵活动。Snort 规则头
部的主要结构如图 3 所示。

图 3 Snort 规则头部结构

规则头定义了规则的动作、所匹配网络报文的协议、源地址、目的地址、源端口及目标端口等信息;
规则选项部分则包含了所要显示给用户查看的警告信息及用来判定此报文是否为攻击报文的其他信息。

例如这样一个规则,当探测到 TTL 为 100 的 ICMP ping 包的时候,就会产生如下告警信息:

alert icmp any any -> any any (msg: "Ping with TTL=100"; \ttl: 100;)

括号之前的部分叫做规则头部,括号中的部分叫做规则选项。规则选项并不是必需的,只是用来明
确定义出表示某种攻击、系统需要采取行动的报文。

2.规则结构

按照分类,所有的规则都放在规则文件中(*.rules)。Snort 将规则组成一个二维的链表结构,主要
分为两个部分:链表(Chain Headers)和链表选项(Chain Option),如图 4 所示。在链表头中包含多个
规则中的共同属性,而不同的检测属性选项则包含在不同的链表选项中。所有的链表头统称为
RTN(Rule Tree Node),所有的链表选项统称为 OTN(Option Tree Node)。

图 4 Snort 规则链

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


104
企业应用

3.规则处理

对每一个数据包,系统都会在二维方向对此规则进行递规搜索工作。数据包首先在 RTN 上进行匹配,


只有与 RTN 匹配后才会与 OTN 匹配。当发现数据包与某个 RTN 匹配后,系统就会将该数据包依次与此
RTN 下的所有 OTN 进行匹配。

Snort 检测引擎的编程采用“插件”模式,即各种检测功能都是通过各种插件模块完成。这样有利于
用户加入自己编写的检测模块增强系统功能或定制用户特殊需要的系统。每个插件都会与对应的规则关
键字绑定,以保证执行检测引擎时被正确调用。

如果发现规则检测不能满足特殊需要时,Snort 则通过预处理器这个特殊的插件对报文进行处理。预
处理器在检测引擎之前,报文解码之后运行。其有检查某个分片报文大小、处理 HTTP URI 字符串、完成
IP 分片重组、TCP 流重组及状态分析等功能。

Snort 应用与管理

1.Snort 的安装与部署

Snort 是跨平台的 IDS,其官方网站提供了多种操作系统下的安装包,本文将介绍如何使用源代码在


Linux 系统中安装 Snort。同其他用源代码发行的软件安装方式类似,首先解压缩源代码压缩包并编译安
装:

tar zxvf snort-2.6.0.2.tar.gz


./configure
Make
Make install
其中 configure 命令有很多可选参数,用来对 Snort 程序进行配置,比如对 MySQL 数据库的支持需要
参数-with-mysql 等,参数列表可以用下面的命令查看:

./configure --help

安装成功后,需要对 Snort 的配置文件 snort.conf 进行调整,Snort 启动的时候将读取这个文件对各个


组件进行配置,包括变量定义、预处理器、输出模块、规则文件等。Snort 规则一般放置在.rules 文件中,
规则文件在 snort.conf 中指定。

完成这些工作后,就可以运行 Snort 了,例如将 snort.conf 放置在/etc/snort 目录下,可以用如下的方


式运行 Snort:

snort -c /etc/snort.conf -i eth0

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


105
企业应用

其中参数开关“-c”用来指定配置文件,如果不指定则在当前目录中寻找,参数开关“-i”用来指定
Snort 运行的网络接口,这个参数也是可选的。需要注意的是,在交换环境下,Snort 探测器应当连接到镜
像端口或 spanning 端口才能正常监听。如果运行时出现错误,Snort 一般会显示错误信息,用于错误排查。

2.Snort 规则应用示例

随 Snort 程序发行的有一系列预定义的规则,如何从中选择适用于应用环境的规则,并定制适当的规
则,是 Snort 应用中最大的难题,需要有着比较深厚的网络安全知识背景。本文通过一些示例解决一些常
见的问题。

每个具体的应用环境都有其自身的特点,因此也不存在能够解决所有问题的规则集合。但有些问题
是几乎所有的网络环境都可能会面对的。下面的规则用来检测类似于尼姆达病毒的 UNICODE 攻击,其
特征是请求执行 HTTP 服务器上的 cmd.exe:

alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"WEB-IIS cmd.exe


access"; flow:to_server,established; content:"cmd.exe"; nocase; classtype:web-application-attack;
sid:1002; rev:6;)
另外的一个规则用来检测针对 SMTP 服务器攻击的恶意程序,如果网络中的非 SMTP 服务器却像
SMTP 服务器一样向外部的邮件服务器发送 E-mail,这个规则就会被触发:

alert tcp !$SMTP_SERVERS any -> !$SMTP_SERVERS 25 (msg:"Possible virus


Mailing";flags:A+;classtype:policy-violation;sid:11111; rev:1;)
这个规则是非常有用的,但要注意的是在被监控的网络中如果存在某些针对 SMTP 服务器的蠕虫病
毒,可能会产生大量的告警,因此建议在使用 Snort 时配置 threshold.conf 文件。

下面的规则在所监控网络中的 Web 服务器返回 403 错误时触发,这条规则可以检测对 Web 服务器的


试探性攻击,也可以用来定位 Web 应用程序错误。

alert tcp $HTTP_SERVERS $HTTP_PORTS -> $EXTERNAL_NET any (msg:"ATTACK-RESPONSES


403 Forbidden"; flow:from_server, established; content:"HTTP/1.1 403"; depth:12; classtype:attempted-
recon; sid:1201; rev:7;)
如果网络中的服务器并不是 Web 服务器,却频繁接收到各种 HTTP 请求,那么说明可能有网络扫描
或攻击尝试的存在,这时可以使用如下的一条规则过滤:

alert tcp any any -> !WEBSERVER any ( content: "GET"; msg: "Detected HTTP GET";)

合理使用 Snort 规则还可以监测对网络的滥用,例如 P2P 客户端的使用会大量消耗带宽资源,影响生


产环境的网络使用。下面的规则可以用来监测最常见的 P2P 软件 BitTorrent 的使用:

Alert tcp $HOME_NET any -> $EXTERNAL_NET any (msg:"Bit Torrent client usage"; content:"|00 00

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


106
企业应用
40 09 07 00 00 00|"; offset:0; depth:4; classtype: policy-violation; reference:url,
www.bleedingsnort.com/bleeding.rules; sid:10560; rev:1;)

3.Snort 预处理器应用示例

如本文前面的部分所述,Snort 预处理器可以在规则检测之前将数据包或网络应用的编码解码为规则
检测引擎所能够识别的明文。通过预处理器的使用,可以使 Snort 具有能够检测特定类型的攻击的能力。

Frag2 预处理器可以用来检测碎片攻击,比如利用 Teardrop 及 Jolt 等工具发起的 DoS 攻击。Frag2 预


处理器并不能够帮助 Snort 对数据包进行更深入的分析,但是可以用来调整探测引擎的性能。可以在网络
的核心或负载比较高的部分使用 Frag2 预处理器调低包处理的时间上限和缓存上限,例如:

# Default timeout 60 seconds and memory buffer of 4MB


Preprocessor frag2: timeout 15, memcap 2097152
下面的例子中对 Frag2 预处理器的配置可以用来检测网络探测工具的使用,例如 fragroute 和 hping:

preprocessor frag2: detect_state_problems

需要注意的是,在多数高速网络中这样的配置会产生大量的告警,因此 Snort 的默认配置中,这条配


置并没有启用。Snort 可以通过预处理器对 Telnet 等应用程序进行解码,从而使规则处理引擎能够分析相
关通讯的内容。Telnet 解码预处理器并没有可选的参数,但是其他的一些解码预处理器可能会因为操作系
统对协议的实现的不同,而必须配置相关的参数,比如 RPC 协议,如果只需要对 UNIX SUNRPC 的编码
进行解码,则需在 snort.conf 中进行如下的配置:

preprocessor rpc_decode: 111 32771

而如果对 Windows 中已分片的 135 端口的 RPC 通讯进行解码,需要在选项中加入额外的端口号码和


alert_fragmentation 的选项:

preprocessor rpc_decode: 111 32771 135 alert_fragmentation

但是上面的配置将大大增加 Snort 的开销,因此明智的做法是如果一个 RPC 通信流中包含多个包的时


候,就将其过滤。这时需要用到下面的选项:

no_alert_multiple_requests:
Preprocessor rpc_decode: 111 32771 no_alert_multiple_requests

4.Snort 管理工具 BASE

Snort 本身并不提供图形化的用户界面,但是有很多第三方的工具可以提供图形化的用户界面,使
Snort 更加易于管理和使用。

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


107
企业应用

BASE-Snort 基本分析引擎,是一个 Linux 操作系统下的 Web 界面的 snort 告警信息的图形化分析工具,也


是各种 Snort 管理工具中最为常用的一个。使用 BASE 除了需要 Snort 外,Linux 服务器上需要安装
Apache、PHP 和 MySQL。Apache、PHP、MySQL 的安装在此不再赘述,Snort 安装时需要选择-with-
mysql 选项。另外还需要在 Linux 服务器上安装 ADODB,JPGraph。

下载这些软件包并安装,根据环境的需要配置 snort.conf 文件。并将 snort 的启动命令加入到 rc.local


中,这样每次启动服务器时,Snort 会自动运行。

配置 Snort 的 MySQL 数据库,首先创建一个数据库,例如 snort,用 MySQL 命令行中的 source 命令


执行 Snort 安装包 schema 目录下的 create_mysql 脚本,创建 Snort 数据库所用的表。在 snort.conf 中配置
MySQL 相关的部分。编辑 base_conf.php"文件, 配置如下的变量值:

$BASE_urlpath = "/base";
$DBlib_path = "/var/www/html/adodb";
$DBtype = "mysql";
$alert_dbname = "snort";
$alert_host = "localhost";
$alert_port = "";
$alert_user = "snort";
$alert_password = "password_from_snort_conf";
$archive_dbname = "snort";
$archive_host = "localhost";
$archive_port = "";
$archive_user = "snort";
$archive_password = " password_from_snort_conf ";
$ChartLib_path = "/var/www/html/jpgraph-1.16/src";

完成以上步骤后,在浏览器输入 BASE 所在的位置,通过 Web 界面执行 BASE 的最后配置,如果前


面的步骤都正确执行,将会看到如图 5 的页面,通过这个界面可以直观的对 Snort 的告警进行查询和管理。

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


108
企业应用

图 5 Snort 管理工具 BASE 主页面

此外,由于 BASE 本身并不包含用户认证的机制,同时还能够直接对数据库进行操作,因此保护


BASE 目录的安全是必须的,这可以通过防火墙来实现,也可以通过 Apache 的用户认证来实现,在此不
再赘述。

目前 Snort 开源社区提供了已经配置好的 Snort+MySQL+BASE 的 Vmware 虚拟机,可以在 VmWare


的 ESX 3.X、WorkStation5.X 下运行,操作系统用的是 RedHat AS 的非商业化再发行版 CentOS 4.3,相关
文件可以在 Snort 官方网站首页下载。

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


109
混源新视界

混源新视界

开源既往不咎立新规 混源软件进退维谷
IT 时代周刊 龙真

与微软和系统制造商们的联盟将使自己遭受什么的惩罚?提心吊胆的 Novell 现在终于可以松下一口


气了。

  6 月初,在各商业软件巨头纷纷进入开源领域攻城略地的情况下,开源软件的“最高管理机构”——
自由软件基金(FSF)发布了新的授权草案。据悉,在这份名为《通用公共授权》第 3 版(GPLv3)的新草案实
施后,Linux 中很多核心代码的授权都将按照它的规定来执行。值得注意的是,新版草案中专门加入新规
定:如果任何厂商希望对客户提供专利权保护,那这种保护将自动延伸到其他任何使用该软件的消费者。

  正因为此,该草案一出笼即被业界解读为是专门针对不久前 Novell 与微软结成的联盟而来,因为它


实质上逼迫开源厂商否认微软声称拥有的开源专利权,否则他们将不可能继续获得 GPLv3 中包含的开源
代码。而依据这两家公司达成的联盟协议,商业软件巨头微软将作为 Novell 的分销商为其销售 SUSE
Linux 产品;作为回报,后者承认前者拥有的开源专利。

  据悉,协议签订后,Novell 依靠微软良好的渠道已经销售了数额巨大的开源产品,并在销售额上超
越了竞争对手 RedHat。同时,微软也依靠该协议的示范效应,与多家开源厂商签署了类似的专利权协议。

  新草案让形势变得急转直下。虽然草案的最终规定对 Novell 显示了宽容的态度,默许了它和微软的


既有合作,但草案严格限制了以后的类似交易。业内人士认为,开源阵营的这一“针对性”举措,将有
效遏制微软借口专利权主张在开源领域的进一步扩张,他们预测这家商业软件公司极可能放弃开源专利
权。

  Linux 阵营生变

  2006 年 11 月 2 日,Novell 和微软宣布了一系列合作协议。目的在于改善微软 Windows 系统与 Novell


公司 Linux 平台之间的互操作性,让两家公司的产品能够“在一起工作得更好”。

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


混源新视界

  让开源阵营方面不满的是,双方在协议中约定,互不向对方用户提出专利权主张,从而将非常敏感
的专利纠纷问题以协议的方式加以解决,让用户“用得放心”。这等于表明,作为传统 Linux 厂商之一的
Novell 接受了微软拥有开源专利权的观点。微软的这类主张此前长期受到了开源阵营的否认。

  此后,Linux 阵营反应强烈。除了 Novell 内部人士外,开源社区中大多数人,尤其是那些全力支持开


源,并将之视为信仰的人们,都坚决反对微软和 Novell 的协议,认为这是微软分化 Linux 阵营并各个击
破的阴谋。

  有意思的是,作为全球企业最重要的 Linux 和开源技术提供商,RedHat 证实,在和 Novell 签约前,


微软也曾找过他们谈及合作事宜,但遭到了拒绝。

  2007 年 5 月初,戴尔公司宣布将从微软手中购买 Novell 的企业服务器证书,以帮助企业客户实施


Linux。这标志着微软和 Novell 商业联盟开始获得主要系统制造商的支持。5 月底,包括华硕在内的数家
台湾电脑厂商也开始与 Novell 接洽。微软和 Novell 联盟短短一个月内迅速壮大,开源阵营的压力也与日
俱增。

  独立观察家认为,从 2006 年呈现的趋势来看,Linux 市场很可能会出现三足鼎立的状况:


RedHat、Novell 与微软、甲骨文。Linux 市场继续分裂的可能性正变得越来越大。

  尽管 Linux 阵营已显分化迹象,还是有业内人士表示乐观。他们认为随着微软等商业软件巨头的进入,


很可能成为 Linux 发展的一个转机。它们将很大程度上推动 Linux 的发展。北京中科红旗软件技术有限公
司代理总裁赵晓亮认为:“这对于 Linux 而言是好事,尽管每个公司都有着各自不同的商业目的。”

  开源阵营重创联盟

  商业软件巨头微软和开源阵营之间的关系一直处于微妙状态。出于对微软“垄断”形象的传统认知
和非理性的习惯性敌视,后者中的多数人对微软表现出了相当不友好的态度,以致它和 Novell 在合作伊
始,就成为了众矢之的。

  开源阵营的最终草案已经是第四个版本。此前,Novell 就草案中可能针对自己的惩罚性条款表现了
强烈担忧,但同时也表示不后悔和微软的合作。

  5 月底,Novell 提交给美国证监会的文件揭示这份草案有可能对其利益造成的巨大损害。Novell 指出,


“如果最终草案包含有与我们和微软所达成协议相冲突,或影响我们发布开源代码能力的条款,为了避
免使其专利协议扩大到更多的用户,微软可能不再销售 SUSE Linux 优惠券,我们也可能调整和微软之间
的关系。调整后的关系可能不如我们目前的协议这么有利,或者我们将限制在产品中包含开源代码的能
力,所有这些可能都将对我们的业务以及我们的运作成果产生负面影响。”

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


混源新视界

  而微软方面,也将不得不从和 Novell 的协议中清除 SUSE 分发的内容,这将严重损害试图劝说其他


开源代码厂商签署类似协议的努力。微软和 Novell 之间的商业联盟即使拥有了戴尔、华硕等主流系统制
造商的参与,也将难逃破产的命运。此外,这还损害了微软在少数大企业客户那里的良好形象,这位商
业软件巨人在劝说他们使用 SUSE Linux 上曾不遗余力。

  自由软件基金没有掩饰制定新规则的动机。这个条款就是打击微软对开源阵营的入侵,防止 Linux 阵
营中出现更多的叛逃者。他们还预计该版协议 30 天内即可定案。如果新草案按照当前的规定施行,它将
迫使微软要么放弃对 Linux 阵营的进一步入侵,要么放弃对它对 Linux 的专利声明。

  微软严辞谴责了自由软件基金的这个草案。不过,他们也是有备而来。早在 2004 年 11 月,微软


CEO 史蒂文·鲍尔默就曾在公开场合指出 Linux 侵犯了 228 项专利。近日,微软公司的律师布拉德·史密斯
在接受《财富》杂志采访时表示,包括 Linux 和 OpenOffice 在内的各种开源软件一共侵犯了微软公司的
235 项专利,其中 Linux 内核 42 项,OpenOffice45 项。微软的声明发出后,Linux 方面奋起反击。一些支
持 Linux 的巨头如索尼、RedHat、IBM、NEC、Sun 和飞利浦等,也都严阵以待。

  混源软件的尴尬

  GPL 打击的重点客观上也指向了“混源(mixed source)”软件。相对于开源软件和闭源软件(商业软件)


而言,它是兼有闭源软件和开源软件的一种混合体。Novell 在这一领域是当之无愧的领导者。
SugarCRM、XenSource、Zend 等开源公司也都是混源软件的推动者。而此次 Novell 和微软达成的协议也
使 Novell 的 SUSE Linux 成为了混源软件中最具代表性的产品。

  2006 年底,Novell 亚太区主席 Marten Koster 首度宣称,“Novell 是一家‘混源公司’,大多数


Novell 的客户都处在一种混源的 IT 环境之中”。尽管 Novell 以混源自居,竭力奉行差异化策略,但从效
果来看,策略执行得并不顺利。

  Novell 以“混源”区别于 RedHat 的单纯开源,但在企业 Linux 市场中屡屡落败于后者。它被迫转而


结盟微软,企图通过加强与 Windows 的互操作性来拉拢更多的 Linux 客户,但又深陷 GPL 重围中不能自
拔。如果脱离开源社区,其生存将成问题;如果背弃微软,其发展将受到影响;它和微软以及系统制造
商们的联盟命悬一线。“混源”策略一度使 Novell 在夹缝中左右为难,陷入模式危机。

  当然,站在用户的角度来看,他们中很少完全采用商业软件,也不可能只使用开源软件,更多时候
是把这二者结合使用。所以,表面看来,是用户需求催生了“混源”。Novell 和微软的共同声明中这一
点得到了充分体现,“从竞争走到了合作,最根本的原因是企业客户已经明确表示他们需要混合型技术。
双方的协议就是要让这两个平台协同工作,为客户所要求的互操作性提供企业支持。”

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


混源新视界

  据《IT 时代周刊》了解,如果仅仅从增强 Linux 和 Windows 互操作性的层面考虑,现在的开源技术


已经完全可以满足需求,并不需要大费周折。业内人士也指出,Novell“混源”的命运“关键是要看微软
和 Novell 合作的深度和未来实际合作的具体进展”。近日,在 Novell 公布的和微软的合作协议中,
“Novell 没有得到有关微软专利的完全授权”。 Office 就被排除在外。这也为微软日后向包括 Novell 在
内的开源大腕们提起专利诉讼留了一扇门。

  这位业内人士进一步指出,“‘混源’的出现是完全基于用户需求”的论调是站不住脚的。他认为,
微软“认可”Linux,“服从”用户的需求,并“接受混源”的事实,更多地着眼于对 Linux 阵营的分化
和渗透。事实上,厂商胁迫用户的情形也并不少见。“没有永远的朋友,也没有永远的敌人,只有永远
的利益”,Novell 大中华区总经理张先民的一席话赤裸裸暴露了 Novell 和微软以及戴尔等“混源”联盟
的本质。

  “混源”绝不意味着开源软件和商业软件竞争的结束。Novell 和微软协议的签订就遭受了自由软件
基金的围追堵截。随着微软扬言开源软件侵权,开源社区与微软的关系已成水火。迫于压力,最近
Novell 对自由软件基金积极示好,并在公开场合对微软表示了一些不满。业内分析人士指出,Novell 对开
源阵营的示好,也一定程度上缓解了自由软件基金对其的怨恨,也使自己在草案定稿的最后时刻得到了
回报。

  “尽管 Novell 与微软合作了,双方还是存在竞争关系,而且竞争的成分更重一些。”Novell 高层如


此表示。而此高层的表态从侧面反映出“混源”绝不是简单的相互妥协的产物。分析人士指出,纷繁复
杂的形势下,催生了“混源”的新软件形式,还是因为复杂的形势。这个新事物必将遭遇来自各个方面
的挑战,其发展不利也在预料之中。Novell 虽然大难不死,但市场向其他混源软件厂商敞开的大门已经
在开源阵营 GPLv3 和微软专利霸权的双重挤压下,慢慢关闭。

  开源软件和商业软件共存的现状很长一段时间内还将继续。而谈起“混源”软件的前途,人们却忧
心忡忡。

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


编读往来

编读往来

SirKey:电子杂志能更集中的把内容整合,更系统,很好,支持!未来甚至可以出版纸质的,把知识传播
给更多的人。

OpenSource:纸质杂志我们暂时还不能涉及,把开源精神、开源理念及众多的学习方法、心得、技巧传
播到更多需要的人们那时我们共同努力的目标。

isspy:最好能多介绍些 Linux 的基础,如在刊中加入一些 Linux 发展历程,哪些重大事件,再加入一些常


见的错误解决方法,以及问题解决的网址链接就会好多了,如此日积月累此书就会很有收藏价值了!

OpenSource:这块内容我们在以后的杂志的不同栏目中都将涉及,比如在开源社区中会出现一些著名项
目的介绍,以及社区的一些重大事件,在第二期开始我们在经验技巧栏目推出了“Linux 一句话精彩问
答”,初衷也是考虑到更多的爱好者需要一些常见问题的解决方法,而“Linux 一句话精彩问答”堪称这
方面的经典。

liudan818:杂志很好,建议企业应用栏目文章多点详细点,这样企业才能看到 linux 强大和实惠之处。

OpenSource:这块内容我们会逐渐完善,企业应用是 Linux 的重点,也是 Linux 持续发展的生命力,也希


望广大有这方面经验的读者踊跃投稿。

id_sonic:作为一个 2002 年开始使用 Linux 的人来说,开源杂志让我看到了开源产业在中国的希望!

OpenSource:我们也仅仅是做出了我们力所能及的事情,中国的开源得靠大家,只有大家的意识提高了,
我们的开源才有希望。

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


编读往来

高涛:可否增加一板块,介绍一些关于职业规划和学习规划方面的知识!

OpenSource:确实有很多的朋友接触开源更多得希望学习到更多知识,从而为自己的职业生涯,知识体
系增加筹码,这块内容待我们丰满了现在以后的栏目后会有所涉及。

彭伟:贵刊真的很好,在红联看到有关你们的杂志,下载一看,非常的精彩, 接着就等你们的第二期了,
期望第三期! 知道你们的杂志是直接从 openoffice 导出 PDF 格式的, 用 Adobe reader 阅读的时候翻页
的时候不太方便,默认的是适合宽度, 但这样往往不能在一屏里显示出一个页面的文章,我看来 ubuntu
的 issue9 杂志,也是电子版的,但他们默认的是适合页面,正好合适,而且字体也比较清晰,希望你们
能够借鉴一下。

OpenSource:现在很多电子杂志采用横排,而我们目前暂无这样的考虑。第一,严谨、专业是我们对这
个杂志的要求,目前来看,我们认为竖排更能给人杂志的感觉;第二个原因则是横排的优势(比如页面
美化等)暂时不是我们追求的方向,现阶段我们更多的希望从内容上做好基本功。

sx_alu:希望开源在年底,出一本合订本,我们好购买,也算是支持开源。

OpenSource:合订本是个很好的建议,不过肯定也会是以电子杂志的形式呈现,我们一开始就承诺了这
是一份永远免费的电子杂志,发行、出版这些有悖于我们办刊的初衷。

yahoon:可以增加一个国外好的文章的转载选读功能。学 linux 英文可以说是一个基本的要求,linux 需


要本土化,但是要用好,还是要吸收国外的先进经验啊!翻译是一条路,但是更简捷的方法是转载原文。
个人觉得文章选择要有实用性、前瞻性、新鲜性,当然文章最好不要太晦涩难懂,我看 4、6 级水平能看
懂就可以了。例如国外很有名的 linuxjournal 网站,可惜我不是订户,完全不能看里面的文章,如果谁
能看,转出来,那该多好啊……(纯粹个人希冀)。当然既然是转载,当然是要保留原文链接的。我在此
推荐一篇:http://www.linux-mag.com/id/4141。当然我也希望我们能开一个这样的区,多转一些国外

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


编读往来

的好文章,现在 linux 的学习者和使用者对这个意识不高,很多都很怕英文,我们应该营造一个这样的


纯学术的氛围出来。

OpenSource:很感谢 yahoon 的建议,浏览英文电子文档想必是每一个接触开源的朋友都坚持做的事。但


存在一个问题是英文原文内容很冗长,很占杂志篇幅,但这方面的内容确实又是大家需要的。如果可行,
我们可以翻译一些优秀的英文原文,也可以在杂志单开一个版块,介绍这一个月优秀的英文原文,并给
出链接。在这方面,我们希望发挥开源社区的力量,大家平时浏览到优秀的英文文档提交给我们,并且
有这方面能力的朋友也可以与我们取得联系,联系方式:Opensource@linuxpk.com。

simontao:OpenSource 文章不错,不过里面还有好多的错别字哦,希望认真审查。多出精品,本人觉得
好。

OpenSource:错别字的问题我们会引起重视,目前阶段,编辑部也在发展壮大中,也希望愿意为杂志尽
一份力量的朋友加入我们。

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

You might also like