引言

许多人往往忘记软件开发的一个方面是软件应该如何许可。 软件许可证规定了许可证持有者(最终用户)如何使用和分发代码,这对技术的采用范围会产生重大影响。 大多数现代软件是根据专有许可销售的,这种许可允许出版商或开发者保留软件的知识产权。

然而,还有另一种观点认为,这种做法将不必要的控制权交到了软件出版商手中。 通过防止许可证持有者复制和改变软件的源代码,这个想法站得住脚,专有软件出版商扼杀了创新,阻碍了新技术的潜在增长。 这种立场激发了许可证的创建,许可证授予用户学习、修改和分享软件源代码的权利。 以这种方式许可的软件通常被称为“自由软件”或“开源软件”

一般来说,这两个术语指的是同一件事: 软件的使用没有什么限制。 从它们的支持者的角度来看,这两种自由及开放源代码软件都更安全、更有效率,而且比它们的专利同行工作得更可靠。 但是,为什么我们对同一件事有两个标签呢? 答案涉及到一点历史,以及对形成两个独立但密切相关的运动的细微差别的理解。

一点背景

应该允许使用一个软件的个人查看、编辑和共享其源代码而不产生法律后果的想法并不是什么新鲜事。 在1970年代之前,软件通常是连同其源代码一起分发的,原因是软件通常是特定于硬件的,最终用户必须对其进行修改,以便在其特定的机器上运行或添加特殊功能。

大多数在这个时期与计算机互动的人都是在严格的学术或研究环境中进行的。 这意味着计算资源经常是共享的,并且广泛鼓励更改软件以创建更有效的工作流或更可靠的解决方案。 例如,加州大学伯克利分校的 Genie 项目通过破解实验室 SDS 930计算机的源代码,开发了伯克利分时操作系统——一个从零开始建立的分时操作系统。

然而,随着软件开发变得越来越复杂和昂贵,软件公司想方设法停止肆无忌惮地共享源代码,以保护他们的收入来源,并阻止竞争对手使用他们的实现。 他们开始对自己的产品进行法律限制,包括版权和租赁合同,并开始以专有许可证销售自己的产品。 到20世纪70年代末,大多数软件公司已经停止运送包含源代码的软件。 这使得许多长期使用电脑的人表达了他们的不满,他们的精神气质最终形成了自由软件运动的基础。

自由软件的起源

自由软件运动很大程度上是理查德·斯托曼的智慧结晶。 早在20世纪70年代早期,斯托曼就开始了他的计算机科学研究,当时他还没有获得专有软件执照。 作为学术黑客团体的一员已经超过十年了,他对专有软件软件的传播感到沮丧,认为它侵犯了人们创新和改进现有软件的权利。

1983年,斯托曼启动了 GNU 项目,旨在创建一个完整的操作系统,为用户提供查看、更改和共享源代码的自由。 斯托曼在《 GNU宣言表达了他这个项目的动机。 在书中,他表达了自己的信念,即专有许可阻碍了社区驱动的软件开发,有效地阻碍了创新,削弱了技术进步。

据斯托曼说,这给用户和开发人员带来了不公平的负担,否则他们就可以修改代码以满足自己的需求,或者修改代码以满足新的功能。 因此,GNU 项目可以被看作是对专有软件的兴起的回应,同时也是对之前免费共享源代码和协作软件开发时代的回调。

1985年,Stallman 在 GNU 项目的基础上建立了自由软件基金会,一个致力于向更广泛的公众推广自由软件概念的非营利组织。 后来 Stallman 还开发了 GNU通用公共许可协议软件许可证,这是一种保证终端用户免费运行、查看和共享源代码的软件许可证。

根据 FSF 的说法,一个软件要被认为是真正的“免费” ,它的许可证必须保证它的用户有四个基本的自由:

  • 可以自由地运行程序,任何目的都可以。
  • 你可以自由地研究程序是如何工作的,并且可以随心所欲地修改它。 访问源代码是实现这一点的先决条件。
  • 重新发布副本的自由,这样你就可以帮助你的邻居。
  • 向其他人分发修改后的版本的自由。 通过这样做,你可以给整个社区一个从你的改变中受益的机会。 访问源代码是实现这一点的先决条件。

金融稳定论坛认为任何软件如果不能满足这些标准中的每一个都是非自由的,因此是不道德的。

开源的兴起

斯托曼之所以选择“自由软件”这个标签,是为了表明用户可以根据自己的意愿自由修改和分享源代码。 这导致了多年来的一些混乱,因为许多人认为“自由软件”是指任何可以以零成本获得的软件(更准确地说是“免费软件”或“共享软件”)。 Fsf 用这样一句话来解释这个名字的选择: “把自由想象成言论自由,而不是免费啤酒。”

然而,到了20世纪90年代后期,一些 GNU 和 Linux 爱好者越来越担心这种双重含义会导致大部分用户错过自由软件背后的哲学及其相对于专有代码的优势。 金融稳定论坛也因其对各种专有软件的强硬道德立场而闻名。 一些自由软件倡导者担心这种方法对商业利益太不友好,最终会阻碍自由软件运动的传播。

大教堂和市集

1997年,Eric s. Raymond,一个自由软件的倡导者和开发者,写了一篇名为大教堂和市集的文章,这篇文章比较了两种不同的开发模式在各种自由软件项目中的应用。 “大教堂”指的是一种自上而下的开发模式,由一群独特的开发人员编写代码,例如 GNU Emacs 的开发。 另一方面,“市集”指的是一种代码在互联网上公开开发的方法,就像 Linux 内核的开发一样。

这篇文章的中心论点是 Bazaar 模型在发现和解决软件缺陷方面天生就更有效,因为更多的人能够查看和试验源代码。 因此,Raymond 认为,使用社区驱动的、自底向上的开发过程可以产生更安全、更可靠的软件。

在1998年早些时候,网景公司作为免费软件发布了其 Communicator 网页浏览器的源代码,部分是为了回应大教堂和市集的想法。 (Communicator 源代码后来成为 Mozilla FireFox 1.0的基础)。 受到 Netscape 在这个源代码版本中看到的商业潜力的启发,一群自由软件爱好者(包括 Raymond,Linus Torvalds,Philip Zimmerman 和许多其他人)试图重塑自由软件运动的品牌,并将其关注点从道德或哲学动机上转移开来。 该组织选择“开源”作为自由共享软件的标签,希望它能更好地反映协作、社区驱动的开发模式的商业价值。

此后不久,由 Raymond 和 Bruce Perens 创立的开放开放源代码促进会协会(OSI)鼓励使用这个新术语以及传播开源原则。 Osi 还制定了开放源码定义(Open Source Definition)——一个软件的许可证必须遵守的十项原则的清单,才能被视为开放源码:

  1. 自由重新分发-许可证不应限制任何一方出售或赠送软件作为一个更大的软件分发包含来自多个来源的程序的组成部分。
  2. 源代码-程序必须包括源代码,并必须允许在源代码以及编译形式的分发。
  3. 衍生作品-许可证必须允许修改和衍生作品,并且必须允许它们在与原始软件的许可证相同的条款下发布。
  4. 作者源代码的完整性——只有在许可证允许分发”补丁文件”和源代码以便在编译时修改程序的情况下,许可证才可能限制以修改形式分发源代码。
  5. 不歧视个人或群体——许可证不得歧视任何个人或群体。
  6. 没有对努力领域的歧视-许可证不得限制任何人使用程序在特定领域的努力。
  7. 许可证的分发——该程序所附带的权利必须适用于该程序被重新分发给的所有人,而不需要这些人执行额外的许可证。
  8. 许可证必须不是特定的产品-权利附加到程序不得取决于程序的一部分,特定的软件发行。
  9. 许可证不得限制其他软件-许可证不得对与许可软件一起发布的其他软件设置限制。
  10. 许可证必须是技术中立的——许可证的任何条款都不能以任何单独的技术或界面风格为基础。

自由及开放源代码软件之间的差异

对于大多数人来说,“自由软件”和“开源软件软件”之间的意义差别可以忽略不计,只是在方法或哲学上有一点点差别。 开放源代码促进会认为,这两个词的意思是一样的,它们可以在任何上下文中互换使用。 他们只是更喜欢“开源”这个标签,因为他们相信这个标签能更清楚地描述软件及其开发者应该如何使用它的意图。

然而,对于“自由软件”阵营来说,“开放源码”并没有充分表达出这场运动的重要性,以及由专有软件引发的潜在的长期社会问题。 自由软件基金会认为 OSI 过于关注促进非专有软件的实际好处(包括其盈利能力和社区驱动的开发模式的效率) ,而对限制用户根据自己的条件改变和改进代码的权利的道德问题关注不够。

一个给定的软件是自由的还是开源的,取决于它是以哪种许可证发布的,以及这种许可证是否得到了美国开放源代码促进会协会、自由软件基金会或者两者的批准。 在哪个组织批准哪些许可证之间有很多重叠,但也有少数例外。 例如,美国宇航局的开源协议是一个 osi- 批准的许可证,金融稳定论坛认为限制太多。 因此,FSF 不鼓励任何人使用在该许可下发布的软件。 总的来说,如果它可以被描述为自由软件,那么它很有可能也符合开源软件的定义。

替代名称

多年来,为了结束这场争论,人们提出了几个其他的名字来命名这种软件。 ”自由及开放源代码软件 / 自由和开放源码软件”(通常简称为”自由和开放源码软件”)是使用最广泛的软件之一,被认为是介于两者之间的安全中性软件。 术语“ libre software”(“ libre”源自几种罗曼语言,大致意思是“自由的状态”)已经有了自己的追随者,以至于首字母缩略词“ FLOSS”(意思是“ free / libre and 开源软件”)也变得相当普遍。

应该指出的是,这两种自由及开放源代码软件软件都不同于公共领域的软件。 自由及开放源代码软件通过许可来定义自己的自由,而公共领域的软件可能会遵循一些相同的美德,但这是通过不受许可系统的限制来实现的。 这两个自由及开放源代码软件的一个重要区别是,基于免费或开放源码的作品也必须以自由和开放源码许可证发布。 向公共领域发布的软件没有这个要求。

公共领域软件的另一个问题源于这样一个事实,即世界上并非每个国家都承认非版权内容。 这使得它不可能作出一个全球公认的声明,即一个软件是在公共领域。 因此,FSF 和 OSI 都不鼓励开发者将软件发布到公共领域。

总结

在大多数情况下,“自由软件”和“开源软件软件”这两个词是可以互换的,一个人是否喜欢这两个词通常归结为语义问题或者他们的哲学观点。 然而,对于许多希望开发软件并将其公之于众的程序员,或者希望改变人们看待技术和与技术互动方式的活动家来说,这种差异可能是一个重要的因素。 因此,在发布新软件时,必须仔细权衡不同许可证(包括专有许可证)的利弊,并选择最适合自己特殊需要的软件。

如果您有兴趣了解哪种软件许可证适合您的下一个项目,自由软件基金会的许可证列表提供了免费和非免费许可证的详细描述。 此外,美国开放源代码促进会协会的许可证和标准页面也可能感兴趣。