什么是开放源代码?
开放源代码软件是现代计算环境的宝贵资源。本质上,开放源代码软件使得源代码对使用软件的任何人可用,即不对最终用户隐藏任何内容。开放源代码软件不一定是免费的,虽然大多数都是免费的。许可证协议决定了软件的使用方式;最流行的许可证是 GNU 公共许可证(GNU Public License,GPL)。
开放源代码软件是由许多不同的发起者所开发的,包括选择与其他人共享其工作成果的技术爱好者所开发的项目。商业性的公司,比如 IBM,也在为开放源代码出力,以便在社区中提供优秀的技术,同时确保他们的专有硬件和软件得到开放工具的支持。能够编程、编写文档或执行其他一些软件开发相关任务的任何人,都能够帮助创建开放源代码软件 ---- 并且他们正是这样做的!
为什么要使用开放源代码工具?
许多人选择开放源代码工具是因为它们便宜(开放源代码软件经常是免费的,这当然非常便宜)。开放源代码软件还倾向于非常可靠。由于有技术兴趣的任何人都能够查看源代码,因而可能会有数千个质量控制机构在评估代码。程序员能够无隔阂地直接接触用户,因此问题和 bug 通常是大家都知道的,从而迅速得到纠正。此外,由于没有对用户隐藏任何东西,这样有利于更好的技术脱颖而出。
对于担心安全问题的用户,开放源代码软件能够给他们带来心灵的平静。如果怀疑应用程序隐藏有“后门(back door)”,您可以获得源代码,自己检查它,或让您信任的人检查它。然后您可以自己编译该代码,确保它和您预期的完全一样。当发现与安全相关的缺陷时,社区会立即采取行动,并且通常会在几小时内提供建议使用的补丁。正式的项目解决办法可能要花稍长一点的时间,但是通常不会超出几小时或几天。开放源代码软件使您能够在必要时对您的资源采取动作。
开放源代码软件还有助于确保技术不会被忽略。由于开发过程对感兴趣的任何人都是开放的,您通常会找到人们为不常见的硬件开发的驱动程序。此外,您还能找到由那些利用不常见协议的小社区为此类协议提供的支持。Linux 之所以在广泛的 IBM 硬件上可用,正是由于采用了这种开放方法。这有助于保持您的硬件的生命力,同时帮助保护您避免失去对某种关键技术的软件支持。如果某个项目不再提供官方支持了,您总是能够选择自己提供该支持!
获得开放源代码工具
获得开放源代码软件是很容易的;Linux 内核本身就是开关放源代码的。当您安装 Linux 时,就开始使用开放源代码了。除了内核外,Linux 发行套件中还包含其他许多开放源代码包,其中包括开发工具、库和应用程序。对于所有这些包,它们的源代码都是可用的,您可以编译任何包以优化或为特定用途而自定义它。
除了发行套件中包含的包外,Internet 上还有其他开放源代码软件可供使用。有些是专用的项目或正处于首次开发中的新技术,而其他则是与 Linux 发行套件中包含的包相竞争的方法。这是一个思想的自由市场。成功的开放源代码软件通常最终会作为辅助包或公共包被接纳到发行套件中。有些项目甚至被接纳为 Linux 内核的一部分,此时这个单独的项目将解散,而它的开发将作为标准内核维护的一部分继续进行。
SourceForge
SourceForge.net(请参阅 参考资料)是一个很受欢迎的针对开放源代码项目的知识库。它通过易于使用的 Web 界面来组织项目,该界面具有搜索功能以帮助您查找项目。每个 SourceForge 项目都有版本历史记录、bug 列表、讨论组、文档,当然还包括源代码。如果拥有自己的开放源代码项目,您也可以利用 SourceForge。
RPM 与源代码
无论何时只要可能,预编译的二进制 RPM 都是在 Linux POWER 环境中使用开放源代码软件的最简单方式。软件的所有部分都以二进制的形式准备好了,只需直接安装即可。安装通常只需几秒钟就能完成,软件马上就可供使用了。
由于 RPM 的工作方式,系统将自动接受依赖关系和兼容性检查,在软件开始安装之前,您会接到关于缺少某个组件的通知。此外,升级、管理和删除 RPM 包也很简单。无论何时只要可能,采用 RPM 都是可取的。
针对 RPM 的一个优秀知识库是 Rpmfind.net(请参阅 参考资料)。它具有一个来自许多发行套件的可搜索索引,以及大多数主要发行套件和升级的镜像。为 PPC 列出的任何包都应该与 POWER 系统兼容。您既可以搜索包的名称,也可以搜索某个包中包含的单独文件。得到的搜索结果将跨越广泛的 Linux 发行套件,包括非常罕见的发行套件。所列出的每个包通常还指向对应项目的主页,因此如果在查找某个项目资源时遇到问题, rpmfind 可能会提供帮助。对于 POWER 体系结构,作为 PPC 包列出的所有 RPM 或许都能工作。在安装新的包时务必细心一点。RPM 将会帮助保护您避免意外地完全摧毁系统,不过强烈建议您使用常规的预防措施,比如制作备份以及在非生产系统上执行测试。
使用源代码
由于 POWER 体系结构上的 Linux 还比较新,并非所有开放源代码项目拥有者都曾想到过它。因此可能还没有对那些包可用的 RPM 包。在这种情况下,您必须自己编译源代码。这对于诸如 Samba 这样成熟的项目来说通常不是一件难事,但是对于不太常见的项目来说,可能需要做更多的工作。应该对在生产系统上编译源代码保持谨慎,因为这样可能导致问题,或者失去对正在该系统上运行的商业软件的支持。
Linux 本质上在不同的体系结构上都是相同的;因此,许多项目的源代码无需多少经验就能成功地编译。源代码通常作为压缩的 tar 文件来提供。Gzip 是最常用的压缩方式,不过 bzip2 正在变得流行起来,因为它创建的压缩文件更小一些。
首先,您必须展开压缩包。让我们使用 Gimp 作为一个例子。Gimp 是一个照片编辑包,它处理各种各样的图像格式,并且包括昂贵的商业产品中具有的功能。
图 1. Gimp 实际应用

要下载 Gimp 源代码,请参阅本文后面 参考资料 中指向 Gimp Web 站点的链接。要展开源代码,请使用 tar -xvjf gimp-1.2.4.tar.bz2 命令。
文件将解压缩到当前目录。标准的方法是将源代码包含在一个与产品名称相同的目录中。在此例中,文件包含在一个名为 gimp-1.2.4 的目录中。
切换到该目录就会看到源代码、一些文档、配置脚本,以及 README 文件。大多数源代码包都有一个名为 INSTALL 和一个名为 README 的文件。在编译软件之前应该阅读这些文件。通过阅读这些文件,您可以在产生问题之前识别它们,并且获得正确的编译和安装步骤,从而省去一些麻烦。我在编译源代码时遇到的大多数问题,都只是因为我没有遵循那些文件中的指示。
最常见的下一个步骤是运行 configure 脚本。 Configure 是 autoconf 包的一部分,这个包包含在 Linux 发行套件的开发工具中。下面引用 Autoconf 的包描述:
“GNU 的 Autoconf 是一个用于配置源代码和 Makefile 的工具。使用 Autoconf,程序员能够创建可移植和可配置的包,因为生成包的人能够指定各种配置选项。”
这个配置脚本在系统上运行一系列测试,以确定针对您的发行套件和体系结构编译包的最佳方式。然后它为您的系统创建一个自定义的 Makefile。如果在系统上执行编译时遇到问题, configure 将会告诉您。 Configure 通常允许您定制要包括到编译包中的特性,或者允许您提供关于库或其他必需文件的位置参数,以便该包能够成功编译。要不带参数执行 configure 脚本,请使用如下命令:
./configure
它将在系统用上执行多个测试并成功地结束。要生成程序,请使用如下命令:
make
如果编译出错,您需要确定问题并修复它们。这些问题也许比较棘手,可能需要关于您的环境和总体编程的大量知识。如果一切顺利,下一步通常是使用如下命令来安装软件:
make install
这个命令将把文件复制到系统中的适当位置,更新文件权限,复制配置文件,并把文档添加到手册页。
这种方案存在许多可能的变化形式。这其中包括对 configure 脚本使用开关来调整将要编译到程序中的特性,使用 Makefile 中的不同命令来调整编译方式,等等。
如果程序在安装后无法工作,大多数 Makefile 都包含一个 uninstall 参数来删除该程序。
make uninstall
务必记住,使用原始源代码不会向 RPM 数据库输入任何内容。以这种方式安装的软件是非托管的(unmanaged),因此应该小心进行。
创建自定义 RPM
如果打算使用大量纯源代码,您应该了解更多关于创建自己的 RPM 的信息。创建 RPM 并不是特别困难,虽然这个主题超出了本文的讨论范围。从您自己的代码创建 RPM 要比从陌生人编写的代码创建 RPM 容易得多。要创建良好的 RPM 包,您需要足够了解某个软件部分中的所有组件。本质上,这个过程就是创建一个名为 SPEC 的配置文件,它识别 RPM 数据库所必需的所有信息。关于依赖关系的信息、生成该文件的步骤,以及安装后的操作连同该包中所有文件的列表,都包括在这个 SPEC 文件中。RPM 使用这个 SPEC 文件来编译代码和创建二进制包。请查看您的源包,以确定是否已经创建了一个示例 SPEC 文件。包括 SPEC 文件已经成了一个普遍习惯,这样还可能允许您只需做很少工作或不需要做工作就能创建一个自定义的 RPM。
源 RPM
在创建 RPM 时,存在一个叫做源 RPM(Source RPM,SRPM)的工件(artifact)。这是一个与源代码组合后的 SPEC 文件,设计用于构建一个或多个体系结构。这对两个世界来说都是最好的!使用源 RPM,您能够在系统上自定义编译软件,但是完成后的产品将是可安装的 RPM 而不只是原始的二进制。作为预编译 RPM 可用的大多数包也作为 SRPM 可用。这可能是在 Linux 中跨平台移动软件的一种简单方式。当您在一个不同的平台上成功地重新编译时,可考虑与社区共享完成后的 RPM。
有用的开放源代码工具
存在许多可用的开放源代码工具。Linux 内核实际上就是一个开放源代码项目。因此,运行在 Linux 之上的服务是开放源代码项目就顺理成章的了。例如,DNS、DHCP、FTP、NFS 以及包括在所有发行套件中的其他许多功能理所当然是开放源代码项目了。下面是其他开放源代码项目的列表,不管您熟不熟悉,它们都对 POWER 可用。
IP 表
IP 表是现代 Linux 内核的防火墙。IP 表是一个强大的防火墙子系统,它提供有状态的、基于端口的包过滤。 有状态的包过滤 与无状态的包过滤的不同之处在于,前者同时考虑了包的状态及其来源和目的地。例如,可以建立一个过滤器来丢弃所有 ICPM(ping)包,但是那些针对已建立的连接或与已建立的连接相关的连接的包除外。这使得以下事情变得可能,即使用一个过滤器来应答传出的 ping 请求,但是忽略来自陌生系统的传入请求。所有常见的 Linux 发行套件都包括了 IP 表。请参阅 参考资料 以获得指向 IP 表项目主页的链接。
GCC
Gnu C Compiler(Gnu C 编译器)是 Linux 的基础。这个开放源代码的编译器已被移植到许多平台上,Linux 内核一般也会在之后不久移植到那些平台上。虽然不像诸如 IBM VisualAge C Compiler(请参阅 参考资料)这样的商业编译器优化的那么好,但它非常有效,很适合用于实际的项目工作。在 Linux 中编写可移植代码的“最佳方法”是在做其他任何事情之前确保使用 GCC 这个跨平台的 Linux 标准来编译源代码。GCC 将会继续发展,并且有可用于 POWER 的 32 位和 64 位版本。GCC 包括在所有主要的 Linux 发行套件中。请参阅 参考资料 以获得指向 Gnu C Compiler 项目主页的链接。
Apache HTTP Server
Apache 是第一个真正的 Linux 重量级应用程序(killer-app)。许多 Web 管理员都使用这个优秀的开放源代码工具来提供 HTTP 服务。Apache 快速、可扩展和可靠。IBM HTTP Server 使用 Apache 作为基础,同时添加了安全和管理模块。所有常见的 Linux 发行套件都包括了 Apache。请参阅 参考资料 以获得指向 Apache 项目的链接。
OpenSSH
开放 SSH 是一个用于安全的点到点网络的信息加密工具。使用 OpenSSH,telnet、ftp、rpc 以及其他许多类似的通信就可以安全地进行。OpenSSH 使用公钥密码(Public Key Cryptography)来保护和验证信息访问。当对某个服务器建立 ssh(secured-shell)连接时,两台机器之间就会形成一条加密隧道,这条隧道具有执行管理功能所需要的足够安全性。SFTP(secured-ftp)提供典型 FTP 服务的功能,但是不会暴露密码和数据。使用 OpenSSH 执行的远程过程调用能够安全地地得到处理,并且能够很好地确保调用系统已获得授权。我每天都在使用 OpenSSH。OpenSSH 包括在所有主要的 Linux 发行套件中。请参阅 参考资料 以获得指向 OpenSSH 项目的链接。
MySQL 和 PostGreSQL
MySQL 和 PostGreSQL 都是成熟的开放源代码关系数据库项目。两者都具有丰富的特性,包括事务、广泛数据类型支持,以及通过 ODBC、JDBC、C、C++ 和其他各种语言实现的连接性。两者都符合 ANSI SQL。MySQL 是在 Gnu 公共许可证(Gnu Public License,GPL)之下发布的。也有可供在非 GPL 项目中使用的专业许可证。PostGreSQL 在 BSD 许可证之下发布,好像对各种用途都是免费的。指向这两个项目主页的链接都可从 参考资料 中找到。
FreeSwan (IPSEC)
虽然 OpenSSH 提供了安全的点到点连接,然而 Internet 协议安全(Internet Protocol SECurity,IPSEC)提供了一个进入网络的安全隧道,允许您通过不受信任的连接连接到单独的网络。FreeSwan 是开放源代码的 VPN 项目。它同时提供客户机和服务器功能,因此可用于连接到使用 IPSEC 标准的现有网络,或提供进入网络的 VPN 入口。由于与强加密产品出口相关的法律限制,许多 linux 都没有包括 IPSEC。FreeSwan 的使用可能仅限于某些地理区域。请在 参考资料 查找指向 FreeSwan 项目的链接。
OpenOffice
谁说这个办公套件是仅用于便携式电脑的? OpenOffice 是免费、开放源代码和支持多平台的办公软件,它使用 XML 作为内在的文件格式。OpenOffice 能够读写 MS Office 文件。它包括字处理、电子表格、演示文稿(幻灯片)和绘画功能。它能够连接到多种数据库格式,并且能够通过您自己的 JDK 使用 Java。请参阅 参考资料 以获得指向 OpenOffice 项目的链接。
图 2. OpenOffice

Gimp
Gimp 是一个健壮的开放源代码照片编辑包。它处理广泛类型的图形格式,并且具有诸如“层编辑”这类通常可在昂贵的商业程序中看到的功能。Gimp 还具有脚本编写功能,可用于自动化图像处理,并且它可运行在多种平台上。指向 Gimp 项目主页的链接可从 参考资料 中找到。
图 3. Gimp 照片编辑

Blender
Blender 是一个 3D 建模和动画程序,使其与众不同的首要特点,就是它能够在 1 MB 大小的程序中使用摄像机动作和光照来进行 3D 建模!Blender 现在变得稍大一点了(4.5 MB),并且变得更加成熟,但它仍然是开放源代码的。Blender 项目主页链接将在 参考资料 中列出。
图 4. Blender 3D 建模和动画程序

参与开放源代码社区
社区参与是开放源代码软件成长和成功的重要部分。
获得支持
关于使用开放源代码软件的一个普遍的顾虑是觉得开放源代码软件缺乏支持。其实支持是可用的,不过它并不总是遵循商业化支持的传统路线。在某些情况下,可以证明开放源代码软件的支持更好。
文档也在线可用,内容涵盖从非常专业的在线手册到由单独的个人编写的非常随意的 HOWTO 文件的广泛形式。
当文档不足够时,其他类型的支持也在线可用。大多数支持都是通过电子邮件或新闻组来提供的,这些方法不需要支持请求者和支持提供者之间建立点到点的连接。当您以这种方式获得支持时,通常不是与服务台交流,而是与产品的开发人员和常规用户交流。您最后一次请求帮助并获得参与过源代码的某个人的回答是什么时候呢?虽然这种形式的支持与正式的服务台相比可能显得有点混乱,但它是非常有效的。问题的答案通常能够通过简单的 google 搜索来检索到。如果答案没有找到,在新闻组上进行友好的求助一般会在数分钟或数小时之内得出答案。
大多数开放源代码项目都使用像 Bugzilla 这样的在线程序(这个程序也是开放源代码的),以允许用户研究或提交 bug。在我提交 bug 的多次场合中,我甚至看到程序员之间关于我提交的 bug 的讨论,并且能够在任何时候看到所提交的 bug 的状态。
这并不是说电话支持就从来都不可用。有些项目,比如 Linux、MySQL 以及其开放源代码项目提供付费的支持选择,它们通常包括传统的服务台。
提供支持
知识和经验是开放源代码社区的主要“流通货币”。在您细读支持列表时,请考虑花点时间简要回答一下那些您知道其答案的问题。拥有大量人士参与的项目才会兴旺发达。那些没有人参与的项目很容易从雷达屏幕上消失。如果您愿意回答那些和您遇到相同错误的人的问题,作为报偿,当您遇到问题时就会马上得到答案。
参与项目
如果您真的对开放源代码项目很感兴趣,可能会发现一些您能够以切实可行的方式实际参与的领域。编程技能通常是必需的,其他技能也不可缺少,但是通常被忽略了。您能编写清楚的文档吗?您能帮助把文档翻译为另一种语言吗?您是否有主题相关的专业知识?这些只是开放源代码所需工作的一部分。您可能拥有将优秀的项目引向卓越甚至必不可少的金钥匙。别再袖手旁观,参与进来吧!
结束语
开放源代码软件是由广泛的人群开发的真实软件。其中许多软件具有商业化的质量,有些项目甚至超越了商业软件。开放源代码不一定意味着免费,虽然大多数都不需成本即可获得。开放源代码项目从专家那里到了大量的安全保障,因此 bug 一般都已经查明并在短期内得到了纠正。如果您对某个项目存在任何怀疑,可自己检查和编辑源代码。
如果正在使用 Linux,您就已经在使用开放源代码软件了。Linux 发行套件附带了许多打包的开放源代码项目,但是您无论如何也不会仅限于使用那些现成的项目。诸如 SourceForge 这样的知识库提供了优秀的工具,用以查找满足您需要的恰当项目。
对于您的发行套件,可以将项目作为预生成的 RPM 文件来下载,这是合并新项目的最可靠方式。但是如果二进制 RPM 不可用,您可以从源代码或 SRPM 生成它们。从原始源代码安装的程序不会注册到 RPM 数据库中,因此您应该根据需要自己为 RPM 管理的环境生成 RPM。
开放源代码项目的支持是可用的,但它很少是以电话上的支持专家的形式提供。相反,支持是通过电子邮件和新闻组来交付的。您能更好地接触开放源代码项目中的实际开发人员。开放源代码取得成功的关键是要清楚该项目社区中正在发生的事情。请密切注视支持列表,还要乐于像接受支持一样提供支持。记住,大多数项目都是志愿者的努力结果,也许您也能切实地贡献点什么。项目需要的不仅只是代码;它们还需要文档、组织和参与。
开放源代码项目不仅属于一个现代计算环境,它们还提供安全、可靠的资源,使您能够将宝贵的 IT 资金投入最需要它们的领域。
关于作者
Chris Walden 是 IBM 开发人员关系部的一名电子商务体系架构师。他是公认的 Linux 鼓吹者,竭尽全力向听说过 Linux 的所有人散布好消息。除了完成他的架构师的职责之外,他还精通 Linux 基础设施服务器的各个领域,包括混合平台用户环境下的文件、打印以及其他应用服务等。Chris 有 10 年的计算机行业经验,从现场支持到 Web 应用开发和顾问,各个领域他都曾涉足。您可以通过 cmwalden-at-us.ibm.com与 Chris 联系。