什么是自由软件?
“自由软件”是指尊重用户自由和社区的软件。 粗略地说,它意味着用户有运行、复制、分发、研究、更改和改进软件的自由。 因此,“自由软件”关乎自由,而非价格。 要理解这个概念,你应该把“自由”理解为“言论自由”中的“自由”,而不是“免费啤酒”中的“免费”。 我们有时称之为“自由软件”,借用法语或西班牙语中表示自由的单词“libre”,表明我们不是指软件是免费的。
你可能花钱购买了自由程序的副本,或者你可能免费获得了副本。 但无论你如何获得副本,你始终拥有复制和更改软件的自由,甚至可以出售副本。
我们为这些自由而奋斗,因为每个人都应该拥有它们。有了这些自由,用户(无论是个人还是集体)都可以控制程序及其对他们的作用。当用户无法控制程序时,我们称之为“非自由”或“专有”程序。非自由程序控制用户,而开发者控制程序;这使得程序成为不正当权力的工具。
“开源”是不同的东西:它有基于不同价值观的非常不同的理念。它的实际定义也不同,但实际上几乎所有开源程序都是自由的。我们在为什么“开源”没有抓住自由软件的重点中解释了其中的区别。
目录
您是否有关于自由软件许可的问题未在此处解答?请参阅我们的其他许可资源,如有必要,请通过[email protected]联系 FSF 合规实验室。
自由软件定义
自由软件定义提出了特定软件程序是否符合自由软件资格的标准。我们会不时修订此定义,以澄清它或解决关于细微问题的问题。请参阅下面的历史部分,了解影响自由软件定义的更改列表。
四个基本自由
如果程序的用户拥有以下四个基本自由,则该程序是自由软件: [1]
- 随意运行程序的自由,可用于任何目的(自由 0)。
- 研究程序如何工作的自由,并对其进行更改以使其按照您的意愿进行计算(自由 1)。访问源代码是此项的前提条件。
- 重新分发副本的自由,以便您可以帮助他人(自由 2)。
- 向他人分发修改版本的副本的自由(自由 3)。通过这样做,您可以让整个社区有机会从您的更改中受益。访问源代码是此项的前提条件。
如果程序充分给予用户所有这些自由,则该程序是自由软件。否则,它就是非自由的。虽然我们可以根据它们在多大程度上不符合自由标准来区分各种非自由分发方案,但我们认为它们都是同样不道德的。
在任何给定情况下,这些自由必须适用于我们计划使用的任何代码,或引导他人使用的任何代码。 例如,考虑一个程序 A,它会自动启动程序 B 来处理某些情况。如果我们计划按原样分发 A,这意味着用户将需要 B,因此我们需要判断 A 和 B 是否都是自由的。但是,如果我们计划修改 A 以使其不使用 B,则只需要 A 是自由的;B 与该计划无关。
自由软件可以是商业的
“自由软件”并不意味着“非商业”。 相反,自由程序必须可用于商业用途、商业开发和商业分发。 此政策至关重要——没有它,自由软件将无法实现其目标。
我们希望邀请所有人使用 GNU 系统,包括企业及其员工。 这需要允许商业用途。 我们希望自由的替代程序将取代可比较的专有程序,但如果禁止企业使用它们,它们就无法做到这一点。 我们希望包含软件的商业产品包含 GNU 系统,这将构成有偿的商业分发。 自由软件的商业开发不再罕见;这种自由的商业软件非常重要。 为自由软件提供有偿的专业支持满足了重要的需求。
因此,排除商业用途、商业开发或商业分发会阻碍自由软件社区,并阻碍其走向成功的道路。 我们必须得出结论,以这种限制许可的程序不符合自由软件的资格。
自由程序必须向获得软件副本的任何潜在用户提供四种自由,这些用户迄今为止符合之前任何软件分发中涵盖该软件的自由许可证的条件。 将部分自由限制为某些用户,或者要求用户支付金钱或实物来行使这些自由,等同于不授予相关自由,从而使该程序成为非自由的。
澄清自由和非自由之间的界限
在本文的其余部分中,我们将更精确地解释各种自由需要在各种问题上扩展到何种程度,才能使程序成为自由的。
随意运行程序的自由
运行程序的自由是指任何人或组织可以在任何类型的计算机系统上,针对任何类型的总体工作和目的使用它的自由,而无需与开发人员或任何其他特定实体进行沟通。 在这种自由中,重要的是用户的目的,而不是开发人员的目的;作为用户,你可以自由地为了自己的目的运行该程序,如果你将其分发给其他人,他们也可以自由地为了自己的目的运行该程序,但你无权将你的目的强加于他们。
随意运行程序的自由意味着你不会被禁止或阻止使其运行。 这与程序具有什么功能无关,它是否在技术上能够在任何给定环境中运行,或者它是否对任何特定的计算活动有用。
例如,如果代码任意拒绝某些有意义的输入——甚至无条件地失败——这可能会使程序不太有用,甚至完全无用,但这并不会剥夺用户运行程序的自由,因此它不与自由 0 冲突。 如果程序是自由的,用户可以克服效用的损失,因为自由 1 和 3 允许用户和社区制作和分发没有任意干扰代码的修改版本。
“如你所愿”包括,如果那是你所希望的,可以选择“完全不运行”。 因此,不需要单独的“不运行程序的自由”。
研究源代码并进行更改的自由
为了使自由 1 和 3(进行更改的自由和发布更改版本的自由)有意义,你需要访问程序的源代码。 因此,源代码的可访问性是自由软件的必要条件。 混淆的“源代码”不是真正的源代码,并且不算作源代码。
源代码被定义为用于进行更改的程序的首选形式。 因此,开发人员用于开发程序的任何形式都是该开发人员版本的源代码。
自由 1 包括使用你的更改版本代替原始版本的自由。 如果程序在设计为运行其他人的修改版本的产品中交付,但拒绝运行你的版本——这种做法被称为“tivoization”或“锁定”,或者(在其从业者的反常术语中)称为“安全启动”——自由 1 就成了一种空洞的借口,而不是实际的现实。 这些二进制文件不是自由软件,即使它们编译自的源代码是自由的。
修改程序的一种重要方法是将可用的自由子程序和模块合并到其中。 如果程序的许可证说你不能合并一个具有适当许可的现有模块——例如,如果它要求你是你添加的任何代码的版权所有者——那么该许可证就过于严格,不符合自由软件的资格。
更改是否构成改进是一个主观问题。 如果你修改程序的权利在实质上仅限于他人认为的改进,那么该程序就不是自由的。
自由 1 的一种特殊情况是删除程序的代码,使其在不执行任何操作后返回,或者使其调用其他程序。 因此,自由 1 包括“删除程序的自由”。
如果愿意,可以重新分发的自由:基本要求
分发的自由(自由 2 和 3)意味着你可以自由地重新分发副本,无论是否进行修改,无论是免费还是收取分发费用,都可以向任何地方的任何人分发。 能够自由地做这些事情意味着(除其他外)你无需请求或支付许可费用即可这样做。
你还应该有自由进行修改并在你自己的工作或娱乐中私下使用它们,甚至无需提及它们的存在。 如果你确实发布了你的更改,则不应要求你以任何特定的方式通知任何特定的人。
自由 3 包括将你的修改版本作为自由软件发布的自由。 自由许可证也可能允许其他发布方式; 换句话说,它不必是著作权保留许可证。 但是,要求修改后的版本必须是非自由的许可证不符合自由许可证的资格。
重新分发副本的自由必须包括程序的二进制或可执行形式,以及源代码,无论是修改过的版本还是未修改过的版本。(以可运行形式分发程序对于方便安装的自由操作系统是必要的。)如果某个程序无法生成二进制或可执行形式(因为某些语言不支持此功能),这是可以接受的,但如果您找到或开发出使其生成的方法,则必须有权重新分发此类形式。
著作权保留
当某些关于分发自由软件的方式的规则不与核心自由相冲突时,是可以接受的。例如,著作权保留(简单来说)是一项规则,即在重新分发程序时,您不能添加限制来剥夺其他人拥有的核心自由。此规则不与核心自由相冲突;相反,它保护了这些自由。
在GNU项目中,我们使用著作权保留来合法地为每个人保护这四项自由。我们认为有重要的理由说明为什么使用著作权保留更好。但是,非著作权保留的自由软件也是合乎道德的。有关“自由软件”、“著作权保留软件”和其他软件类别之间如何相互关联的说明,请参阅自由软件的类别。
关于打包和分发细节的规则
关于如何打包修改版本的规则是可以接受的,如果这些规则没有实质性地限制您发布修改版本的自由,或者您私下制作和使用修改版本的自由。因此,许可证要求您更改修改版本的名称、删除徽标或将您的修改标识为您的修改是可接受的。只要这些要求不是如此繁重以至于有效地妨碍您发布更改,它们就是可以接受的;您已经在对程序进行其他更改,所以再做一些更改不会有麻烦。
关于“如果您以这种方式提供您的版本,您也必须以那种方式提供它”的规则也是可以接受的,条件相同。这样一个可以接受的规则的例子是,如果您已经分发了一个修改后的版本,并且之前的开发者要求获得副本,您必须发送一个。(请注意,这样的规则仍然让您可以选择是否要分发您的版本。)对于您公开发布的版本,要求向用户发布源代码的规则也是可以接受的。
当许可证要求更改程序从其他程序调用的名称时,会出现一个特殊的问题。这实际上会妨碍您发布已更改的版本,使其在被其他程序调用时可以替换原始版本。只有当存在合适的别名功能,允许您将原始程序的名称指定为修改版本的别名时,这种要求才是可接受的。
出口法规
有时,政府的出口管制条例和贸易制裁可能会限制您在国际上分发程序副本的自由。软件开发人员没有权力消除或推翻这些限制,但他们可以而且必须做的是拒绝将其作为使用程序的条件强加。这样,这些限制就不会影响这些政府管辖范围以外的活动和人员。因此,自由软件许可证绝不能要求遵守任何重要的出口法规,作为行使任何基本自由的条件。
仅仅提及出口法规的存在,而不将其作为许可证本身的条件,是可以接受的,因为它不限制用户。如果出口法规对于自由软件来说实际上是微不足道的,那么将其作为条件提出并不是一个实际的问题;但是,这是一个潜在的问题,因为出口法律的后续更改可能会使该要求变得重要,从而使该软件变为非自由软件。
法律考虑
为了使这些自由成为现实,它们必须是永久且不可撤销的,只要您没有做错任何事;如果软件的开发者有权撤销许可证,或追溯性地在其条款中添加限制,而您没有做错任何事导致此情况,则该软件不是自由的。
自由许可证不得要求遵守非自由程序的许可证。因此,例如,如果许可证要求您遵守“您使用的所有程序”的许可证,那么在运行非自由程序的用户的情况下,这将要求遵守那些非自由程序的许可证;这使得该许可证不是自由的。
自由许可证指定适用哪个司法管辖区的法律,或必须在哪里进行诉讼,或两者兼而有之,是可以接受的。
基于合同的许可证
大多数自由软件许可证都基于版权,并且可以通过版权施加的要求类型是有限制的。如果基于版权的许可证以如上所述的方式尊重自由,那么它不太可能出现我们从未预料到的其他问题(尽管这种情况偶尔会发生)。但是,一些自由软件许可证基于合同,而合同可以施加更大范围的可能限制。这意味着这种许可证有很多可能的方式是不可接受的限制性和非自由的。
我们不可能列出所有可能发生的方式。如果基于合同的许可证以基于版权的许可证无法做到的,并且此处没有提及为合法的非同寻常的方式限制用户,我们将不得不考虑它,并且我们可能会得出结论,它不是自由的。
自由软件定义的实践
我们如何解释这些标准
请注意,诸如此自由软件定义中所述的标准需要仔细思考才能解释。为了决定特定的软件许可证是否符合自由软件许可证的资格,我们会根据这些标准对其进行判断,以确定其是否符合其精神以及确切的措辞。如果许可证包含不合理的限制,我们将拒绝它,即使我们没有在这些标准中预料到该问题。有时,许可证要求会引发一个需要广泛思考的问题,包括与律师的讨论,然后我们才能决定该要求是否可以接受。当我们对新问题达成结论时,我们通常会更新这些标准,以便更容易了解为什么某些许可证符合或不符合资格。
获取有关自由许可证的帮助
如果您对特定的许可证是否符合自由软件许可证的资格感兴趣,请参阅我们的许可证列表。如果您关心的许可证未在其中列出,您可以通过发送电子邮件至<[email protected]>来询问我们。
如果您正在考虑编写新的许可证,请首先通过写信至该地址与自由软件基金会联系。不同自由软件许可证的激增意味着用户在理解许可证方面的工作量增加;我们也许能够帮助您找到满足您需求的现有自由软件许可证。
如果这不可能,如果您确实需要一个新的许可证,在我们的帮助下,您可以确保该许可证确实是自由软件许可证,并避免各种实际问题。
在谈论自由软件时使用正确的词语
在谈论自由软件时,最好避免使用诸如“赠送”或“免费”之类的术语,因为这些术语暗示问题是关于价格,而不是自由。一些常见的术语,例如“盗版”,体现了我们希望您不会赞同的观点。请参阅值得避免的令人困惑的词语和短语,以讨论这些术语。我们还有一份“自由软件”的正确翻译成各种语言的列表。
另一个团体使用“开源”一词来表示与“自由软件”接近(但不完全相同)的事物。我们更喜欢“自由软件”一词,因为一旦您听说它指的是自由而不是价格,它就会让人想起自由。“开放”一词永远不会指代自由。
超越软件
软件手册必须是自由的,原因与软件必须是自由的原因相同,因为手册实际上是软件的一部分。
同样的论点对于其他类型的实用作品也适用——也就是说,体现有用知识的作品,例如教育作品和参考作品。维基百科是最著名的例子。
任何类型的作品都可以是自由的,并且自由软件的定义已扩展为适用于任何类型作品的自由文化作品的定义。
历史
我们会不时地修订此自由软件定义。以下是实质性变更的列表,以及显示具体更改内容的链接。
- 版本 1.169:更清楚地解释了为什么四项自由必须适用于商业活动。解释了为什么四项自由意味着不运行程序的自由和删除程序的自由,因此无需将这些自由作为单独的要求提出。
- 版本 1.165:澄清了代码中的任意烦恼不会否定自由 0,并且自由 1 和 3 使用户能够删除它们。
- 版本 1.153:澄清了运行程序的自由意味着没有任何东西阻止您使其运行。
- 版本 1.141:澄清了哪些代码需要是自由的。
- 版本 1.135:每次都说自由 0 是按照您希望的方式运行程序的自由。
- 版本 1.134:自由 0 与程序的功能无关。
- 版本 1.131:自由许可证不得要求遵守另一个程序的非自由许可证。
- 版本 1.129:明确声明允许选择法律和选择论坛的规范。(这始终是我们的政策。)
- 版本 1.122:澄清:如果要求不重要,则出口管制要求是一个真正的问题;否则它只是一个潜在的问题。
- 版本 1.118:澄清:问题在于对您修改权的限制,而不是对您所做的修改的限制。并且修改不限于“改进”
- 版本 1.111:通过声明只有追溯性的限制是不可接受的,来澄清 1.77。版权持有者始终可以通过以另一种方式并行发布作品,来授予对作品使用的额外许可。
- 版本 1.105:在自由 1 的简短声明中,反映了(在版本 1.80 中已经声明过的)观点,即它包括真正地将你修改过的版本用于你的计算。
- 版本 1.92:澄清混淆的代码不符合源代码的条件。
- 版本 1.90:澄清自由 3 意味着有权分发你自己修改或改进版本的副本,而不是有权参与其他人的开发项目。
- 版本 1.89:自由 3 包括将修改后的版本作为自由软件发布的权利。
- 版本 1.80:自由 1 必须是实际的,而不仅仅是理论上的;即,没有 Tivo 化。
- 版本 1.77:澄清对许可证的所有追溯性更改都是不可接受的,即使它没有被描述为完全替换。
- 版本 1.74:对不够明确的点或在某些地方声明但在其他地方未反映出来的四个澄清
- “改进”并不意味着许可证可以实质性地限制你可以发布哪些类型的修改版本。自由 3 包括分发修改后的版本,而不仅仅是更改。
- 合并现有模块的权利是指那些具有适当许可的模块。
- 明确说明关于出口管制这一点的结论。
- 强加许可证更改构成撤销旧许可证。
- 版本 1.57:添加“超越软件”部分。
- 版本 1.46:澄清在为任何目的运行程序的自由中,谁的目的具有重要意义。
- 版本 1.41:澄清有关基于合同的许可证的措辞。
- 版本 1.40:解释自由许可证必须允许你使用其他可用的自由软件来创建你的修改。
- 版本 1.39:请注意,许可证可以要求你为你公开使用的软件版本提供源代码,这是可以接受的。
- 版本 1.31:请注意,许可证可以要求你标识自己为修改的作者,这是可以接受的。对全文的其他小澄清。
- 版本 1.23:解决与基于合同的许可证相关的潜在问题。
- 版本 1.16:解释为什么分发二进制文件很重要。
- 版本 1.11:请注意,自由许可证可以要求你根据请求将你分发的版本副本发送给之前的开发者。
上面显示的版本号之间存在间隔,是因为此页面中还有其他更改不会影响定义或其解释。例如,该列表不包括附注、格式、拼写、标点符号或页面其他部分的更改。您可以通过 cvsweb 界面 查看对页面的完整更改列表。
脚注
- 它们被编号为 0、1、2 和 3 的原因是历史原因。大约在 1990 年,有三个自由,编号为 1、2 和 3。然后我们意识到需要明确提及运行程序的自由。它显然比其他三个更基本,所以它应该在它们之前。与其重新编号其他自由,我们将其设为自由 0。