自由硬件和自由硬件设计

自由软件的思想在多大程度上扩展到硬件?像使我们的软件自由一样,使我们的硬件设计自由是否是一种道德义务?维护我们的自由是否要求拒绝使用非自由设计的硬件?

定义

自由软件 是关于自由而非价格的问题;广义上讲,它意味着用户可以自由使用软件,以及复制和再分发软件,无论是否进行更改。更准确地说,该定义是根据 四个基本自由 来制定的。为了强调“自由”指的是自由,而不是价格,我们经常使用法语或西班牙语中的“libre”来与“free”一起使用。

将相同的概念直接应用于硬件,自由硬件 意味着用户可以自由使用硬件,以及复制和再分发硬件,无论是否进行更改。但是,除了钥匙、DNA 和塑料物体的外部形状外,没有用于硬件的复印机。大多数硬件都是通过某种设计制造出来的。设计先于硬件。

因此,我们真正需要的概念是 自由硬件设计。这很简单:它意味着允许用户使用该设计(即,从中制造硬件),以及复制和再分发该设计,无论是否进行更改的设计。该设计必须提供定义自由软件的相同的四个自由。

然后我们可以将使用自由设计制造的硬件称为“自由硬件”,但是“自由设计硬件”是一个更清晰的术语,因为它避免了可能的误解。

初次接触自由软件概念的人们通常认为这意味着您可以免费获得一份副本。许多自由程序可以零价格获得,因为下载自己的副本不需要任何费用,但这并不是此处“自由”的含义。(实际上,一些间谍软件程序,例如 Flash Player 和愤怒的小鸟 都是免费的,尽管它们不是自由的。)将 “libre” 与 “free” 一起使用有助于澄清这一点。

对于硬件,这种混淆往往朝着相反的方向发展;硬件的生产需要花钱,因此商业制造的硬件不会是免费的(除非它是亏损产品或捆绑销售),但这并不会阻止其设计是自由/libre的。您在自己的 3D 打印机中制作的东西可以很便宜,但并非完全免费,因为原材料通常需要花费一些成本。在道德层面上,自由问题完全胜过价格问题,因为剥夺用户自由的设备比一文不值还不如。

我们可以使用术语“libre 硬件”作为“使用自由(libre)设计制造的硬件”的简洁等效术语。

“开放硬件”和“开源硬件”这些术语被一些人使用,与“自由设计硬件”具有相同的具体含义,但这些术语淡化了自由作为一个问题。它们源于术语“开源软件”,该术语或多或少地指自由软件,但 没有谈论自由或将此问题视为对错问题。为了强调自由的重要性,我们在任何相关的时候都会强调自由;由于“开放”未能做到这一点,因此我们不要用它来代替“自由”。

硬件和软件

硬件和软件从根本上是不同的。即使是以编译后的可执行形式存在的程序,也是可以解释为计算机指令的数据集合。与任何其他数字作品一样,可以使用计算机复制和更改它。程序的副本没有固有的首选物理形式或体现。

相比之下,硬件是一种物理结构,其物理特性至关重要。虽然硬件的设计可以表示为数据,在某些情况下甚至可以表示为程序,但设计不是硬件。CPU 的设计无法执行程序。您如果尝试在键盘的设计上输入或在屏幕的设计上显示像素,是无法取得任何进展的。

此外,虽然您可以使用计算机修改或复制硬件设计,但计算机无法将设计转换为其描述的物理结构。这需要制造设备。

硬件和软件之间的界限

在数字设备中,硬件和软件之间的界限是什么?它遵循定义。软件是可以使用计算机复制和修改的设备的操作部分;硬件是无法复制和修改的操作部分。这是进行区分的正确方法,因为它与实际后果有关。

硬件和软件之间存在一个灰色区域,其中包含可以升级或替换的固件,但一旦产品售出,就不应再升级或替换。或者可能是可能的,但很少见,或者制造商可以发布替换件,但您不能。从概念上讲,灰色区域相当狭窄。实际上,它很重要,因为许多产品都属于其中。实际上,如今的键盘、相机、磁盘驱动器和 USB 存储器通常都包含一个嵌入式的非自由程序,该程序可以由制造商替换。

我们可以将内置固件和等效硬件之间的差异视为一个小的实现细节,前提是我们可以肯定在任何一种情况下都不会对其进行更改。硬件电路无法更改;这是它的本质。如果接受使用任何人无法更改的内部电路来实现设备,那么任何人无法更改的内部程序也并不算差。当在操作上无法区分时,拒绝等效的内部软件实现是没有意义的。

但是,当软件实现不是完全内部的并且某些公司可以修改该代码时,这种等效性就会瓦解。例如,当需要将固件复制到设备中以使设备正常运行,或者包含在您安装的系统发行版中时,这不是内部软件实现;相反,它是已安装的非自由软件。这是不公正的,因为某些制造商可以更改它,而您不能。

为了使固件程序在道德上等同于硬件,它必须是不可修改的。如果设备不能没有某些固件就无法运行,并且它提供了一种修改方式呢?我们可以通过注意永远不要让这种替换发生,从而在实践中使该固件不可修改。该解决方案并不完全干净,但是尚未提出完全干净的解决方案;这是我们知道的在不使用该设备的情况下保留对非自由软件的拒绝的含义的唯一方法。这比仅仅放弃要好得多。

但是我们不能两者兼得。为了通过不允许任何人调用更改方法来使预安装的固件实际上不可修改,我们必须毫无例外地执行此操作,即使存在我们希望安装的更改也是如此。这意味着拒绝所有对该固件的升级或补丁。

有人说预安装的固件程序和现场可编程门阵列芯片(FPGA)“模糊了硬件和软件之间的界限”,但我认为这是对事实的误解。在使用过程中安装的固件是软件;在设备内部交付且无法更改的固件本质上是软件,但我们可以将其视为电路。至于 FPGA,FPGA 本身是硬件,但是加载到 FPGA 中的门模式是一种固件。

在 FPGA 上运行自由门模式可能是一种有用的方法,用于制造电路级自由的数字设备。但是,为了使 FPGA 在自由世界中可用,我们需要用于它们的自由开发工具。障碍是加载到 FPGA 中的门模式文件的格式是秘密的。多年来,没有一种 FPGA 模型可以在没有非自由(专有)工具的情况下生成这些文件。

截至 2015 年,可以使用自由软件工具来 编程 Lattice iCE40(一种常见的 FPGA 模型),该模型从以硬件描述语言(HDL)编写的输入中进行。也可以使用 自由工具 在 Xilinx Spartan 6 LX9 FPGA 上编译和运行 C 程序,但这些工具不支持 HDL 输入。我们建议您拒绝其他 FPGA 模型,直到它们也获得自由工具的支持。

至于 HDL 代码本身,它可以充当软件(当它在仿真器上运行或加载到 FPGA 中时)或充当硬件设计(当它在不可变的硅或电路板中实现时)。

3D 打印机的道德问题

从伦理角度来说,软件必须是自由的;非自由软件是不公正的。我们是否应该对硬件设计也抱持同样的观点?

我们当然应该这样认为,在 3D 打印(或更广泛地说,任何类型的个人制造)能够处理的领域。制作有用的、实用的物体(即功能性的而非装饰性的)的打印图案必须是自由的,因为它们是为实际用途而制作的作品。用户应该像控制他们使用的软件一样,控制这些作品。发布非自由的功能性物体设计就像发布非自由软件一样错误。

因此,请务必选择使用完全自由软件的 3D 打印机;自由软件基金会认可这类打印机

我们必须拒绝非自由的数字硬件吗?

非自由的数字[1]硬件设计是不公正的吗?为了我们的自由,我们是否必须像拒绝非自由软件一样,拒绝所有由非自由设计制造的数字硬件?

由于硬件设计和软件源代码在概念上的相似性,许多硬件黑客很快就会像谴责非自由软件一样谴责非自由硬件设计。我不同意,因为硬件和软件的情况不同。

当今的芯片和电路板制造技术类似于印刷机:它适用于工厂的大规模生产。它更像是 1950 年的复制书籍,而不是今天的复制软件。

复制和更改软件的自由是一种道德上的必然,因为这些活动对于使用软件的人来说是可行的:使您能够使用软件的设备(计算机)也足以复制和更改它。今天的移动计算机性能太弱,不适合这样做,但任何人都可以找到一台足够强大的计算机。

此外,一台计算机足以下载和运行由其他懂行的人更改的版本,即使您不是程序员。事实上,非程序员每天都在下载软件并运行它。这就是为什么自由软件对非程序员来说真正具有意义。

这在多大程度上适用于硬件?并非每个会使用数字硬件的人都知道如何更改电路设计或芯片设计,但任何拥有 PC 的人都拥有这样做的设备。到目前为止,硬件与软件是相似的,但接下来是巨大的差异。

您无法在计算机中构建和运行电路设计或芯片设计。构建大型电路需要大量艰苦的工作,而且这还是在您拥有电路板的前提下。对于个人来说,制造芯片在今天是不可行的;只有大规模生产才能使其足够便宜。以今天的硬件技术,用户无法像运行广泛使用的程序的修改版本那样,下载和运行广泛使用的数字硬件设计的修改版本。因此,四项自由并没有像赋予用户对程序的集体控制权那样,赋予用户对硬件设计的集体控制权。这就是证明所有软件必须是自由的推理不适用于当今硬件技术的原因。

1983 年,没有自由的操作系统,但很明显,如果我们有一个,我们可以立即使用它并获得软件自由。唯一缺少的就是一个操作系统的代码。

2014 年,如果我们有一个适用于 PC 的 CPU 芯片的自由设计,由该设计大规模生产的芯片不会在硬件领域给我们带来同样的自由。如果我们打算购买在工厂大规模生产的产品,这种对工厂的依赖会导致与非自由设计相同的大部分问题。为了使自由设计给我们带来硬件自由,我们需要未来的制造技术。

我们可以设想一个未来,我们的个人制造设备可以制造芯片,我们的机器人可以将它们与变压器、开关、按键、显示器、风扇等组装和焊接在一起。在那个未来,我们都将制造自己的计算机(和制造设备以及机器人),并且我们都将能够利用那些懂硬件的人所做的修改设计。拒绝非自由软件的论据届时也将适用于非自由硬件设计。

这个未来至少还要几年才能到来。与此同时,原则上没有必要拒绝使用非自由设计的硬件。

我们需要自由的数字硬件设计

尽管在当今的情况下,我们不必拒绝使用非自由设计制造的数字硬件,但我们需要开发自由设计,并且在可行的情况下应该使用它们。它们在今天提供了优势,并且在未来,它们可能是使用自由软件的唯一方法。

自由硬件设计提供了实际优势。多家公司可以制造同一种硬件,从而减少对单一供应商的依赖。团体可以安排批量制造它们。拥有电路图或 HDL 代码可以研究设计,以查找错误或恶意功能(众所周知,美国国家安全局已在一些计算硬件中获得了恶意的弱点)。此外,自由设计可以作为设计计算机和其他复杂设备的构建模块,这些设备的规格将被公布,并且将减少可能被用来对付我们的部件。

在我们能够以这种方式制造整台计算机之前,自由硬件设计可能会在我们的计算机和网络的一些部分以及嵌入式系统中变得可用。

如果它们成为避免非自由软件的唯一途径,那么即使在我们能够亲自制造硬件之前,自由硬件设计也可能变得至关重要。随着常见的商业硬件越来越多地被设计成用来控制用户,它与自由软件的兼容性越来越差,这是因为存在秘密的规格和要求,代码必须由您以外的人签名。手机调制解调器芯片甚至一些图形加速器已经要求固件必须由制造商签名。您计算机中的任何程序,如果允许其他人更改而您不允许更改,都是对您不公正的权力的工具;强加这种要求的硬件是恶意的硬件。就手机调制解调器芯片而言,现在所有可用的型号都是恶意的。

有一天,自由设计的数字硬件可能成为允许运行自由系统的唯一平台。让我们力争在那之前拥有必要的自由数字设计,并希望我们有足够的手段以足够便宜的价格为所有用户制造它们。

如果您设计硬件,请使您的设计自由。如果您使用硬件,请加入敦促和施压公司使硬件设计自由的行列。

设计层级

软件有不同的实现层级;例如,一个软件包可能包含库、命令和脚本。但是,这些层级对于软件自由而言并没有显着差异,因为在所有层级上都实现自由是可行的。设计程序的组件与设计组合它们的代码是相同类型的工作;同样,从源代码构建组件与从源代码构建组合程序是相同的操作。要使整个程序自由,只需继续工作,直到完成整个工作。

因此,我们坚持要求程序在所有层级上都必须是自由的。要使一个程序符合自由的标准,组成它的每一行源代码都必须是自由的,以便您可以仅使用自由源代码重建该程序。

相比之下,实物通常是由在不同类型的工厂中设计和构建的组件构建的。例如,计算机是由芯片制成的,但设计(或制造)芯片与设计(或制造)由芯片组成的计算机截然不同。

因此,我们需要区分数字产品(也许还有其他类型的产品)设计中的层级。连接芯片的电路是一个层级;每个芯片的设计是另一个层级。在 FPGA 中,原始单元的互连是一个层级,而原始单元本身是另一个层级。在理想的未来,我们希望设计在所有层级上都是自由的。在目前的情况下,仅仅使一个层级自由就是一个重大进步。

但是,如果一个层级的设计结合了自由和非自由的部分——例如,一个包含专有“软核”的“自由”HDL 电路——我们必须得出结论,该设计作为一个整体在该层级上是非自由的。对于非自由的“向导”或“宏”也是如此,如果它们指定芯片或芯片可编程连接部分的部分互连。自由的部分可能是迈向自由设计未来目标的一步,但要实现该目标需要替换非自由的部分。它们永远不能在自由世界中被接受。

自由硬件设计的许可和版权

您可以通过在自由许可下发布硬件设计来使其自由。我们建议使用 GNU 通用公共许可证,第 3 版或更高版本。我们设计 GPL 第 3 版时考虑了这种用途。

电路和非装饰性物体形状的版权保护并不像人们想象的那样广泛。这些设计的版权仅适用于设计绘制或书写的方式。版权保护是使用版权法的一种方式,因此其效力仅达到版权法所能达到的程度。

例如,电路作为拓扑结构不能受版权保护(因此不能被版权保护)。以 HDL 编写的电路定义可以受版权保护(因此可以被版权保护),但版权保护仅涵盖 HDL 代码的表达细节,而不包括它生成的电路拓扑结构。同样,电路的绘图或布局可以受版权保护,因此可以被版权保护,但这仅涵盖绘图或布局,而不涵盖电路拓扑结构。任何人都可以合法地以不同的外观方式绘制相同的电路拓扑结构,或编写不同的 HDL 定义来产生相同的电路。

版权不涵盖物理电路,因此当人们构建电路实例时,设计的许可证对其使用其构建的设备没有任何法律效力。

对于物体的绘图和 3D 打印机模型,版权不涵盖绘制相同纯功能物体形状的不同绘图。它也不涵盖由绘图制成的功能性实物。就版权而言,每个人都可以自由地制造和使用它们(这正是我们非常需要的自由)。在美国,版权不涵盖设计所描述的功能方面,但涵盖装饰方面。当一个物体具有装饰性和功能性时,您会陷入棘手的境地[2]

这在您的国家也可能属实,也可能不属实。在商业或批量生产物体之前,您应该咨询当地律师。版权不是您需要关心的唯一问题。您可能会因专利而受到攻击,这些专利很可能由与您使用的设计无关的实体持有,并且可能还存在其他法律问题。

请记住,版权法和专利法是完全不同的。认为它们有任何共同之处是错误的。这就是为什么术语“知识产权”是纯粹的混乱,应该被完全拒绝的原因。

通过存储库推广自由硬件设计

推动发布的硬件设计自由的最有效方法是通过发布它们的存储库中的规则。存储库运营商应将使用设计的人的自由置于设计者的偏好之上。这意味着要求有用的物体设计必须是自由的,作为发布它们的条件。

对于装饰性物体,该论点不适用,因此我们不必坚持要求它们必须是自由的。但是,我们应该坚持要求它们是可共享的。因此,处理装饰性物体模型和功能性物体模型的存储库应该为每个类别制定适当的许可政策。

对于数字设计,我建议存储库坚持使用 GNU GPL v3 或更高版本、Apache 2.0 或 CC0。对于功能性 3D 设计,存储库应要求设计者选择四种许可证之一:GNU GPL v3 或更高版本、Apache 2.0、CC BY-SA、CC BY 或 CC0。对于装饰性设计,它应该建议使用 GNU GPL v3 或更高版本、Apache 2.0、CC0 或任何 CC 许可证。

该代码仓库应要求所有设计都以源代码形式发布,而只能被专有设计程序使用的秘密格式的源代码实际上是不够的。对于 3D 模型,STL 格式不是更改设计的首选格式,因此不是源代码,所以该代码仓库不应接受它,除非它可能伴随真正的源代码。

没有理由为硬件设计的源代码选择单一格式,但最好勉强接受尚不能用自由软件处理的源格式。

自由硬件设计和保证

一般来说,自由硬件设计作者没有道德义务向那些制造该设计的人提供保证。这与销售实物硬件是不同的问题,实物硬件应该带有销售商和/或制造商的保证。

结论

我们已经拥有合适的许可证来使我们的硬件设计自由。我们需要的是作为一个社区认识到这是我们应该做的,并在我们自己制造物体时坚持使用自由设计。

脚注

  1. 这里使用的“数字硬件”包括除数字电路外还包含一些模拟电路和组件的硬件。
  2. 公共知识组织的一篇文章提供了关于此 复杂性的有用信息,针对美国而言,尽管它犯了一个常见的错误,即使用“知识产权”的虚假概念和“保护”的宣传术语。