You are on page 1of 78

卷首语

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《Opensource》 Page 0 of 78


卷首语

卷首语
关于《开源》

2008 年,《开源》创刊了,这个在我们脑中酝酿了五年之久的开源电子杂志终于蹒跚
地走到了大家的面前。
5 年,作为一个时间段,能改变很多的东西,曾经听一个人生规划师讲解过,对于人
生的理想,应该以 5 年作为一个时间段划分,逐步实现。
《开源》这本电子杂志也迈过了设
想之初的 5 年,完成了一次跳跃。而 5 年时间的沉淀,也是希望《开源》这本电子杂志一
经推出,无论面临多大的困难,也要顽强地存活下去。
5 年前,开源在我国刚刚兴起不久,那时对于开源的概念更多的等同于 Linux,而 Linux
更多的作为一些专业人士手中的“玩物”,大家乐此不疲地玩赏着这个新鲜的东西,在小范
围进行着交流、讨论、推广。
5 年的时间过去了,开源已经深入人心,对于开源,人们的理解不只局限于 Linux,而
更多优秀的开源项目(MySQL、Apache)也得到了广泛的应用,开源已经构成了一条完整
的生态链,完全覆盖了从底层的操作系统、中间件,到上层的应用软件、Office、ERP 等
范围,从 IT 环境搭建到 IT 运维,已经提供了更多的开源选择。
Intel、Sun、IBM、Google、Oracle 等厂商不同程度地对开源给予了支持,红帽、红旗
等开源厂商不断的发展壮大起来,甚至曾经开源的死对头微软也开始频繁的与开源接触,
寻求与开源社区、开源项目的合作机会。在这样的一个时机,我们认为《开源》这本电子
杂志是时候该与大家见面了。
我们将《开源》定位在关注开源产业的发展、推动开源项目的进展、促进开源应用水
平的提高,受众群体将从开源产业的决策人员向下覆盖到开源应用的初学者。对于办刊思
路,我们本着开放的思想,希望接纳来自各方的意见,群策群力,同时承诺该电子杂志永
远免费阅读。
《开源》本着实用的原则,目前划分了七个栏目,第一个栏目是产业聚集,其中包括
两块内容,第一是资讯,对于发展得如火如荼的开源领域,一月的时间会发生很多很多的
事件,而这个栏目将对一月的新闻有个采集汇总,而第二块内容则是对一些热点事件的深
度或持续的关注,或者评论,或者报道,使读者能清晰地理清开源领域发展脉络。
第二个栏目是博客文摘,作为 Web 2.0 的代表作,博客已经越来越深入得影响了我们
的生活,博客开放的思想与开源多少有着一脉相承的味道。这个栏目我们将选取一些开源
领域重量级人物的博客,做成文摘的形式,使读者在了解开源动态的前提下,更多地了解
到一些前沿的观点。
开源社区是开源的灵魂,这样的观点得到了大家的公认。第三个栏目就将完全关注开
源社区,其中会有从社区走出的开源项目的一些最新动态的报道,对于一些优秀的开源项
目,也将以科普的形式进行详细的介绍。同时,对于我们开源社区的一些活动,开源社区
的一些新技术,来自开源社区的议论都将在这个栏目呈现给大家。
知识学堂这个栏目主要普及开源的知识、文化,以及一些大家都关注的开源应用。以

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 -1-


卷首语

讲座和连载的形式让大家都深入的了解开源文化,对于一些长篇的开源应用讲座,也将在
这个栏目进行体现,这类讲座将包括基础的命令讲解到高级的内核解读。
桌面应用将介绍来自桌面的新产品、新工具、新应用,以及各式各样的应用技巧。同
时会对桌面软件进行评测和试用报告,刚刚迈进开源应用大门的初学者能从这里获得足够
的信心,完全地玩转开源的各种应用。
企业级应用则将推出企业级的新产品、新方案,同时对运用开源软件进行 IT 环境搭建
和运维进行指导,介绍能满足于企业级应用的优秀开源项目,对于复杂 IT 环境应用中的各
种问题也将进行讨论,这个栏目的宗旨一句话可以概括:
“自从用了开源企业级软件,我们
明显感觉更省钱了。”
混源新视界则是我们推出的一个战略性的栏目,在开源与商业越来越紧密的今天,混
源应用得到了广泛的发展。目前的 IT 环境,很少有纯开源或者纯闭源的软件,开源与传统
的商业软件更多的是融合在一起,协同工作。对于混源这个概念,微软也有着自己的解释,
那就是异构环境,无论是混源还是异构,毕竟是未来的趋势,趋势性的东西就是值得我们
关注的东西,昨天经典的“LAMP”架构到了今天又延伸出了“WAMP”架构,这都是来
自混源的魔力,而受益的都是最终用户。
七个栏目组成了我们第一期电子杂志,
《开源》这本电子杂志就如同当年那个笨拙的小
企鹅,需要更多的人关注和支持,需要更悉心的照料,它才能存活下来,才能健康的成长
起来。第一期杂志难免有诸多不尽人意的地方,也希望大家将更多的意见反馈给我们,我
们将尽力将这本开源领域惟一的电子杂志办的更好。
目前编辑部正在筹建阶段,希望有兴趣的朋友可以和我们取得联系,我们希望与众多
的开源朋友一起,以开源理想为指导思想,为开源社区、开源领域提供一份永久的免费杂
志。对于七个栏目的划分,我也进行了简单的介绍,有针对这七个栏目的优秀稿件,希望
大家踊跃投稿。
今天,我们出发了,我们不希望收回迈出的步伐,也不希望一步迈进大坑里。一本持
续的、关注开源的、永远免费的电子杂志,这是我们的愿景,也是我们的奋斗目标。

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 -2-


版权页

《开源》 版权页

2008 年 1 月 第一期

主办:Linux 宝库
网址:http://www.linuxpk.com
总编:陈杰
副总编:陈绪
编辑部:曹金成

校验排版:邱风
封面设计:红动中国 www.redocn.com
投稿邮箱:opensource@linuxpk.com

声明:杂志部分内容来自开源社区及互联网,目的是加强开源文化交流及开源
应用传播,如有版权问题,敬请联系,我们将在第一时间作出处理。

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 -3-


目录

目录

卷首语:关于《开源》 ························· 1

《开源》版权页 ·························· 3

产业聚焦 ····························· 6

资讯······························································································································································6
Linux手机Rokr E8 闪亮CES················································································································ 6
Sun推基于Xen的虚拟平台 ·················································································································· 6
IBM发布开源邮件搜索工具················································································································ 6
KDE 4.0 正式发布 ······························································································································· 7
奇趣加盟LiMo基金会·························································································································· 7
U盘型Linux防火墙问世 ······················································································································ 8
OpenMoko升级硬件平台····················································································································· 8

Asianux走出新模式 ···································································································································9

博客文摘 ···························· 12

促开源与微软互操作性互动来谋求共赢·······························································································12

2007 年:茁壮成长的Linux····················································································································14

更多选择不等于更多标准 ·······················································································································15

开源盈利模式探讨 ···································································································································17

开源社区 ···························· 19

项目动态····················································································································································19
Ubuntu 8.04 Alpha 3 近日发布······································································································· 19
开源的编辑器Notepad++ 4.7.1 发布 ····························································································· 20
软件包管理器RPM 5.0.0 发布······································································································· 20
phpMyAdmin 2.11.4-rc1 发布 ········································································································ 20
开源模拟器QEMU 0.9.1 发布 ······································································································· 21
PCLinuxOS 2008 MiniMe发布······································································································· 21
图像软件Paint.NET 3.22 Beta2 发布 ····························································································· 21

Python维基系统MoinMoin·····················································································································22

KVM开发者大会归来 ·····························································································································26

开源与SaaS ···············································································································································29

知识学堂 ···························· 34

Linux系统管理员进阶【之一】·············································································································34

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》


目录

用Unix思维思考 ···························································································································· 34

重读 2.4 内核(1) ··································································································································41

桌面应用 ···························· 49

Ubuntu7.10 使用有感而发 ······················································································································49

Linux下软件的安装与卸载·····················································································································50
二进制分发软件包的安装与卸载 ································································································· 51
源代码分发软件包的安装与卸载 ································································································· 52

GRUB引导故障排除································································································································53

Linux下的多媒体软件 ·····························································································································55

Openserver启动盘制作 ···························································································································57

企业应用 ···························· 58

FreeNAS构建企业存储系统 ···················································································································58

构建LVS集群系统 ····································································································································64
LVS三种模式 ································································································································· 65
LVS集群系统环境 ························································································································· 67

混源新世界 ··························· 71

微软与开源的故事 ···································································································································71

探讨“混源应用”发展之道 ···················································································································77

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》


产业聚焦

产业聚焦

资讯

Linux手机Rokr E8 闪亮CES

近日,在拉斯维加斯举办的 2008 消费科技电子大展(CES,Consumer ElectronicsShow)


上,摩托罗拉正式发布最新型的多媒体影音手机 Rokr
E8。
Rokr E8 新款 Linux 智能手机,以一个软的 MMI(人
机界面),改变了以往的机身模型。Rokr E8 是一个工作
在 GSM/GPRS 中的四频网络手机,此款手机装备有 200
万像素的摄像头,支持多种音乐格式的播放,全屏 HTML
浏览器,以及独特的触觉感应系统。
同时,E8 的软接口加入了创新的 ModeShift 技术,
只需轻按一键,手机、音乐播放器和数码相机三种模式
便随你转换,具有独有的 FastScroll,操控大权也因此牢
牢掌握在手。

Sun推基于Xen的虚拟平台

近日,Sun 宣布将推出一种基于 Xen 技术的系统管理程序 xVM,用于开发虚拟机以及


对虚拟机进行管理的 Sun xVM Ops Center 系统。
xVM 系统管理程序能很好地利用 Solaris 10 操作系统的关键特性,例如 ZFS(动态文件
系统),这是一种 128 位的文件系统,它增加了被包含在虚拟存储系统中的地址空间的数量。

IBM发布开源邮件搜索工具

近日,IBM 发布了免费的企业电子邮件搜索工具 OmniFind Personal Email Search


(IOPES),宣称可辨识用户输入的不完全字符串。该搜索工具支持 Lotus Notes 及 Microsoft
Outlook,使用者可自 alphaWorks 网站下载。
该工具采用先进的运算法则,协助用户快速搜索及找到信息,即使电子邮件数据库中
没有“电话”或“号码”等字符串也可以找到电话号码。IOPES 也允许使用者可以建立、
储存及分享个人化的搜索以供未来使用。

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 -6-


产业聚焦

KDE 4.0 正式发布

近日,KDE 社区宣布了 KDE 4.0 的正式发布。这标志着漫长艰苦的 KDE 4.0 开发周期


已经告一段落,KDE 4.0 时代已经到来。
在 KDE 4.0 类库方面,各种重要改进几乎无处不在。多媒体框架 Phonon 提供了一种
平台无关的抽象层来支持所有 KDE 程序,硬件编程接口 Solid 使得对可移动设备的操作更
简易,同时也为电源管理提供了更好的工具箱。
在桌面方面,许多新功能也被加入,桌面外壳 Plasma 展现了全新的桌面界面,包括面
板、菜单、桌面部件和仪表板等。现在 KDE 的窗口管理器 KWin 支持高级桌面特效,优化
了窗口交互的操作感。
当然毫无疑问,大量的 KDE 应用程序也都有了长足的进步。在底层库的支持下,众
多可视化造型现在基于矢量美工技术,用户界面改进、新特性也随之受益。另外,甚至还
有新程序加入,其中包括但不限于新的通用文档阅读器 Okular 和新的文件管理器 Dolphin
等,这只是 KDE 4.0 的新技术引入的变化之一二。

奇趣加盟LiMo基金会

日前,奇趣科技宣布加盟 LiMo 基金会,加速推出基于 LiMo 的开放式和全球统一的


移动 Linux 平台。奇趣科技的加盟,不仅给 LiMo 带来了其业界领先基于移动 Linux 设备
软件框架方面的丰富经验,还带来了其拥有的远见卓识的全球客户经验——目前基于奇趣

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 -7-


产业聚焦

科技软件的已交付的设备已经超过上千万部。
奇趣科技将为 LiMo 软件栈提供战略组件,该软件栈实现了将在线服务与本地移动应
用集成在一起的重大突破。这不仅将加速推出符合 LiMo 标准的设备,还将有助于运营商
们构建新型的创收服务体系构架。

U盘型Linux防火墙问世

近日,安全设备厂商 Yoggie 展示了一款 Yoggie Gatekeeper pico 防火墙产品,这款小巧


而智能化的设备实际上是一个基于 Linux 的小计算机。这个小设备可以安装在网络中,通
过内置的多重安全引擎过滤网络上的恶意数据。Yoggie Pico 是一款小巧的 USB 设备,采
用 Intel PXA270 处理器(和很多智能手机以及其他移动设备一样),运行 Linux 系统,可以
实现防火墙和反病毒功能,从而降低所连接的 PC 机在安全方面的 CPU 负荷。

OpenMoko升级硬件平台

日前,Linux 开源手机 OpenMoko


宣布计划升级其硬件平台,并将升级
后的平台称之为 Neo FreeRunner。
虽然外观上没有甚多改变,但是
据悉处理器、Wi-Fi 网络以及图形部
分 均 会 获 得 升 级 。 新 产 品 Neo
FreeRunner 拥有 500MHz 处理器,而
2007 年 7 月公布的 NEO 1973 产品仅
有 266MHz 处理器。
另外一点则是新硬件内置的 2D
和 3D 图形硬件将支持硬件感应功能,
并支持自动触发行为,而无线网络部
分则升级为支持 802.11b/g 标准的硬
件。
OpenMoko 公司预计将在拉斯维加斯
召开的国际消费电子展上正式展出新的硬件平台,并于 2008 年春季开始供货给开发商。

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 -8-


产业聚焦

Asianux走出新模式

陈 杰

12 月 20 日,Asianux 联盟成员,中国中科红旗软件技术有限公司、韩国 Haansoft 公司


和日本 Miracle Linux 公司共同宣布,无锡亚联开源软件技术有限公司(Asianux Corporation)
在中国无锡正式注册成立。公司在已成功运用了 4 年的,独特的“4-Co”的合作模式基础
上,继续推进 Asianux 在亚洲的快速发展。Asianux Server 3.0 后终于有了自己的娘家,中
日韩三方打造的 Asianux 统一 Linux 平台也终于有了实体公司,而作为 Asianux 联盟,也
开始迈出探索新模式的步伐。

Asianux 落地

Asianux 联盟独特的 4-CO 商业模式,即共同研发、统一品牌、共同技术支持以及共同


推广,集中了原本分散的研发和支持力量,共同推出富有竞争力的产品,并分别在各个国
家销售,使每个成员都深度受益。随着越来越多的亚洲国家开始有强烈的意愿来发展自己
本土化的软件以及开源软件技术,Asianux 的商业模式得到了亚洲各国开源企业和相关部
门的关注和支持。Asianux 联盟成员表示将会继续发展更多的成员,越南也于今年加入了
Asianux 联盟。
而此次实体公司的成立,可以看作是 Asianux 联盟一个里程碑的事件,从 Asianux 联
盟到 Asianux 品牌的建立,再到无锡亚联公司的成立,Asianux 摸索了一条新的模式。联合
亚洲各国的开源力量,打造一个亚洲统一的开源品牌,这也是 Asianux 联盟的愿景。无锡
亚联的成立,可以看作是长跑中的发令枪,虽然才刚刚起步,但毕竟已经迈过了繁琐的准
备期以及积极的备战期。
中国开源软件推进联盟主席陆首群介绍到:
“无锡亚联的成立将积极的推动亚洲开源的
发展,中日韩三国将在开源领域不同层面展开合作,互通有无,而最终受益的将是亚洲的
企业。”同时,他向大家分享了一个小故事:“我有一次去美国访问,在西雅图拜访了三个
有名的企业,一个是微软,一个是波音飞机公司,还有一个星巴克总部,其中波音和星巴

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 -9-


产业聚焦

克都用着大量的开源软件,我在微软总部见到了比尔盖茨,我就问他,微软家门口的企业
都用着开源软件,说明微软也不是不可替代的吧。
”陆首群分享的这个小故事告诉大家,开
源的发展非常的迅速,同时,微软也不是不可取代的。
作为中科红旗软件技术有限公司总裁,贾栋一直致力于推动 Asianux 联盟的发展,同
时他也将出任无锡亚联的董事长兼总裁,在谈到无锡亚联的成立,兴奋之情溢于言表:
“无
锡亚联落户无锡,得到了无锡市委市政府、崇安区委区政府的鼎力支持。公司由中、日、
韩各国最具实力的 Linux 厂
商投资组建,具有强大的技
术和市场基础。我相信,通
过 亚 联开 源合 资 公司 的实
体,加强 Asianux 联盟在开
发、市场、服务上的力量,
让 Asianux 持续滚动发展,
发挥规模效应,让亚洲广大
的企业、政府和个人用户享
受到开放统一平台带来的品
质和价值。”
而作为无锡亚联的一分子,日本 Miracle Linux 公司总裁,无锡亚联开源软件技术有限
公司副董事长 Takeshi Sato 也表示,Asianux 由中、日、韩三家公司联合成立,并定位于亚
太及世界开源市场。三家公司有超过三年合作开发 Asianux 的经验,并成功的由服务器市
场扩展至移动领域。Asianux 公司的成立进一步加强了我们与全球 IHV 及 ISV 们的合作关
系。Asianux 产品能够得到更多全球厂商更广泛的软、硬件产品的支持认证。三家公司联
合成立新的合资公司,也使得三家公司之间的合作更加紧密,我们将为用户提供具有更加
优秀的稳定性、可靠性及可服务性的产品,并广泛满足中小企业市场到关键业务市场的所
有需求。

联盟模式能走多远

在开源领域,产业联盟、企业联盟都已经不是新鲜事了。在中国,开源软件推进联盟
和 Linux 产业战略联盟就不同程度地推进了开源在我国的发展,到了今天,开源软件推进
联盟也在开源领域发挥着越来越重要的作用。但作为以联盟的形式成立合资企业,无锡亚
联可以称得上是第一个吃螃蟹的人。
作为一种新的模式,能持续多久自然是大家关心的话题。Asianux 商业模式为联合开
发、联合品牌和联合服务,致力于在亚太地区通过深入合作建立一个统一 Linux 平台。并
且在技术层面上,吸纳不同企业的长处就行统一的整合,打造出一个集众人之所长的品牌。
贾栋介绍到:
“Asianux 商业模式是大家互惠互利的,大家贡献自己的优势,打造一个知名
的品牌,这对于作为单一的企业是很难办到的。在市场策略方面,因为各国的需求都非常
的大,我们只需要做好自己国内的市场,满足国内的需求就可以了,所以,这样的模式更

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 10 -


产业聚焦

多的是合作,而不存在竞争的关系。

而除了已经推出的 Asianux Server 以外,Asianux 通过与 Intel 的合作,推出了世界上
第一个针对 Intel MID(移动互联网设备)的产品系列——Asianux Mobile Midinux。它具有
让任何消费者轻松驾驭的界面、丰富的多媒体和互联网应用,并能满足个性化的定制需求。
为介于笔记本和智能手机之间的移动消费类电子设备提供完备的移动操作系统。目前,已
经有包括日立,明基,联想等多家国际一流的硬件厂商开始和 Asianux Mobile 进行合作,
并已经达成了 MID 领域的 Linux 操作系统 OEM 合作和联合研发项目。Asianux Mobile 将
成为继服务器之后的 Asianux 公司的又一个主要增长点。由于亚洲人口众多,经济发展迅
速,消费类电子产品市场巨大,移动操作系统将给 Asianux 公司带来非常可观的软件出口
收入。
Asianux Mobile Midinux 项目的部分研发工作也将放在无锡亚联,将成立全新的团队对
部分功能进行新的研发,对于这个可能成为 Linux 下一个机会的产品,其意义也是重大的,
它可能扭转桌面操作系统一直止步不前的窘境。据悉,MID 设备也将是 Intel 最为主要推
动的一个设备,Intel 高层在最近一段时间的空开场合也不同程度的提到了 MID 设备。
对于此次无锡亚联的成立,英特尔公司开源软件技术中心总监 Ram Peddibhotla 表示,
“多年来,我们同 Asianux 的成员 RedFlag、Miracle Linux、Haansoft 公司一直在紧密合作,
共同研发拓展诸多英特尔公司的技术,包括多核、LessWatts 和虚拟化解决方案等,从而为
用户提供一个稳定可靠、高效节能的计算体验。现在通过 Asianux,我们希望在英特尔多
条产品线上,从移动互联网终端到多核服务器平台继续携手合作,开创未来。”
从联盟到产品再到公司,这是一个全新的模式,Asianux 联盟已经摸着石头过河一路
走出来了,Asianux Server 也从 1.0 版本更新到了 3.0 版本,在亚洲的 Linux 市场上已经取
得了不小的市场份额,而 Asianux Mobile Midinux 的注入,更为 Asianux 联盟增加了新的活
力和增长点,其独特的模式也将为未来的开源企业树立新的标尺。

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 11 -


博客文摘

博客文摘

促开源与微软互操作性互动来谋求共赢

陆首群 BLOG:http://www.lupaworld.com/16128/

开源与微软的互操作性
当今时代呼唤开放标准。开放标准是指通过在应用编程接口(API)、通信协议(Protocol)
以及数据和文档格式(Format)方面使用公开发布的规范,来实现各种异构信息系统之间
的互操作性。
对开源与微软来说,互操作性是他们的共同追求,决不是“一头热”的问题。早在 2005
年,我应开源组织和微软双方关于实现互操作性的共同要求,曾邀请双方专家一起讨论,
企图搞出一个共同的、高效的互操作方案,但终因双方利益不同,讨论无果而终。
开源产品的 API 是公开、透明的,微软产品的 API 是属“暗箱操作”,因此在实现开
源与微软的互操作时,出现了不对称、不公平的局面。
微软要与开源实行互操作,可以很方便地设计转换器(或翻译器)。开源要与微软实行
互操作,在设计转换器时就遇到很大困难,因为开源无从了解微软的 API。过去开源一般
采用逆向设计工程或模拟技术的方法,来搜索、解析微软产品的 API 函数;在取得初步成
功时,微软就站出来说,微软的 API 具有知识产权和很多专利,对开源的“侵权行为”微
软要诉诸法律,且矛头直指开源的用户;这时开源也祭出反制之道,在加强开源社会团结
的基础上,正面应对微软的所谓“诉诸法律”问题:
“互联网是开放标准、开源结构的直接
产物,互联网上大多是开源技术,具有‘左版’版权,只要你微软上网,开源也有反制资
源,用‘右版’版权来保护‘左版’”。从而迫使微软主管知识产权的副总裁 Horacio Gutierez
出来说话:“微软不会进行诉讼,如果我们想这样做,几年前就做了”;微软负责开源平台
和战略平台的主管 Bill Hilf 和 Sam Ramji 更针对微软这样的“法律恫吓”说:
“其实是我们
干了一件错事”。
开放协议层次的互操作
2007 年 10 月 15 日我与微软首席研究与战略官 Craig Mundie 会晤时,他认承:在相持
三年后,微软终于接受欧盟的反垄断处罚。我问他,微软承诺:
“将向同行开源竞争者开放
互操作性的信息”,在向欧盟开放同时是否也向包括中国在内的全世界开放?Mundie 答复
很肯定:同时也向中国开放。
去年 12 月 14 日微软负责协议计划的总监 Ajay Sikka 来京与我会晤时,通报微软执行
美国与欧盟的裁定,他说:在中国也与欧盟一样,要落实微软关于开放互操作性信息的承
诺。我问他:
“微软是否开放 API 源代码?”他说:
“不是”
;他说:
“我们开放全部内外协
议”,
“在这些协议中也包括有关知识产权、机密文档、专利、版权、源代码(参考性许可)
以及授权等”,我说:“欧盟对此满意吗?”,他说:“欧盟官员和参考系:‘文件共享管理
Samba’对此是满意的”。其实,我在以前发表的关于互操作性的系列文章(可参见本博客
网站“我的文章”)中早就指出,实现互操作是分不同层次的,其中包括开放 API 源代码

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 12 -


博客文摘

和开放通信协议等不同层次的互操作;当然开放通信协议层次的互操作不如开放 API 源代
码的互操作效率高(我也向 Ajay Aikka 当面指出,“你们开放协议层次的互操作不是最好
的方式”);但既然欧盟(包括 Samba)“满意”,我也无话可说,总算在互操作方面前进了
一步。
M/N 结盟
2006 年 11 月 2 日,微软与 Novell(M/N)
“结盟”,双方合作开发转换器,实现 Windows
与 Linux(Novell/SuSE),在办公套件方面的兼容性或互操作,这是基于 API 之上实现 Novell
-Open Office(ODF)与微软-Office 2007(.docs 或 XML)的兼容性或互操作,Novell
与微软合作,在“法律”上或在技术上均属于排他性的,他们的“结盟”在国际开源社会
有两种不同反应,一种表示支持,以期实行真正意义上、更高效率的互操作,另一种表示
反对,认为这是微软对开源社会“实施分化瓦解的伎俩”。随后微软分别与 Xandros、Linspire、
日本 Turbolinux 也进行了“M/N 模式”的合作(并曾提议与 Red Hat 合作未获成功),微
软(中国)有关主管也希望我能帮助促进中国有关 Linux 企业与微软实行“M/N 模式”的
合作;我曾了解 Novell 自“M/N 结盟”后的业绩,似乎并未达到其预定目标,我也广泛
征求一些国内同行的意见,认为 M/N 作为一种“合作模式”也可考虑在国内进行试点。
文档系统三个层次的互操作
在我已发表的文章中谈到了各种类型的互操作,现在拟重点谈一下文档系统方面的互
操作。文档系统的互操作分三个层次:
1、关于文档生成,信息处理,基本应用程序的兼容性或互操作
办公套件的兼容性属于这个层次的互操作。办公套件分文档(Word)、电子表格(Excel)

幻灯片(PPT)等几个部分,主要是文档。办公套件的兼容性分层为:内容兼容、格式兼
容和版面兼容,涉及文档格式、操作习惯、接口和二次开发接口等。
一般来说,国内中文 Open Office(.SXW ODF)与微软 Office 2003(.doc,支持 XP)
的兼容性(主要是文档格式)为 95%或略差一些,可以实用(二次开发接口的兼容性约 70
%,偏低一些,还不至于影响大局);国外英文 Open Office 与微软 Office 2003 的兼容性大
约为 90%,比中文 Open Office 的兼容性要差些(国外对 Open Office 的使用也比国内差)

而微软 Office 2007(.docs 或 XML,支持 Vista)与微软 Office 2003(.doc,支持 XP)也
不完全兼容,
其兼容性大致为 95%或略高一些;为了兼容 Vista 操作系统和微软 Office2007,
微软最新的 Office2003 升级包(Office2003 SP3)将导致很多微软的老版本不兼容,无法访
问新版本(这也可能为开源提供了机遇)。
2、关于文档(信息)的规范、格式的兼容性或互操作
这涉及到 ODF、UOF、OOXML 三个标准的互操作性。①经国内有关单位核查测试,
UOF 与 ODF 具有一致性的条款约占 70%,能互相转换的约占 25%,兼容性约 95%;②微
软与北航合作,设计 UOF/OOXML 转换器,经核查测试,UOF 与 OOXML 一致的条款约
占 60%,可转换的约占 25-30%,兼容性约 85-90%(在演示现场我曾指出,目前这样
的兼容性水平尚低);③ODF 与 OOXML 一致的条款约占 65%,可转换的约占 25-30%,
兼容性约 90-95%。
微软要将 OOXML 提升为国际标准,去年曾在国内外引起一场风波,未获通过,今年

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 13 -


博客文摘

3 月底在 ISO 将对微软的修正稿进行第二次表决。微软曾征询我的意见,我认为 OOXML


原本是一个企业标准,如欲提升为国际标准,其条款要增加公开性、透明度;因为将来一
个国家存档的重要文件,如果绑定在一个企业“暗箱操作” 的条款之上,将会带来很大风
险。
3、关于文档(信息)存储的兼容性或互操作
目前已解决在 Windows 操作系统的环境中可以在其磁盘上读、写(Linux 的)ext2、
ext3 文档;同时,也已解决在 Linux 操作系统的环境中可以在其磁盘上读、写(Windows
的)NTFS 文档,从而实现在异构系统环境中文档存储的互操作。从在 Source Forge 上发
表的这方面成果来看,也有我们中国人的贡献。
总之,无论开源或微软,在互操作性问题上,都需要互动、开放、妥协和合作,才能
做到双赢;均要以互相尊重(决不可辱骂恫吓、恶言相加)和理性务实的态度,实现更深
层次、更富效率的互操作性。

2007 年:茁壮成长的Linux

袁萌 BLOG:http://blog.csdn.net/yuanmeng001

今年即将过去。毫无疑问,回顾以往,在这一年里面,事实证明 Linux 在茁壮成长,


而不是所谓“恨铁不成钢”。
在 2007 年,全球自由软件运动所取得的最大进展是,确立了自由软件作为世界软件市
场“正当”(
“valid”)竞争者的合法地位。 今年 9 月,欧盟就微软市场垄断的最终裁决,
导致 12 月 21 日微软向自由软件组织签定协议,公开了自己许多服务器协议的机密文档,
其中有不少有关微软私有专利的细节(比如相关专利号),打开了 Linux 顺利进入市场,获
得广泛应用的一扇大门。
回顾过去,大约在十年之前,SUN 公司要求获得微软“Active Directory”的技术文档,
以便建立与 Windows 的“互操作性”
,遭到微软拒绝,结果把微软告上了法庭。欧盟经过
很长时间的调查,尤其是,在 2003 年 11 月,Samba 自由软件组织的发起人之一,Jeremy
Allison 出庭作证,说明了在没有相关微软“协议文档”的情况下,实现“互操作性”的困
难性,从而否决了微软拿 Samba 来“说事”,诡称“由于存在 Samba 计划,可以实现(Windows
和 Linux)之间的互操作性,由此证明存在市场的竞争性”,从而说明微软不曾垄断市场的
谬论。由于 Samba 的积极介入,导致 2004 年 3 月欧盟做出微软垄断市场的裁决,但是,
微软立即上诉,硬是不认帐。到了今年 9 月份,欧盟做出了“最终裁决”,微软眼看混不过
去了,才不得不低头认错,认罚。在 12 月 21 日,微软与 Samba 团队设立的自由软件社团
组织签约了“停战”协议,确立了 Linux 合法的市场地位。
Samba 团队,为 Windows 与 Linux 实现互操作性,做出了历史性的贡献,绝非“Samba
能仿造的都仿造了,连 Win 的域控制器都造出来了,Windows 域对用户的认证都能接管,
所以说简直是抄袭,盗版。此外,Samba 通过软件领域的反向工程方法,分析使用了和文

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 14 -


博客文摘

件打印共享相同的端口,工作方式,域认证接口等。99%模仿了微软专有的文件打印共享
协议,相同的工作原理。就像早期 linux 模仿 Unix,仿的太像了,SCO 公司一发威,Linux
为了不涉及版权,去掉了那些专有的程序,而用自己新开发的。速度,稳定性马上就差了
不少。文件和 打印共享是微软的。NFS 是 Sun 的。这两大局域网协议都是有主的。如果
人家追究起来是逃不掉的。如果微软认为“开源软件 Samba 因为模仿了文件打印共 享,
构成侵权,应该从 linux 发行版中去除”,那 linux 可就不方便多了。现在人家没追究,主
要是微软宽宏大量和 Samba 开发团队是非商业公司追究不易”这种说词。
现今,Samba 团队决定:向全球自由软件开发者提供访问微软相关协议文档的便利,
只要他们愿意。

更多选择不等于更多标准

胡才勇 BLOG:http://blog.sina.com.cn/hucaiyong

丹麦哲学家布里丹曾写过一则寓言:有头毛驴,在干枯的草原上极为幸运地找到两堆
草,由于不知道先吃哪一堆好,结果在无限的选择和徘徊中饿死了。这被称为“布里丹效
应”。
这个寓言多年来一直是针对人类的选择而言的,即面对多种选择,人们往往无从选择。
但我现在看它,心境已完全不一样,社会发展到现在,物质生活极为丰富,人的自由度也
大了许多,已经到了可以有更多选择,追求更多选择的时代。以上面的寓言为例,在仅有
的两堆草里选,而且是在此后也不知道哪里还有草的情况下,这不叫选择,更不是我们现
在所说的更多选择。反而更像标准之选,是只能二取一的抉择,非左即右,非生即死。
什么是更多选择呢,我认为应该像大型超市,即使是最普通的商品,超市也会摆满货
架,琳琅满目,比如牛奶,有众多品牌、众多类型的口味和包装,每个人都可以根据自己
的偏好进行选择。但这种选择是建立在统一的牛奶标准之上的,因为标准统一,我们需要
考虑的只是自己的偏好,也可以在众多选择中放任自己的偏好,还可以随时改变自己的偏
好,正是在这种种偏好的满足下,我们才成就了“我们决定自己的口袋,我们决定我们的
购物篮”的“上帝”之感。假设牛奶的标准不一致,我们才真会感到无所适从。可以说,
多个标准往往会让我们无从选择,反而限制了我们选择的自由。我曾举过手机充电器的例
子,每个厂家都有自己的充电器标准,甚至每个型号都有自己的充电器标准,我们又何曾
多了更多选择。
多标准不仅会限制我们的选择,在很多时候,还可能造成极大的危害。因为多标准而
造成的教训有很多,比如:
1904 年的巴尔的摩火灾,因每个城市的水管标准都不同,所以从别的城市赶来救援的
消防队员只能望“火”兴叹,最终 80 个街区被烧为平地。
同样在美国,据说铁路规格不同是美国南部输掉美国南北战争的重要原因之一。

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 15 -


博客文摘

近期的教训也有,因为测量单位英式与公制的区别,美国航空局曾丢失了一个价值 1.25
亿美元的火星轨道飞行器。
在我国,以办公软件为例,多年来,封闭文档格式的存在严重阻碍了各中文办公软件
之间的文档互通,用户几乎是别无选择地被长期锁定在某一软件上。这不仅不利于国产软
件的发展,对于用户本身来说,长期被锁定一家软件会对文档的长期保存带来极大隐患。
正因为如此,制定统一的中文文档格式国家标准 UOF 成为我们共同的诉求。
我一直坚持这样的观点,更多的选择应建立在统一的开放的标准基础之上。以 UOF
为例,UOF 作为统一的开放的中文文档格式,可以真正实现不同办公软件之间文档的兼容
和互换,帮助用户逐渐摆脱对单一产品的依赖,确保文档信息的持久生命力。UOF 独立于
具体的操作系统、独立于具体的办公软件产品,也独立于具体的开发语言和运行环境。依
据该标准,任何厂商都可以开发符合标准的办公软件和应用系统,现有的文档格式可以和
UOF 进行转换,从而实现文档的互通和互操作。这将极大丰富用户对办公软件的选择余地。
但我们也清楚看到,直至目前为止,文档格式标准之争还未终结,多标准有益论的论
调时有出现。这其中的谬误我曾经在众多的场合进行过分析和批判,可以肯定地说,永不
可能出现多种标准的长期并存,多标准最终损害的是用户选择的自由和权利。多个标准等
于没有标准,用户不可能自行选择文档格式标准。不同的文档格式之间不可能精确兼容,
多个标准的最终结果将会让用户无所适从,唯一的结局仍将是微软挟其庞大的用户群独霸
天下。因此切实加强对 UOF 的推广力度,是我们惟一的选择。
在这里,我想到近期的一个新闻热点——蓝光 DVD 和 HDDVD 的对垒。这两种格式
的 DVD 厚度不同,互不兼容,统一的标准一直难以出现,市场和用户都出现观望态势,
两者的推广之路都受到标准不统一的阻碍。目前,这种状况有了突破,华纳兄弟宣布放弃
HDDVD 转而支持蓝光 DVD,使蓝光阵营进一步壮大,舆论一致认为 HDDVD 格式处于劣
势,占据上风的蓝光有望成为新一代 DVD 标准。但也有意见指出,电子市场变化迅猛,
如果标准的市场化不紧跟上,即使成为统一标准,也面临严峻挑战。多年受困于标准之乱
的 DVD 行业,可能已经错过了他们最好的发展时期,借标准一统天下的目标或许能实现,
但天下已经不是从前的天下了,近几年崛起的视频网络的发展已经改变众多消费者的观影
习惯,对于 DVD 的发展可以说是雪上加霜。
与 DVD 标准情况相似,标准推广和市场化的时机极为重要。UOF 出台后,惟有真正
应用起来,推广开去,才能发挥其作用。目前正值微软技术转型,用户的使用习惯经历巨
变,需要重新建立,这将为国产软件的发展创造良好的机遇。可以说,这一机遇的把握与
否将直接关乎国产软件乃至我国信息产业的发展成败。

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 16 -


博客文摘

开源盈利模式探讨

Michael Tiemann BLOG:http://michaeltiemann.lupaworld.com

昨天,我的博客被 Stephen Walli 收藏为链接。他收藏其他人的博客为链接是否也意味


着我不是“它”?呵呵...他的主题很吸引我,而且我觉得他开始把球抛向一个令人感兴趣
的方向,于是我觉得我也要添加我的想法。
从我的赚钱经验来看,开源帮助企业盈利有三种方式(假设您也就职于开源企业)

1.使您必须将工作重心放在实际价值上面。若没有实际价值,那么软件的价值将变为
零。企业可以做的最糟糕的事情就是将自己的脑袋放在沙子上,并假装这个世界并未改变。
当然,像美国佛罗里达房地产市场(无论是上世纪 20 年代还是当前这个时代)或互联网股
票泡沫那样,运气更好的人要比明智的人更容易赚到钱。但是,如果您知道某些产品的价
值即将变为零,那么为什么还要觉得还可以在价值降到零之前找到其他比您更笨的人,而
去购买这些产品呢?由于了解到这些产品将不名一文所获得的自由可以促进人们将工作重
心放在实际价值上面:
是否有助于客户提高收入?
降低成本?
解决需要付费解决的商业问题?
能够及时且在预算范围内提供?
能够比您的竞争对手灵活,且响应能力更强?
提供高质量的产品?
创建某种能够解决新问题的客户忠诚度?
凭着我对美国和日本传统商业文化和历史的了解,美国更关注这些问题中的第一个问
题,并试图通过某种 ROI 等式对其进行量化,而日本则关注这些问题中的最后一个问题,
这些问题中的第一个问题作为协定的一部分实现,并在流程中更改游戏。无论哪种方式,
都是从战术或战略上进行管理,由于专注商业问题,所获得的自由正是针对绝大多数现代
企业家备受困扰的技术愚昧的解药良方。
2.第二个收益是透明度。萨班斯-奥克斯利法案的目标是透明度,但是该法案的很多
配置和需求还很繁琐,以至于透明度的收益在报告需求的困境中难以实现。形成对比的是,
开源软件可以提供一个能够具有渗透力的自然的透明度。开源通过作为一个一贯的信号(往
往是秘密的)
,消除不胜任者的庇护所,从而在制度上鼓励透明度。而且,很多企业家和众
多公司生存在一个不断否认的状态中,包括他们的员工、产品、质量或战略。足够的透明
度可以鼓励人们真正应对问题,而不是花费精力隐藏他们。
3.第三个收益(我可以确定这将是区别于其他博客所有者的一个普遍收益——Stephen
在前面已经提到过)是用户驱动创新。对于不可预见的人们以不可预见的方式使用软件解
决即使存在您也从未听过的问题,要想公平地评估它所产生的收益是不可能完成的事。当
十亿相关联的人能够遵循法律公平地成为用户创新者时,知识多样化的收益、源自
whitebox 和开箱即用使用情况测试的强劲性,以及创新可能性的实现,所有这些都可以变

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 17 -


博客文摘

为现实。
我要说的是,用户驱动创新是迄今为止我们所能看到的最毋庸置疑的优势,但是,我
也认为是凭借前两个先决条件才使得第三个收益成为战略优势,它们不仅仅只是一个能够
观察到的现象。

在建立开源业务时,需要避免以下这三个“想法”:
1.认为您需要投资风险资金才能启动开源业务。与将“母乳喂养是最好的方式”作为
喂养健康宝宝的方式的方法相同,我认为当风险投资人在开源公司方面进行投资时,有
95% 的投资人都将产生弊大于利的结果。我认为他们将选择错误的想法,出于错误的理由
进行投资,并将在他们的投资失败后极度抱怨。所以不要试图说服一个尚未了解开源的行
业,而是寻求方法有机地创建您的公司。我估计到目前为止,在糟糕的专有解决方案方面
有意浪费的投资要比所有软件 VC 可以获得的资金多出 10 倍以上,而对于已经证实需要
并愿意付费的客户来说,这也提出了一个值得注意的可以更好运营的机遇。让他们相信您
可以通过开源弥补他们的损失,并最终获得成功!
2.每个事件支持模型。
3.通过开源赚钱的冷嘲热讽使人们选择专用。这是一个不可救药的观点,原因有以下
几点:它让人们相信创建专有软件是正确的;它通过专有软件使人们混合、分层、混杂或
以其他方式影响开源;它混淆视听,使人们迷惑开源是否是一个开发模型,并能够基于价
值主张赚钱。根本没有软件位价值!
我该怎么办?

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 18 -


开源社区

开源社区

项目动态

Ubuntu 8.04 Alpha 3 近日发布

颇受爱好者期待的 Ubuntu 8.04 “Hardy”刚刚发布了一个 Alpha3 版本,现在已经可


以通过 Ubuntu 的 FTP 下载试用。
更新列表:
‹ 改进的字体微调和渲染:就我个人而言,目前的字体显示方面我已经非常满意,不知
Hardy 还会在这方面有什么改进;
‹ 移动平台的全面支持:无论是应用程序,还是电源管理。Hardy 已准备全面向移动平
台发动进攻。届时如果 MID、UMPC 等移动设备上,也将会有 Hardy 的声音;
‹ 桌面特效:假如 Compiz 0.7 能如期发布,Hardy 将会根据现在 Gutsy 里 Compiz 的反馈
信息,另结合强大的 Compiz 0.7,继续提供给 GNU/Linux 桌面用户更好的桌面体验;
‹ KDE 4 for Kubuntu:我们之前得到有关 KDE 4 不会在 LTS 版中集成的消息看样子要成
为过去了。KDE 4 将会集成至 7.10 Hardy 中!
‹ 全新的主题:Hardy 的革新可不能仅仅在内部,外观同样会有。据称 Hardy 将一改用
了已久的 Human 主题,将一更加“现代化”的主题替换之。到时,图标、控件、边框、
还有登陆界面,都将给人耳目一新的感受!
‹ 模 块 版 OOo : OpenOffice.org 一 直 紧 密 地 与 Ubuntu 集 成 着 , 如 果 用 户 不 想 用
OpenOffice.org 而删除它,可能会把一些重要的软件包也删除掉。但是 Hardy 中,OOo
将会与系统之间做比较大的变动,将其模块化、精简化,去除相当数量的 Java 软件包,
节省磁盘空间,不知是否会方便用户删除它?
‹ 精简软件和库:Hardy 可能会对目前的软件和库做一些比较大的改动,合并或去除一
些功能重复或有替代品的软件包和库,从而节省 CD 空间,也带来整个系统的高效的
精简;
‹ X.org 7.3:Hardy 将搭载最新的 X.org 7.3,另外将为显示调整提供更好的工具。如果
AMD 的驱动赶得急的话,到时 A 卡和 N 卡用户都将得到非常完美的显示支持了!
‹ 自动 Bug 报告:为了打造更加稳键的系统,Hardy 将会有自动化的 Bug 报告系统,当
然用户的隐私还得放第一;
‹ 启动信息显示:有人反应在 Gutsy 下去掉 usplash 都无法看到启动信息喽,那怎么排障
呢?Hardy 会改改了。

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 19 -


开源社区

开源的编辑器Notepad++ 4.7.1 发布

Notepad++是一款非常有特色的编辑器,作为开源软件可以免费使用,具有以下功能:
内置支持多达 27 种语法高亮度显示(囊括各种常见的源代码、脚本,值得一提的是,完美
支持.nfo 文件查看),也支持自定义语言;
可自动检测文件类型,根据关键字显示节点,节点可自由折叠/打开,代码显示得非常
有层次感。这是此软件最具特色的体现之一;
可打开双窗口,在分窗口中又可打开多个子窗口,允许快捷切换全屏显示模式(F11),
支持鼠标滚轮改变文档显示比例,等等;
提供数个特色东东,如邻行互换位置、宏功能等等...现在网上有很多文件编辑器,这
个却是不可多得的一款,不论是日常使用还是手写编程代码,都能让你体会到它独有的优
势和方便。

软件包管理器RPM 5.0.0 发布

RPM 即 RPM Package Manager,它是许多流行的 Linux 发行版的软件包管理工具,譬


如 Red Hat/Fedora、SUSE、Mandriva 等。经过七个月的开发,RPM 最终在近日发布了稳
定版本 5.0.0。此版本使 RPM 成为了一个完全跨平台及可重用的软件包管理工具。
根据 RPM 5.0.0 的发布公告描述,该版本获得了下列新特性:
‹ 对 RPM 的编译环境进行了全面的修补,支持链接外部的第三方库。
‹ RPM 代码库已移植到所有主流平台,包括 BSD、Linux、Solaris、Mac OS X、
Windows/Cygwin。现在支持使用所有主流的 C 编译器套件编译,如 GNU GCC、Sun
Studio、Intel C/C++等。
‹ RPM 包支持 LZMA 压缩、XML Archive(XAR)文件格式。
‹ 添加了包规范 (.spec 文件)。
‹ RPM 5.0.0 的源代码可从这里获取。

phpMyAdmin 2.11.4-rc1 发布

近日发布了 phpMyAdmin 2.11.4 的第一个候选版本(RC),这是一个错误修正版本。


phpMyAdmin 是一个打算通过 Web 来处理 MySQL 管理的 PHP 写的工具。目前它能创建并
且删除数据库,建立/删除/修改表格,删除/编辑/添加字段,执行任何 SQL 语句,在字段上
管理键。

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 20 -


开源社区

开源模拟器QEMU 0.9.1 发布

QEMU 是一个开放源代码的虚拟机应用程序。最近,该软件发布了 0.9.1 版。新版本


包括许多改进和增强,如支持从主机目录引导 TFTP、针对 Solaris 的 Tap 设备模拟、支持
选择 CPU 模型、支持 MIPS 64 位 FPU、支持 Xscale PDA 模拟、支持 ColdFire 系统模拟、
支持 MIPS64、支持只读 Parallels 磁盘映像、支持 SVM(x86)虚拟、支持 CRIS 模拟等。

PCLinuxOS 2008 MiniMe发布

PCLinuxOS 是一份纯英文的自启动运行光盘,它最初基于 Mandrake Linux。PCLinuxOS


完全从一张可启动光盘运行。光盘上的数据实时地解压缩,从而使得这一张光盘上集成的
应用程序多达 2G,这包括一份完整的 X 服务器,KDE 桌面,OpenOffice.org 以及更多即
刻可用的程序。除了作为自启动运行光盘来使用,你也可以通过一套易于使用的光盘安装
程序将 PCLinuxOS 安装到硬盘。额外的应用程序可以通过一份友好的 apt-get 前端 Synaptic
来添加或删除。

图像软件Paint.NET 3.22 Beta2 发布

Paint.NET 是一个图像和照片处理软件,它由华盛顿州立大学的学生开发和维护并由微
软公司提供项目指导,早期定位于 MS Paint 的免费替代软件,现在逐渐发展为一个功能强
大且易用的的图像和照片处理软件,支持图层,无限制的历史记录,特效,和许多实用工
具,并且开放源代码和完全免费,界面看起来有点像 Photoshop,该软件的开发语言是 C#。

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 21 -


开源社区

Python维基系统MoinMoin

杨 晶
自 1995 年 3 月 25 日第一个 Wiki 网站诞生以来,Wiki 系统以其简洁的语法规则,方
便的在线编辑和完善的版本管理功能、得到越来越多用户的青睐,已应用到企业内部网站、
社区交流和个人知识管理等领域。Wiki Engine 也由最初的几个发展到上百个,使用各种开
发语言开发。比较有代表性的有 Python 开发的 MoinMoin 和 ZWiki;用 Perl 开发的 TWiki
和 UseModWiki;用 PHP 开发的 MediaWiki 和 PhpWiki;用 Java 开发的 JSPWiki 等。本文
介绍的 MoinMoin 就是用 Python 脚本语言开发,是一套具有模块化设计和高灵活性的 Wiki
系统,以 GPL 协议发布,源代码开放。著名的 Python 社区 http://www.python.org/moin/和
Debian 社区 http://wiki.debian.org/的 Wiki 系统都是使用 MoinMoin 来搭建的,如图 1 所示。

项目起源

该项目最初由德国人发起,Moin 是德国方言早上好的意思,MoinMoin 的叫法是借用


了 WikiWiki 这种 Wiki 习俗。MoinMoin 最初是在 PikiPiki 系统的基础上发展起来的。PikiPiki
的作者叫 MartinPool,由于想比较一下用 Python 实现的 Wiki 系统与 Java 或 Perl 语言实现
的 Wiki 系统在代码质量和性能上的区别而开发了只有一个文件几百行代码的 PikiPiki 系

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 22 -


开源社区

统。PikiPiki 系统的代码量小,结构简单,但已具有了 Wiki 系统的基本功能,如在线编辑


和全文搜索等。为 Wiki 系统的实现提供了一个简单而稳定的框架,其提出的以纯文本方式
把数据存放在文件系统中的做法一直沿用到现在的 MoinMoin 系统。除 MoinMoin 外,还
有几个 Wiki 项目也是基于它的代码开发的,如 MonkeyWiki 和 DiamondWiki 等。现在,
PikiPiki 系统已停止开发,最后的版本为 2000 年发布的 1.63 版。

发展历史

MoinMoin 使用了 Python 脚本语言开发,是跨平台的、可运行在 Linux/Unix/BSD、


Windows 和 Mac OSX 系统上的 Wiki 系统。项目始于 2000 年,2000 年 7 月 29 日发布了第
一个以 MoinMoin 命名的版本——MoinMoin 0.1,这个版本的作者是 JurgenHermann,他在
PikiPiki 1.62 版代码的基础上进行开发。第一版的 MoinMoin 的功能和 PikiPiki 差不多,只
修正了一些 Bug 和增强了显示的效果,没有增加新的功能。
2002 年 5 月 10 日,MoinMoin 1.0 正式发布,MoinMoin 开始完全转向 Python 2.0,不
再支持 Python 1.5,同时该版本还增加了很多新的功能,如附件、E-mail 通知、变量替换
和预览等。至此,MoinMoin 已完全摆脱了 PikiPiki 的影子,自成一派。
2004 年 12 月 6 日,MoinMoin 1.3 版发布,这是 MoinMoin 最重要的一次版本更新,
以模块化的思路重新设计了内部代码结构,能在不改变核心代码的基础上很方便地通过宏
(Macro)、分析器(Parser)、操作(Action)和主题(Theme)来扩展 MoinMoin 的功能,
如图 2 所示。

开始使用 UTF-8 字符集,并作为 MoinMoin 系统惟一支持的字符集;可以使用高性能的

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 23 -


开源社区

Twisted 服务器作为 Web 服务器,以提升服务器的处理能力;支持 ACL(访问控制列表)


安全设置,这是 MoinMoin Wiki 开始支持内容管理系统(CMS)的一个重要改进;支持单
实例多服务;支持更好的文本搜索引擎。从 MoinMoin 1.3 版开始,MoinMoin 已完全可胜
任企业网站和企业知识管理平台等关键应用领域的需求。
现在最新的 MoinMoin 发行版是 1.5.3,支持 GUI 在线编辑器功能,MoinMoin 2.0 版也
已在开发当中。
从 JurgenHermann 启动 MoinMoin 这个项目开始就吸引了大量优秀的 Python 程序员,
他们为 MoinMoin 项目贡献了高质量的代码和文档,使 MoinMoin 不断创新,功能不断完
善。MoinMoin 社区很活跃,在各种大型的开源盛会上都能看到它的身影,如 Google Summer
Of Code 2006 和 EuroPython2006 等。现在,MoinMoin 已成为互联网上最流行的 Wiki 系统
之一,在 http://www.c2.com/cgi/wiki 网站评选的十大 Wiki Engine 排行中高居第一位,而紧
随其后的分别是 MediaWiki 和 PhpWiki。

项目应用

MoinMoin 系统的网站是 http://moinmoin.wikiwikiweb.de/,网站搭建在 MoinMoin 系统


之上,如图 3 所示。

用户可以在网站上找到很多有关 MoinMoin 的资料。包括 MoinMoin 的安装步骤、MoinMoin


的 Wiki 语法参考和一些常见问题的 FAQ 等,这些资料都是世界各地的 MoinMoin 用户通
过 Internet 贡献的。在这个网站还能下载各种有用的扩展插件,以扩充 MoinMoin 的功能,
如在线回复、在线投票和日历等。如果需要的功能现在 MoinMoin 还不具备,还可在网站
上的 FeatureRequests 页面提出具体需求,在下一个版本就很有可能包含所提交的功能需求
了。MoinMoin 系统中的很多功能都是这样开发出来的。在访问网站时,用户还可以发现
MoinMoin 系统的很多系统信息都是中文,这得益于 MoinMoin 系统的 i18n 设计和世界各

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 24 -


开源社区

地中文用户的贡献,它已被翻译成 20 多种语言。如果想对 MoinMoin 的中文化做出贡献,


可以登录 http://moinmaster.wikiwikiweb.de/网站,注册一个用户并加入一个语言组后就可以
进行翻译。MoinMoin 开发社区充分利用了 Wiki 系统方便的在线交流的特点,使社区与用
户的联系更加紧密,更加有效。不仅仅 MoinMoin 项目采用这种方式,很多开源项目都是
采用这种方式与用户沟通,使用户也渗透到软件开发过程中来,使用户与社区共同发展、
成长,最终用户反馈社区,促进社区的发展状大。我们相信随着 MoinMoin、Plone、Zope3
这些优秀的 Python 应用被越来越多的国内用户所接受,MoinMoin 将会成为国内 Wiki 系统
的主流。国内知名的 Python 社区啄木鸟社区的网站就是使用 MoinMoin 来搭建的,该社区
依靠 MoinMoin 强大的在线协作功能,编写和整理了大量有关 Python 的资料,是学习
MoinMoin,学习 Python 的好地方,如图 4 所示。
MoinMoin 是一个成功的、优秀的开源项目,世界各地的志愿者通过国际互联网联系

在一起,创造了 MoinMoin Wiki 系统,创造了 MoinMoin 开源社区。不论水平高低,贡献


大小,只要有时间,有贡献的精神,都可为这个社区出一分力。作为回报,用户也将会得
到更强大、更可靠、更安全的系统。本文作为一篇 MoinMoin 的简单介绍,希望能帮助大
家了解 MoinMoin 社区,了解开源社区。同时,更希望大家能从中认识开源社区,认识开
源文化,从而能投身到开源社区中,为开源社区贡献你的智慧。

编者按:虚拟化的发展离不开开源的贡献,无论是 Xen 还是 KVM,如何发展开源虚拟化也


成为当今的热门话题,8 月 28~30 日在美国亚利桑那州的图森(Tucson)市举行了第一届 KVM
开发者大会,作为主要的开发人员,本文作者一行三人参加了此次高峰会议,在大会中也
发出了来自中国的声音,并为中国的开源爱好者带回了第一手的前沿资讯。

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 25 -


开源社区

KVM开发者大会归来

董耀祖 徐雪飞 赵云峰

在 VMware 上市受人追捧、股价节节攀升的今天,虚拟化已经成为了人们耳熟能详的
词汇,在开源的世界里,虚拟化同样如火如荼的发展着,KVM 虚拟化项目从诞生之日起
就了开源社区人员的欢迎,并且很快的纳入到了 Linux Kernel 计划当中,成为开源虚拟化
的一颗闪亮明星。
KVM 最早由 Avi Kivity 等人开发,并于 2006 年 8 月推向社区,10 月被 Linux 社区接
受。它以其代码简单、易于理解掌握以及不需要重新安装等优点很快受到了业界的欢迎与
及 Linux 项目创始人 Torvalds 的支持,并于 2006 年底被集成进 Linux 2.6.20 版内核,从此
成了为 Linux 的一个组成部分。KVM 的管理者(maintainer)是 Avi Kivity,他也因此成为
Linux 内核核心小组和 Linux 虚拟化小组的主要成员。与此同时 KVM 的开发团队也快速成
长起来,到今天发往 KVM 邮件群里的邮件每天都接近一百封,包括很多原来其他开发社
区里的资深开发者都加入了 KVM 的开发。Intel 和 IBM 等公司也投入了相当的人力到 KVM
的项目的开发中,成为 KVM 开发的主力军。

KVM 开发者社区

随着开发团队的增强,尤其是 KVM 社区的扩大,举办第一届 KVM 开发者论坛的计


划从今年初就浮出水面。笔者作为 KVM 的主要开发者,受邀于 2007 年 8 月 26 日到 31 日
参加了在美国亚利桑那州的图森(Tucson)市举行的讨论会。作为 KVM 项目的创建者
Qumranet 公司组织了这次会议,目的是在 KVM 项目成立周年之际聚集 KVM 的开发者和
爱好者们一起回顾
KVM 一年的成长
历程,讨论 KVM
的 现 状和 规划
KVM 的未来发展
方向。同时一起研
究开发中的所遇到
的问题、挑战和解
决方法,并对社区
开发的协作方式以及对 Linux 虚拟化的发展方向作深入的探讨,包括与开源社区中其他虚
拟化项目的协作如 Xen 和 lguest。
图森市位于亚利桑那州南部,靠近墨西哥边境,是一个位于沙漠中的城市,常年高温,
仙人掌比人还高。KVM 开发者论坛就选在了图森市的一处旅游胜地的度假村,笔者顺便
拍下了度假村门口的巨型仙人掌。所谓的旅游胜地是图森市的一处山谷,从那里能看到整
个城市,感受夏夜静静的图森。大约有五、六十位来自不同国家的社区成员及爱好者参加

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 26 -


开源社区

了此次会议,包括来自中国大陆的笔者 3 人。虽然人数不是很多,但是主要在开源软件方
面有突出贡献的公司如 Intel、IBM、HP、Novell 和 Red Hat 等都派人来参加了这次会议。
有趣的是 VMWare 也派了几位工程师参加此次会议。

KVM 与 Xen 和谐发展

在 KVM 开发者大会上,Intel 的多核软件主管 Sunil Saxena 分析了 KVM 的市场定位和


开发模式。他提到,今天 VMware 是虚拟化领域的市场领导者,Microsoft 是潜在的强大的
竞争者。XEN 和 KVM 是虚拟化领域的新锐,目前还很弱小。他提到 Xen 和 KVM 都是由
开源社区开发的,KVM 的大部分代码也是直接从 XEN 中移植过来,KVM 的很多开发者
也都来自 XEN 项目组,虽然 KVM 和 XEN 是两种不同的虚拟机实现方式,各有不同的优
点和使用场合,但是 KVM 和 XEN 应该互相协作,减少为不同而不同的无效竞争,尽可能
使用相同体系结构和实现方法,以提高开源社区的效率。
在此笔者非常赞同 Sunil 的观点,VMware 早在 98 年就投入到虚拟化的研究,如今凭
借着对市场长期研究的优势和专利技术,在服务器虚拟化领域取得了很高的市场份额,最
近 VMware 又成功上市,
筹集了大量资金可以投入研发和销售以进一步巩固它的领先优势。
Microsoft 凭借自己在操作系统方面的垄断地位,一旦推出自己的虚拟化方案,肯定会取得
不小的市场分额就如同他多年前进入办公软件(office)领域或浏览器领域一样。KVM 和
Xen 要想在虚拟化领域占有一席之地,就必须互相合作共同进步,至少在目前。

社区开发模式的结晶

KVM 项目从产生到收录到 Linux 内核中仅用了几个月的时间,在如此短的时间取得这


么大的进步是很惊人的,这其中有来自社区人员的不解努力,背后也有着众多企业的支持,
这充分体现了开源开发模式的优越性和先进性,可以说 KVM 是这种社区开发模式的结晶,
它凝聚了无数人的智慧和劳动成果。
来自 Intel 的 Sunil 介绍了 Intel 在虚拟技术方面的最新动向,如 EPT(extended page table)
和 VT-d(Virtualization Technology for Directed I/O)技术。在 EPT 之前,XEN 和 KVM 使
用影子页表来实现内存的虚拟化,这种软件方法非常复杂并且浪费内存。EPT 技术通过增
加额外的一层页表,使得硬件可以直接利用客户机页表获取客户机物理地址,然后通过额
外的 EPT 表将客户机物理地址转化成物理地址。EPT 消除了复杂的影子页表软件实现,简
化了 VMM 的实现,增强了系统的性能。笔者相信 EPT 技术将很快成为一个标准的虚拟化
技术。另外 VT-d 通过实现对设备的 DMA 操作的重定向,提供了在虚拟机和 I/O 设备之直
接通信的架构,实现了虚拟机对直接拥有的设备的支持。
IBM 的 Rusty Russell,也是 Lguest 的维护者(maintainer),介绍了 KVM-lite,将以支
持 paravirt_ops 为主的 lguest 和 KVM 的设备模型结合起来,可以使 KVM(用户程序)可
以运行在没有硬件虚拟化技术支持的处理器上,KVM-lite 是对 KVM 的一个很好的扩展。
同时来自 IBM 的 Carsten Emde 介绍了 KVM 在 IBM S390 架构上的设计和构想,但是对

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 27 -


开源社区

KVM/S390 的实现还在进行中;来自 IBM 的 Hollis Blanchard 介绍了 KVM 在 IBM Power PC


上的设计,KVM/PPC 实现了部分功能,可以运行 Guest 的前 50 条指令。
Qumranet 的 Uri Lublin 介绍了动态迁移,虚拟机的内存一般较大,不能一次迁移所有
的内存,否则一次迁移需要较长的时间从而导致服务中断较长时间。动态迁移先分批迁移
最近没有使用的内存,当已经迁移的内存在完全迁移前又被客户机修改时,这块内存需要
重新迁移。当剩余的未迁移内存少到一定数量时,虚拟机在一个很短的时间,大约十几毫
秒至几十毫秒时间,暂时停止服务,将整个虚拟机迁移到远端,同时立即启动迁移到远端
机器上的虚拟机以重续暂停的服务。
Qumranet 的 Dor Laor 介绍了泛虚拟化设备的(para-virtualized)驱动程序,泛虚拟化
驱动程序可以大大减少虚拟机和主机 Linux 之间的上下文切换次数,从而可以很大程度上
提高 IO 设备的性能。Dor 主张实现一条私有的虚拟总线(virtual I/O 总线),泛虚拟化设
备就挂在这条总线上。但是,一些人建议使用虚拟 PCI 总线,因为虚拟 PCI 总线更通用,
更规范,这个讨论还在进行中。

来自中国的声音

笔者中的董耀祖和赵云峰向大会作了关于 KVM 性能优化和测试方式方法;SMP 支持


的设计和改进建议;和关于内核中断控制器仿真实现的架构及其进展的报告。这也是本次
大会第一个来自中国的报告,体现了国人在 KVM 社区的贡献和地位。在 KVM-18 发布时,
KVM 的性能只有 XEN 的 1/3,但是经过笔者和开源社区开发人员近 2 个月的调试和优化,
今天的 KVM 性能和 XEN 已经
在伯仲之间。同时该报告凝结
的 是 Intel 开 源 技 术 中 心 对
KVM 的 巨 大 贡 献 、 我 们 对
KVM 并行多处理(SMP)的
支持和实现以及我们对内核中
断控制器仿真的实现和技术推
动。
另一个来自中国的报告由
笔者中的徐雪飞给出,介绍了
KVM 在 Intel 安腾
(从左至右依次为赵云峰、徐雪飞、董耀祖) (IA64)架构上的设计。
KVM/IA64 实 现 了 所 有 KVM 必 须 的 功 能 , 实 现 了 同 时 运 行 单 处 理 器 的 Linux 和
windows2003 server 的功能,同时 KVM/IA64 具有很好的性能(与 Xen/IA64 相似)。在报
告的间隙,笔者也当场进行了演示,利用位于上海的安腾机器,远程同时启动了 Linux 和
windows 客户机。作为第一个运行在非 x86 平台上的 KVM/IA64,演示非常成功,与会者
看了后都希望尽快看到源程序能尽快进入 KVM。

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 28 -


开源社区

KVM 社区的发展方向

在两天半的时间中,白天大家聚在会议室听来自世界各地不同国家不同公司的开发者
对 KVM 发展方向和技术的看法。晚上组织方安排了比较轻松自由的鸡尾酒会,通过一种
比较随意的方式让平时只能通过电子邮件交流的开发者们能有面对面的交流的机会。在每
天正式会议结束之后,还有一些称之为 BOF(birds-of-feather)的讨论。如同其名,BOF
是一群与会者可以自由的发表自己的意见和发问的地方,没有国籍、地域、辈分的约束,
每一个人可以畅所欲言,也可以打断别人的发言。
笔者参加了关于泛虚拟化设备总线形式的 BOF 讨论。大部分参与讨论的技术人员都认
为虚拟 PCI 总线够通用,
可以很好的应用在 KVM 泛虚拟化设备中。但是这遭到了来自 S390
开发者的强力反对,主要原因是 S390 系统没有 PCI 总线。来自 Qumarent 的 Dor 不排除虚
拟 PCI 总线,但是也愿意尝试一种更高效的虚拟总线。笔者是虚拟 PCI 总线的始倡导者,
也是坚决拥护者。笔者认为开源社区必须统一虚拟设备的标准,使之成为一个独立于
hypervisor 实现的标准设备。只有这样,Xen 和 KVM 甚或 Vmware 才有可能在未来共用由
第三方开发的虚拟设备驱动程序,而不必使整个开源社区将精力花在无意义的为不同而不
同上,避免对虚拟设备驱动程序的重复开发上。从讨论的结果来看,大多数的人还是认为
虚拟 PCI 总线是一个不错的选择。
另外对于 KVM 的用户模式,是定位在服务器加固(server consolidation)还是面向客
户端(client)使用,不同的公司有不同的定位和看法。Avi 想将 KVM 定位为一种通用的
虚拟化工具,不同的用户模式都可以利用它作进一步的裁剪(customization)。笔者以为对
KVM 的用户模式的不同认知,或多或少会影响 KVM 的发展方向,如对 SMP 的支持,扩
展性的延伸等等。在未来的一年里,笔者认为 KVM 将在 SMP,性能,扩展性,EPT/NPT,
VT-d 和直通设备(pass-through),安全性等方面会有长足的发展。
链接
Avi Kivity
Avi Kiviky 是 KVM 项目的维护人和领导者,
也是 Qumranet 公司的资深软件工程师。Qumranet
(Qumran 是位于发现圣经《死海古卷》洞窟附近的古老聚落)总部和研发中心位于以色列,
Avi 本人也主要在以色列的 Qumran 工作。他曾经参与过 Xen 的开发.在此之前参与过
ScaleMP 项目并发明了 Versatile SMP (vSMP) 架构,Exanet,参与创立了 Avionitek。

开源与SaaS

顾宏军

SaaS 是 Software-as-a-service(软件即服务)的简称,一般认为它与“on-demand software”


(按需软件),the application service provider(ASP,应用服务提供商),hosted software(托管

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 29 -


开源社区

软件)具有相似的含义,是一种通过 Internet 提供软件的模式,厂商将应用软件统一部署在


自己的服务器上,客户可以根据自己实际需求,通过互联网向厂商定购所需的应用软件服
务,按定购的服务多少和时间长短向厂商支付费用,并通过互联网获得厂商提供的服务。
SaaS 不仅适用于中小型企业,所有规模的企业都会从 SaaS 中获利。但普遍认为对于
许多小型企业来说,SaaS 是采用先进技术的最好途径,相比较传统软件销售方式而言 SaaS
具有很多独特的特征。
SaaS 取消了传统的软件授权费用,厂商将应用软件部署在统一的服务器上,免除了最
终用户的服务器硬件、网络安全设备和软件升级维护的支出,客户不需要除了个人电脑和
互联网连接之外的其它 IT 投资就可以通过互联网获得所需要软件和服务。此外,大量的新
技术,如 Web Service、SOA,提供了更简单、更灵活、更实用的 SaaS。
SaaS 供应商通常是按照客户所租用的软件模块来进行收费,用户可以根据需求按需订
购软件应用服务,而 SaaS 的供应商会负责系统的部署、升级和维护;而传统管理软件通常
是买家需要一次支付一笔可观的费用才能正式启动。
当 Salesforce 轰轰烈烈的上市,并一路席卷 CRM 市场的时候,SaaS 概念被其演绎的
淋漓尽致。Salesforce 并不出售 CRM 软件,它只是在互联网上搭建了一个平台,人们缴纳
少许租用费就可以在网上使用这个 CRM 系统,使用者无需花费高昂的费用购买 Licence,
无需自己安装软件,无需购买硬件服务器,无需配备专门的维护技术人员,所有要做的就
是打开浏览器使用它。
这种基于互联网的 SAAS 风潮正在愈演愈烈,Google 将整套的 Office 搬上了互联网,
大名鼎鼎的 Photoshop 也能在网上使用,连微软、IBM 也成立网络软件部门,雷曼兄弟的
1 亿港币投向了金蝶的 SAAS 产品,马云的 3 亿人民币砸进以 SAAS 为本的阿里软件,一
些中小型软件商更是嗅到了这里面翻盘或向沉甸甸的大软件商叫板的机会。

SaaS 真的那么好么?

企业采用 SaaS 服务模式节省了大量用于购买 IT 产品、技术和维护运行的资金,且像


打开自来水龙头就能用水一样,方便地利用信息化系统,大幅度降低了中小企业信息化的
门槛与风险。但是我们在看到 SaaS 可能改变整个软件工业的同时,我们也要看到传统 SaaS
模式潜在的问题或风险,中小企业(SME)使用传统 SaaS 模式进行信息化应用很可能是“看
起来很美”。
短期与长期:软件租赁和购买的选择,和现实生活的租住房子还是购买房子的选择有
很大类似,租赁只是获得使用权,而非所有权,另外国人的习惯还是更相信购买的东西才
是自己的。租赁适合企业缺资本,无人才时采用,或非核心部门采用,但凡稍有能力时,
企业还是会考虑购买软件,现场部署。因为 SaaS 软件每年的租用费用看似不高,但是使用
越久越有依赖性,每年租赁费用积累起来,不比购买所需的开支少。
迁移成本:日常租住房屋时,一个地方租住段时间就换地方是很平常的,有时还要请
搬家公司帮搬东西。但在软件租赁中,更换服务商的成本很高。因为各家软件运营商的软
件是不互通的,客户在原先运营商处的商业数据,很难迁移到新服务提供商处,属于典型

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 30 -


开源社区

的上船容易,下船很麻烦。也许市场上会出现专业的“SaaS 搬家公司”。
运营商风险:刚才提到运营商之间的数据迁移很麻烦的事情,如果您的运营商倒闭了,
客户如何获得原属于自己的数据,客户在取回数据后如何处理,是导入到新运营商处,还
是其它处理将是个大问题。没有配套软件的数据就有一堆无用的数据库文件。
软件定制问题:个人应用,娱乐应用存在相当的共性,而企业应用很多时候,有企业
独有的需求,这种情况下,软件租用运营商几乎是很难为客户提供定制的,因为定制意味
着新版本,定制会对其软件升级更新等带来很大麻烦。
数据安全性:随着企业业务越来越离不开网络,大量的数据都存在与计算机中,而企
业数据多半是机密性的,如果这些数据存放在软件运营商处,尤其国内的诚信等缺失的情
况下,安全性谁来保证。

基本上,现在媒体宣传的 SaaS 模式,多是原来的商业软件,摇身一变换种方式发布授


权,进行收费,改一次性支付许可费为按年支付许可费。这种模式其实并未从根本上取消
“软件授权”
,也非真正的“软件即服务”。

开源商业模式

Opensource 自从诞生之日起,它的商业模式就不断地在被探索。开源在一般人眼里就
是免费,即使不是免费也是廉价的代名词。 但开源软件的发展需要资本的支持,我们不能
指望开源体系里面每一件东西都是捐来的,于是人们寻找开源的商业模式,这也是开源必
须的发展之路。

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 31 -


开源社区

开源软件的授
权方式注定了开源
不可能走传统商业
软 件 靠 卖 licence
老路,因为开源软
件版权不是某个人
的,而是属于某个
松散的技术社区或
组织,无论从商业
还是道德的角度想
等同封闭代码软件
一样卖许可都是不
SaaS 商业结构
可能的,或者说是
靠不住的。使得很多的开源软件的商业模式都是将开源软件作为一种附属品,增值品存在。
免费的开源软件与收费的商业版组件捆绑是典型的做法,比如说收费的书籍教程、嵌入式
模式(硬件收费)、混合模式(特有商业模块收费、高级版本收费)等。这些商业模式都是
将开源软件作为其它东西的陪衬而存在的模式。

广义 SaaS

当我们提到"软件即服务"的时候,突然感觉这个词汇天生就是为开源软件而创造的。
开源软件的自身特征也决定了 Software-as-a-service(软件即服务)将是最好的开源商业模
式:免费的开源软件+收费的专业服务,这是真正以开源软件为中心的模式,这些服务包
括培训、实施、定制开发、软件托管等。
广义的 SaaS 的概念既包括在线托管型 SaaS,也应该包括现场实施型 SaaS,只是这种
现场实施服务,不是靠授权收费,而是靠服务收费。红帽的订阅模式,众多开源软件的定
制化、服务销售模式,都是对 SaaS 理念进行的有力的支撑和延伸。

开源 SaaS 模式

开源 SaaS 是一种广义的 SaaS 模式,因为开源软件没有授权费,所以所有开源软件现


场部署也可算是"软件即服务"的一种体现。另外,开源软件 SaaS 还可免除上文提到的商业
软件实施 SaaS 时潜在的各种风险。
开源软件没有授权费用,而且可能会出现同一开源软件的多家 SaaS 运营商,如果老运
营商出现问题,客户可在数据导出后,将数据很方便的迁移到另外一个服务提供商处,免
除了采用商业软件 SaaS 时,运营商出现问题时,难以更换服务商的问题。
开源软件传播的自由性,使得用户可通过多种途径获得软件。在用户需要本地部署、
需要特定功能时,用户可很方便的将原 SaaS 运营商处的商业数据导入到本地系统内,还可

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 32 -


开源社区

自行开发所需特定功能,或聘请专业的开源软件服务公司代为进行,免除了商业软件 SaaS
时,难以迁移到本地,或迁移成本很高的问题。
开源 SaaS 模式大概可分为两大类:
◆开源在线版 SaaS,通过一对多的服务模式,满足客户共通的需求,开源软件公司只需要
维护这一个系统,就能给千万个客户提供服务,公司的维护和开发工作也相对少了,客户
的成本也降低了。
◆开源现场版 SaaS,通过一对一的服务模式,满足客户特有的需求,如现场部署、定制开
发、现场培训等需求,这种服务模式适合不需复制性的客户,相对效率比较低,但可满足
客户灵活性需求。
另外,使用开源软件做 SAAS 模式的时候开发周期大大缩短,优势非常明显。 开源
软件一般都会有相对坚固和强壮的底层架构,源代码开放使得在其基础上开发 WEB 应用
可以更快速,而 Linux、Apache、Mysql 等优秀开源软件可以提供从操作系统、web 服务器、
数据库等全套的 SAAS 基础解决方案。
目前一些用开源软件做出的 SAAS 应用渐渐的出现了,highrisehq.com 这个刚上线就备
受欢迎的 CRM 是基于开源的 Ruby on Rails。可喜的是,国内也出现的开源的 SAAS 应用,
基于开源组合 pyhton/zope/plone 的在线团队项目协作产品 EveryDo。这些都预示着开源软
件相当适合实施 SaaS 模式。

SaaS 的未来

最近的一次市场研究机构 IDC 对微软的渠道合作伙伴的研究报告显示,软件即服务


(SaaS)被传统的独立软件供应商看作一个巨大的机遇。76%的被调查人员认为 SaaS 将极
大地影响该合作伙伴市场前景,70%的解决方案开发商认为这是一个巨大的机会。
IDC 预计更多的公司将会在明年进军 SaaS 领域,其中包括 SAP、微软、思科和 IBM 。
虽然目前 SaaS 在软件总收入中占的比例很小(大约 2%),但预计这个比例将会以每年 25
%的速度增长 ,并且到 2011 年,SaaS 软件收入将会达到 145 亿美元。
虽然在 IDC 的报告中,没有提及开源软件,但是在即将到来的 SaaS 时代,开源软件
最适合实施 SaaS 将得到验证,开源商业模式也会得到很好的完善和补充;开源 SaaS 模式
将同时向预制型在线租用和按需定制型现场部署两方面发展。
CIO 选择 SaaS 的最主要原因是,部署起来非常快捷,没有许可证费用和搭建基础环节
的费用,而且能够处理好一般的业务流程。SaaS 的启动成本不高,因此企业有足够的灵活
性,在遇到问题后改变方向并加快发展。相比之下,由于应用软件都已经打包完毕,所以
就缺少这样的灵活性。
选择 SaaS 的另一个原因是,它可以促使企业使用标准化的业务流程。现在很多公司都
过分夸大流程的独特性,过分强调定制服务。而且,即使使用了标准的 SaaS 工具,并不意
味着每个企业从中得到的结果也相同。因为如何配置和使用 SaaS 是一种秘方,配置和使用
方式不同就会产生流程差异。

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 33 -


知识学堂

知识学堂

Linux系统管理员进阶【之一】

张育人

作为一个 Linux 系统管理员,我看了许多有关 Linux 的文档和书籍,并为学习 Linux


付出了许多艰苦的努力。我曾在《开放系统世界》上介绍过初学 Linux 时要掌握的基础知
识,以及如何寻找解决问题的方法。
当真正获得了一份正式的 Linux 系统管理工作后,我更加深刻地理解了 Linux 的灵魂:
服务与多用户。Linux 系统知识是非常广博的,但是只要掌握了重点知识,管理它并没有
想象中的那么可怕。
在随后的几篇文章中,我会将作为系统管理员的一些工作心得和总结出来的经验系统
地介绍给读者。这些内容包括系统管理的基础知识、局域网环境下的 Linux 管理及应用、
Internet 环境下的 Linux 管理及应用、如何能“可持续”地学习 Linux 等。本篇主要讲讲 Linux
系统管理的基础知识。

用Unix思维思考Linux

由于 Linux 是参照 Unix 的思想来设计的,理解和掌握它就必须以 Unix 的思维来进行,


而不能以 Windows 思维。
不可否认,Windows 在市场上的成功很大一部分在于技术思想的独到之处。可是这个
创新是在面对个人用户的前提下进行的,而面对着企业级的服务应用,它还是有些力不从
心。多年来在计算机操作系统领域一直是二者独大:Unix 在服务器领域,Windows 在个人
用户领域。由此可见,用户需求决定了所采用的操作系统。
不管什么原因,如果要学习 Linux,那么首先要将思维从 Windows 的“小水池”中拖
出来,放入 Unix 的海洋。下面我们就来看看 Linux 究竟有哪些独到之处。

Shell

对于 Shell——壳,习惯 Windows 的读者肯定是非常陌生的,因为 Windows 只有一个


“Shell”(如果可以说是 Shell 的话)
,那就是 Windows。用一句话容易理解的解释就是,
Shell 是用户输入命令与系统解释命令之间的中介。最直观的说法,一种 Shell 有一套自己
的命令。举一个容易理解的例子,Linux 的标准 Shell 是 Bash Shell;Solaris(一种 Unix)
的标准 Shell 是 B Shell;DOS 的“标准 Shell”是 DOS。
“列文件明细”这个动作分别要用
命令“ll,ls -l,dir”来实现。说“标准 Shell”是因为 Linux 可以支持几种 Shell,有 Bash Shell、
KSH Shell 和 TCSH Shell 等。
Linux 的 Shell 是以命令行的方式表现出来的。读者可能会不理解,Windows 从命令行

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 34 -


知识学堂

“进化”到了图形界面,那么 Linux 现在还使用命令行岂不是一种倒退?当初我刚刚接触


Linux 时就曾有过这种想法。可是后来发现,如果使用图形界面,那么分配给应用软件的
资源就少了,在价格昂贵的服务器上,能够以较低的硬件配置实现同样的功能是非常重要
的。
下面举例说明,一台服务器有 512MB 内存,假设其中 256MB 用于处理图形界面,若要安
装一个需要 384MB 内存的数据库软件,惟一的办法就是扩大内存。但是如果使用命令行,
系统可能只需要 64MB 内存,其它的内存就可以供数据库软件使用了。使用命令行,不仅
是内存,而且 CPU 及硬盘等资源的占用都要节省很多。所以,作为服务器使用命令行是优
点而不是缺点。
既然 Shell 有这么多优点,
接下来就要学习它。由于各版本的 Linux 以 Bash 为默认 Shell,
所以下面关于 Shell 的一些技术细节都以 Bash Shell 为准。Shell 有下面几个重点部分:
◆文件安全与权限
◆文件资源查找
◆命令
◆输入与输出
◆文本过滤
◆环境
◆Shell 脚本
◆运行级
1.文件安全与权限
Linux 系统用文件来表示一切,可以是目录、文档、链接、块设备、套接字、字符设备、
命名管道或其它各种各样的对象。文件相关的属性有类型、权限、硬链接、属主、属组、
大小、更新时间和名称等。用“ll”命令列出清单,输出第一列的首字母表示文件类型,
其它部分表示文件权限;剩下的每一列对应上述所说的一个关键属性。见如下实例:
# ll
total 28
-rwxr--r-- 1 root root 70 Sep 9 2003 cpusers
drwx------ 3 root root 4096 Mar 10 14:43 Desktop
-rwxr-xr-x 1 root root 181 Nov 12 17:32 mail-check-report.sh
-rwxr--r-- 1 root root 2860 Nov 12 18:30 mail-quota.report
-rw-r--r-- 1 root root 7 Sep 26 16:38 minicom.cap
-rw-r--r-- 1 root root 511 Sep 26 16:37 minicom.log
-rw-r--r-- 1 root root 3673 Mar 11 00:23 passwd
文件类型解释如表 1 所示。
表 1:文件类型一览表
d 目录
l 符号链接(指向另一个文件)
s 套接字文件
b 块设备文件

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 35 -


知识学堂

c 字符设备文件
p 命名管道文件
- 普通文件,或者更准确地说不属于以上几种类型的文件
权限要配合属主和属组来理解,r 代表可读,w 代表可写,x 代表可运行。三个字母为
一段,第一段代表属主权利,第二段代表属组权利,第三段代表其它用户权利。如果相应
权利位为“-”,则表示不具有这种权利。
链接分为硬链接和软链接,硬链接和原有文件是存储在同一物理地址的两个不同的名
字;软链接类似于 Windows 中的快捷方式,本身的内容是被指向文件的内容。
文件大小的单位是 KB,注意这里不一定就是真正的大小,因为文件有各种类型,例
如目录的大小大多数是 4096KB。
与 Windows 不同,Linux 文件没有固定扩展名,但是扩展名遵循一定的标准。
Linux 下能够更改这些设置的主要命令有 chown、chgrp、umask 和 setuid,具体用法此
处就不详细介绍了,可以通过“man 命令名”来学习。例如,对于 man 命令的使用方法可
以使用“man man”来学习。
需要注意的是,在 Linux 中需要区分大小写,例如,ls 与 LS 是两个不同的命令。
2.文件资源查找
对于文件资源的寻找最有效的方法就是搜索,find 与 grep 是最主要的两个命令。find 引用
文件属性进行查找,所谓文件属性,就是指文件名、文件权限等类型的属性。grep 根据文
件内容进行查找,能够分析文本内相关的数据,但是它对二进制文件无能为力(二进制文
件是给 CPU 看的)。
3.命令
掌握 Shell 命令是学习 Linux 基础的基础,除去前面提到的命令外,Bash 还有不少内置的
命令,详见表 2。
表 2:Bash 内置命令
命令 说明
alias 设置别名
bg 使一个被挂起的进程在后台继续进行
cd 改变当前工作目录
echo 显示字符串或变量的值
exit 退出 Bash
eval 将命令所带的参数作为一个命令行来执行
export 使变量的值对当前 Bash 的所有子进程都可见
fc 编辑历史命令列表里的命令
fg 使一个被挂起的进程在前台继续进行
help 显示 Bash 内置命令的帮助信息
kill 终止某个进程
pwd 显示当前工作路径
read 从标准输入读取字符串序列

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 36 -


知识学堂

time 显示执行其参数命令所使用的用户和系统累计时间
unalias 删除已经定义的别名
text expr 或[expr] 用于测试一个表达式 expr 的真假
if expr then cmd fi 用于实现单分支结构
if expr then cmd else cmd fi 用于实现双分支结构
case...esac 用于实现多分支结构
for...do...done 用于实现 for 型循环
while...do...done 用于实现当型循环
until...do...done 用于实现直到型循环
break 用于跳出循环结构
continue 用于重新开始下一轮循环
引用这些内置命令不需要 Shell 环境的配合,也就是不需要对命令的所在进行设置。
除了这些内置命令外,还有许多的“外部”命令,这些命令依赖于 Shell 环境。后面
我将讲述 Shell 环境,它们一般处于/bin、/usr/bin/、/sbin 和/usr/sbin 等目录下,可以用 echo
$PATH 查看系统 Shell 环境默认的路径设置,在这些路径下寻找可执行命令,同样“man 命
令名”提供了很好的教学。
4.输入与输出
Shell 的基本任务是处理输入和输出,在很多文档和书籍中提到标准输入和标准输出的
概念,可以认为标准输入就是键盘,标准输出就是屏幕。Bash 可以从标准输入中获得命令,
也可以用其它方式获得输入,例如文件输出同样可以输出到别的地方。这种使用非标准输
入输出(I/O)的方式叫做 I/O 重定向。关于重定向操作的操作符号见表 3。
表 3:I/O 重定向操作符
符号 解释 举例 解释
> 重定向到新的输出 ls > files.txt 列文件清单并将结果存入 files.txt 文件
>> 追加重定向到新的输出 ls >> files.txt 列文件清单,并将结果追加到 files.txt 文件
< 重定向到新的输入 sort < files.txt 将 files.txt 的内容排序
<< 追加重定向到新的输入 sort << files.txt 将 files.txt 的内容排序
| 将输出通过管道传递到输入 ls | sort 列文件清单并排序
重定向有什么作用呢?比如系统需要在某种情况下回复 E-mail,并且它的内容又是固
定的,这时使用重定向可以把固定内容写入一个文件,回复 E-mail 的时候输入采用这个文
件即可。
5.文本过滤
假如需要写一个文件,这个文件是由许多其它文件中的段落或列组成,并且这些段落
和列的内容是不断变化的,这时用拷贝粘贴来手工完成这个任务就显得非常低效。聪明的
方法是使用文本过滤,写一个脚本来形成这个文件。
文本过滤是 Unix/Linux 的一大特色,Linux 的文本过滤几乎可以满足任意的文本过滤
需求。文本过滤主要由 awk 和 sed 来完成,这不是两个简单的命令,而是代表了两种过滤
方式。awk 对于列操作比较有优势,但对于行操作则远不如 sed 方便。关于这部分内容,

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 37 -


知识学堂

可以参考专门讲述 awk 和 sed 的文档。


6.环境
Shell 环境就是当用户使用这个 Shell 的时候一些设置,比如命令从哪里寻找等。当打
开一个命令窗口(无论是从本机还是网络),想要列出文件明细的时候,输入命令 ll,但如
果系统没有默认的环境,就会提示命令找不到,必须输入/usr/bin/ll 才可以列出文件清单。
默认的设置存在 Shell 相关环境文件中,这些文件是/etc/profile、/etc/bashrc 及用户目录下
的.bash_profile 和.bashrc,有时候还会用到/etc/skel 下的文件。简单地更改环境的命令是
export。下面的例子说明了如何使用这个命令,请依次输入以下的英文命令(不要输入解
释):
MYNAME=Fisher
export $MYNAME
echo $MYNAME
在上面命令中,第一行表示设置变量 MYNAME 的值为 Fisher;
第 2 行表示导出变量到 Shell;
第 3 行表示显示变量。
然后屏幕上会显示下面结果:
Fisher
假如将所有的可执行文件都移动到/root 文件夹,做如下的设置才能保证不输入命令的路径
就可以找到它们:
#PATH=/root
#export $PATH
7.Shell 脚本
从我的角度看来,Shell 最重要的特性就是 Shell 脚本。所谓 Shell 脚本,作用与 Windows
中的批处理相同,就是将一组命令写到一个脚本文件中,运行这个脚本就可以自动运行这
一组命令。不同的是,Linux 的 Shell 脚本要强大的多。Linux 脚本对于维护任务的自动化
是非常有帮助的。
下面用一个日常维护的例子来说明。有一次我维护一个 Windows 2000 系统和一个
Linux 系统,需要让这两个系统每隔一分种检查某个文件是否存在,若存在则自动重启。
在 Linux 下用一个脚本就很简单地解决了这个问题;而在 Windows 中,必须安装一个第三
方软件才能解决问题。
Shell 脚本对于维护任务的规范化也有很大的帮助,有经验的管理员会把某个应用的安
装与维护用脚本来完成,由于很多应用服务安装一次后很久都不会有再次安装的机会,而
每次安装要配置的东西都非常多,将配置过程写入脚本,到了下一次安装的时候就可以防
止遗漏某些步骤,避免了手工操作的不规范化。
Shell 脚本的编写不需要学习编程语言,只要能够掌握 Shell 的命令和一些脚本过程即
可完成大多数系统维护任务。例如,某个系统增加用户的同时还需要给账户设置磁盘限额,
并给其一个初始口令。此外,令这个账户 telnet 到系统可以更改密码。用一个脚本来完成,
首先配置一个有相同磁盘限额的账户 abc 作为模板,然后使用如下脚本来代替 useradd 命令。
#!/bin/bash
# Bash 脚本第一行总是以上形式给出

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 38 -


知识学堂

# 随后以#开头的行为注释行
/usr/sbin/useradd -s /usr/bin/passwd $1
# 调用增加用户 useradd 这个命令,参数由输入读入,设置登录为更改密码
/usr/sbinedquota -p abc $1
# 调用 edquota 命令设置磁盘限额与 abc 账户设置的一致
# edquota 命令只有在安装了 Quota 软件的情况下才存在
/usr/bin/passwd $1
# 调用 passwd 命令设置这个账户的密码(初始密码)
# 脚本到这里结束
打开文本编辑器,例如 gedit,将这些脚本内容拷贝到其中,保存成/root/myuseradd.sh
脚本文件,用“.sh”后缀表示这是一个 Bash 的脚本,运行命令“chmod a+x myuseradd.sh”
使之能够被执行,然后在同目录下运行“./myuseradd.sh aaa”就可以添加具有上述特征的
账户 aaa 了。
前面我曾介绍过,很多服务器是没有 X 界面的,那么在文本模式下对文件编辑器的掌握就
是编写 Shell 脚本的必要基础。Linux 文本模式下的文本编辑器主要为 vi 和 Emacs,想要了
解它们可参考有关它们的详细文档。
要想成为一个好的系统管理员,Shell 脚本是要掌握的重要技能之一。
8.运行级
运行级是系统启动到何种状态的定义,了解运行级的内容有助于系统管理员解决一些
棘手的系统启动或关闭故障。
系统含有七种运行级别,详见表 4。
表 4:各个运行级别的用途
运行级别 0 启动和停止整个系统
运行级别 1 单用户或管理模式
运行级别 2 多用户模式,部分网络服务被启动
运行级别 3 正常操作运行模式,启动所有的网络服务
运行级别 4 用户定义的模式,可以使用该级别来定制所需要运行的服务
运行级别 5 缺省 X-Window 模式(即 Linux 图形模式)
运行级别 6 重启动
每一个运行级别对应一个运行级别目录/etc/rcN.d,N 是 1~7。运行级别目录中含有一
系列启动服务的脚本。这里的“服务”可以是守护进程、应用程序、服务器、子系统或脚
本进程。在系统启动的过程中,将会启动一个名为 init 的进程(它是系统中所有进程的祖
先)。它所要完成的一部分工作就是看看需要启动哪些服务,应当缺省地进入哪一个运行级
别,通过查看/etc/inittab 配置文件来获得上述信息。事实上,/etc/rcN.d 中都是一些链接,
真正的文件放在/etc/rc.d/init.d 中,系统管理员可以写一些脚本放在这些目录中来判断启动
或关闭故障。
对于 Shell 的重点内容介绍到这里就结束了。虽然 Linux 不仅有 Shell,还有内核与
X-Window,但 Shell 是 Linux 系统管理员每天都要面对的、最亲密的伙伴,系统管理员可

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 39 -


知识学堂

以用 Shell 管理各种应用(注意,这里的应用包括了操作系统服务和应用服务)。

服务

仅仅理解 Shell 是不够的,我们还要了解 Linux 的主要特征:服务。


1.服务本质
读者可能还记得前边文章提出的 Samba 服务,这个服务的功能就是将 Linux 服务器的
磁盘共享给 Windows 用户使用。大家也许会问,现在的普通 IDE 硬盘那么便宜——不到
1000 元就可以买到 120GB,甚至更大的,在 PC 上就可以存所有的文件,不需要共享服务
器的硬盘来保存文件。那么这个服务还有什么必要吗?很有必要!因为服务器的保护是非
常严密的,不仅硬盘是 SCSI 的,还有 RAID、UPS 和定期备份,而且配备专人(系统管理
员)来维护。这些措施保护的是什么?是数据。当辛辛苦苦写了一篇文章,或者经过艰苦
努力做了一个实验报告,其中包含了很多无法再得出的数据,一旦硬盘毁坏,这些无价的
东西就会损失。若给每个人的 PC 按照服务器标准来配置上面所提到的各种保护措施,那
么这个硬盘的价格是非常的惊人,普通用户是根本无法承担的。可见,服务的本质是将昂
贵的设备或有限的资源提供给多个用户进行共享。
2.Linux 提供的服务
有的朋友只想将 Linux 拿来自己使用,也就是说用来做桌面系统,这时的体验是 Linux
做桌面系统还不如 Windows 舒服和方便。当我是个人用户的时候,的确也是这种思维,甚
至因为 Linux 要面对看起来好像“过时”的命令行和更多的英文,而恐惧和讨厌它。但是,
在一个企业网络环境下,为了降低成本,服务处处可见。最常见的应用就是打印机共享,
给每个人配打印机肯定不如大家一起用一台打印机省钱。即使在家中使用计算机,很少人
会给每个 PC 申请一条电话线,而是通过某种服务来共享连接。也就是说,在计算机越多
的环境下,服务越有存在的必要。
一旦触及到服务,就会发现良好的 GUI(图形用户接口)远不如稳定性、安全性和服
务的可管理性重要。因为稳定性与安全性是服务质量的两个重要指标。
Linux 提供服务与 Windows 提供服务有个很显著的区别。打个比方,去饭店吃饭,名
叫 Linux 的厨师提供给各个小料成分、使用方式等,由用户自己来调制喜欢的菜肴;而名
叫 Windows 的“厨师”提供的就是一道做好的菜,
“经理”Microsoft 说,Windows 调查了
大量普通消费者的口味,尽量保证这道菜符合每个人的口味。这个例子意味着 Linux 是可
定制的系统,除了必须的服务软件外,其它很多没用的东西是可以不安装的。由于软件都
是有安全性问题的,越少软件组成的系统其安全性就越高。Linux 以其可定制的特性保证
了系统的高安全性。
此外,Linux 是一个松耦合系统,而 Windows 是一个紧耦合系统。耦合表示的是各个
部件之间的关联程度。使用 Linux 的时候服务 1 瘫痪了,不会影响到或很少影响到服务 2;
而在 Windows 中,经常可以碰到某个服务瘫痪导致整个系统崩溃的情况。Linux 的稳定性
由此可以得出结论。
正是由于 Linux 的可定制与松耦合优势,使它很适合作为服务器系统为网络提供服务。

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 40 -


知识学堂

在后续的文章中读者可以看出,无论是在局域网还是 Internet 情况下,服务都处于一个中


心位置,Linux 将会在这些地方大显身手。

多用户

还记得 DOS 吗?当一个人在计算机前操作 DOS 操作系统的时候,其它人是无法通过


网络或其它方式来使用这个系统的。上面提到服务的本质就是资源共享,只能供一个人使
用的系统根本无法成为服务系统。
Linux 的多用户是由内核直接支持的,这意味着无论采用哪种 Shell 都可以享受到多用
户带来的好处。现在主流的操作系统,无论 Unix、Linux 还是 Windows,都支持多用户。
在大家对 Linux 如何应用有了清楚的认识之后,可以接着阅读后续的文章。

重读 2.4 内核(1)

贺永利

由于并没有想到要把这一系列的学习笔记做任何文章的形式,所以突然要这样做的时
候,就比较仓促,内容也多有删节.原始内容可以到下面的网址查到:
http://osdev.gro.clinux.org/#Linux-2.4;http://www.linuxforum.net/kernel/2.4
对于正在 coding 的程序员,最终还是要到代码的海洋中冲锋陷阵,这些笔记大多和代码,
具体的细节有非常紧密的关系,从期刊上看起来会比较费力,不过好在可以到上述网址查到
原文. 笔记的整理格式是按照目录/文件的字母顺序来的,或许并不适合顺序阅读,去找原文,
当作资料看好了.这里给个梗概吧.文中多有引用各处的资料,还有网友的研究成果,再次统一
致谢. 如有版权问题,请联系期刊编辑. 文中内容也无法保证完全正确,见谅.
所有文章基于 linux kernel 2.4.0 这个版本,为什么不是 2.6? 因为开始的时候看的 2.4,既
然开始了,就坚持到结束吧.
arch/i386/fault.c
页面异常, swap, address space, shmem, filemap 从文件开始,而不拘泥于文件。此文件内只
有两个函数。
1. __verify_write int __verify_write(const void * addr, unsigned long size)
此函数主要应用于检查用户传递的内存块是否"可写". 可写意味着:
a)内核容许其写,即 vma 的记录;
b)相应的物理页面已经分配,即虚存已经有了对应的映射. 主要使用者是
access_ok (include/asm-i386/uaccess.h).

access_ok 大量应用于和用户空间进行数据交换的时候检查用户传递的内
存是否合法.以避免在内核中产生页面访问异常,被别有用心的程序破坏了"大

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 41 -


知识学堂

好形势".
下面是此函数,以及注释.
/*
* Ugly, ugly, but the goto's result in better assembly..
* 在操作用户传递的内存时检查其有效性,如果容许则预先扩展其堆栈
* 或者为虚拟内存分配物理页面
*/
int __verify_write(const void * addr, unsigned long size)
{
…….
vma = find_vma(current->mm, start);//寻找 vma 满足 start<vma->end
if (!vma)
goto bad_area; //访问非法地址
if (vma->vm_start > start) //访问堆栈空洞,需要扩展用户堆栈
goto check_stack;
good_area:
……
for (;;) {
if (handle_mm_fault(current->mm, vma, start, 1) <= 0)//检查 page table->
goto bad_area; //page dir->page 本身, 有任何没有分配的页面,即刻分配物理
if (!size) //页面
break;

}
return 1;
check_stack:
if (!(vma->vm_flags & VM_GROWSDOWN)) //必须是堆栈(或者有 VM_GROWSDOWN
属性)
goto bad_area;
if (expand_stack(vma, start) == 0) //只是扩展其 vma 中的地址范围
goto good_area; //还要给扩展的堆栈分配物理页面
bad_area:
return 0;
}
就这个函数本身,其中的注释已经足以理解其逻辑. 需要着重强调的是:
a) vma
vma 是内核管理虚拟内存的手段,其中记录了进程所拥有的虚拟地址的范围和属性,是处理
内存异常的依据之一. 如果进程所有的虚存较多,vma 还可以组织成平衡树,以加快查找速

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 42 -


知识学堂

度,不过这是 vma 资源的管理算法,而不是内核的逻辑. 逻辑和具体资源管理算法应该区别


对待,以免陷入万劫不复的细节中去.所以, find_vma 本身的细节不用去追究,否则分析之粒
度就过于详细,反而迷失于内核之中了.
b) handle_mm_fault (mm/memory.c)
此函数其使用在这里是"不务正业"的, 使用在本文件的下一个函数 do_page_fault 才是正道.
其逻辑是比较简单的. 内核假定有三级页面映射,此函数顺着指定地址摸下去将涉及到的
page table entry, page dir entry, 逐个检查一遍如有未分配之 page dir , page, 就分配一个并设
置好相应的 entry.其复杂之处在于 handle_mm_fault->handle_pte_fault(也在 memory.c 之中):
先来注释一把:
/* 此段不翻译了,我们不是在翻译内核源码. */
static inline int handle_pte_fault(struct mm_struct *mm,
struct vm_area_struct * vma, unsigned long address,
int write_access, pte_t * pte)
{
/*
* We need the page table lock to synchronize with kswapd
* and the SMP-safe atomic PTE updates.
*/
spin_lock(&mm->page_table_lock);
entry = *pte;
if (!pte_present(entry)) { //pte 不存在,映射有问题,又分为两种情况
spin_unlock(&mm->page_table_lock);
if (pte_none(entry)) //第一种情况:根本没有建立,或者已经被断开
return do_no_page(mm, vma, //页面不存在, 就是没有,或者被 try_to_swap_out
address, // 断开, 这种页可以属于 page cache
write_access,
pte // 参见 filemap_nopage 了解 page cache 的换入
);

return do_swap_page(mm, vma, //第二种情况: not present, 那么就属于 swapper_space


管理
address, pte,
pte_to_swp_entry(entry),
write_access
);
}

//如果是 read 时产生陷入或者时 pte 的映射问题

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 43 -


知识学堂

//或者是一个非法的操作, 已经在 do_page_fault 过滤掉了


if (write_access) { //由于页面写保护产生的陷入, 而 OS 却容许用户写入
if (!pte_write(entry))
return do_wp_page( mm, //就是处理 COW 的第二步
vma, //Copy on Write
address, //第一步是建立一个不容许写的页
pte, entry //却在 vma 中赋予用户写的权限
);

entry = pte_mkdirty(entry);
}
entry = pte_mkyoung(entry);
establish_pte(vma, address, pte, entry);
spin_unlock(&mm->page_table_lock);
return 1;
}
这里要强调的是页面的换入. 有以下途经分配/换入页面,从而建立页面映射.
I)第一种情况:根本没有建立,或者已经被断开.换入函数 do_no_page(mm/memory.c), 首先
尝试 vma->vm_ops->nopage,如果 vma 没有提供 nopage 操作就使用 do_anonymous_page 分
配一个空闲页面. (本次分析细节到此结束)
II)第二种情况是被交换到了 swap space 则通过 do_swap_page 从 swap 文件读入内存(或者
从 swap cache 找回).此函数还涉及计 COW, 这里不再讨论. 页面的释放和换出这里页简单
提提,首先定义匿名页面是 page->mapping(address mapping) 为 NULL 的页面.页面换出当然
是 try_to_swap_out 所为 .try_to_swap_out 换出非匿名页的时候是直接断开页面映射.匿名的
clean 页面的映射也是直接断开,因为不需要写入交换文件.如果是 dirty 的匿名页,则分配一
个 swap 页(swap file 中的一个页面)然后将 swap 页的 entry 写入 pte,并置 pte 为页面不在内
存.try_to_swap_out 区别对待这三种页面,和 handle_pte_fault 换入页面的不同操作相对应.
总结一下页面的周转:从 try_to_swap_out 和 handle_pte_fault 看过去, 换出要不就是
swap space,要不就是 page->mapping->a_ops->writepage(见 mm/vmscan.c 函数 page_launder,
应该注意到无论是 swap cache 还是 page cahche 都使用 writepage 换出页面).换入要不就是
swap space,要不就是 vma->vm_ops->nopage(分配干净页面就不算进页面周转了).
下面的问题就是 page->mapping->a_ops->writepage 和 vma->vm_ops->nopage 到底是
什么函数,怎样赋值?

先看 page->mapping->a_ops->writepage,搜索 page->mapping,在函数
do_generic_file_read(mm/filemap.c)中发现 page->mapping 来源于 inode->i_mapping.
do_generic_file_read->__add_to_page_cache 读入一个页面的文件后,将页面加入 page cache,
同时赋予 page->mapping 以 addrspace. 另外在做搜索的过程中应该注意函数

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 44 -


知识学堂

add_to_page_cache_locked(mm/filemap.c)此函数建立 page cache 内页面的 page->mapping 映


射.搜索调用 add_to_page_cache_locked 的函数得知, shmem_nopage(mm/shmem.c)建立的
page->mapping 来源于 inode;add_to_swap_cache (mm/swap_state.c)建立的的 page->mapping
映射是 swapper_space(也在 swap_state.c).顺着这些线索,可以找到,其实写页面最终和一个
inode 相关联,这也于理相符. 我们推断换入用的 vma->vm_ops->nopage 最终也和 inode 相关.
看看 vma->vm_ops->nopage 的情况. 直接搜索 nopage,发现有两种 vm_ops,filemap_nopage(*
area,address, no_share)(mm/filemap.c), shmem_nopage( * vma,address,
no_share)(mm/shmem.c). 现在看来,vma 可以获取文件映射(mmap,参考函数
generic_file_mmap),shemem,或者匿名页,来建立其终物理页面的映射.从这些线索分
析,filemap_nopage 利用 page-mapping 的 readpage 从文件读入页面内容,呼应了刚才的猜
想.shmem_nopage 只是通过 vma 相关联的文的 inode 之 mapping 在 swap space 寻找被交换
出去的 shemem 页面,并不用来从文件读取页面内容.寻找到的页面(或者新分配的)就加入
page cache (如果是从 swap cache 找到的则需要从 swap chache 移出).到这里再看 page cache
和 swap cache 的界定,page->maping 的值如果是 swapper_space, 则页面处于 swap cache, 如
果 page->maping 的值是其他 add space,比如 filemap, shemem 设置的 mapping,则称页面在
page cache 中.希望还没有迷路.(注:此段分析再以后多次出现,应该比这里的分析的好!)
2. asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code) 不是想在
这里详细介绍 i386 cpu 的处理机制,而是给出中断处理在 linux 中的线索,以资参考。中
断或异常发生后,i386 终止执行当前运行的指令流(参考:
),保存必要的状态根据当前的
运行级别(内核/用户),从 idt 选择合适的 gate,执行指定地址的处理函数。我们以页面异
常为例。首先看页面异常门的设置。首先要看 idt 地址。在系统启动的时候,boot 程序已
经初始化了一个 idt,但是在 kernel 中,还要重新指定定 idt 地址并用 lidt 加载内核的 idt。
从 arch/i386/kernel/traps.c 的函数 trap_init 看过去 .
宏 set_trap_gate:
static void __init set_trap_gate(unsigned int n, void *addr)
{
_set_gate(idt_table+n,15,0,addr);
}
引用了 idt 地址, idt_table,定义在 traps.c 文件的开始 处:
/* The IDT has to be page-aligned to simplify the Pentium ….
*/
struct desc_struct idt_table[256] __attribute__((__section__(".data.idt")))= { {0, 0}, };
由此得知在内核链接的时候预留了一个 section .data.idt 作为 idt 表.
从 init/main.c 的函数 start_kernel 开始内核 初始化经历 ->trap_init->cpu_init: __asm__
__volatile__("lidt %0": "=m" (idt_descr));
至此,trap 初始化,idt 表设置已经完成. 深入下去的话 include/asm-i386/ desc.h 中定义:
#define idt_descr (*(struct Xgt_desc_struct *)((char *)&idt - 2))
并声明 extern struct desc_struct *idt, *gdt; 而 idt 是编译链接程序生成的符号,地址即

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 45 -


知识学堂

是.data.idt
函数 trap_init 中初始化 14 号异常,即页面异常入口为 page_fault,
set_trap_gate(14,&page_fault); page_falut 定义在 arch/i386/kernel/ entry.s:
ENTRY(page_fault)
pushl $ SYMBOL_NAME(do_page_fault)
jmp error_code
在这里调用页面异常处理函数 do_page_fault(arch/i386/mm/fault.c).
下面分析此函数, 分析在代码中以注释形式出现.
/*
* 页面 faults(故障) 处理入口. 主要任务时确定异常
* 发生的地址和原因,然后把不同的故障传入不同
* 的入口函数.
* error_code:
* bit 0 == 0 means no page found, 1 means protection fault
* bit 1 == 0 means read, 1 means write
* bit 2 == 0 means kernel, 1 means user-mode
* 有三种情况下陷入此函数:
* 1. pmd, pgt, pte 有一个为空, 即未建立映射或已经撤销.
* 2. 页面不在内存, 即,为内核交换到了磁盘.
* 3. 权限不正确.
* 情况 1. 此种页面属于已经撤销的, 此种页面由 page cache (address_space)管理.
* try_to_swap_out 把这种页面的映射断开, 即,把相应的 pte 置成 0 .
* 情况 2. 中的页面属于 swapper_space 管理. try_to_swap_out 不会把这种 pte
* 置 0, 而会换成相应的 swp_entry_t.
* 转交下一级函数处理时, 所有非法操作都在这个函数中 处理掉了
*/
asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code)
{
…….
/* 确定异常发生的地址*/
__asm__("movl %%cr2,%0":"=r" (address));
tsk = current;
/* demand paging:我们陷入了内核虚拟空间.*/
if (address >= TASK_SIZE)
goto vmalloc_fault; //异常发生于内核空间
….
/* 如果异常发生在中断中或者没有用户 context(环境), we must not take the fault.. */
if (in_interrupt() || !mm)

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 46 -


知识学堂

goto no_context;
down(&mm->mmap_sem);
//下面的主要思路是根据异常发生的地址和 vma 的
//关系,分成几种不同情况进行处理
vma = find_vma(mm, address); // 试着找一个 vma , 其结束地址大于异常点
if (!vma)
goto bad_area; //没有这样的 vma
if (vma->vm_start <= address)
goto good_area; //异常地址在一个 vma 中
//运行到这里表示, 这个地址落到了一个 vma 空洞中
if (!(vma->vm_flags & VM_GROWSDOWN))
goto bad_area; //如果这个空洞上的 vma 不是堆栈, 肯定是越界
if (error_code & 4) {
if (address + 32 < regs->esp)
goto bad_area; //异常点不在 esp 附近时也是一种越界而不是正常的堆栈操作
}
//对于正常的堆栈操作越界,我们应该为用户扩展堆栈
if (expand_stack(vma, address))
goto bad_area; //扩展失败, 转到 bad_area

/*
* 堆栈扩展以后, vma 就正常了,因此流程自然进入 good_area
*/
good_area:
//异常点在正确的 vma 中
//还要根据 vma(代表 OS) 容许的权限, 对异常分类
info.si_code = SEGV_ACCERR;
write = 0;
switch (error_code & 3) {
default: /* 3: write, present */
/* fall through */
case 2: /* write, not present */
if (!(vma->vm_flags & VM_WRITE))
goto bad_area; //vma 不容许写, 是一种非法操作
write++;
break;
case 1: /* read, present */
goto bad_area; // 权限错误, 非法

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 47 -


知识学堂

case 0: /* read, not present */


if (!(vma->vm_flags & (VM_READ | VM_EXEC)))
goto bad_area; //vma 不容许读的情况下非法
}
/* 如果处理陷入时到了这里, 说明异常点在一个完好的 vma 中,并且符合 OS 赋予 用
户的权限. */
switch (handle_mm_fault(mm, vma, address, write)) {
….}
……
vmalloc_fault: /* 内核的 vmalloc 可能分配了一个页面但是 task 自己的页表之内核
部分还没有设置。注:每个 task 都有自己的“kernel 空间”,这里
进行同步,从内核自己的页表将 kernel space 的映射同步到
task page table*/
{
int offset = __pgd_offset(address);
…………
pgd = tsk->active_mm->pgd + offset;
if (!pgd_present(*pgd)) {
……….
set_pmd(pmd, *pmd_k);
return;
}
}//fun end

幸亏上个函数对 handle_mm_fault 评论了一番,do_page_fault 到这里也该收手了.

后记: 第一篇笔记,记得比较乱, 但是大概正好符合初学的心情: 不知道从哪里找到了


哪里,在海一样的代码面前,需要更多努力.

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 48 -


桌面应用

桌面应用

Ubuntu7.10 使用有感而发

hezi

今天终于有空倒腾一下于 10 月 18 日发布的 ubuntu 新版了。还是感觉 ubuntu 新版给


人期待有余而严谨不足。我自诩是个 linux 迷,从 redhat6.0 开始接触 linux 已经有 5~6 个
年头了,装过的系统也不少,对 windows 里多如牛毛的病毒和木马厌恶透顶。自认为除了
网银、游戏和某些不负责任的网站,linux 已经可以完成任何 windows 能完成的事情了,现
在也基本在 ubuntu 下工作学习了。很为 ubuntu 的精神鼓舞,也为 ubuntu 能在如此短的时
间内取得如此辉煌的成就感到高兴,但安装和使用新版的 ubuntu 还是让人很为 ubuntu 的
未来担心,毕竟 ubuntu 缺的正是 windows 擅长而用户需要的。
首先,安装 ubuntu 时用户碰到的第一个障碍就是分区,记得刚装 linux 时对分区的概
念还似懂非懂时,那分区真是一个心理障碍。linux 的初学者大部分不会只安装一个纯 linux
系统的,大部分的初学者会把最后一个分区空出来学习学习,而当一个完全陌生的分区界
面呈现在面前,要冒着可能前面分区数据都丢失的风险去手动给 linux 系统建立两个以上
的陌生分区,总有点胆战心惊。何况习惯于 windows 系统的用户一般都遵从于默认设置,
那将给用户的数据产生不可估量的后果,linux(包括 ubuntu)于是就把一部分犹豫的求知
者挡在了门外。
其次,在安装过程中对 root 用户的设置,一定要通过在终端以命令行的形式进行设置,
这个完全是不人性化的,虽然 linux 强调的是高效可靠安全的用户管理,这一方面依赖于
linux 严格的权限控制,另一方面也强调用户在一般应用情况下不要启用具有 root 权限的用
户(即 root 用户组的用户)。但在系统安装过程中完全可以向 redhat 一样把 root 用户先设
置好,这样便于初学者进行应用软件的安装。
再次,ubuntu 有个致命的弱点就是太年轻,而每年发布两次发行版的要求又使 ubuntu
把自己束缚住了手脚。ubuntu7.10 的推出似乎显得仓促了点,虽然 7.10 给人很大的视觉冲
击,在诸如 ntfs 的写入、办公软件的更新和桌面搜索等方面也有不小的突破。但 7.10 在笔
者的 IBM T43 上就装了三遍才成功,至今还存在启动速度过慢的问题有待解决。第一遍是
卡在了分区过程中,在对磁盘进行扫描时半个小时没什么反应;第二遍其实已经安装成功,
但重新启动的过程太长了(将近 10 分钟),以为没安装成功,就重新安装了一次;第三次
安装好了重新启动时在隔壁房间里面看报纸,10 几分钟后回来已经可以使用了。就是启动
速度太慢了,还有就是 xwindow 老死机。在网上搜索了好久,似乎两个问题专门针对 T43
的。死机的问题通过查找资料基本已解决,但启动慢的问题还需要好好研究,要知道启动
一个电脑要花上将近 10 分钟是让人难以忍受的,这完全不符合桌面发行版冠军的身份,也
完全辜负了 linux 迷的期待。在 ubuntu 中文论坛中甚至专门设置了 7.10 错误报告区,这种
仓促发布新系统的不尊重用户的做法未免让人失望的。
最后,也是最关键的,linux 缺少群众基础。当看到小学三年级的教科书上出现 windows

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 49 -


桌面应用

界面的时候,当发现生活工作周围没有一个其他的 linux 用户的时候,当单位的信息系统


管理员连什么是 linux 都支支吾吾说不出个叮咚的时候,你会不会为 linux 的现状和发展而
黯然神伤呢?笔者曾经试着在一个地方性的论坛内对 linux 知识进行一些普及性教育,但
响应者无几,更让人伤心的就是版主删除了我辛辛苦苦写的两篇关于 firefox 应用的文章,
估计原因就是不能在 linux 版发表非 linux 的主题(他不知道 linux 和 firefox 的深刻渊源)

在本应力促 linux 的发展的政府部门内,电脑上跑的几乎都是 windows 的系统,政府现在
不像以前那样缺钱了。在这方面,政府的采购很少关注成本控制的问题。
当然,我们不能一味强调过失,ubuntu 的亮点同样让人肃然起敬。在三年时间内就有
如此强大的发行版,这在操作系统历史上是没有的,虽然 ubuntu 是基于 debian 开发的,不
是白手起家。在桌面发行版中遥遥领先于其他存在了十几年的其他发行版,真让人佩服其
发展速度。ubuntu 没有任何停止脚步的迹象,ubuntu 先进的开发模式让微软坐立不安。刚
才我谈到 ubuntu 每过大约半年发行一次新版本,这一方面让用户觉得不是很严谨,另一方
面却让人深刻地感受到 ubuntu 前进的步伐。ubuntu7.10 在很多方面已经可以和 windows
vista 相媲美(虽然没有 vista 那样精致和老练),但 ubuntu 如此快捷的更新速度是 vista 无
法比拟的,微软不得不公开宣布加速下一代操作系统的研发,以期在 2010 年推出新系统来
维持自己在桌面领域的优势,但谁能想象 ubuntu10.10 经过 6 次的更新后会给人以什么样
的冲击呢?我不知道,但充满期待。ubuntu 无疑已经迎来了最好的发展时机。
另外,vista 本身的臃肿、硬件高需求和没有革命性的改进也限制了其对 ubuntu 的杀伤
力,甚至有人戏称 vista 为 windows meЦ,vista 的销售现状也说明了这一点。
今天,我们欣喜地看到 ubuntu 的民主,看到 ubuntu 正在为发展自己而不断倾听用户
的声音,看到有无数的志愿者在为 ubuntu 的成长而默默奉献,看到有越来越多的人加入到
ubuntu 的体验之旅。虽然在使用 ubuntu 中碰到些 bug 和不友好的操作体验,但 ubuntu 很
年轻,她充满激情,也有很多粉丝在推动着年轻的她走向成熟,我们期待着 ubuntu 的壮
大……

Linux下软件的安装与卸载

Linux 宝典
在 Windows 下安装软件时,只需运行软件的安装程序(setup、install 等)或者用 zip
等解压缩软件解开即可安装,运行反安装程序(uninstall、unware、
“卸载”等)就能将软
件清除干净,完全图形化的操作界面,简单到只要用鼠标一直点击“下一步”就可以了。
而 Linux 好象就不一样了,很多的初学者都抱怨在 Linux 下安装和卸载软件非常地困难,
没有像使用 Windows 时那么直观。其实在 Linux 下安装和卸载软件也非常简单,同样也有
安装向导或解压安装的方式,不相同的只不过是除了二进制形式的软件分发外,还有许许

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 50 -


桌面应用

多多以源代码形式分发的软件包,下面就来详细地讲一讲这些软件的安装与卸载:

二进制分发软件包的安装与卸载

Linux 软件的二进制分发是指事先已经编译好二进制形式的软件包的发布形式,其优
点是安装使用容易,缺点则是缺乏灵活性,如果该软件包是为特定的硬件/操作系统平台编
译的,那它就不能在另外的平台或环境下正确执行。
1、*.rpm 形式的二进制软件包
安装:rpm -ivh *.rpm
卸载:rpm -e packgename
说明:RPM(RedHat Packge Manager)是 RedHat 公司出的软件包管理器,使用它可
以很容易地对 rpm 形式的软件包进行安装、升级、卸载、验证、查询等操作,安装简单,
而卸载时也可以将软件安装在多处目录中的文件删除干净,因此推荐初学者尽可能使用
rpm 形式的软件包。rpm 的参数中-i 是安装,-v 是校验,-h 是用散列符显示安装进度,*.rpm
是软件包的文件名(这里的*.rpm 特指*.src.rpm 以外的以 rpm 为后缀的文件);参数-e 是删
除软件包,packgename 是软件包名,与软件包的文件名有所区别,它往往是文件名中位于
版本号前面的字符串,例如 apache-3.1.12-i386.rpm 和 apache-devel-3.1.12-i386.rpm 是软件
包文件名,它们的软件包名称分别是 apache 和 apache-devel。更多的 rpm 参数请自行参看
手册页:man rpm。
如果你不喜欢在字符界面下安装或卸载这些软件包,完全可以在 X-Window 下使用图
形界面的软件包管理程序,如 glint、xrpm 这样的图形接口,或者是 KDE 的 kpackge 等,
这样对软件包的安装、升级、卸载、验证和查询就可以通过点击鼠标来轻松完成。
2、*.tar.gz/*.tgz、*.bz2 形式的二进制软件包
安装:tar zxvf *.tar.gz 或 tar yxvf *.bz2
卸载:手动删除
说明:*.tar.gz/*.bz2 形式的二进制软件包是用 tar 工具来打包、用 gzip/bzip2 压缩的,
安装时直接解包即可。对于解压后只有单一目录的软件,卸载时用命令“rm -rf 软件目录
名”;如果解压后文件分散在多处目录中,则必须一一手动删除(稍麻烦),想知道解压时
向系统中安装了哪些文件,可以用命令“tar ztvf *.tar.gz”/“tar ytvf *.bz2”获取清单。tar
的参数 z 是调用 gzip 解压,x 是解包,v 是校验,f 是显示结果,y 是调用 bzip2 解压,t 是
列出包的文件清单。更多的参数请参看手册页:man tar。
如果你更喜欢图形界面的操作,可以在 X-Window 下使用 KDE 的 ArK 压缩档案管理
工具。
3、提供安装程序的软件包
这类软件包已经提供了安装脚本或二进制的安装向导程序(setup、install、install.sh
等),只需运行它就可以完成软件的安装;而卸载时也相应地提供了反安装的脚本或程序。
例如 SUN 公司的 StarOffice 办公软件套件就使用名为 setup 的安装程序,而且在软件安装
后提供反安装的功能,目前这种类型的软件包还比较少,因其安装与卸载的方式与 Windows

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 51 -


桌面应用

软件一样,所以就无需多讲了。

源代码分发软件包的安装与卸载

Linux 软件的源代码分发是指提供了该软件所有程序源代码的发布形式,需要用户自
己编译成可执行的二进制代码并进行安装,其优点是配置灵活,可以随意去掉或保留某些
功能/模块,适应多种硬件/操作系统平台及编译环境,缺点是难度较大,一般不适合初学
者使用。
1、*.src.rpm 形式的源代码软件包
安装:rpm -rebuild *.src.rpm
cd /usr/src/dist/RPMS
rpm -ivh *.rpm
卸载:rpm -e packgename
说明:rpm --rebuild *.src.rpm 命令将源代码编译并在/usr/src/dist/RPMS 下生成二进制的 rpm
包,然后再安装该二进制包即可。packgename 如前所述。
2、*.tar.gz/*.tgz、*.bz2 形式的源代码软件包
安装:tar zxvf *.tar.gz 或 tar yxvf *.bz2 先解压
然后进入解压后的目录:
./configure 配置
make 编译
make install 安装
卸载:make uninstall 或 手动删除
说明:建议解压后先阅读说明文件,可以了解安装有哪些需求,有必要时还需改动编译配
置。有些软件包的源代码在编译安装后可以用 make install 命令来进行卸载,如果不提供此
功能,则软件的卸载必须手动删除。由于软件可能将文件分散地安装在系统的多个目录中,
往往很难把它删除干净,那你应该在编译前进行配置,指定软件将要安装到目标路
径:./configure --prefix=目录名,这样可以使用“rm -rf 软件目录名”命令来进行干净彻底
的卸载。与其它安装方式相比,需要用户自己编译安装是最难的,它适合于使用 Linux 已
有一定经验的人,一般不推荐初学者使用。
关于 Linux 下软件的安装与卸载 lanche 已经讲了这么多,但可能还会有人问怎么知道
一个 tar.gz/bz2 包是二进制文件包呢还是源代码包?如果你用过压缩工具就会明白,压缩包
未必就是软件,它也可能是备份的许多图片,也可能是打包在一起的普通资料,要分辨它
到底是什么最好的办法就是查看包里的文件清单,使用命令 tar ztvf *.tar.gz / tar ytvf *.bz2
或者在 X-Window 下使用图形化的 ArK 压缩档案管理工具都可以,源代码包里的文件往往
会含有种种源代码文件,头文件*.h、c 代码源文件*.c、C++代码源文件*.cc/*.cpp 等;而二
进制包里的文件则会有可执行文件(与软件同名的往往是主执行文件),标志是其所在路径
含有名为 bin 的目录(仅有少数例外)
。原来这么简单呀,还不快点自己试试!

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 52 -


桌面应用

GRUB引导故障排除

李达飞
在工作和教学中,经常发现同事和同学在碰到 Linux 启动直接进入 GRUB 界面但没有
启动选单(只剩下一个“grub>”提示符)的状况,这时就认定系统已经没救,开始重新安
装,甚至包括一些接触 Linux 已久的人也是如此。其实出现此种状况,只要了解 Linux 系
统引导过程中 GRUB 的作用以及工作流程,就非常容易解决。
Linux 系统在启动过程中,首先是固件(PC 上大多是 CMOS/BIOS)的物理检测,诸
如检测系统的显卡、CPU 和硬盘等,可从系统按下电源后看到此检测信息;检测无问题,
将读取硬盘的 MBR(主引导记录)中的自举程序,Linux 中常用的自举程序如 LILO 和
GRUB。自举程序 GRUB 在系统启动期间只有一个作用,就是载入内核;内核在引导期间
有两个主要的作用,一个是驱动系统硬件,另一个将启动系统进程 init;init 进程将读取其
配置文件/etc/inittab 完成后续所有的引导。
所以其实 GRUB 在引导期间只有一个最重要的作用,就是载入系统内核。那么 GRUB
在 引 导 期 间 到 底 是 如 何 执 行 引 导 的 呢 ? 让 我 们 来 看 以 下 的 GRUB 配 置 文 件
/boot/grub/grub.conf(一定要注意/etc/grub.conf 只是此文件的一个软链接)片断示例:
title Thiz Linux Server 7.0
root (hd0,5)
kernel /boot/vmlinuz-2.4.22-3Thiz ro root=LABEL=/
initrd /boot/initrd-2.4.22-3Thiz.img
此段是加载 GRUB 的最重要的设置段,其中“title”段指定了 GRUB 引导界面系统的
标题;“root”段指定了/boot 分区所在的位置;“kernel”段指定了内核所在位置(kernel
/boot/vmlinuz-2.4.22-3),内核加载时权限属性为只读(“ro”),以及指定根分区所在位置
(root=LABEL=/);initrd 指定了 Linux 镜像文件所在位置。
当 Linux 系统中 GRUB 配置文件/boot/grub/grub.conf 内容修改错误或损坏时,系统启
动后会自动进入 GRUB 命令行模式(“grub>”),最常见的原因无外乎两个,一是 GRUB 配
置文件中此三段修改错误;二是 GRUB 配置文件丢失。(还有少数原因,如内核文件或镜
像文件损坏、丢失,/boot 目录误删除等)此时可以使用如下几种方法进行恢复。

存在 GRUB 配置文件备份

如果存在 GRUB 配置文件备份,那么比较省事的办法就是对其进行备份恢复,可以按


如下方法进行:
◆ 把安装盘的第一张放到光驱,然后重新启动机器,在 BOIS 中设定系统用光驱引导;
◆ 等安装界面出来后,按 F4 键(不同 Linux 版本此快捷键可能稍有不同,如即时 Linux
是按 F5 键盘),进入“boot:”命令提示行输入命令“linux rescue”,进入 Linux 维护模式;
◆ 一系列键盘以及几项简单的配制(如设置键盘等),这里不多做介绍,然后会出现如下
字符:

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 53 -


桌面应用

sh#
此时就可以在此命令行下执行操作了:
sh#cp /backup/grub.conf.bak /mnt/sysimage/boot/grub/grub.conf
假设备份文件为/backup/grub.conf.bak ,因绝大多数 Linux 光盘修复模式中会将硬盘系
统的“/”分区 chroot 到“/mnt/sysimage”处(在之前的配制中可以看到提示),所以拷贝
的目标为“/mnt/sysimage/boot/grub/grub.conf”而非“/boot/grub/grub.conf”
◆ 退出此模式,重启即可。
内核文件、镜像文件、/boot 目录等文件损害或丢失,也可以使用此种方法修复。

如果没有 GRUB 配置文件备份

如果没有备份 GRUB 配置文件,或者想通过此试验更多了解 GRUB 的引导过程,可


以利用 GRUB 强大的交互功能,采用如下方法:
在“grub>”命令行下可以进行如下操作:
◆ 查找/boot/grub/grub.conf 分区所在目录可用如下命令:
grub> find /boot/grub/grub.conf (hd0,5)
需要注意的是,将得到 grub.conf 配置文件所在系统的分区,
(hd0,5)即表示它在分区 hda6。
◆ 查看 grub.conf 文件错误可用如下命令:
GRUB>cat (hd0,5)/boot/grub/grub.conf
需要注意的是,可以查看到配置文件到底什么地方出现了错误,以便进入后修改。
◆ 指定/boot 分区可用如下命令:
root (hd0,5)
需要注意的是,从此步骤开始,即为本文前面所提到的 GRUB 配置文件中的主要引导步骤,
只是一般都是系统读取 GRUB 配置文件引导,出现问题时我们可以手工指定引导。
◆ 指定内核加载可用如下命令:
kernel /boot/vmlinuz ro root=LABEL=/
◆ 指定镜像文件所在位置可用如下命令:
initrd /boot/initrd-2.4.22-3Thiz.img
◆ 从/boot 分区启动可用如下命令:
boot (hd0,5)
此时,即可正常启动,实际上,以上步骤就是执行了 GRUB 引导期间加载 grub.conf
文件的步骤,当系统正常引导后将 GRUB 配置文件修改正确后即可。以上这个方法也可以
用于测试新编译的内核。对此故障排除的了解可以加深对 GRUB 引导以及 Linxu 系统引导
的了解。
此外,还有一种情况是在安装 Windwos 时,把 GRUB 从 MBR 上清除,启动后根本连
GRUB 的影子都看不到。如出现此问题,可以进入 Linux 维护模式,执行如下命令:
sh#grub-install /dev/had
之后退出重新启动系统,即可实现 GRUB 对 Linux 和 Windows 的多系统引导(此情况

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 54 -


桌面应用

假设将 Linux 安装于第一块 IDE 硬盘上,若安装于第二块硬盘或 SCSI 硬盘上,请做相应


更改)。

Linux下的多媒体软件

Linux 宝库
Linux 以其强大的服务器功能著称,近年来逐渐流行并进入个人领域,但许多用户并
不了解 Linux 下的软件,以为它只是用在网络服务器上,其实它在多媒体领域也有相当全
面的支持。这里就介绍几款 linux 下的多媒体软件。

GNOME CD Player

GNOME CD Player 是一款基于 Xwindow 的 CD 播放软件,这是 Redhat linux 附带的软


件,一般只要装了 Xwindow,就会安装它。从它的界面来看,与微软 Windows 下的 CD 播
放机很相似,除常规的 CD 播放功能外,还可以对 CD 的播放方式,时间显示方式等进行
设置,并且支持 CD 唱盘数据库,可以满足 CD 播放的大部分需要,使用相当简单,在此
不多作介绍了。

Realplayer

RM 格式的影音文件是网上广为流传的电影格式,以其压缩率之大而闻名,幸运的是
linux 下 也 可 以 看 RM 格 式 的 文 件 , 这 就 是 Realplayer for linux 。 下 载 地 址 :
ftp://ftp.suhat.com/pub/Linux/Multimedia/Video/realplayer/rp8_linux20_libc6_i386.cs1.rpm
这是一个 RPM 包的,非常容易安装。如果用的是 Redhat linux,请先点左下角的脚掌,然
后是“Programs/System/GnoRPM”打开 RPM 包管理器,选择 Install(安装),再选择你刚才
下载的文件就会开始安装了。或者也可以在命令行安装:
#rpm -ivh rp8_linux20_libc6_i386.cs1.rpm
安装之后在/usr/lib/目录下会有一个 Realplayer8 目录。并且在/usr/X11R6/目录下会有相
应的启动文件 realplay,以后直接在命令行中输入“realplay&”就可以启动 Realplayer 来
看电影了。
可以在桌面建个快捷方式,这样以后就方便了,这样做:用鼠标右击桌面,选择
“New/Launcher…”,在对话框中填上快捷方式的名字(Name),描述(Comment),执行
的命令(Command),并选择好图标(/usr/lib/Realplayer8/rp7.xpm)就行了。

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 55 -


桌面应用

XMMS――linux 下的 MP3 player

乍一看还以为就是 Winamp 呢。其实 XMMS(X MultiMedia System)就是为了让习惯


于 window 的用户用 linux 时能够方便些而编写的,完全模仿 winamp 的外形和功能,具有
winamp 的大部分功能,如:Visualization、DSP/Effect 和 Skins 等。而且据说 Skin 可以和
winamp 通用,只是我还没试过。各位可以自己试试看:) 下载地址:
ftp://ftp.freesoft.cei.gov.cn/.mirror2/ftp.redhat.com/redhat-7.0/i386/RedHat/RPMS/xmms-
gnome-1.2.2-4.i386.rpm。
如果用的是 Redhat7.0,那么在其光盘上就带有,也是 RPM 包的形式。安装同前,安
装后在/usr/bin 目录下会有“xmms”这个可执行文件,在命令行方式下输入“xmms&”就
可以启动了。同 Realplayer 一样,也在桌面建个快捷方式吧。

GTV MPEG Player

这是个 VCD 播放软件,可以播放常规的 VCD,从面板看来和前面介绍的 GNOME CD


Player 一样相当简洁,功能也相对比较单一,暂不支持 MPEG4。但有这个简单的软件,在
家庭中看普通的 VCD 还是凑合着能用吧,总比没有强,linux 还是要一步步发展的。下载
地址:ftp://ftp.freesoft.cei.gov.cn/.mirror2/ftp.redhat.com/redhat-7.0/i386/RedHat/RPMS/smpeg
-0.4.0-5.i386.rpm
至于使用,一看便明白了,
也用不着我多讲,只是在 linux 下使用光驱时和 windows95/98
是不同的,不是放进光驱就能用,还得先 mount,典型的情况如下:mount -t auto /dev/cdrom
/mnt/cdrom,如果不明白还是先学几条 linux 的基本命令吧,毕竟 linux 是个操作系统,不
像“挖地雷”
,拿着就立即会玩了。

KSnapshot――linux 下的抓图工具

KSnapshot 是一个基于 KDE 桌面环境的抓图软件,它的操作界面简洁,易用。可以实现全


屏方式和窗口方式两种抓图的功能,并且 KSnapshot 支持对所截取图片的多种存储格式,
如 GIF、BMP、PS、XBM 等.如果用的是 Redhat7.0,只要装的 KDE,那么自然就会装上的。
可以在 Graphics 菜单下找到 KSnapshot 或是在命令行状态键入“KSnapshot&”就可以启动
了。KSnapshot 启动时会首先抓取当前的桌面作为图片。要抓图前先在 Filename 中设定图
片存放的路径和文件名以存储格式,然后按一下“Grab”就可。但是你可能会遇到一个问
题,当按下“Grab”后来不及把光标移到所要截取的窗口就已经完成抓图了。不用急,看
到“Delay”了吗?在这里输入数字,以秒为单位就是指从按下“Grab”键到开始抓图的延
迟时间。KSnapshot 面板上还有其它一些选项,通过它们的组合还可以满足大部分需要,
还是各位自己去发掘吧!
下载地址:
ftp://ftp.freesoft.cei.gov.cn/.mirror3/sunsite.unc.edu/pub/Linux/X11/kde-apps/graphics/ksnapshot

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 56 -


桌面应用

-0.2.7.tar.gz
另外,能抓图的软件还有一个,它就是能与 photoshop 媲美的图象编辑软件 GIMP 的
一个插件。GIMP 可以在 Redhat linux 的光盘上找到,或是到中国自由软件库下载:
ftp://ftp.freesoft.cei.gov.cn/.mirror2/ftp.redhat.com/contrib/libc6/i386/gimp-1.0.0-6.i386.rpm.
启动 GIMP 后选择“File/Acquire/Screen Shot…”
(各版本 gimp 可能不同,各位自己找一下)

它的使用和 KSnapshot 差不多,但有一个好处是抓到的图可能立即在 GIMP 中编辑,方便
多了。

Openserver启动盘制作

Openserver 启动盘制作,方法如下:
如果你的机器不支持光盘启动或其他原因要作启动软盘,方法有三:
(1)在 windows 下用 gzcp:提示符下运行 E:\images\gzcp E:\images\boot\install.img A:。
其中 A:为你的软盘符,E 为你的光盘符。
( 2 ) 在 windows 下 用 floppcp : 提 示 符 下 运 行 E : \images\floppcp d/ A : /f E :
\images\boot\install.img
(3)在 Unix 下:root 注册后,在机器上插入 3.5 寸软盘,并将系统软件光盘放入光驱,
然后敲入下面的命令:
#mount /dev/cd0 /mnt<回车>
#dd if=/mnt/images/boot/N00 of=/dev/rfd0135ds18<回车>

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 57 -


企业应用

企业应用

FreeNAS构建企业存储系统

凌晓明
FreeNAS 是一个开源的 NAS(Network Attached Storage)服务器系统,该软件基于
FreeBSD、Samba 和 PHP,支持客户端使用 CIFS、NFS 和 FTP 等协议使用存储系统。相对
于 SAN 而言,NAS 存储系统具有更低的构建和管理成本,同时更利于异构环境的文件共
享。专有的 NAS 存储系统价格昂贵,对于对成本相当敏感的中小型企业是较难承受的。
FreeNAS 的出现,使中小企业只需要使用普通的服务器,就可以建立 NAS 存储系统。目
前 FreeNAS 的最新版本为 0.71 版本。

FreeNAS 部署

FreeNAS 的安装十分简单,其官方网站发布的光盘镜像包含了为 FreeNAS 定制的


FreeBSD 系统,使用 FreeNAS 安装光盘、操作系统和 NAS 系统安装一步到位,免去了安
装、优化整套操作系统的繁琐步骤,直接得到了整合并优化的系统,这也是 FreeNAS 系统
颇受好评的原因之一。
在 FreeNAS 官方网站 http://freenas.org 下载最新版本的 ISO 文件,然后刻录成光盘。
使用光盘引导服务器,光盘启动完成后,可以得到如图 1 的界面。

图1

接下来,选择第 7 项安装 FreeNAS 系统,然后可以看到一个选择界面,在这里可以选


择将 FreeNAS 安装在独立的硬盘或 USB 闪存盘或在一个硬盘上安装 FreeNAS 系统的同时
创建数据分区,如图 2 所示。

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 58 -


企业应用

图2

如果服务器支持 USB 闪盘启动,建议安装在 USB 闪盘。选择相应的选项后,系统提


示输入 FreeNAS 安装光盘所在的光驱名称,这里为 acd0,如图 3 所示。

图3
安装完成后,取出安装光盘,在控制台选择第 5 项重新启动系统。然后需要配置网络
接口,在控制台选择第 1 项,系统会列出可用的网络接口名称,这里为 lnc0。重启系统使
配置生效。然后配置 IP 地址,选择第 2 项,在这里可以配置网络接口的 IP 地址,例如
192.168.0.100,如图 4 所示。

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 59 -


企业应用

图4
接着需要输入这个 IP 的子网掩码,子网掩码用位数表示,例如如果子网掩码为
255.255.255.0,那么这里就输入 24。设置完成后,就可以通过 Web 界面对 NAS 进行管理。

FreeNAS 的管理

FreeNAS 的绝大多数管理功能都可以通过 Web 界面实现,可以在浏览器中输入


FreeNAS 的 IP 地址,访问 FreeNAS 的 Web 管理界面,如图 5 所示。默认的管理员用户名
是 admin,在登录后应立即修改管理员口令,确保系统安全。

图5

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 60 -


企业应用

Web 管理的左边是管理选单,共分为 7 个组,System 组主要用于配置与管理特性相关


的参数。Interfaces 组配置网络接口的 IP 地址、网关和 MTU 等。Disks 组用来配置存放数
据的磁盘,供客户端访问,在这里可以管理硬盘分区、软件 RAID 及挂载点,也就是客户
端挂载的服务器目录。
Service 组用来管理 FreeNAS 提供的服务,如 CIFS、FTP、NFS 和 SSH 等服务。其中
CIFS、FTP、NFS 是用来提供文件存储的相关服务,在这里可以选择是否启用,以及配置
相关的参数。以 NFS 服务为例,单击 NFS 选单条目,出现如图 6 的界面,可以选取 Enable
复选框,并且配置 NFS 的映射方式及授权网络。配置完成后单击 Save,这样所设置网络
中的 NFS 客户端就可以挂载 NFS 共享分区。

图6
RSYNCD 服务用于同步数据,FreeNAS 可以作为 RSYNC 服务器和客户端使用,这样
可以使用两台 FreeNAS 服务器,其中一台与另外一台通过 RSYNC 服务同步数据实现在线
备份。SSH 服务可以使用户远程登录到 FreeNAS 系统,主要用于管理。
Access 组用来管理用户权限设置等;Status 分组中可以查看系统状态;Diagnostics 分
组可以查看 FreeNAS 系统诊断信息和日志,以帮助用户排查错误。

FreeNAS 应用

FreeNAS 的使用非常简单,类似于使用任何提供 FTP、NFS 及 Samba 服务的服务器。


1.文件服务器
FreeNAS 可以作为 Windows 文件服务器或 Samba 服务器使用,需要在 FreeNAS 配置
管理界面中启用 CIFS 服务,配置完成后 Windows 客户端就可以通过网络邻居等使用共享
目录,Linux 客户端可以通过 Samba 客户端使用共享目录。

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 61 -


企业应用

2.FTP 服务器
FreeNAS 支持标准的 FTP 协议,客户端可以通过命令行或 CuteFTP 上传和下载文件。
例如在 Windows 的控制台中执行 FTP 命令将 C 盘中的 freenas.iso 文件上传到 FreeNAS 服
务器,使用如下命令:
C:\>ftp
ftp> open 192.168.0.100
Connected to 192.168.0.100.
220---------- Welcome to Pure-FTPd ----------
220 You will be disconnected after 300 minutes of inactivity.
User (192.168.0.100:(none)): ftpuser
331 User ftpuser OK. Password required
Password:
230-User ftpuser has group access to: wheel ftp
230-OK. Current directory is /mnt
230-Welcome to FreeNAS FTP service
230
ftp> cd share1
250 OK. Current directory is /mnt/share1
ftp> put c:\freenas.iso
200 PORT command successful
150 Connecting to port 1500
226-File successfully transferred
226 3.885 seconds (measured here), 6.59 Mbytes per second
ftp: 发送 26939392 字节,用时 56.52Seconds 476.67Kbytes/sec.
3.NFS 服务器
NFS 是 Unix 和 Linux 客户端使用 NAS 存储服务器的主要方式。例如有一个 Linux 服
务器作为 NFS 的客户端,需要在这个 Linux 服务器上建立一个名为 NAS 的目录,用来挂
载 FreeNAS 服务器上的某个 NFS 分区(例如/mnt/share1),使用如下命令:
mkdir /NFS
mount 192.168.0.100:/mnt/share1 /NAS
4.同步备份(数据镜像)服务器
对 RSYNC 服务的支持,可以使 FreeNAS 成为一个易于管理的备份服务器,对数据进
行同步备份。这项功能对于一些经常更新的数据是非常实用的。也可以用两台 FreeNAS 服
务 器 , 其 中 一 台 作 为 另 外 一 台 的 备 份 。 例 如 需 要 对 Linux 服 务 器 192.168.0.2 中 的
/var/www/html 目录进行同步备份,首先需要在这台服务器上安装 RSYNC,安装完成后配
置 rsyncd.conf 文件,如果配置文件不存在,需要重新创建,格式如下所示:
uid=nobody
gid=nobody

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 62 -


企业应用

max connections=4
use chroot=no
log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
#auth users=root
secrets file=/etc/rsyncd.pwd

[share2]
path=/var/www/html
ignore errors
read only = yes
list = no
其中 share2 是 FreeNAS 中建立的共享分区的名称,用于共享分区备份文件。然后创建一个
认证文件 rysncd.pwd,格式为 user:password。使用如下命令启动 RSYNC 服务器:
rsync --daemon
服务器配置完成后,将 FreeNAS 服务器配置为 RSYNC 客户端。登录 FreeNAS 管理界
面,选取左侧 Service 组中的“RSYNCD”,然后选取右侧的 Client 选项,复选 Enable,输
入 RSYNC 服务器地址,然后选择同步的时间间隔,完成后单击 Save 按钮保存,与服务器
同步备份的 rsync 客户端就配置完成了,如图 7 所示。

图7
相对于 Linux 的 RSYNC 客户端,FreeNAS 显然更加容易配置。当然,也可以将 FreeNAS
作为 RSYNC 服务器,并用另外一台 FreeNAS 服务器同步备份。RSYNC 是一个功能非常
强大的同步备份工具,如果对这个工具感兴趣,可以在 http://rsync.samba.org 查看相关技术

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 63 -


企业应用

资料以获得更多的信息。
对于 FreeNAS 发布时间不到一年,没有发布 1.0 版本就受到如此关注的开源软件,这
是非常罕见的,也说明这个系统是非常值得推荐的。尽管还存在权限管理不完善等不足之
处,但有理由相信这个短时间内发展如此迅速的网络存储系统是值得期待的。同时,对于
要求并不严苛的中小企业,FreeNAS 已经可以满足多数存储需求。

构建LVS集群系统

关洪波

集群技术目前主要分为三大类。一类是高可用性集群,指运行于两个或多个节点上服
务,当某个节点出现故障时,仍能继续对外提供服务。高可用性集群的设计思想就是最大
限度地减少服务中断时间。这类集群中比较著名的有 Turbolinux TurboHA、Heartbeat 和
Kimberlite 等。
第二类是负载均衡集群,就是将大量的请求由多台计算机完成,目的是提供和节点个
数成正比的负载能力,这种集群适合提供大访问量的 Web 服务,负载均衡集群往往具有一
定的高可用性特点。
第三类是超级计算集群,按照计算关联程度的不同,又可以分为两种。一种是任务片
方式,将计算任务分成任务片,再把任务片分配给各节点,在各节点上分别计算后再把结
果汇总,生成最终计算结果。另一种是并行计算方式,节点之间在计算过程中大量地交换
数据,可以进行具有强偶合关系的计算。这两种超级计算集群分别适用于不同类型的数据
处理工作。有了超级计算集群软件,企业利用若干台 PC 机就可以完成通常只有超级计算
机才能完成的计算任务。这类软件有 Turbolinux EnFusion 和 SCore 等。
LVS 是 Linux Virtul Server 的简称,是由章文嵩博士主持的著名开放源码项目,一个实
现集群系统的解决方案。LVS 旨在解决高速发展的 Web 商务中日益凸现的问题:如何在有
限资金投入的情况下,最大幅度地提高 Web 站点的潜在服务性能。核心就是通过一组服务
器进行负载均衡,通过前端的负载调度器(Load Balancer),无缝地将网络请求调度到真实
服务器,从而使得服务器集群的结构对客户是透明的,客户访问集群系统提供的网络服务
就像访问一台高性能、高可用的服务器。客户程序不受服务器集群的影响不需作任何修改。
系统的伸缩性通过在服务集群中透明地加入和删除一个节点达到,通过检测节点、服务进
程故障和正确地重置系统达到高可用性。由于负载调度技术是在 Linux 内核中实现的,所
以称之为 Linux 虚拟服务器。

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 64 -


企业应用

LVS三种模式

LVS 具有三种模式,分别为 NAT 模式、IP 隧道模式和直接路由模式。


1.NAT 模式
NAT 是因为网络 IP 地址不足而将内部保留 IP 地址通过映射转换成公网地址的一种上
网方式(原地址 NAT),如图 1 所示。

图1
如果把 NAT 的过程稍微变化,就可以成为负载均衡的一种方式。其原理就是将从客户
端发来的 IP 包的 IP 头目的地址在 DR 上换成其中一台 Real Server 的 IP 地址,并发至此
Real Server,而 Real Server 则在处理完成后把数据经过 DR 主机发回客户端,DR 在这个时
候再将数据包的原 IP 地址改为 DR 接口上的 IP 地址即可。缺点是无论进来的流量还是出
去流量,都要经 DR 处理,这样对性能就会产生一定的影响。
2.IP 隧道模式
隧道模式类似于 VPN 的方式,使用网络分层的原理,在从客户端发来的数据包基础上,
封装一个新的 IP 头标记(不完整的 IP 头,只有目的 IP 部)发送至 Real Server,Real Server
接收后,先将 DR 数据包还原,然后直接返回给客户端,而不需要再经过 DR,如图 2 所
示。需要注意,由于 Real Server 需要对 DR 发来的数据包进行还原,也就是必须支持 IP
Tunnel 协议。因此,在 Real Server 内核中,必须编译支持 IP Tunnel 选项,对于 Linux 2.6
内核不再需要编译内核,默认已经支持。

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 65 -


企业应用

图2
3.直接路由模式
直接路由模式比较特别,前两种模式基本上都是工作在网络层,而直接路由模式则是
工作在数据链路层。其原理为 DR 和 Real Server 都使用同一 IP 对外服务,如图 3 所示。但

图3

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 66 -


企业应用

只有 DR 对 ARP 请求进行响应,所有 Real Server 对本身 IP 的 ARP 请求保持静默。网关将


对这个服务 IP 的请求全部定向到 DR,而 DR 收到数据包后根据调度算法,找出对应的 Real
Server,把目的 MAC 地址改为 Real Server 的 MAC,并发至 Real Server。这时 Real Server
收到这个数据包,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端。
由于 DR 要对二层包头进行转换,所以 DR 和 Real Server 之间必须在一个广播域,也可以
简单地理解为在同一台交换机上。

Heartbeat 介绍

Heartbeat 是 Linux-ha 项目,被许多高可用系统采用。LVS 必须是个高可用系统,所以


采用 Heartbeat,本文也以 LVS 作为高可用服务来说明 Heartbeat 的使用。
Heartbeat 的高版本可以负责 3 个及以上的节点。本文在两台机器(一台作为主节点,
另一台为从节点)上运行 Heartbeat,并配置好相关的选项。开始时主节点提供 LVS 服务,
一旦主节点崩溃,从节点就立即接管 LVS 服务。如果是开启了其他的服务资源,那么接管
的该服务资源相应的 TCP 连接必须重新连接,而且主从节点的应用层逻辑状态应保证一
致。LVS 不存在应用层的逻辑状态。

LVS集群系统环境

本文在配置 LVS 时使用三台 Linux,一台做 Directorserver(192.168.0.25),两台做 Real


Server ( 192.168.0.127 和 192.168.0.128 ), 在 配 置 LVS+Heartbeat 时 又 添 加 了 一 台
(192.168.0.126)做为备份主节点,虚拟 VIP 地址为 192.168.0.100,其结构图如图 4 所示。

图4

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 67 -


企业应用

配置此集群分为 4 种情况:
◆ 配置基于 DR 模式 LVS 集群;
◆ 配置基于隧道模式 LVS 集群;
◆ 配置基于高可用 LVS+Heartbeat;
◆ 充分利用资源将 DRbak 做为 Real Server,此种配置方式可以加强 LVS 的主节点的高安
全性前提下(主节点简称 DR,备份主节点 DRbak)。
本文介绍第 3 种情况:配置 LVS+Heartbeat
1.使用 DR 或/tun 模式
本例使用 tun 模式,Director Server 端脚本文件如下所示:
more /etc/init.d/tunlvs
#!/bin/sh
# description: start LVS of Directorserver
VIP=192.168.0.100
RIP1=192.168.0.127
RIP2=192.168.0.128
#RIPn=192.168.0.n
GW=192.168.0.1

. /etc/rc.d/init.d/functions
…………
Real Server 端同样使用上面的配置文件就可以。
2.安装配置 Heartbeat
下载 libnet 1.1.2.1 版本和 Heartbeat 2.0.2 版本,Heartbeat 下载地址为
http://www.linux-ha.org/download/,运行如下命令进行安装:
tar -zxvf libnet.tar.gz
cd libnet
./configure
make
make install

tar zxf heartbeat-1.99.4.tar.gz


cd heartbeat-1.99.4
./ConfigureMe configure --disable-swig --disable-snmp-subagent
make
make install
cp doc/ha.cf doc/haresources doc/authkeys /etc/ha.d/
cp ldirectord/ldirectord.cf /etc/ha.d/

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 68 -


企业应用

修改主配置文件(/etc/ha.d/ha.cf),下面介绍一些主要参数的用法及功能。
◆ logfile /var/log/ha-log:指定 Heartbeat 的日志存放位置。
◆ crm yes:是否支持 ClusterResourceManager(集群资源管理)功能。
◆ bcast eth1:指定心跳方式使用以太广播方式,并且是在 eth1 接口上进行广播。
◆ keepalive 2:指定心跳时间为 2 秒(即每两秒钟在 eth1 上发送一次广播)。
◆ deadtime 30:指定在 30 秒内没有心跳信号,则立即切换服务。
◆ stonith:用以保证共享存储环境中的数据完整性。
其他一些插件可以在/usr/lib/heartbeat 下找到,也可以添加如下一些插件:
#apiauth ipfail uid=hacluster
#apiauth ccm uid=hacluster
#apiauth cms uid=hacluster
#apiauth ping gid=haclient uid=alanr,root
#apiauth default gid=haclient
编辑资源文件(/etc/ha.d/haresources)
,修改如下内容:
ns.ghb.com IPaddr::192.168.0.127/24/eth0 httpd
设置 ns.ghb.com 为主节点,集群服务器的 IP 地址为 192.168.0.127,netmask 为
255.255.255.240,该集群的服务器有 httpd 服务。
编辑认证文件(/etc/ha.d/authkeys),选取一种认证方式,并且设置权限为 600:
auth 1
1 crc
#2 sha1 sha1_any_password
#3 md5 md5_any_password
使用同样的方法配置节点 2,备份节点 192.168.0.126 上的 Heartbeat 和 Apache 的配置与节
点 1 完全相同,LVS 配置也要相同。
3.整合 LVS
安装完成后进行测试,关闭主节点服务器,另一台自动接管,主节点恢复后自动接管
服务。如果以上测试通过,那么开始与 LVS 整合。
配置 Ldirectord,Ldirectord 的作用是监测 Real Server,当 Real Server 失效时,将其从
Load Balancer 列表中删除,恢复时重新添加,编辑 Ldirectord 配置文件/etc/ha.d/ldirectord.cf,
修改如下内容:
# Global Directives
checktimeout=3
checkinterval=1
fallback=127.0.0.1:80
autoreload=yes
logfile="/var/log/ldirectord.log"
quiescent=yes
# A sample virual with a fallback that will override the gobal setting

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 69 -


企业应用

virtual=192.168.0.100:80
real=192.168.0.127:80 gate
real=192.168.0.128:80 gate
fallback=127.0.0.1:80 gate
…………
在每个 Real Server 的中添加监控页,运行如下命令:
echo "Test Page" >> /var/www/html/test.html
修改 Heartbeat 的资源文件/etc/ha.d/haresources,修改内容如下:
ns.ghb.com 192.168.0.100 tunlvs ldirectord httpd
分别在主节点和备份节点启动 Heartbeat:
/etc/init.d/heartbeat start
关闭主节点,备份节点将自动接管 Director Server 服务,那么以上配置成功。
以上是笔者配置 LVS+ Heartbeat 的过程,本过程还没涉及到共享存储,共享存储在集群的
整套解决方案中占有相当重要的地位,简易实现通过 NFS 也可以实现共享存储,但是在要
求更大、更快时,则需考虑其存储方式,如 SAN 等。

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 70 -


混源新世界

混源新世界

『摘要』今年 7 月,微软开源总监 Bill Hilf 宣布微软大踏步的迈向开源,回顾微软的历史


我们发现,微软在很多年前就从不同层面涉及开源世界。抛开微软的商业目的,微软迈向
开源的行为对微软、对开源世界都是具有积极意义的,开源世界与微软应该彼此尊重,而
不是过去的互相谩骂与诋毁。

微软与开源的故事

陈杰

春去秋来我们都无法抗拒时间及命运,无论发生了什么,也无论忘怀了什么,岁月的
痕迹让人无法抹杀它的到来,也无法强留住它的过去。在当今如火如荼的开源运动大潮中,
我们依稀的看见一个庞大的身影正蹒跚着向我们走来,仔细分辨,居然是曾经开源软件的
对头,全球软件霸主微软帝国。很多人正为在开源的世界发现微软的身影而好奇甚至争论
不休的时候,我们穿越时空的隧道发现微软迈向开源世界的通道已经很多个年头,从起初
的步履蹒跚到如今的步伐轻盈,微软已经走过了春秋,穿越了丛林,在历经开源成长的种
种之后终于浮现在了人们的眼前。
有人惊叹“微软也开源?”也有人不屑一顾“这只不过是微软战略的一部分。”更有人
振臂高呼“微软大步迈向开源是微软的觉醒,是开源运动取得阶段性胜利的标志。”无论是
对于醉心于商业联盟的支持者还是专注于开源世界的爱好者,微软迈向开源都是个不争的
事实,不管是通过直接开源的形式还是通过合作及共享的模式,微软正日益频繁的参与开
源社区的事务,曾经剑拔弩张的硝烟气息已经渐渐变淡并弥散在空气中,而我们更多的将
看到微软与开源你中有我,我中有你的和谐景象。
对于微软日益走近开源,开源社区保持着谨慎的态度,一方面希望微软介入开源,为
开源事业提供持续的增长动力;另一方面,也担心微软的介入,瓦解了目前开源世界的产业
联盟,甚至直接影响了开源运动的进程。作为世界上最成功的商业公司,微软迈向开源是
有其商业目的,或者是为了其软件不被边缘化,或者是为了与开源厂商合作牟取更大的利
益,或者是认同了开源社区这一先进的开发机制,至少绝对不会只是秉承开源精神的奉献。
对于单方面寻找商业模式的开源厂商,这些厂商也在积极与私有软件厂商展开合作,以便
寻求到最适合自己企业的商业模式,毕竟开源也得盈利。开源与私有软件厂商正在寻求一
种临界地带,都纷纷的往过去的临界点靠拢,未来的软件世界将是由开源与私有共同演绎
的商业世界。

封闭中的启航

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 71 -


混源新世界

三个月前,再次来到中国的 Apache 创始人 Brain Behlendorf 在“关于开源你可能不知


道的八件事情”的演讲中告诉我们,其中的一件事就是:“Microsoft Loves Open Source(微
软热爱开源)。”微软真的爱开源?开源软件与私有软件已经融化了坚冰,达成了妥协?让
我们首先回顾一下微软开放的历史。
早在 2002 年,微软就第一次对外公布了 Word 的 XML 描述规范(WordProcessingML),
随后,在 2003 年,公布了整个“Office 2003”软件包的 XML 描述规范。在微软的 Mix07
大会上,微软将
IronRuby 动态语
言和动态语言运
行时间库(DLR)
依照 BSD 式的
Permissive 许可
证提供,即允许
用户修改和分发
代码。
SugarCRM
与 JBOSS 是开
源社区著名的开
源项目,而微软
通过与这些开源
项目或开源厂商
的合作,将这些
开源项目与 Windows 集成,使得这些非 Windows 组件能够可靠地与 Windows 服务器软件
连接。同时,与 XenSource 和 MySQL 等达成了“合作—竞争”的协议,一方面,MySQL
与微软的 SQLServer 存在竞争的关系,另一方面,MySQL 运行在 Windows 操作系统之上,
与微软达成合作的协议。
2006 年 8 月,微软在 LinuxWorld 上推出了 Port 25 网站,这个博客风格的网站透露研
究试验室的测试、分析和互操作性工作的具体情况及研究成果。
身份认证是一项复杂的工程,在微软公司身份设计师 Kim Cameron 的率领下,微软促
成了社区进行一次有关身份技术的讨论。2006 年 9 月,微软宣布推出 Open Specification
Promise,这个计划使开发人员可以使用微软开发的 35 个 Web 服务协议,无需许可证而且
不用担心知识产权问题。
回顾历史,我们不难发现,微软从一开始就参与了开源世界的建设,从不同层面对开
源社区给予了支持,只是由于过去商业软件与开源软件的对立关系,这些努力、这些支持
却不为人知,或者只是很少的人知道。随着开源软件与私有软件的日趋融合,开源运动需
要继续深入发展,我们相信需要微软的参与,无论是解决互操作的问题,还是发展当前流
行的混源架构。

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 72 -


混源新世界

坚冰的破碎

2007 年 7 月 6 日微软开源总监 Bill Hilf 先生宣布:“微软决定大步迈向开源世界”。


OSCON 大会主席 Tim O’Reilly 表示,“这是一次巨大的、长久等待的大地震,值得我们
欢迎。”随后 Bill Hilf 宣布,微软即将把“共享源码许可证”提交 OSI(国际开源促进会)
审批。
微软将“Shared Source”提交 OSI 审查批准,毫无疑问,是一种历史性的进步。这意
味着微软支持源代码“不受限制的访问”。至今,微软在 Codeplex 社区网站上有 1800 个项
目全是“自由许可”
(liberal licenses)的;在 SourceForge 上,有 77000 个开源项目与微软有
关;在微软开发者网站上有 100 多万行源代码是完全开放的,其中 558 个项目采用“源码
共享”许可证。
Bill Hilf 的讲话表明了微软对待开源世界的态度,从过去零星的参与开源项目,并与
开源厂商进行合作,到如今的大踏步的、全面的进入开源世界,横跨在开源与微软之间的
坚冰已经松动并出现裂缝。
微软大中华区平台战略总监李科研表示:“实际上,微软很早以前就参与开源,如今从
微软参与开源的角度而言,主要包括四个支柱性的策略,就是‘参与、合作、成长、学习’。
参与就是微软从开发软件这个角度参与开源,与社区的爱好者一同开发开源项目;合作是
指与开源厂商的合作,通过合作,我们会设法使开源的产品运行更加完善;第三个问题就是
成长,开源的厂商、项目都很多,但盈利的还比较少,微软与合作伙伴之间的经验非常丰
富,从这个角度,微软能帮助这些开源厂商寻求到更好的商业模式;最后一个就是学习,微
软的经验能帮助终端用户更好的使用产品,以及搭建基础环境。反过来,微软也能从开源
社区中学习到更多东西,这是一个互动的过程。

我们从微软对待开源的策略中不难发现,过去的“不平等条约”已经变成了如今“双
赢”的策略,学习与合作成为了微软对待开源的主线,这四个支柱性的策略就如同扎在坚
冰中的四把擎天利刃,横跨在开源与微软之间的坚冰最终将破碎,融化于蓝天大海中,坚
冰的破碎将使开源与微软站在同一个海洋,在同一片天空下憧憬着同一个梦想。

向中间靠拢

争论通常导致两种截然不同的观点,没有什么能比“开放源代码”和“商业”软件应
该扮演的角色和可以带来的益处的争论更能说明这个问题。然而,随着时间的推移,要证
实两极化的争论中哪种观点正确越来越困难,因为目前争论的双方都在向一个共同的“中
间”立场靠拢。商业软件开发商正在采用更加开放的策略,开放源代码软件也正在寻求更
多元化的商业模式,过去对立的两边正在不约而同的走向中间地带。
现在很少有软件公司会称自己纯粹是商业性质的,同样也很少有不依靠某种形式的商
业赞助和商业关系维持的纯粹开放源代码软件项目。实际上,已经有研究结论声称,这两
种模式是互补的:“不可能通过削弱专有软件市场来加强开放源代码”,因为专有软件有助
于形成一个创造收入、工作机会和产品创新的商业市场。

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 73 -


混源新世界

混合模式还意味着“开放源代码”项目在 Linux、Windows 和 OS/X 上的繁荣。从


Sourceforge.net 上基于 Windows 的项目数量就可以清楚地看到,商业软件平台和开发环境
对开放源代码群体具有难以置信的价值。
中国开源软件推进联盟主席陆首群教授表示:“为了和开源软件竞争,许多私有商业软
件也开始想办法。我们的目标是要把异构系统应用架构各层次的软硬件模块集成起来。而
事实上,开源项目发展是不平衡的,有些层面的开源软件发展比较好,而有些发展比较缓
慢,比如有些开源数据库现在容量还比较小。这个时候,这类传统软件厂商就想要把自己
的产品插入到这个开源架构中去,就成了混源结构。美国做了这方面的统计,有超过 70%
用户都要求能提供混源架构。而不少厂商也希望推广混源架构,所以混源架构将是开源与
商业软件结合的一种趋势,并且开源软件厂商与商业软件厂商也都积极的在向这个领域靠
拢。”
对于开源世界流行“混源架构”的提法,微软有着类似的表达方式,那就是“异构环
境”,但无论是“混源”还是“异构”,都表明了双方向中间地带靠拢的一种态度。李科研
表示:“微软大力提倡异构环境的搭建,通过在 SourceForge 上公布项目的方式,表明其也
在向中间靠拢。比如我们提供的 Windows Installer XML (WiX)工具包,自发布以来,一直
处于最热门访问项目的行列,放在 SourceForge 上开放托管,可以通过查看、接受许可条
件后下载资源文档等方式获得。同时,也开放了 Windows Server 2003 SP1 的内核源代码用
于教育和研究,可以帮助科研人员及学生进行环境模拟,并自由修改提交代码。”

最终的融合

在如今日新月异的信息技术市场上,企业和其他组织通常使用不同种类的 IT 网络,而
这些 IT 网络通常来自不同厂商提供的硬件和软件。在这种环境下,从技术上和商业上就对
互操作性提出了要求。互操作性也是政府促进创建一个健康、富含竞争性和创新性的 IT
生态系统和政府软件采购程序背景下的重要目标。
当横跨在开源与商业软件之间的坚冰破碎后,互操作问题也是开源软件与商业软件最
终是否能融合的关键。开源与商业软件的互操作包括几个层面,有操作系统之间的互操作
问题,也就是人们耳熟能详的跨平台;也有同一操作平台下软件的互操作问题,也就是我们
经常提到的兼容问题;还有文档之间的互操作问题,文档必须实现在不同平台、不同办公套
件下的统一标准,才能真正的实现互操作。
陆首群教授表示:“执行开放标准,解决互操作性,已成为当前软件产业发展中的一个
核心问题。各种开源软件与私有商业软件在各自相互之间,在各个层次上都存在互操作性
的问题,包括标准的互操作、架构的互操作、驱动程序的互操作、硬件平台的互操作、网
络的互操作、文档的互操作,以及应用软件与操作系统之间的互操作。开源软件在互操作
的问题上比较有优势,它充分体现开放标准实施的过程,既适合于建立开源架构,也适合
于建立混源架构,且更有利于建立在松耦合条件下面向服务的架构,同时开源软件的社区
协作开发方式,是建立开放标准统一平台的一种创新模式。

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 74 -


混源新世界

对于开放源代码更有利于解决不同软件的互操作问题,李科研表达了不同的看法:“其
实我不认为软件开放源代码了,就能很好的解决互操作的问题。我认为解决互操作的根本
问题在于标
准,这包括
开放的标准
和厂商的标
准,只有在
解决互操作
的问题上形
成了统一的
标准,才能
真正解决互
操作的问
题。因为任
何一个人都可以修改开放源代码软件的源代码,即使所有开放源代码软件的产品在其诞生
的那一刻是支持标准化的,但当用户对这些软件产品按照自己的意愿和使用情况进行更改
的时候,就会出现不可兼容和不符合标准化的情况,这种对源代码的更改同时也增加了为
实现和测试互操作性而额外增加的成本。”
解决软件的互操作性已成为当务之急,并已形成当前软件产业发展中的一股技术潮流。
互操作的问题不只是源代码是否开放的问题,更深层次的问题表现在各个层面缺乏统一的
标准,解决互操作的问题需要开源软件与私有软件的共同参与,当然也少不了微软。
对前一段时间,喧嚣尘上的业界如金山公司对微软在其 Office 办公软件套件互操作性
的问题的担忧,据介绍,目前在中国已经有了实质性的合作,比如,微软与北航已经在互
操作性的问题上开展合作,北航已经针对办公套件开发了转换的插件,对双向操作进行了
完整的规划。目前第一阶段,已经完成了单向的功能,用户已经能够在著名的开源项目社
区网站 Sourcforge 上的项目页面进行下载。相信随着开源软件与私有软件的日益融合,标
准的不断完善,互操作的问题将在各个层面全面开花。
有人把这次微软“进入开源世界”看成是“微软冲击波”,使早在 1998 年趋于统一的
两个概念:自由软件(Free Software)和开源软件(Open Source)的争议又起。有人认为:
“微软借机劫持开源一词”,“现在是时候了,让我们回到过去自由软件的时代”。
对此,Linux 基金会执行主席 Jim Zemlin 号召大家要尊重微软,他表示:
“Linux 需要
认识到,微软在某些方面的领导地位。Windows 与 Linux 已经形成两元系统。这种客观事
实的存在,要求我们承认和面对一些关于软件的偏见,而不是一味地否认它。”正如 Jim 所
言,开源与私有软件将长期共存,而真正收益得将是最终的用户。

记者手记

一次偶然的机会,笔者听闻了 SugarCRM 这个开源世界著名的项目有微软的参与,随

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 75 -


混源新世界

后翻阅资料发现众多的开源项目背后都能看到微软的身影。对此,笔者大为惊讶,微软也
积极参与开源?微软参与开源的目的是什么?开源社区对于微软又是怎样一种态度?这些
问题萦绕在记者脑中。
无独有偶,今年 7 月,微软开源总监 Bill Hilf 宣布微软大踏步的迈向开源,微软从过
去“暗中”支持开源项目到如今“明目张胆”的走进开源世界,是开源世界的变化吸引了
微软这样的软件巨头?曾经对立的关系就这样烟消云散?还是微软参与开源另有噱头?
这些疑问成为了写这篇报道文章的一个初始目的。走进微软的开源世界,发现微软几
年前就不同层次的参与到开源世界中,虽然可能层次不同、模式不同、参与程度也不同,
但是可以看到微软一直在试图从封闭走向开放。所以这篇报道主要梳理了微软参与开源世
界的历程,披露一些不为人所知的微软对众多开源项目的支持,对于微软与开源世界需要
精诚团结,共同解决的互操作问题、混源架构的发展问题,也分别听从了来自微软与开源
社区专家的意见。
微软走向开放是一件振奋人心的事情,无论是对于开源世界还是私有软件的世界。当
微软与开源都纷纷调转自己的航线,当横跨在微软与开源之间的坚冰破碎,当微软与开源
真正解决互操作问题达到互相的融合,我们有理由相信,混源将在未来的 IT 环境中扮演
重要的角色,而真正受益的将是最终用户,未来的 IT 环境将是混源的天下。
微软作为全球软件界的领袖,Windows 是最成功的一种操作系统,今天 Linux 取得了
迅猛发展,已开始形成由 Windows 和 Linux 操作系统构成的两元操作系统平台。同时,众
多著名的开源项目运行在 Windows 的平台之上,面对这样的形势,竞争与合作将是微软与
开源世界今后发展的主旋律,这正如辩证法中对立统一的观点,在合作中展开竞争,在竞争
中寻求合作。

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 76 -


混源新世界

探讨“混源应用”发展之道

混源,是最近两年才出现的新词汇,由“mixed source”翻译过来。是相对于闭源软件
(closed source)和开源软件(open source)而言,它是兼有闭源软件和开源软件的一种混
合体。
提到开源,第一个浮现在脑中就是 Linux,公共的代码和年轻的理想主义者。尽管开
源哲学已经做了很多有意义的工作,但大家都认为它还没完成它真正的内在需求。人们更
希望数据能够被公开而不是代码。代码可以,经常也应该被一次又一次的重写,重构,但
是只有合适的数据才能使系统运转。
随着技术的发展,我们所用的计算设备,互相联系的越来越紧密。举个例子来说,你
的日程安排软件的代码是开源还是的私有的变得越来越不重要;无论你使用微软的 IIS 还
是 Apache,使用.NET 或 X.org 都不重要。真正重要的是这个日程数据是不是符合(例如)
iCalendar 格式。当数据的重要性明确以后,应用软件的来源,它是开源的还是闭源的,都
无关紧要了。这就是混源应用的初衷,最基本的出发点。
“混源应用”听起来复杂,但是在平时的应用中,我们常常有意无意地实施了混源应
用。从客户端的角度来看,混源应用很普遍。如 Firefox、7-Zip 等,都占据了一些份额。
最近出现了模仿 Debian Linux 及其衍生版本的 APT 软件包的升级方式,即 win-get,类似
apt-get,这就是混源应用的一个很不错的尝试。从服务端角度来看,混源应用的环境也是
很广泛的。知道 WAMP 吗?就是 Windows 平台搭配开源的 Apache、MySQL、PHP,其实
就是一种混源应用。微软已经计划在 IIS 7.0 模仿开源 Apache 的特性,通过 FastCGI 原生
支持多种开源开发环境,如 PHP、Python、Ryby on Rails 等等。这就是开源和微软闭源有
趣的结合。
越来越普遍的混源应用已经越来越多地引起人们的注意,关于混源应用的讨论话题也
成为热门,混源相关的问题将各路专家引向了同一个圈子。为此,51CTO.com 建立“开放
应用技术博客圈(http://www.51cto.com/exp/fsource/)”,汇聚了来自开放社区的开源专家,
微软、IBM 和 Oracle 等厂商的技术高手,大家英雄不论出处,共同提供在技术应用方面的
最佳体验,为广大技术人员提供专业的帮助。
混源应用并不是开源和闭源之间不可调合的战争,也不能简单的看作是开源和闭源之
间的妥协。所以,讨论“开源闭源孰优孰劣”的命题,没有意义,因为如今应用的环境,
完全闭源的环境和完全开源的环境很罕见了;对用户来说,如何将我们的软件应用到极致,
这才是我们的工作重点。

网站:www.linuxpk.com 投稿:opensource@linuxpk.com 《开源》 - 77 -