跳转到内容

25% developed
维基教科书,开放世界中的开放书籍
Cover Art Created by Lobster.
这本维基教科书旨在作为开源软件运动的入门读物。它仍在进行组织。

在过去的几年里,开源运动改变了计算的面貌,这超出了几乎所有人的想象。许多计算机行业的人认为,这些变化是自 IBM 委托微软为其个人电脑编写操作系统以来计算领域最重要的变化。本书旨在讨论开源的历史、哲学和法律问题,以及软件开发人员如何通过选择和加入他们想贡献的项目来参与其中。本书将提供比维基百科关于开源自由软件的文章更详细的信息,并增强和扩展维基教科书上关于免费软件的信息。请随时添加/更正整本书中的信息。本书不是为了列出项目,也不是为了指导选择最佳软件(虽然本书后面提供了一些指针)。

什么是开源?

[编辑 | 编辑源代码]

开源开源软件不同于专有软件。在开源中,软件中使用的源代码可供任何人检查、评估和修改。开源对许多开发人员看待和创建软件的方式产生了重要影响。最终用户经常使用开源一词来涵盖各种免费和开源软件

开源促进会对开源软件有以下定义

开源不仅仅意味着访问源代码。开源软件的发布条款必须符合以下标准

1. 免费重新发布

许可证不得限制任何一方将软件作为包含来自多个不同来源的程序的聚合软件发布的一部分出售或赠送。许可证不得要求支付此类销售的版税或其他费用——除标准知识共享许可证的知识共享署名非商业版本外。

理由:通过限制许可证要求免费重新发布,我们消除了为了赚取少量短期销售额而放弃许多长期收益的诱惑。如果我们不这样做,就会有很大的压力迫使合作者背叛。

2. 源代码

程序必须包含源代码,并且必须允许以源代码形式以及编译形式发布。如果某些形式的产品未随源代码发布,则必须有公开的方式以不超过合理的复制成本获得源代码——最好是通过互联网免费下载。源代码必须是程序员修改程序的首选形式。故意混淆的源代码不允许。中间形式(如预处理器或翻译器的输出)不允许。

理由:我们要求访问未混淆的源代码,因为您无法在不修改的情况下演化程序。由于我们的目的是使演化变得容易,因此我们要求修改变得容易。

3. 派生作品

许可证必须允许修改和派生作品,并且必须允许这些作品以与原始软件许可证相同的条款发布。

理由:仅仅能够阅读源代码不足以支持独立的同行评审和快速演化选择。为了实现快速演化,人们需要能够试验和重新发布修改。

4. 作者源代码的完整性

许可证可能仅在许可证允许将“补丁文件”与源代码一起发布以在构建时修改程序的情况下,才限制以修改形式发布源代码。许可证必须明确允许发布使用修改后的源代码构建的软件。许可证可能要求派生作品与原始软件具有不同的名称或版本号。

理由:鼓励大量改进是一件好事,但用户有权知道谁对他们使用的软件负责。作者和维护人员有权利知道他们被要求支持什么以及保护他们的声誉。

因此,开源许可必须保证源代码易于获得,但可能要求将其发布为原始基础源代码加上补丁。这样,“非官方”的更改就可以提供,但可以轻松地与基础源代码区分开来。

5. 不歧视个人或群体

许可证不得歧视任何个人或群体。

理由:为了从该流程中获得最大利益,应允许最大限度地发挥个人和群体的多样性,他们应该有资格平等地为开源做出贡献。因此,我们禁止任何开源许可将任何人排除在流程之外。

包括美国在内的一些国家对某些类型的软件有出口限制。符合 OSD 的许可证可能会警告被许可人注意适用的限制,并提醒他们有义务遵守法律;但是,它本身可能不会包含这些限制。

6. 不歧视努力领域

许可证不得限制任何人将程序用于特定领域。例如,它可能不会限制在企业中使用程序,或限制将其用于基因研究。

理由:本条款的主要意图是禁止阻止开源在商业上使用的许可陷阱。我们希望商业用户加入我们的社区,而不是感到被排除在外。

7. 许可证的发布

与程序相关的权利必须适用于所有重新发布程序的人,而无需这些方执行额外的许可证。

理由:本条款旨在禁止通过间接手段(例如要求签署保密协议)关闭软件。

8. 许可证不得针对特定产品

与程序相关联的权利不应取决于程序是否为特定软件发行版的一部分。如果程序从该发行版中提取并在程序许可条款内使用或分发,则将程序重新分发给的所有方应享有与原始软件发行版相结合的相同权利。

理由:此条款排除了另一类许可陷阱。

9. 许可证不得限制其他软件

许可证不得对与已许可软件一起分发的其他软件施加限制。例如,许可证不得坚持要求与同一介质上分发的所有其他程序必须是开源软件。

理由:开源软件的发布者有权对自己的软件做出自己的选择。

是的,GPL 符合此要求。与 GPL 许可的库链接的软件仅在形成单个作品时才继承 GPL,而不是与它们一起分发的任何软件。

10. 许可证必须是技术中立的

许可证的任何条款不得以任何个人技术或界面风格为前提。

理由:此规定专门针对需要明确同意姿态才能在许可方和被许可方之间建立合同的许可证。要求所谓“点击包装”的规定可能会与重要的软件分发方法冲突,例如 FTP 下载、CD-ROM 合集和网络镜像;此类规定也可能阻碍代码重用。符合的许可证必须允许以下可能性:(a) 软件的重新分发将通过不支持下载点击包装的非 Web 通道进行,以及 (b) 涵盖的代码(或涵盖的代码的重用部分)可能运行在不支持弹出对话框的非 GUI 环境中。

自由软件是开源软件,但并非所有开源软件都是自由的。

什么是自由软件?

[edit | edit source]

自由软件是指遵循 GNU 项目阐述的软件四大自由的软件。这四大自由如下所示

  • 用户可以自由地将软件用于任何目的。
  • 用户可以自由地研究程序运行机制,并根据特定目的调整这些机制。
  • 用户可以自由地将软件重新分发给其他用户。
  • 用户可以自由地调整和改进程序,并将这些调整和改进发布给公众。

自由软件与开源软件在理念上有很多共同之处,但开源社区中的许多人认为这两个术语之间存在重要的区别,如“自由软件与开源软件”部分所述。

自由软件通常被称为“自由如言论,而非如啤酒”,强调了自由软件运动关心的是“自由”,而不是“价格”。

自由软件与开源软件

[edit | edit source]

开源软件的主要区别在于它不是关于自由,而是关于软件如何更好地做事。

并非所有开源许可证都符合此要求。我们希望本书能提供足够的资料,让读者了解两者之间的区别,并据此做出选择。

总的来说,该运动通常被称为“自由和开源软件”(FOSS)。虽然许多人指出了两者之间的区别,但本书将重点介绍两者之间的共同点。为了清楚起见,在描述适用于所有开源软件项目的议题时,将使用缩写“FOSS”;在描述仅适用于允许未来开发人员封闭源代码的开源许可证的软件的议题时,将使用“OSS”;在讨论仅适用于要求未来开发人员维护先前许可风格(如果不是许可证本身)的自由许可证的软件的议题时,将使用“FSS”。

公有领域软件

[edit | edit source]

另一种常见的开源软件形式是进入公共领域的软件。这类软件不受版权或许可证的限制,因此可以自由地用于任何目的。在开源软件运动兴起之前,学术界编写的许多软件都以公共领域的模式发布,以便同行评审。随着更加注重目的性的开源运动的兴起,这种做法发生了变化,导致许多曾经属于公共领域的软件现在被作为 FOSS 发布。公共领域是许多用于开源项目的资源来源,但很少有大型项目完全在公共领域内运作(例如 SQLite)。

FOSS 不意味着没有成本

[edit | edit source]

这是一个关于 FOSS 的常见误解,部分原因是几乎所有 FOSS 程序都是免费提供的。例如,当文本编辑器Emacs首次发布时,理查德·斯托曼有时会收取费用以获得副本。在大多数 FOSS 许可证下,开发者可以选择收取费用,尽管他们很少选择这样做。要成为一个真正的 FOSS 项目,唯一的要求是发布者在程序中提供源代码,并允许用户编辑该代码。

除了购买软件的初始成本外,所有软件还与其他持续成本相关联。这可能以支持协议的形式出现,包括定制成本、培训成本、支持人员成本以及其他来源。这对于传统的商业软件和 FOSS 程序都是如此。关于哪种类型的软件从长远来看对于大型公司而言更昂贵,存在着大量的争论,对于个人用户而言,毫无疑问 FOSS 要便宜得多。

历史

[edit | edit source]

此处提供的历史并非旨在完整且完美地反映开源运动的历史。事实上,做到这一点是不可能的,因为我们目前正处于运动的中间阶段,而关于当前事件的真实历史无法撰写。相反,本章旨在让读者对开源运动是如何起步的有一个大致了解,以便他们能够更好地理解当前的争论。

在早期(1960 年代1970 年代),几乎所有代码都以开源的形式提供。由于您必须在许多不同的机器上运行程序,因此希望客户能够运行其软件的公司必须提供源代码以供自行编译。通常,此代码不受许可协议的约束,或者这些许可证从未被执行。通常,用户会发现程序中的缺陷,修复它们,并免费将改进提供给发布者。Unix 用户组经常互相共享代码,从而创建了更大的代码库。当时,大多数公司认为硬件总是比软件创造更多的利润。

同时,当学者在研究中编写程序时,他们经常会将代码发布到公共领域,以便其他人从他们的工作中学习。第一个电子邮件服务器、ftp 服务器和 web 服务器都是由学者创建并作为公共领域软件共享的公共领域项目。

随着时间的推移,硬件变得更加标准化。这使软件发布者能够收紧对他们允许用户查看和编辑的代码部分的控制。这种收紧开始让用户感到沮丧,尤其是学者,因为他们不再能够修复他们发现的问题,并且有时发现他们无法使用他们想要的硬件或软件。这种趋势主要在主流软件中持续,并在微软的兴起中得到加强。

1970 年代后期,许多小型企业试图通过为新型微型计算机编写软件来生存。没有人能够依靠硬件销售或售后支持合同来补贴软件开发。这些人,无论是来自学术界自由分发软件的传统,还是其他原因,都不愿意在不收费的情况下提供他们的产品。也许最有名的是,比尔·盖茨(微软的联合创始人)意识到,在新的计算世界中,软件而不是硬件拥有成为最大利润来源的潜力。当 IBM 需要为其个人电脑提供操作系统时,微软没有自己编写操作系统,而是许可了 DOS 的早期版本,但保留了其他硬件制造商的许可权。这一选择改变了计算的面貌,创造了一个大多数个人电脑都会运行的标准操作系统,它直接导致了微软在个人计算领域的主导地位,并在后来也让他们能够进入服务器端市场。微软已经发展成为世界上最大的软件生产商,几乎在每个细分市场中都有竞争对手。许多人认为,与微软竞争的唯一方法是通过开源项目,这些项目利用了比大多数公司所能提供的更大的支持基础。

在这片活跃的海洋中,FOSS 运动主要发源于两个地方:加州大学伯克利软件发行版许可证和理查德·斯托曼的自由软件基金会 GNU 通用公共许可证。

在 20 世纪 70 年代,贝尔实验室的肯·汤普森在加州大学伯克利分校任教一年后,伯克利的一些研究小组开始为 Unix 操作系统开发软件。由于贝尔实验室没有计划将该系统移植到当时的新型 DEC VAX 计算机系统,伯克利的计算机科学研究小组 (CSRG) 承担了移植工作。该移植在其他大学非常受欢迎,CSRG 开始以伯克利软件发行版 (BSD) 的名称发布它,其中包含了他们的修改和添加。伯克利的研究人员经常找到改进或添加现有 Unix 版本的方法。贝尔实验室接受了某些 BSD 更改,而其他更改则被传递。随着时间的推移,CSRG 找到了改进 Unix 基本方面的方法(例如文件系统)。与此同时,AT&T 也进行了自己的改进,导致这两个版本朝着不同的(尽管相似)方向发展。随着伯克利版本的 Unix 的开发进展,它与 AT&T 在其版本上所做的工作越来越远(最后一个版本是 System V)。在 1990 年代初期,AT&T、加州大学伯克利分校和 Unix 系统实验室 (USL) 之间爆发了一场关于伯克利软件发行版 (BSD) 的重大法律纠纷,AT&T 已将 Unix 的营销和开发权移交给了 USL。该诉讼的结果是,大多数 BSD 被发现不受控制原始贝尔实验室代码者的版权限制。到 1990 年代中期,CSRG 发布了 4.4BSD-Lite,第 2 版作为他们的最终产品,因为他们被加州大学理事会关闭。BSD 发行版是当今流行的各种 BSD 版本的根源,最著名的是 FreeBSD、NetBSD 和 OpenBSD。在整个开发过程中,BSD 以开放的方式分发,导致来自许多不同贡献者的贡献。

自由软件基金会和 GNU 项目

[edit | edit source]

在 1983 年,理查德·斯托曼(当时在麻省理工学院)对在麻省理工学院完成的计算机开发工作的日益商业化以及对软件用户施加的越来越多的限制感到沮丧。经过一段时间,他开始创建让用户拥有控制权的软件。他的愿景是创建一个完全不受专有许可证限制的完整操作系统。在他对软件行业趋势感到失望之前,他最主要的软件开发工作是文本编辑器 GNU Emacs。接下来是 Lisp 系统、C 语言编译器,最后是 GNU 项目。

在 1985 年,斯托曼成立了自由软件基金会 (FSF) 来帮助为 GNU 项目提供支持。FSF 已发展成为 FOSS 运动中最重要​​的组织之一。虽然 FSF 的主要使命仍然是完成 GNU 操作系统,但 FSF 也承担了“自由软件福音传道者”的角色,保护和支持自由软件。FSF 还拥有 GNU 项目编写的大部分源代码的版权,确保它始终可以免费供用户使用。

在接下来的 10 年里,斯托曼召集了一群人,他们基本上开发了 Unix 和类 Unix 操作系统中找到的所有核心实用程序。本着 Unix 的精神,这些实用程序由数百(甚至数千)个小型实用程序和工具组成。该项目仍在运行,被称为 GNU 项目。这些程序中的许多也已成为 BSD 变体的标准(见上文)。1994 年,Linus Torvalds 发布了第一个版本的 Linux 内核,当它与 GNU 项目已有的 GNU 实用程序结合在一起时,Linux 操作系统诞生了。Linux 的 Debian 发行版被称为 GNU/Linux,以承认斯托曼的立场,即它是一个联合制作,以承认 GNU 项目提供了大多数基本实用程序。GNU 项目继续缓慢地开发自己的操作系统内核,它将被称为 Hurd。Hurd 旨在作为 Unix 内核的官方 GNU 替代品提供,尽管它目前处于测试开发阶段。

虽然 FSF 已变得颇有争议,但它无疑对计算产生了重大影响。每天全世界有数百万人使用 GNU 软件。

更多信息

[edit | edit source]

本文的大部分信息来自以下来源。如果您有兴趣,它们还包含更多有关其开源历史领域的信息。

维基百科文章

外部来源

哲学

[edit | edit source]

并没有一种哲学将人们带到开源软件。然而,有两种主要的思想流派,许多人在其中共享一些类似的观点,并帮助创造了一个强大的运动。要全面了解开源运动,您需要了解这两种主要的哲学。

软件自由

[edit | edit source]

与开源类似的早期软件运动是自由软件运动(体现于自由软件基金会)。虽然对其确切定义存在一些争议,但软件自由通常有三个主要组成部分。

  • 使用自由

许多人认为,软件在私下使用方面不应该有任何限制,除了对创作者责任的限制之外。相比之下,一些商业软件包(如 Microsoft Windows)不允许某些用法,而更昂贵的软件包则允许此类用法。根据美国版权法,除非受私人合同限制,否则此权利是隐含的。

  • 修改自由

可能比使用自由更重要的是修改现有程序的自由。尽管与整体开源理念密切相关,但这种自由也意味着您的修改仍然是您的。一些开源许可证要求修改者将其作品的权利转让给许可证的创作者(微软的共享源代码计划通常被认为是一个例子)。显然,很少有完全商业化的软件包赋予用户这种自由。在美国版权法中,这是作品创作者的隐含的专有权利。为了授予他人此权利,创作者必须同意这样做。

  • 分发自由

最后的关键自由是分发软件的能力,无论是修改过的还是未修改过的。限制其分发的软件包会限制他人对其自由处置的自由。它还可以阻止他们将自己的改进提供给社区。与修改自由类似,一些开源许可证也会限制分发自由,通常要求将更改提交回某个中央存储库。与修改权一样,这是创作者的专有权利。

值得注意的是,这些自由中没有经济上自由的软件要求。一些许可证不阻止商家销售软件,无论是修改过的还是未修改过的。事实上,一些组织历来对通常被认为是自由软件的各种软件收费。根据许可证的不同,商家可能仍然受到其他限制。

GNU 通用公共许可证 (GPL) 就是一个例子,它提供软件自由,但对软件分发者有一些限制。GPL 由理查德·斯托曼等人为 GNU 项目编写。GPL 包含了上面列出的所有自由。与上述基线最重要的区别在于 Creative Commons 所谓的“分享与分享相同”条款。如果您在 GPL 下分发对特定软件包的修改,那么您必须同意您工作的那一部分也受 GPL 许可。有关 GPL 的更多信息,请参阅本书的 许可证部分

开源开发模型

[edit | edit source]

开源哲学的第二个主要分支围绕着为新的软件开发模型提供机会。开源也是关于分享想法,并将创建软件的工作分散到众多感兴趣的开发人员身上。这种分享可以导致在更短的开发时间内获得更好的软件。它还允许开发人员获得比传统开发模型中常见的更好的反馈。苹果和 IBM 等大型公司已经认识到,以这种方式编写软件可能会带来显著优势。苹果通过 Darwin 项目,IBM 通过向开源组织捐赠大量软件和专利,为其他公司认真考虑使用这种开发模型铺平了道路。

许可证和专利

[edit | edit source]

什么是许可证?

[edit | edit source]

在法律理论中,许可证是指授予从事某些行为的许可或权利,如果没有这些权利,这些行为可能是非法的。许可证必须由具有法律授权的人、机构或政府授予。术语“许可证”也指具体描述这些许可和权利的文档。

重要的 FOSS 许可证

[edit | edit source]

虽然如今有很多开源许可证在使用,但一些许可证已经变得比大多数许可证更受欢迎(因此更重要)。我们将花一些时间详细研究这些重要的许可证。它们按字母顺序排列。

有关开源许可证的完整列表,请参阅GNU 项目许可证列表,或OSI 许可证列表.

Apache 软件基金会 (ASF) 是一家非营利性组织,旨在支持 Apache 软件项目。Apache 的项目以协作的、基于共识的开发流程、开放和务实的软件许可证为特征。ASF 的目标包括为从事 Apache 项目的志愿者提供法律保护,并保护 Apache 品牌名称不被其他组织使用。

目前,Apache 的两种形式在当今被广泛使用:1.1 版和 2.0 版。虽然 ASF 认为 2.0 版是当前版本,并且大多数用户都乐于切换,但一些大型组织反对 2.0 版中关于专利的条款,并且拒绝使用任何具有新许可证的软件(最著名的是 OpenBSD 项目)。

根据 Apache 许可证发布的代码可以与公司开发的专有代码链接。因此,该许可证在大多数公司内部都被接受。公司会不时地贡献代码以 Apache 许可证的形式发布,以促进这些项目的活动。例如,IBM 和英特尔为 Apache Harmony 项目贡献了替代 Java 实现的大部分代码。

BSD 既是一种许可证,也是一类许可证(通常称为 BSD 类许可证)。修改后的 BSD 许可证(今天被广泛使用)与最初用于 BSD 版本的 Unix 的许可证非常相似(见上文BSD 历史)。BSD 许可证是一个简单的许可证,它仅仅要求所有根据 BSD 许可证发布的代码都必须根据 BSD 许可证发布,如果以源代码格式重新分发。BSD(与其他一些许可证不同)不要求源代码被分发。

BSD 实际上非常接近公有领域许可证,但仍然与之不同。与公有领域的作品一样,BSD 类许可证允许几乎免费修改和分发作品。BSD 类许可证与公有领域的唯一两个显著区别是:第一,BSD 许可证要求许可证及其版权声明必须与作品或修改后的副本一起提供。但这并不限制将不同许可证下的代码与之结合使用。第二,BSD 类许可证包含免责声明,例如适销性保证和特定用途适用性保证。这一点应该不奇怪,因为几乎所有软件包都包含与之几乎相同的条款。

总之,BSD 类许可证与公有领域的主要区别在于,BSD 许可的作品必须保留对原始创建者(s) 的归属。有些 BSD 许可证进一步要求在分发软件产品的广告材料中包含类似的版权声明。但是大多数只是限制了这个基本要求。

对于那些反对 GPL 对修改和分发进行限制的人来说,BSD 许可证通常是可接受的。由于固有的缺乏限制,BSD 代码可以被合并到任何其他项目中,无论是商业项目还是其他项目,从而消除了代码许可问题中的许多担忧。同样,对于那些赞成 GPL 等许可证来保护软件自由的人来说,BSD 被视为朝着正确方向迈出的一步,但还不足以保证这些自由。出于这个原因,他们经常鼓励使用更多类似 GPL 的许可证。

BSD 通常在公司内部被接受。Apple Mac OS 基于最初的 BSD 许可的操作系统,但包含了大量的专有代码。

GNU 通用公共许可证是一种自由软件许可证,由自由软件基金会 (FSF) 创建;2.0 版于 1991 年发布。它通常缩写为 GNU GPL,或者简称为 GPL。FSF 最近宣布他们已经开始着手 3.0 版本的许可证,并将于 2007 年春季发布新版本。这些变化的动机尚未阐明,但根据理查德·斯托曼在 2005 年 11 月 29 日在纽约库珀联盟发表的演讲,这些变化与世界知识产权组织 (WIPO) 在世界版权标准化方面的工作有关。

GPL 保护了软件自由的三个主要条款,如软件自由部分所定义。GPL 还包含一个条款,要求 GPL 许可程序的发布者对软件进行的修改必须在 GPL 下分发。许多公司经理不喜欢这一点,因为他们希望对公司编写的所有代码拥有专有控制权。即使软件仅供内部使用,并且从未出售,经理们仍然希望拥有专有控制权,以确保该软件不会被竞争对手使用。为了营造负面态度,GPL 反对者将 GPL 称为“病毒”,因为它似乎“感染”了它接触到的任何代码。

另一方面,可以这么说,GPL 旨在尽可能地支持甚至强制执行代码共享。编写代码并以 GPL 形式发布代码的公司和个人可以访问大量现有的 GPL 许可代码。这样,他们就可以获得选择此许可证的回报,并且可能能够负担得起与 GPL 兼容的商业模式,而这些模式在代码的专有控制方面可能无法带来直接的利润。

GPL 在公司内部并非不可接受:许多公司使用过此许可证下的软件库,并且根据许可证的要求发布了与这些库交互的所有代码。例如,GNU gcc 编译器就是通过这种方式获得 C++ 支持的。GPL 似乎也是世界上最流行的许可证之一。然而,大多数公司可能会首先尝试联系 GPL 覆盖软件的作者,要求购买“商业”许可证。

GPL 的一个重要特例要求只有 GPL 代码才能与 GPL 库链接,即使库包含在单独的文件中,并且使用它的代码本身不包含任何 GPL 代码。有些人认为这太过严格,因为这种行为可以被认为是“使用”库,而不是修改。为了允许这种区别,LGPL 诞生了。LGPL 解决了这个问题:如果有人将 LGPL 作品用作与项目符号链接的库,项目中的其他部分不必放在 LGPL 下。另一方面,如果对 LGPL 许可的作品进行任何修改,并且这些修改与软件包作为一个整体一起分发,则必须公开这些修改,类似于 GPL 的规则。“L”在 LGPL 中对于不同的人意味着不同的东西。最初,它被认为是“库”许可证,因为该条款专门处理链接问题。但是,GNU 基金会将其描述为“较小的”GPL,因为它对作品提供的保护少于 GPL。虽然 GNU 基金会不反对使用 LGPL,但它鼓励在可能的情况下使用 GPL。

LGPL 清楚地区分了受此许可证覆盖的代码(通常是软件库)和仅与 LGPL 覆盖代码链接的外部代码。外部代码可以保持专有。但是,LGPL 覆盖库内部的修改必须与公众共享。

公司通常会发现 LGPL 条款是可以接受的,并且在商业软件中常见到带有此许可证的公共库。

GPL + 链接例外

[编辑 | 编辑源代码]

GPL + 链接例外许可证听起来像 GPL,但在额外的章节中明确允许将它覆盖的代码与任何其他代码链接在一起,而不管其许可条款如何。因此,虽然听起来很相似,但 GPL + 例外在实践中更像 LGPL。此许可证最近已用于多个大型项目,包括 Sun Microsystems 的 java 实现。

关于版权和复制左的简短说明

[编辑 | 编辑源代码]

软件许可证不应与版权保护混淆。开源许可证明确依赖于版权法保护,并且根据大多数这些许可证发布的代码不会进入公有领域。软件作者可以限制他所创建作品的使用,因为该代码是一部书面作品,受版权法条款的约束。创建者可以根据需要限制软件的使用,因为版权是独占使用的权利。版权保护允许版权持有者(不一定是作者)通过许可控制软件的使用和分发。该许可证可能允许更改(如 GPL 所做的那样),也可能禁止更改(如大多数商业 EULA 协议所做的那样)。

复制左的概念也源于 GNU 和开源运动中的其他人所做的工作。虽然版权旨在最大程度地保护书面作品免遭未经授权的使用,并且大多数商业版权许可证通过禁止更改或分发来做到这一点,但复制左许可证鼓励免费和广泛的使用。

注意:维基教科书是在 GNU 自由文档许可证 的版权下提供的。

在过去几年中,软件专利问题已成为开源运动中最紧迫的问题之一。在美国和其他一些国家,软件受专利保护。虽然只有少数其他国家对软件生产施加了类似的限制,但美国的专利制度已在全球范围内变得有争议。

自由及开放源代码软件的经济学

[编辑 | 编辑源代码]

零边际成本

[编辑 | 编辑源代码]

自由及开放源代码软件经济学的核心是数字环境中商品的零边际成本。在这方面,自由及开放源代码软件的出现印证了经典的微观经济学价格理论——完美市场中的均衡价格近似于边际成本。从这个角度来看,自由及开放源代码软件可以被理解为在真正自由市场中实现进化稳定动态纳什均衡的先驱。边际成本是经济学和商业科学中用来指代生产一件商品额外单位所产生的总生产成本增量的术语。

创收机会

[编辑 | 编辑源代码]

虽然在开发、增强和记录自由及开放源代码软件方面投入时间和精力不会带来任何直接收入,但自由及开放源代码软件方面的专业知识发展提供了广泛的创收机会——从通过自由及开放源代码软件的增强来产生内部节省到在安装、培训、定制和提供自由及开放源代码软件安装技术支持方面的咨询机会。在《网络财富:社会生产如何转变市场和自由》 (耶鲁大学出版社,2006 年)的第一部分:网络化信息经济中,[1],Yochai Benkler 对通过开源和开放内容策略产生收入和财富的方式进行了精彩的分析——以 IBM 的战略为例。

公司机会

[编辑 | 编辑源代码]

从自由及开放源代码软件中获取资金的其他可能途径包括:

  • 双重许可模式,即相同代码同时在具有侵略性的自由及开放源代码许可证(通常为 GPL)和不要求共享派生作品的“商业”许可证下提供。GPL 版本可确保更广泛的用户群、更广泛的普及率,并且可以用作“评估版本”。这种模式被许多公司使用,最著名的例子是 Trolltech 对 QT 的使用。
  • 付费文档模式,即软件和可信示例作为自由及开放源代码软件提供,但一些非常好的文档在必须购买的书籍中或在单独的付费文档包中描述。
  • 商标使用。如果派生作品无法使用原始商标(徽标、名称),那么用户可能会优先选择原始作品,因为用户愿意为他们理解为高质量标志的产品付费。这种模式只有在商标所有者已广为人知为软件开发专家时才有可能。它被红帽公司成功地使用。
  • 使用付费自动更新服务。在这种情况下,付费用户有机会自动获取和安装安全和其他重要更新。非付费用户需要付出更多努力来保持系统更新。这种模式被许多商业 Linux 发行版使用。
  • 使用认证系统,即领先自由及开放源代码软件技术的拥有者提供付费认证考试以证明用户的资格(通常是软件开发人员)。许多流行的自由及开放源代码软件产品的拥有者(Sun Microsystems、Red Hat 等)提供获得雇主认可和重视的付费认证。
  • 为将自由及开放源代码软件移植到新的处理器、设备或操作系统提供付费支持。
  • 开发在特定时刻主要在同一公司销售的设备上运行的自由及开放源代码软件。自由及开放源代码软件为该设备增加了价值,使其现在可以吸引更多关注,以更高的价格出售,或者只是变得可用。这种模式在将 Linux 移植到移动设备和其他不寻常的平台时经常使用,它还使公司能够为他们生产的硬件开发开源驱动程序。
  • 使用自由及开放源代码软件组件(包括 GPL 组件)在同一公司内部开发高度专门的软件供内部使用。由于这种软件从未正式发布,因此无需从销售中获利。GPL 不要求发布从未公开发布的软件的源代码。
  • 接触新客户群。世界上有许多自由及开放源代码软件爱好者。生产开源友好产品的公司可能会吸引这些客户,这些客户更喜欢此类产品而不是其替代品。FIC OpenMoko 项目就是一个例子,该项目已售出数万台自由及开放源代码软件友好的移动电话,即使它们仍不适合普通最终用户。此外,一些 Linksys 路由器,最著名的是 NSLU2 设备,拥有一批完全意想不到的用户,他们只是对破解其内部结构感兴趣。

个人机会

[编辑 | 编辑源代码]
  • 对于个人开发人员来说,加入自由及开放源代码软件项目并贡献代码可以提供以其他方式难以获得的专业知识。了解可用自由及开放源代码软件功能、如何构建它、如何移植它以及如何充分利用它的软件工程师可能会为他们的公司节省大量资金。在某些情况下,开发自由及开放源代码软件替换可以提供与高度类似的专有产品直接相关的专业知识。著名的例子包括 GNU Classpath 和 Sun Microsystem 的 Java、DotGNU 或 Mono 和 Microsoft 的 .NET,以及 J2EE 的各种自由及开放源代码软件和专有实现。最容易获得此类专业知识的方法是为现有的高度成功的自由及开放源代码软件项目做出贡献。
  • 参与自由及开放源代码软件有助于建立一个专业的社交网络:一个足够了解的人群,如果需要,可以推荐你成为程序员。
  • 对于小型但相对流行项目的维护者来说,提供付费文档可能会奏效,尤其是在这种文档易于在线购买的情况下。

传统商业软件的问题

[编辑 | 编辑源代码]

首先要注意的是,商业软件行业是世界上最大、最重要的行业之一。开源运动的兴起并不一定意味着商业软件行业的终结。相反,许多人认为商业软件可以通过使用开源技术来加强。商业软件旨在提供值得付费的产品,而且大多数都是这样的(这就是这个行业如此庞大的原因)。尽管有价格标签,但商业软件往往远非完美。

商业产品将频繁更新,以反映不断变化的市场需求和客户需求。这些需求可能会导致软件实践过于频繁地重新排列和重写软件,或者将测试版作为商业行为发布,导致早期版本中出现大量错误。一些商业程序的设计过度,并且用草率的代码编写,导致臃肿、缓慢、运行缓慢的程序。相比之下,开源软件则由最终用户的需求驱动。编码人员的技能在于对他们所做的事情感到自豪,而不是急于满足人为设定的截止日期(除了他们自己的截止日期)。因此,他们的代码往往比商业环境中程序员的代码质量更高。由于程序员在一个广泛的人员网络中测试他们的产品,因此通常还会进行非常广泛的反馈。

当源代码可用时,它可以针对可能有意或无意地留在封闭源代码软件中的各种“后门”和其他安全漏洞进行检查。过去,在包括政府使用的软件在内的多个专有产品中发现了此类漏洞。高级开发人员将使用组件的源代码视为重要的补充文档。

拥有源代码还意味着可以轻松地移植软件以在不同的处理器、设备或操作系统下运行。专有软件通常只能由原始开发人员合法移植,而原始开发人员可能不会将此类请求视为重要到足以进行处理。

传统商业软件的另一个问题是它的封闭性质。通常没有或限制对受版权保护产品的篡改。此外,公司经常强迫用户遵循他们可能不希望遵循的升级路径。开源软件使个人能够自由地根据自己的最终需求定制软件。商业软件的另一个受到严厉批评的方面是,客户经常被锁定在一个产品中,因为为了继续使用数据文件,你经常被迫继续使用同一个程序。如果你想与升级了的用户共享文件,你经常需要自己升级,否则就会被视为无关紧要。由于开源软件允许竞争程序共享不同的数据文件类型,因此没有理由被困在一个程序中。如果较新版本有新的文件格式,那么通常会有一些转换器允许旧版本的用户保持数据文件最新。

免费并不意味着没有成本

[编辑 | 编辑源代码]

虽然自由及开放源代码软件对最终用户是免费的,但开发软件的成本是存在的。这些成本可能低于开发专有软件的成本,因为在自由及开放源代码软件许可证下开发项目意味着:

  • 众多网络门户网站(如 SourceForge)会免费提供网络托管、内容存储库、邮件列表和其他基本功能。
  • 宣传自由及开放源代码软件项目的成本(如在相关会议中展示它)通常更低。
  • 在GPL下开发某些东西可以免费访问高质量的组件(如QT),而这些组件如果购买的话则非常昂贵,甚至根本无法获得。

然而,任何软件的开发首先都需要开发人员的时间。只有非常受欢迎的项目才能期望免费获得高质量的代码贡献。

国际化

[编辑 | 编辑源代码]

开源软件的开放性使得软件的国际化成为可能。操作系统可以针对任何语言进行修改,例如最近一个版本的Linux被翻译成了威尔士语(在威尔士语中使用)。虽然许多主要的商业项目都提供多种语言版本,但将其翻译成3或4种以上语言往往过于昂贵。许多自由软件项目都提供10种或更多语言版本,因为翻译工作可以由希望将软件包翻译成其母语的程序员来完成。

案例研究

[编辑 | 编辑源代码]

如今世界上最著名的四个开源项目可能是:Apache Web服务器、BSD操作系统、Linux内核和Mozilla Web浏览器(或其衍生产品Firefox)。

Apache基金会的标志

Apache Web服务器目前是世界上最流行的Web服务器。近70%的网站都是由Apache提供的。

Apache项目源于对原始Web服务器httpd的改进尝试,httpd是一个公共领域软件项目,在早期的1990年代基本上被放弃了。当时它是使用最广泛的Web服务器,一些开发人员意识到需要继续开发。由于httpd是公共领域的,因此他们能够继续对该程序进行工作,并加入了许多改进。他们很快组建了Apache基金会,以建立一个稳定的组织来监督他们新Web服务器的持续工作。Apache版本的httpd很快超越了原始的httpd,成为使用最广泛的Web服务器。

随着时间的推移,Apache基金会发展壮大,并拥有了许多相关的开源项目,包括Tomcat(一个流行的Java servlet服务器)等等。

经过多年开发Apache 1.x,Apache基金会发现Apache的原始架构中的一些内容已经开始显现其老态,并且进一步扩展变得不可能。因此,一个主要由志愿者开发人员组成的团队开始开发Apache 2。Apache 2是Apache的完全重写版本,它使Apache基金会能够为其旗舰产品增加新的灵活性。

Apache基金会的声望也使其成为开源社区软件捐赠的宝库——最值得注意的是,IBM在2004年向Apache基金会捐赠了两个大型软件。

BSD(Berkley Software Distribution的缩写)是一个包含三个免费Unix的系列,分别是OpenBSD、FreeBSD和NetBSD。它们都是BSD 4.4的后续版本。

Tux企鹅,Linux的吉祥物

Linux内核目前是最活跃、最重要的自由和开源软件开发项目之一。1991年,Linus Torvalds通过互联网邀请人们共同参与他的一个婴儿项目,该项目旨在开发一个支持类似于Unix系统的操作系统的内核。他想要一个类似于Unix的操作系统,可以在他的电脑上运行,那是一台早期且昂贵的386机器,他对当时市场上所有负担得起的系统都不满意,包括像Minix(来自教授Andrew Tannenbaum)这样的学术教学示例。从那时起,Linux内核就被用于多个Linux系统发行版中,这些发行版目前得到IBM、Novell、惠普、许多大学(例如瑞士联邦理工学院)、贝尔实验室和Borland等组织的支持。Linux内核是GNU/Linux操作系统中使用的内核,目前已经发布了第二个主要版本和第六个次要版本。Linux内核项目的官方主页是kernel.org

GNU/Linux操作系统是一个教科书式的例子,它说明了共享修改后的作品的自由的重要性。在与Tannenbaum的讨论中,他写道,他经常收到建议,要求以某种方式扩展Minix,但他在接受这些扩展时非常严格。他试图保持系统的简单性,使其易于学习和理解。那些想要将其转换为真正的下一代操作系统的人无法做到这一点,因为许可证不允许直接共享修改后的代码,需要发布针对Tannenbaum版本的补丁。

第二个教科书式的例子是FSF本身,他们决定拒绝现有的单片内核,并转向开发基于微内核的Hurd的困难道路,即使在2009年,它也还没有准备好投入生产。这个错误可能严重到足以扼杀整个GNU项目,但FSF被其自身的哲学所保护:GPL允许另一个内核(Linux)出现,因此用于构建替代操作系统的其他众多部分的工作并没有白费。

Mozilla(Firefox)

[编辑 | 编辑源代码]

Mozilla和最近的Firefox是Netscape Navigator Web浏览器的开源衍生产品。Firefox 1.0的发布使Web在5年内首次出现Web浏览器使用率的重大转变。

GNU Classpath

[编辑 | 编辑源代码]

GNU Classpath是一个项目,旨在为Java编程语言创建标准类库的自由软件实现。GNU Classpath的开发始于1998年,当时只有5名开发人员。最初的进展非常缓慢,因为Sun已经免费提供了自己的Java实现(包括商业用途),并且源代码可用。然而,移植到新的平台、连接到新的虚拟机以及各种不寻常的项目需要分发修改后的版本——这在当时不受Sun许可证的允许。在整个历史中,该项目与其他具有类似目标的项目(Kaffe、libgcj)合并了几次。在过去,GNU Classpath提供了自己的虚拟机(Japhar)。随着Classpath成为一个基础库,与许多不同的项目共享,这个虚拟机越来越不受关注,直到它不再被支持而被放弃。当该项目接近Java 1.2 API的完成时,它开始加速发展,当时很明显,一些公司正在加入,允许他们的开发人员在工作时间内为该项目做出贡献。GNU Classpath已成为几乎所有Linux发行版的一部分,并已移植到许多处理器和操作系统上;其中一些至今还没有其他Java支持。在会议上,一连串的谈话向惊讶的公众展示了,存在着**完全功能的**替代自由实现的Swing、CORBA和其他复杂库,人们曾经认为这些库永远无法由志愿者社区完成。

Sun发布了自己的Java实现,该实现使用与GPL+Exception几乎相同的许可证后,项目的状况发生了变化。主要目的是在自由软件许可证下拥有高效的Java实现,但它已经通过另一种方式实现了。由于两个库都实现了相同的API,并且现在拥有几乎相同的许可证,因此,它们是否能够找到自己的用户群体,而不是仅仅被另一个库取代,似乎令人怀疑。

虽然Sun的OpenJDK的兴起意味着GNU Classpath不再拥有上升的声望和加入历史成为长期存在的替代Java系统作者的可能性,但GNU Classpath社区表现出了自我克制,尽其所能为自由软件服务:邮件列表中没有反对意见,也没有试图为Sun的项目制造负面形象——简而言之,没有试图阻止GNU Classpath被OpenJDK取代,而OpenJDK现在是开源的,而且性能仍然优于GNU Classpath。Sun在GNU Classpath即将成为一个完全可行的替代方案和真正的竞争对手的时候发布了自己的库,这可能促使Sun做出这一决定。因此,GNU Classpath可能仍然被视为一个成功的项目。这个项目似乎仍然活跃,并且吸引着贡献,这可能是因为它的虚拟机接口在历史上更适合连接各种虚拟机。它是一个常见的选择,作为Google Android的扩展,提供从Google实现中删除的“不必要”部分。

加入现有的开源项目

[编辑 | 编辑源代码]

创建您自己的开源项目可能是首先想到的事情,但对于初学者来说,一般的建议是**不要这样做**。该项目必须基于一个非常好的想法,并且需要不止一个开发人员的合作才能真正成功。否则,你可能只会看到下载计数器缓慢地向上跳动,但永远不会获得其他任何反馈。通常情况下,从加入现有的项目开始,然后在您积累了足够的经验后,再开始自己的项目,要好得多。出于同样的原因,最好不要从尝试恢复已经失去前一个团队的废弃项目开始(参见原因)。

编写和使用自由软件不仅仅是编程,它是一种哲学。虽然编程语言是你编程所需的一切,但加入社区、结交朋友、共同完成伟大的工作,并成为一个受人尊敬的专业人士,拥有你无法在其他地方获得的个人资料,似乎也很重要。

初始准备

[编辑 | 编辑源代码]

确保你作为程序员有足够的竞争力来做出有价值的贡献。如果没有,你就对开发者社区毫无用处,所以没有人会理你。下一个最重要的工具是版本控制(CVSSVN)。了解如何创建和应用补丁(文本差异文件)。社区中大多数 FOSS 开发都是通过创建、讨论和应用各种补丁来完成的。

寻找第一个要加入的项目

[编辑 | 编辑源代码]

虽然一个非常流行且非常成功的项目可以让你获得更多专业知识,但此类项目对贡献者的要求也很高。你被期望遵循编码风格,编写 CHANGELOG 条目,创建和应用补丁,用测试覆盖你的代码等等。如果没有预期并了解原因的经验,所有这些最终可能导致你和项目社区之间的冲突。如果你对 FOSS 完全陌生,从一些不太苛刻的项目开始可能更有效率,至少在短期内是如此。大多数现在非常容易加入的小型项目可以在 SourceForge.net 上找到。合适的项目必须

  1. 使用你已知的编程语言。
  2. 积极活跃,有近期发布。通常,一个项目如果超过一年没有发布,就被认为是休眠状态,如果不是死亡的话。
  3. 已经拥有三到五个开发者或左右。
  4. 使用版本控制。
  5. 有一些你认为可以立即开始实施的部分,而不需要过多修改现有代码。
  6. 除了代码之外,一个好的项目还应该拥有活跃的讨论列表、错误报告、接收和实施增强请求,并展示其他类似的活动。

一些 FOSS 门户网站提供“职位空缺”,活跃项目的管理员会在那里积极发布邀请新开发者的信息。这些内容可能很有趣,但最好直接寻找你喜欢的项目,无论它是否发布邀请。

加入第一个项目

[编辑 | 编辑源代码]
  1. 联系所选项目的管理员。在一个只有少数开发人员的小型项目中,你的帮助通常会被立即接受。
  2. 仔细阅读项目的规则,并或多或少地遵循它们。编码风格的规则或在单独的文本文件中记录你的更改的必要性,一开始可能对你来说很荒谬。但是,这些规则的目的是使共享工作成为可能——而且大多数项目都有这些规则。
  3. 在这个项目中工作几个月。仔细听管理员和其他项目成员说的话。除了编程之外,你还有很多东西要学习。但如果你真的不喜欢什么,就离开去另一个项目。
  4. 不要在底层项目中停留太久。一旦你发现自己在这个团队中工作得很顺利,就该寻找一个严肃的项目了。

加入第二个项目

[编辑 | 编辑源代码]
  1. 找到一个严肃的、高级别的自由软件或开源项目。
  2. 由于我们现在要做一个严肃的跳跃,做好接受度远低于之前的准备。你可能会被要求工作一段时间,而没有直接写入代码库的权限。但是,之前的底层项目应该教会你很多——所以经过几个月的有效贡献后,你可以尝试争取你认为应该拥有的权利。
  3. 接受并完成一项严肃的任务。即使在你发现任务比你最初想象的要困难得多之后也要继续——在这步中,重要的是不要放弃。
  4. 如果可以,将你的严肃任务应用于 Google 的“代码之夏”,以从这次冒险中获得一些资金。但不要太在意申请是否被接受,因为他们资助的职位远少于真正优秀的黑客。
  5. 寻找一个合适的会议(“Linux 日”或类似的),并尝试在那里介绍你的项目(*所有项目*,而不仅仅是你正在编程的部分)。在你表明你是代表一个严肃的自由/开源项目时,组织者通常会让你免除会议费(如果他们没有,这个会议可能不合适)。带上你的 Linux 笔记本电脑(如果你有),并演示。向项目管理员索取你准备演讲或海报时可能用到的资料。
  6. 完成任务,用自动测试覆盖,并为项目做出贡献。在这一点上,成为严肃项目中活跃成员的初始目标已经实现。你可以继续留在同一个项目中,或者以后迁移到另一个项目中学习新的东西。
    开发历史
  7. 为了更好地理解,请查看上面关于自由软件项目开发历史的真实示例。每个上升曲线代表一个开发者贡献的代码行数。开发人员多年来倾向于变得不那么活跃,但项目通常会加速,因为新的开发人员加入。因此,如果你已经具备了一些有用的技能,就没有理由团队不会邀请你。
  • 如果你仍然对自己不够信任,从你认为缺失且可以从头开始编写的代码部分开始。修改现有代码更有可能招致批评。
  • 在开始时,选择一个目前没有人积极工作的类、模块或其他单元。在同一个类甚至同一个函数上一起工作需要更多技能,并且需要各方非常谨慎。
  • 在询问项目内部工作规则的任何问题之前,尝试在项目文档和邮件列表档案中搜索答案。
  • 避免询问与编程基础或编程工具相关的任何问题。自由软件程序员的时间和黄金一样宝贵,没有人能负担得起教你基础知识。
  • 出于同样的原因,*永远*不要指望一个资深黑客为你写一个详细的任务描述,甚至为你提供任何形式的监督。虽然开源项目可能有很多严格的规则,但它们通常遵循被称为极限编程的编程方法。
  • Linux 现在是一个相当好的系统,但即使在过去它远不完善时,黑客们也广泛使用它。对于黑客来说,更重要的是该系统的每个角落都带有源代码。它们是开放的,可以探索、理解、更改,并与他人分享你的更改。理解始于日常使用的琐碎方面(写作、邮件、网页,当然还有编程)。因此,你必须至少在双启动模式下安装 Linux,并从将其用于日常任务(如网页浏览或编程)开始。
  • 许多黑客的雇主似乎有足够的动力来允许他们在工作时间做出贡献(通常是因为机构使用黑客正在开发的自由/开源程序)。想想,也许你可以通过这种方式获得至少部分所需的时间。
  • 始终继续你开始的黑客行为。不能构建、不能运行、崩溃?*确实*有原因,如果你有源代码,这通常意味着你*可以*强制系统执行任何你想要的操作,尤其是在网络搜索的帮助下。这条规则有其局限性,但确实,永远不要轻易放弃。
  • 只有在一些真正的黑客社区承认你是一个黑客之后,你才能说你是黑客。

虽然 FOSS 社区总体上非常友好且合作,但重要的是不要犯一些会导致不愉快经历的微不足道的错误。

  • 避免使用 Windows,尤其是在你计划与自由软件开发者见面时。Mac OS 比较容易被接受,但也不受欢迎。如果你确实要带笔记本电脑,它必须运行 Linux 或其他被认为是“自由软件”的操作系统。这在开源社区可能没那么重要,但你带 Linux 或双启动笔记本电脑永远不会错。
  • 如果你的邮件客户端支持 html 消息,请关闭此功能。不要附加只有专有软件(如 MS Word)才能正常打开的文档。黑客认为这样做是一种侮辱。
  • 虽然“黑客”这个词在大多数学术环境中听起来很可敬,但对于一些不知情的人来说,它可能与侵入安全系统和其他与计算机相关的犯罪行为联系在一起,而这些犯罪行为是由一个不同的社会群体——“破解者”所为。除非你准备解释,否则要看看你对谁说了这个词。真正的黑客,正如本文所指的,绝不会参加对他们来说是非法的编程活动。首先,他们为遵循黑客伦理而感到自豪。其次,违反法律并不一定收入更高。
  • 不要自愿参与那些没有在批准的开源许可下发布部分代码的公司拥有的项目。在这种情况下,项目的真正重要部分很可能被保存在所有者的封闭大门后面,阻止你学习任何有用的东西。
  • 不要从小的代码优化、额外的注释、编码风格改进以及其他类似的“小规模”工作开始。它可能会招致比任何重大贡献都多的批评。

来源和引用

[编辑 | 编辑源代码]


启动和维护开源项目

[编辑 | 编辑源代码]

Vaporware 是用来“试探”市场反应的软件。许多项目,如果捐赠给开源方法,将会更快地找到使用、开发和市场。丢失的代码可能会复活并得到增强。越来越多的计算机用户正在学习使用由程序员创建和改进的优秀开发工具。如果你有一个好主意,开源就是实现它的方法。

项目管理

[编辑 | 编辑源代码]

FOSS 项目的必要流程

[编辑 | 编辑源代码]

通常有一套工具参与管理几乎所有 FOSS 项目。小型项目可能不会使用其中的一些工具;大型项目几乎总是会使用所有工具。这些工具按使用频率大致排列,分别是

  • 版本控制库,它包含项目的所有过去修订版,并且可以远程访问。过去的项目主要使用 CVS。最近的项目通常使用 SVN 或其他工具。
  • 错误/问题跟踪器,它包含错误报告和增强请求,以及后续评论和实现状态。最常用的工具之一是 Bugzilla。
  • 邮件列表,用于讨论项目开发的各个方面。
  • 一套自动测试。
  • CHANGELOG,其中所有代码更改都被手动记录。这在有多个开发人员时尤其重要。
  • 网站,它描述项目并提供“入门”和高级文档。

典型 FOSS 项目的贡献者

[编辑 | 编辑源代码]
上面是一个自由软件项目的开发历史的真实示例。每条上升曲线代表单个开发人员的贡献(代码行)。

如果项目依赖于外部贡献,那么随着时间的推移,吸引新贡献者非常重要。志愿者往往会随着时间的推移而变得越来越不活跃,公司提供的捐款也往往不是连续的。这并不意味着项目停滞不前:随着新开发人员的加入,它可能会随着时间的推移而变得更加活跃。但是,很明显,必须欢迎新手,并且维护一小群“精英开发人员”的做法是有问题的,因为他们不允许其他人靠近代码。软件质量通过其他方法来保证(自动测试,以及至少对所有补丁由老开发人员进行简短检查)。

版本号

[编辑 | 编辑源代码]

许多新用户发现 FOSS 项目经常使用奇怪的版本号系统。例如,看到广泛发布的软件版本号小于 1.0 非常常见。例如,网络浏览器 Firefox 在版本 1.0 完成之前的一年多时间里,版本 0.6 就被广泛使用。在 FOSS 软件的世界里,在发布版本 1.0 之前解决所有已知错误通常被认为很重要。虽然这不是一个完全可以实现的目标,但许多用户发现软件的早期版本比其商业对应产品的早期版本稳定得多。

通常,FOSS 项目将他们的版本号分成 3 部分:主版本、次要更新、点发布。主版本是版本号中的第一个数字;很少看到自由软件项目的版本号大于 2(尽管 GNU Emacs 目前是版本 21,所以这并非闻所未闻)。次要更新是第二个数字(版本号中的 x)。数字的变化通常表示程序的重大更新。第三个数字(版本号中的 y)通常表示修复错误或安全问题的较小更新。这些数字随着时间的推移会变得非常大,经常超过 30 或 40。当一个软件项目建立良好时,他们的大多数更新将以点发布的形式出现。

版本号也可能带有额外的含义。例如,自从 Linux 内核升级到版本 2 以来,设计团队一直使用奇数来表示开发内核,使用偶数来表示稳定内核。因此,虽然今天常见的版本号是 2.2、2.4 和 2.6,但 2.1、2.3、2.5 几乎看不到。仍然有一些团队致力于支持 2.0、2.2、2.4 和 2.6 内核的错误/安全修复。截至 2005 年 3 月,该策略正在接受 Linux 内核主要作者的审查,但是许多项目使用类似的编号方案,因此它仍然是一个有用的示例。

当一个软件项目更改主版本号时,这通常表示软件的完全重写,或者至少是彻底的改造。Apache Web 服务器在 2003 年启动了版本 2.0,这是在 1.3.x 版本存在多年的基础上进行的。Apache2 是 Apache 的几乎完全重写,它提供了许多新功能,并显著改进了底层代码库。Apache 基金会仍然维护 1.3.x 代码库,尽管大多数新代码的努力都集中在 2.0.x 代码库上。

软件编写者可能会完全重写程序,改进软件,或者不必要地膨胀本来就很优秀的软件。如果软件工作正常,那么升级的必要性就不大。

此外,升级可能会解决一些问题,但也会带来新的问题。举个例子,“Abi Word”是一个很好的文字处理器,但它在我这里崩溃了。Open Office 中的完整软件包从未发生过这种情况,Notepad 或 WordPad 也一样。新的改进的“Notepad”偶尔会崩溃。因此,我停止被拥有很多功能的东西所诱惑。任何具有隐藏崩溃功能的软件都是一个责任。我一直在使用 Miranda IM,没有出现问题,而其他人发现它无法工作。

开源硬件

[编辑 | 编辑源代码]

各种计算机硬件通常具有其自身的特定功能,只有专门的软件才能正确读取。通常,操作系统包含处理所有特定细节的设备驱动程序,为其他程序提供更通用的访问权限。制造商可以选择公开编写驱动程序所需的文档,也可以将其保密,而提供已完成的驱动程序。

专有驱动程序通常是开源项目的问题。首先,它通常具有限制其使用的许可限制(封闭源代码自动与 GPL 不兼容)。其次,无法检查此类驱动程序是否有错误和安全漏洞。最后,驱动程序通常不可用于目标平台;通常仅为一个操作系统提供此类驱动程序。

由于这些原因,Linux、Solaris 和其他开源操作系统可能无法为没有足够文档的硬件提供所需的驱动程序。在硬件非常普遍和流行的情况下,经验丰富的黑客可能会成功地对设备进行逆向工程,并在没有文档的情况下编写自己的驱动程序。但是,这是一个困难而漫长的过程,已完成的驱动程序可能仍然缺乏某些功能。

因此,在编写使用某些特定硬件(如相机、高级视频或无线)的开源软件之前,始终重要的是选择制造商共享必要技术信息或至少为您的系统、您的平台以及您认为可以接受的条件提供其自身驱动程序的设备。必须事先仔细检查,不要指望“它无论如何都能工作”,尤其不要假设制造商以后可能会改变立场。

例如,在设计完全开放的手机(OpenMoko 项目)时,FIC 公司为其第一个原型 Neo1973 选择了 Hammerhead PMB 2520 芯片。直接访问此芯片的文档一直保密。经过长时间的谈判,制造商提供了一些驱动程序,但由于许可问题,每个用户都需要从专用网站下载并单独安装。由于这款手机主要针对不喜欢这种“二进制 blob”的开源爱好者,因此在许多情况下,最终拒绝了驱动程序,导致手机上的 GPS 无法正常工作。进一步的谈判没有成功,FIC 被迫在下一代产品中切换到完全不同的芯片。然而,切换需要重新设计一些电路。当新手机交付时,发现由于时间不足,新的 GPS 设备没有经过适当的测试,只有在从插槽中取出 SD 卡后才能正常工作。虽然最终所有问题都得到了解决,但长时间的延迟和设备无法正常工作可能会降低该项目的知名度,该项目之后遇到了财务问题。

开源硬件正在开发免费的 BIOS 和 CPU 规范以及电子设计。

未来发展

[edit | edit source]
维基媒体项目采用与开源和自由软件运动相同的原则,但将其应用于知识领域。

FOSS 正在创造一种新的视角。这种态度对商业部门特别有利,他们可以获得代码和工具进行商业化。发展中国家和人民可以使用免费的材料和资源。开发者社区正在尝试新系统,最重要的是留下一个可以流传后世的遗产。

技术之外的应用

[edit | edit source]

基层组织者开始采用自由软件运动产生的部分理念。通过鼓励更多透明度和思想分享,基层团体发现他们可以用更少的努力激励更多人。

维基百科维基教科书这样的项目都是秉承这些原则建立的。

选择软件的建议

[edit | edit source]

没有一种最好的方法可以找到最适合您需求的 FOSS 项目。您可以使用以下一些经验法则来帮助您做出明智的决定。

这是开源的吗?
一些公司试图通过假装提供 FOSS 软件来吸引更多用户,而实际上他们并没有提供。检查这一点的简单方法是验证他们的许可证是否获得 OSI 认可。不寻常的许可证通常意味着该项目假装提供 FOSS 软件。
您是否已经拥有可以很好地完成工作的软件?
在您寻找新的软件之前,请确保您没有已经拥有的程序可以很好地完成工作。或者,能够用您当前的软件完成工作并不一定意味着没有更好的软件可用,因此可能需要定期研究其他软件选项。
该程序是否能满足您的需求?
虽然这似乎很明显,但每个 IT 支持人员都可以告诉你关于用户的轶事,他们来找他们寻求帮助使用某个特定工具,因为朋友推荐了它,但它不适合这项工作。
您是否关心自由软件和开源软件背后的意识形态,或者需要与关心这些理念的人一起工作?
许多人认为使用自由软件是他们生活和工作的重要组成部分。这些人选择不将 FOSS 程序替换为专有程序,即使专有程序的质量可能更高。然而,最近许多 FOSS 程序已经变得与专有程序一样好,甚至更好。
您是否认识其他已经使用过它的人?
在线评论很棒,但没有什么比与您认识的人谈论他们每天使用的程序更好了。真正的用户可以告诉你该程序在长期运行中的表现如何。您的朋友可能发现,虽然它最初运行良好,但它缺少您心目中项目的某些重要功能。此外,如果您使用没有人使用的程序来执行一项常见任务,那么可能是有原因的(并且您不太可能比其他人更聪明...抱歉)。
当前版本是否已经超过一年了?
如果是,那么该项目很可能已经停止或停滞不前。活跃的项目往往每隔几周或几个月就会发布新的更新。虽然旧版本可能是程序编写良好的标志,需要很少或根本不需要更新,但它通常表明程序员已经转向其他工作,并放弃了该项目。
您是否可以加入用户支持邮件列表?
特别是当您刚接触一个程序时,能够获得支持来学习如何使用它会很好。电子邮件列表或网络讨论板通常是 FOSS 程序的优秀支持来源。还要查看列表的存档,如果它们是活跃的列表,您可以了解常见问题以及有多少人使用该程序。

其他常见问题

[edit | edit source]

开源软件的质量总是比其他类型的软件更好吗?

[edit | edit source]

这在很大程度上取决于用户认为哪些是主要要求。但是,一般来说,远非如此。任何类型的软件(半免费、专有等)都是如此。到处都可以找到不好的软件和好的软件。

程序员可能仍在学习,并在开源场所提供他们的项目,作为通过向其他人开放项目来加快开发的一种方式。缺乏兴趣可能导致项目被放弃。如果需求和想法很好,开源会快速有效地得到发展。原始开发者可以从他们的经验以及社区中其他成员更快地发现错误中受益。预计自由和开源软件会发布许多次要版本。

那么,开源软件的质量总是更差吗?

[edit | edit source]

一些管理人员认为,由于缺乏资金,FOSS 无法与专有替代方案一样好,并且只因为成本更低才被使用。近年来,情况也不一定如此,特别是考虑到标准可能不同。可以提出接受标准,在这些标准下 Linux 比 Windows 更出色(确实存在运行速度更快并且至少病毒更少的测试)、Thunderbird 比 Lotus Notes 更出色(功能更少,但速度更快,而且跨平台)、KPdf 比 Acrobat Reader 更出色(至少启动速度更快)。像 Linux 内核、OpenSolaris 操作系统、Sun java 实现、Firefox、Thunderbird、Google Android 以及许多其他软件都是通过过去投入巨额资金创建的。开源软件仅仅由稀缺的孤立个人开发是一种神话,因此没有特别的理由说明它总是更差。

在哪里可以找到开源软件?

[edit | edit source]

获取此类软件最可靠的方法是从流行的、公认的网站门户下载。情况会随着时间推移而变化,但目前最流行的门户似乎是sourceforge.net。还可以访问www.gnu.org,获取自由软件基金会赞助的项目的列表。Linux 用户通常会从他们的发行版中获得大量的开源软件,并可以使用作为操作系统一部分的用户友好软件管理工具搜索更多软件。

也有一些免费软件网站提供试用版、限制版甚至完全功能版的软件供免费使用。但需要注意的是,仅仅是免费提供软件本身并不意味着它是开源软件。

其他资源

[编辑 | 编辑源代码]

贡献者

[编辑 | 编辑源代码]
  • Lobster: 开始编写这本书
  • ahc: 接手并重塑了这本书。从 2004 年秋季开始工作
  • User:audriusa: 在 2008 年进行了扩展。
华夏公益教科书