这是针对英文原版页面的中文翻译。

自由硬件和自由硬件设计

自由软件的理念在多大程度上可以扩展到硬件?硬件设计也和软件一样需要道义上的自由吗?维护自由软件需要我们拒绝非自由设计的硬件吗?

定义

自由软件 关乎自由,而非价格;广义来讲,它意味着用户有自由使用软件、复制软件、分发软件,无论是否有更改。更准确地说,自由软件定义了 四个基本自由。为了强调 “free” 指的是自由,而非价格,我们通常与 “free.” 一起,同时使用法语和西班牙语的 “libre”

将同样的概念直接应用到硬件,自由硬件 指用户可以自由使用、自由复制、自由分发的硬件,无论是否有修改。不过,除了钥匙、DNA、塑料品的形状,并没有全能的硬件复制机器。大多数硬件是由工厂通过某种设计生产的。设计先于硬件。

因此,我们实际上需要的是 自由硬件设计。这就简单了:它意味着用户可以自由使用、自由复制和自由分发的设计(比如用来生产硬件的设计),无论是否有修改。这样的设计必须提供和自由软件一样的四个基本自由。

然后,我们可以把使用自由设计的硬件称为 “自由硬件”,不过为了避免混淆,叫它 “自由设计硬件” 更清楚。

第一次接触自由软件概念的人往往认为你可以免费获得软件拷贝。许多自由软件价格为零,因为你无需花费什么就可以下载一份,但那不是 “free” 所代表的意思。(实际上,象 Flash Player 和 Angry Birds 这样的间谍软件也不收费,但是他们不是自由软件。)一起使用 “libre” 和 “free” 有助于澄清这一点。

对硬件,结论趋于另一个方向;硬件需要花钱来生产,所以商业硬件不会免费(除非亏本或搭售),你用自己的 3D 打印机做的东西可以很便宜,但是由于有原材料,也不会没有成本。从道德上讲,自由问题远超价格问题,因为剥夺用户自由的设备比不花钱还糟糕。

我们可以使用 “libre hardware” 一词作为和 “使用自由设计制造的硬件” 一样的概念。

“开放硬件” 和 “开源硬件” 也和 “自由设计硬件” 作为一样的意思来使用,但是它们不重视自由的问题。它们来自 “开源软件” 这一名词,它的所指也差不多是自由软件,但是它 不讨论自由,也不表明对错。为了强调自由的重要,只要有关,我们都会论及自由;因为 “开放” 未能做到这一点,那么我们就不要用它来替代 “自由”。

硬件和软件

硬件和软件有根本的区别。一个程序,即使是可执行的形式,也是可以解释为电脑指令的一组数据。它就象其他数字作品一样,可以使用电脑复制和修改。程序的拷贝并没有限定的物理形式或化身。

相反,硬件是物理结构,其物理形态非常关键。虽然硬件设计可能用数据甚至程序代表,但设计不是硬件。CPU 的设计并不能执行程序。你不能使用键盘设计来打字,也不能使用显示器设计来显示图像。

另外,虽然你可以使用电脑来修改或复制硬件设计,但是电脑无法把设计变成物理实体,生产需要制造设备。

软件和硬件的边界

对于数字设备,哪里才是软件和硬件的边界?这要根据定义。软件是设备可以操作的一个部分,它可以用电脑复制和修改;硬件是设备可以操作的其他部分,不能用电脑复制和修改。这是正确区别软件和硬件的方法,因为它和实际操作相关。

软件和硬件还有一个灰色地带,其中包含可以升级或替换的固件,但是它不是指在产品完成之后还能升级或替换。或者也许产品完成之后还能升级或替换固件,但不是常规操作;或者制造商可以发布替换固件而你不行。从概念上讲,这个灰色地带相当狭小。从实践上看,它又非常重要,因为很多产品处在这个地带。实际上,现今的键盘、相机、磁盘和 U 盘一般都包含嵌入式的非自由程序,厂家可以更换这些程序。

我们可以认为内置固件和等价硬件只是实现方式的不同,前提是我们确信它们都不再会更改。硬件线路不会更改,这是物理特性。如果我们接受没人能更改一个设备的内部线路,那么接受一个没人能更改的内部程序也不会差到哪里去。当它们和硬件在操作层面无法分辨的时候,拒绝等价的内部软件程序没有什么意思。

不过,当软件实现不完全是内部的——有些公司可以更改其代码时,这种等价不再成立。例如,当你需要把固件复制到设备上才能让它工作时,或者固件包含在你安装的系统发布版本中时,那么它们不是 内部 软件实现;反之,它们是需要安装的非自由软件。厂商能改,而你不能改,这是不公正的。

为了使固件和硬件在道义上等价,固件必须是不能修改的。如果一个设备由于缺少固件无法运行,而有人提供了修改的方法,这又该如何看待?我们可以在实际操作中避免这种修改,不让修改发生。这个方法并不完美,但是还没有找到完美的方案;这是我们所知要使用这些设备而又拒绝其非自由软件的唯一方法。这比完全放弃要好得多。

但是我们不能两个都要。要让预先安装的固件无法修改,我们必须坚持它是硬件,即使有我们很想要的固件升级,我们也不安装。这就是说我们要拒绝所有的固件升级或修改。

有人说预安装的固件程序和可编程门阵列芯片(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年代的复制书籍。

复制和修改软件的自由在道义上非常重要,因为这些活动对使用软件的人来说是可行的:复制和修改软件的工具(电脑)就是你使用软件的工具。今天,用移动电脑的能力还不够复制和修改软件,但是人们总能找到能够复制和修改软件的电脑。

此外,即使你不是程序员,如果你知道怎么做,你也可以用电脑下载和运行其他人修改好的软件。实际上,普通人每天都在下载和运行软件。这正是自由软件给普通用户带来的不同。

这里有多少可以适用于硬件呢?不是每个使用数字硬件的人都知道如何修改线路设计或芯片设计,但是每个有电脑的人都可以有修改的工具。到此,硬件和软件非常象。但是后面还有很大的不同。

你无法在电脑上构建和运行线路设计或芯片设计。制造大型线路板需要大量艰苦工作,直到你有了第一块线路板。目前个人制造芯片还不太可能;只有量产的芯片才够便宜。和运行修改板软件不同,使用当今的硬件技术,用户还无法下载和运行一款已为广泛使用的硬件设计或其修改板。因此,四项自由不能给用户象控制软件一样对硬件设计的集体控制。这就是软件必须自由的理念现在还不能应用到硬件技术的原因。

在1983年,世界上还没有自由操作系统,但是道理很清楚——如果有一个自由操作系统,那么我们马上就可以使用并且获得软件自由。我们所缺少的就是第一个自由软件。

在2014年,如果我们有一个适用于电脑的自由芯片设计,那么由此设计量产的芯片也无法使我们在硬件领域获得和软件一样的自由。如果我们要从工厂购买一个硬件产品,那么对工厂的依赖带来的问题也和非自由设计大致一样。要让自由设计带给我们硬件自由,我们需要未来的制造技术。

我们可以展望未来,那时个人工厂可以生产芯片,我们的机器人可以焊接和组装变压器、开关、按键、显示器、风扇等。将来,我们都会制造自己的电脑(包括个人工厂和机器人),我们都会利用懂硬件的人对设计的修改。那么,拒绝非自由硬件和拒绝非自由软件就一样有道理了。

未来至少还需要很多年。与此同时,我们原则上不必拒绝非自由设计的硬件。

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

今天,我们虽然不必拒绝来自非自由设计的硬件,但是我们仍需要开发自由设计并尽可能使用它们。今天它们提供一些优势,将来它们可能是我们使用自由软件的唯一方法。

自由硬件设计有实用优势。多个厂商可以制造同一款硬件,这样我们就不必依赖于单一供应商。大家还可以组团制造一定量的硬件。有了线路图和 HDL 代码,我们就有可能研究这些设计,查找错误和恶意功能(人们已经知道 NSA 会制造一些带有恶意弱点的计算机硬件)。此外,自由设计可以作为计算机和其他复杂计算设备的组件,它们设计公开,所以复杂计算设备上的非自由部分就会变少。

在我们能够制造完全由自由设计构成的计算机之前,自由硬件设计可以用于计算机和网络的某些部件,也可以用于嵌入式设备。

如果自由硬件设计是我们避免非自由软件的唯一方法,那么即使在我们个人能够制造硬件之前,自由硬件设计也会变得非常重要。随着常见商业硬件变得越来越要征服用户,硬件变得越来越不兼容自由软件,因为其规格是秘密的,其代码是其他人而不是用户加密签署的。移动电话的调制解调器芯片甚至某些图形加速芯片已经开始要求制造商加密签署的固件。你电脑里的程序,别人有权更改,而你不行,这是对你施加不公正的权力;这些硬件是恶意硬件。就移动电话的调制解调器而言,其所有型号都是恶意硬件。

将来,自由设计的硬件可能是允许运行自由系统的唯一平台。让我们在此之前计划好必要的自由数字设计,让我们期待我们能够为所有用户制造出足够便宜的硬件。

如果你作硬件设计,那么请让你的设计自由。如果你使用硬件,那么请加入我们一起敦促硬件公司让它们的硬件设计自由。

设计的层级

软件有实现的层级;例如,一个软件包可能有库、命令和脚本。但是这些层级对软件自由并不构成重大区别,因为我们能让所有层级都变得自由。设计程序的组件和把组件组合成程序工作类似;同样,从源代码构建组件和构建整个程序也类似。要让整个程序自由只需按照步骤把整个工作进行下去就可以。

因此,我们坚持程序的所有层级都要自由。作为一个自由程序,其包含的每一条源代码都必须自由,这样我们就能从源代码构建整个程序。

与此对照,物理器件往往是由在不同工厂生产的部件组成。例如,计算机由芯片构成,而设计(和制造)芯片与设计(和制造)计算机非常不同。

因此,我们需要区别设计数字产品(也许还有其他产品)的不同 层级。连接芯片的电路是一个层级;每个芯片的设计又是一个层级。在 FPGA 中,单元的互联是一个层级,而单元本身又是一个层级。在理想的未来,我们想要每个层级的设计都自由。目前,只要让一个层级自由就是重大进步。

不过,如果一个层级的设计包括了自由设计和非自由的部件——例如,一个 “自由的” HDL 线路和专有的核心”——我们必须说整个设计层级是非自由的。同样适用于非自由的 “向导” 或 “宏”,如果它们描述的是芯片内联的部分或芯片的连接部分。这些自由部分是迈向自由设计终点的重要步骤,要达到终点必须要替换掉其中非自由的部分。自由世界不能接受妥协。

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

使用自由许可证发布硬件设计就使之自由。我们建议使用 GNU 通用公共许可证,版本 3 或以后版。我们设计 GPL 版本 3 时考虑了这个用途。

线路和非装饰性形状的 Copyleft 许可证并不能象我们假设的那样传播。这些设计的版权只能适用于这些设计的描述或描画。Copyleft 许可证也是版权法的应用,所以它只能应用于版权适用的范围。

举个例子,线路板是一种拓扑图,它不能申请版权(因而也不能 copylefted)。线路图的 HDL 语言可以申请版权(因而可以 copylefted),但是也只能涉及 HDL 代码的表达细节,不能涉及由此产生的线路拓扑结构。同样的,线路板的图稿或布局可以申请版权,所以它也可以是 copylefted,但是这些只涉及图稿或布局,不能涉及线路板的拓扑结构。任何人都可以把线路板的拓扑结构画成不同的图稿,或者把同一个线路写成不同的 HDL 定义。

版权不包括物理线路板,所以当人们制造线路板实体时,设计的许可证对这些实体没有法律效力。

对物体的图稿、3D 打印模型,版权也不能限制同一功能物体的不同图稿。它也不能限制从图稿制造具体的功能物体。对版权来说,每个人都可以自由制造和使用这些功能物体(我们很需要这种自由)。在美国,版权也不涉及设计描述的功能,但是它 包括装饰性特征。当一个物体既有装饰特征又有功能时,你的处境就比较微妙[2]

这些情形在你的国家可能适用,也可能不适用。在商业量产或大批量生产硬件之前,你应该咨询当地律师。版权不是我们唯一担心的问题。你可能会受到专利攻击,专利很可能被某些对此设计毫无瓜葛的实体控制,这里也可能有其他法律问题。

请注意版权和专利完全不同。试图假定二者的共同点是错误的做法。因此 “知识产权” 这一术语只能造成混淆,它应该被完全废弃。

在项目库里提倡自由硬件设计

让已公开的自由硬件设计变得自由的最有效的方法是通过发布该设计的项目库设定规则。项目库的操作员应该把使用设计的用户利益放在设计者本身的利益之上。这就要求有用的设计应当自由,并作为发布规则。

对于装饰性物体,这个论点不适用,所以我们不坚持它们也必须自由。不过,我们需要坚持装饰性物体应该可共享。这样,一个管理装饰物体和功能部件的项目库就应该对不同类别的设计使用不同的许可证。

对于数字设计,我建议项目库坚持使用 GNU GPL v3-or-later、Apache 2.0 或 CC0 许可证。对功能性 3D 设计,项目库应该请求设计作者选择以下四个许可证之一:GNU GPL v3-or-later、Apache 2.0、CC BY-SA、CC BY 或 CC0。对于装饰性设计,项目库应该建议使用 GNU GPL v3-or-later、Apache 2.0、CC0 或其他 CC 许可证。

项目库应该要求所有设计公开源代码,而且这些代码不应当是只能用专有软件打开的秘密格式。对 3D 模型,STL 格式 就不是一个我们推荐的交换格式,所以它不算源代码,而项目库不要接收这种格式,除非它还有其他真正的源代码。

虽然我们没有理由指定单一的硬件设计源代码格式,但是目前自由软件还不能处理的格式最好不要放进来。

自由硬件设计和质保

一般来说,自由硬件设计的作者没有道德义务对使用这些设计进行生产提供质保。这和销售硬件不同,销售硬件的销售商或制造商理应提供质保。

结论

我们已经有了适用于自由硬件设计的许可证。我们需要一个社区,在制造硬件的时候,社区公民知道如何去做并坚持自由设计。

脚注

  1. 此处,“数字硬件” 包括带有模拟线路和数字元器件的硬件。
  2. 公共知识(Public Knowledge)的一篇文章对此问题在美国的 复杂性 给出了有用的信息,虽然它也象其他人一样错误地使用了 “知识产权” 这一伪概念和 “保护 这一鼓动词汇。”