谁应该阅读这本书? 本书是为那些计划开始一个开源软件项目的开发人员和管理人员, 或是那些已经开始了一个开源软件项目而正在考虑下一步应该怎么做的人编写的。 对于那些只想参与一个开源软件项目而又从未那样做过的人来说, 阅读本书也应该是有益的。 读者无需是软件开发人员,但应该对软件工程中诸如源码,编译程序和补丁程序一类的概念有基本的知识。 读者无需是使用过开源软件的用户,也不必是参与过开源软件项目的编程员。那些曾经做过自由软件项目的人或许会发现本书的某些章节十分浅显, 而希望可以跳过那些部分。由于读者群的背景各有不同, 我特别对各章节作了清楚的标示,以便读者可以适时跳过那些他们已经熟悉的内容。 资料来源 本书大量的第一手资料来自做Subversion项目五年的工作经验(http://subversion.tigris.org)。 Subversion 是一个从零开始做起, 意图在开源软件社区中取代CVS作为实际意义上的开源版本控制系统。该项目由我的雇主CallabNet (http://www.collab.net/) 在2000年启动,幸运的是,CallabNet在项目初始便完全了解如何运行一个真正意义上分布广泛的合作项目。 我们一开始便吸收了许多自愿者;如今这个项目大约有50位开发人员,而他们中仅有几位是CollabNet的雇员。 Subversion从许多方面来看都是一个开源软件项目的经典范例,而我本人事先也并没想到我今天会经常引用该项目的实例。一部分的原因当然是因为很方便:无论何时我需要某一个现象的例子,我的脑海里便会立即浮现出Subversion中的一个实例。另一个原因是进行印证。尽管我在不同程度上参与了另一些自由软件项目,而且与参与许多其它自由软件项目的朋友和相识的人进行交流,我很快就发现,当写成文字时,所有的断言都需要经过事实的检验。我不想仅仅根据我在公共电子邮件名单中能阅读到的档案文件便对其它项目的事件做出说明。 如果有人想用以上的方式尝试Subversion,我知道,她大约只有50% 的正确率, 而另外50%是错误的。因此,当需要从一个我没有直接参与的项目找寻灵感或者实例时,我事先总要与我相信了解内情的人进行沟通。 虽然过去五年我一直在做Subversion, 但我从事自由软件行业已有12个年头了。因而,其它一些项目也对本书有所影响: * 自由软件基金会(Free Software Foundation)的GNU Emacs 文本编辑器项目。我在其中维护了几个小的软件包。 * Concurrent Versions System (CVS) 版本控制系统是我在1994-1995期间与Jim Blandy全力投入的一个项目,此后,我只是断断续续地参与这个项目的工作。 * Apache 软件基金会(Apache Software Foundation)的开源软件项目集, 尤其是Apache可移植运行库(Apache Portable Runtime (APR)和Apache HTTP服务器。 * OpenOffice.org 办公软件项目, Sleepycat软件公司的Berkeley Database项目, 以及MySQL项目。我个人并未参与这些项目的开发,但曾经关注并在一些例案中与其开发人员进行过交谈。 * GNU Debugger (GDB) 项目(同上)。 * Debian项目 (同上)。 当然,以上这个名单并不完整。正如多数的自由软件编程员一样,我不定期地追踪自由软件行业中许多不同的项目, 以对行业的整体情况有全面的了解。在此,我不一一列举所有的项目,但在书中会适时提及。