塞巴斯蒂安 发表于 2022-2-15 14:50:27

开源硬件(自由硬件):开源精神领袖RMS(理查德·斯托曼)怎么说?

本帖最后由 塞巴斯蒂安 于 2022-2-15 14:50 编辑

最近,Libreplanet邮件列表(LibrePlanet)里“自由软件基金会持续伤害自由硬件(FSF continuously harms Free Hardware)”讨论的热火朝天,开源软件精神领袖,自由软件基金会创始人RMS(理查德·斯托曼)和众人展开激烈讨论。

讨论中RMS多次提到,他曾经发表过对于自由硬件的看法:原文:Free Hardware and Free Hardware Designs https://www.gnu.org/philosophy/free-hardware-designs.html 。这篇文章大部分内容在2015年3月发表于连线杂志,但中文互联网貌似没看到有翻译。本文是机翻+人工整理和替换+译者注释(无法准确替换和翻译的地方)。欢迎交流和支出本文翻译和理解的不当之处。

注:本文提到的“自由”,是指原文中free这个词,不是“免费”的意思,而是“自由”的意思。但因为“开源”这个词的深入人心,一般读者可以把文中的“自由”认为是“开源”。但理查德·斯托曼文章也解释了为什么不要把“自由(Libre、Free)”替换为其他词语(比如“开源”)。

正文:

一、自由硬件和自由硬件设计

理查德·斯托曼 https://www.stallman.org/

自由软件的理念在多大程度上可以延伸到硬件上?让我们的硬件设计自由,就像让我们的软件自由一样,这是一种道德义务吗?维护我们的自由是否需要拒绝由非自由设计制成的硬件?

定义

自由(free)软件是自由(free)的问题,而不是价格free(免费);从广义上讲,这意味着用户可以自由地使用软件以及复制和重新分发软件,无论用户是否更改软件。更准确地说,该定义是根据四种基本自由(https://www.gnu.org/philosophy/free-sw.html )制定的。为了强调“free”是指自由,而不是价格free(免费),我们经常将法语或西班牙语单词“libre”与“free”一起使用。

将相同的概念直接应用于硬件,自由硬件意味着用户可以自由使用、复制和重新分发的硬件,无论用户是否更改硬件。然而还没有可以复制硬件的复印机 -- 少数硬件除外:钥匙、DNA 和塑料物体。大多数硬件都是先设计再制造而成的。设计先于硬件(制造)。

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

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

人们第一次遇到自由软件时,通常认为可以免费获得一份副本。的确,许多自由程序都以零价格提供,因为下载无需花费任何费用,但这并不是“自由”在这里的意思。(事实上,一些间谍软件程序,例如Flash Player 和 Angry Birds https://www.gnu.org/proprietary/proprietary-surveillance.html 是免费的,尽管它们不是自由的。)同时说“Libre”和“Free”有助于澄清这一点。(译者注释:把Free替换为Libre,更不容易误解,因为Free除了自由还有免费的意思,而Libre主要就是自由的意思)

对于硬件,这种混乱往往会朝着另一个方向发展。生产硬件是需要花钱的,所以商业硬件不会是免费的(除非它故意亏损或者作为赠品),但这并不妨碍商业硬件是基于自由设计而生产的。您在自己的 3D 打印机中制作的东西可能非常便宜,但并非完全免费,因为原材料是有一定成本的。在道德方面,自由问题完全胜过免费问题,我们应该唾弃那些剥夺用户自由的设备。

这里,我们使用术语“自由(Libre)硬件”作为“基于自由设计的硬件”的同义词。

一些人使用“开放(open)硬件”和“开源(open-source)硬件”替代“自由(Libre)硬件”,这些术语的问题是将自由(Libre)过分轻描淡写了。它们源自“开源软件”一词,其实它大意上指的就是自由软件,但过分轻描淡写了自由问题和对错问题 https://www.gnu.org/philosophy/open-source-misses-the-point.html 。为了强调自由的重要性,我们强调使用自由这个词;由于“开放”/“开源”无法做到强调自由的重要性,我们不用他们来代替“自由”这个词。

二、硬件和软件

硬件和软件本质上是不同的。程序,即使是编译后的可执行形式,也是可以解释为一种数据集合,计算机把这些数据当做指令。像任何其他数字作品一样,程序可以使用计算机进行复制和更改。程序的副本没有首选的物理形态或实施例(译者注释:程序看不见摸不着)。

相比之下,硬件是一种物理结构,其物理性至关重要。虽然硬件的设计可以表示为数据,在某些情况下甚至可以表示为程序,但硬件设计本身并不是硬件实体。一个CPU 的设计本身不能执行程序(译者注释:只有这个设计被制造成硬件之后才能执行程序)。如果你尝试在一个键盘的设计上打字,或在一个屏幕的设计上显示像素,估计你不会成功。(译者注释:这里引入了第一个重要的区分:我们应该把硬件的设计和实际硬件区分开来。硬件的设计,可能是一堆图纸、BOM、工艺、装配说明等文档,甚至可以是Verilog/VHDL这种芯片设计代码,芯片版图等,但这些并不是硬件实体,因为还没生产出来)

此外,虽然您可以使用计算机修改或复制硬件的设计,但计算机无法将硬件设计转换为它所描述的物理结构。需要制造过程才能产生物理结构。

三、硬件和软件的边界

在数字设备中,硬件和软件之间的界限是什么?我们遵循以下定义:软件是计算机支持的操作和功能当中可以被复制和更改的部分;而硬件则是不可能被更改的那部分。这是区分的正确方法,因为它关系到实践当中的结果。

硬件和软件之间有一个灰色区域,其中包含可以升级或更换的固件,但并不意味着产品售出后就一定会被升级或更换(译者注释:原文是 but is not meant ever to be upgraded or replaced once the product is sold)。从概念上讲,这个灰色区域相当狭窄。但在实践中,这很重要,因为许多产品都包含固件。我们可以将该固件视为硬件的延伸(译者注释:即将硬件概念拉伸,可以包含固件。原文是 We can treat that firmware as hardware with a small stretch.)。

有人说预装固件程序和现场可编程门阵列(FPGA)芯片“模糊了硬件和软件之间的边界”,但我认为这是对事实的误解。用户使用过程中可以安装和升级的固件是软件;在设备内部交付且无法更改的固件本质上也是软件,但我们可以将其视为电路(译者注释:因为这种固件不可更改,因此可以视作硬件的一部分,也就是作者所用的电路一词)。对于 FPGA,FPGA 本身是硬件,但加载到 FPGA 中的门模式是一种固件。(译者注释:门模式即配置文件--描述FPGA内部单元如何配置和连接)

在 FPGA 上运行自由配置文件可能是一种有用的方法,可用于在电路级实现数字设备的自由。然而,为了让 FPGA 在自由世界中可用,我们需要自由的开发工具。障碍在于加载到 FPGA 中的配置文件的格式是保密的(译者注释:比如Xilinx、Intel/Altera和Lattice的FPGA配置文件格式各不相同,且是属于各公司的秘密)。多年来,人们都是依赖非自由(专有的、厂家的)工具来生成这些 FPGA 的配置文件。

2015 年后,(译者注释:开源界黑客们终于努力开发出来了)就有了针对FPGA的自由工具,可以生成对 Lattice iCE40 (一种典型的FPGA型号 https://web.archive.org/web/2021 ... ifford.at/icestorm/ )的配置文件,硬件描述语言 (HDL) 可以作为工具的输入。也可以使用自由工具编译 C 程序并在 Xilinx Spartan 6 LX9 FPGA 上运行它们 https://github.com/Wolfgang-Spraul/fpgatools ,但这种针对C语言的编译工具不支持 HDL 输入。我们建议您拒绝使用其他型号FPGA,除非它们也被自由工具支持。(译者注释:站着建议不腰疼 -- 这就是领袖气质)

至于 HDL (硬件描述语言)代码本身,当它在仿真器上运行或加载到 FPGA 中时可以当做软件,当它目标是生成不可更改的芯片或电路板时,可以作为硬件设计。

四、3D 打印机的道德问题

从道德上讲,软件必须是自由的 https://www.gnu.org/philosophy/f ... more-important.html ;非自由的软件是不公正的(injustice)。我们应该对硬件设计采取同样的观点吗?

在 3D 打印(或更一般地说,任何类型的个人制造)领域,我们当然应该坚持这一点。制作有用的实体(即功能性而非装饰性)的3D打印源文件必须是自由的,因为它们是为实际使用而制作的作品。用户有权控制这些作品,就像他们应该控制他们使用的软件一样。分发非自由的硬件设计与分发非自由软件一样错误。

请选择仅使用自由软件的 3D 打印机;自由软件基金会认可这样的打印机 https://ryf.fsf.org/ 。一些 3D 打印机基于自由硬件设计制成,但Makerbot 的3D打印机是非自由的 https://www.cnet.com/news/pullin ... ers-some-adherents/ 。

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

非自由数字硬件设计( https://www.gnu.org/philosophy/free-hardware-designs.html#fn1 )是不公正(injustice)的吗?为了我们的自由,我们必须拒绝所有非自由数字硬件,就像我们必须拒绝非自由软件一样吗?

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

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

复制和更改软件的自由是道德要求,因为复制和更改软件对于用户来说是可行的:那些运行软件的设备(计算机)也足以帮助你复制和更改软件。今天的移动计算机太弱了(译者注释:2015年或许如此),无法做到这一点,但是任何人都可以找到一台计算机,来轻易的复制和更改软件。

此外,即使您不是程序员,一台计算机也足以下载和运行其他人(有能力的人)更改的软件。事实上,普通人(非程序员)每天都会下载软件并运行它。这就是为什么自由软件对普通人(非程序员)产生真正的影响的原因。

上面这些关于软件的情况,其中有多少适用于硬件?不是每个使用数字硬件的人都知道如何改变电路设计或芯片设计(译者注释:就算知道,但那个数字硬件本身一般不能帮你更改电路和芯片,你需要额外的许多设备),但任何拥有 PC 的人都可以用这台PC来更改软件(译者注释:也就是运行软件的PC,这一台设备就足够用于更改软件了)。到目前为止,硬件与软件概念上有不少相似性,但接下来是最大的不同。

您无法在计算机中构建和运行电路设计或芯片设计(译者注释:一台计算机,它自己无法真正生产制造硬件)。如果你做过电路板就知道,构建一个大电路板是一项艰苦的工作(译者注释:每个人都有屁股,都有擅长的和不擅长的,RMS看起来有点对硬件害怕)。对于今天的个人来说,制造芯片是不可行的(译者注释:基本上是这样的,但大量的人正在努力改变这一现状,而且不是完全没有希望);只有大规模生产才能使它们足够便宜。使用当今的硬件技术,用户无法下载和运行数字硬件设计的修改版本(译者注释:这里的运行即修改过的新硬件实体),但他们却可以运行程序的修改版本。因此,这四项自由(RMS提出的自由软件遵循的四项自由)并没有赋予用户对硬件设计的控制权,但这四项自由却赋予了用户对程序的控制权。这就是为什么所有软件都必须自由的理由,但这个理由并不适用于当今的硬件技术。

1983 年,那时还没有自由的操作系统,但如果当时有一个,我们可以立即使用它并获得软件自由。自由的操作系统也就是一份代码而已(译者注释:言外之意,硬件可就不只是一份代码这么简单了)

2014 年,如果有一个PC 的CPU芯片的自由设计,但是基于该自由设计制造的量产芯片并不会带给我们像自由软件那样一样的自由度。如果我们要购买工厂批量生产的硬件,这种对工厂的依赖会就和其他大多数非自由硬件类似(译者注释:一样的不自由)。为了让自由设计给我们自由的硬件,我们需要未来的制造技术。

我们可以设想一个未来,我们每个人都可以制造芯片,我们的机器人可以将芯片与变压器、开关、按键、显示器、风扇等组装和焊接在一起。在那个未来,我们每个人都可以制造自己的计算机(以及计算机生产线和组装机器人),每个人都可以轻易的复制和生产那些他人对硬件所做的修改设计。只有那时,拒绝非自由软件的理由才适用于拒绝非自由硬件。

至少,这个未来还需要几年的时间。也就是说,现在原则上没有必要拒绝非自由硬件。

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

尽管今天我们不需要拒绝非自由数字硬件,但我们需要从一些小的自由硬件模块做起并在可行时使用它们。它们在今天已经可以带来好处,并且在未来可能自由硬件会拒绝运行非自由软件。

自由硬件设计可以带来实际的好处。多家公司可以制造同一个自由硬件,从而减少对单个供应商的依赖。团体可以安排大批量制造(译者注释:原文是 Groups can arrange to fabricate them in quantity)。开源的电路图或 HDL 代码可以供大家查找其中的错误或恶意功能(众所周知,NSA 在某些计算机硬件中故意安插了某些加密弱点/后门)。此外,小的自由硬件模块可以作为设计计算机和其他复杂设备的部件,它们的规格将是公开的,因此其中用来对付我们的部件会更少(译者注释:比如NSA安插在硬件里的后门?)。

在我们能够以自由硬件方式制造整台计算机之前,一些小的自由硬件模块可能会首先成为计算机、网络和嵌入式系统里的某些部件。

如果自由硬件成为避免非自由软件的唯一方法(译者注释:例如自由硬件拒绝运行非自由软件),那么即使在每个人都能自己制造硬件之前,自由硬件设计也是非常重要的。普通商业硬件越来越多地被设计为征服用户(译者注释:而不是设计为可以被用户控制),变得越来越不兼容自由软件,这些硬件具有不公开的规范,并且运行于这些硬件上的代码需要由用户以外的人签名。手机调制解调器芯片甚至一些图形加速器已经要求制造商对固件进行签名。计算机中的那些你不能改,只能由指定的人改的程序,都是对你施加不公正权力的工具;这样的硬件是恶意硬件。就手机调制解调器芯片而言,现在可用的所有型号都是恶意的。

有一天,自由数字硬件可能是唯一允许运行自由操作系统的平台。在那之前,我们的目标是拥有必要的自由数字设计,并希望找到办法为所有用户制造足够便宜的硬件。

如果您设计硬件,请让您的设计自由。如果您使用硬件,请加入敦促和施压公司,让硬件设计自由。(译者注释:站着号召不腰疼 -- 领袖只需要考虑终极目标,剩下的让追随者来完成)

六、设计水平

软件的实现由多个层次构成;例如,一个软件包括库、命令和脚本。但是这些层次不会对软件自由产生重大影响,因为每个层次都可以是自由的。设计每个层次的代码与设计最终软件的代码是同一种工作。同样,从源代码构建各个层次与从源代码构建最终软件的操作相同。只需要一直工作,直到我们完成所有层次的自由,就可以让整个事情变得自由。

因此,我们坚持软件的所有层次都必须是自由的。要使软件符合自由的定义,构成它的源代码的每一行都必须是自由的,这样您就可以仅使用自由源代码重新构建程序。

相比之下,物理实体通常由不同物理实体组件构成,而这些组件又在不同的工厂中设计和制造。例如,计算机的重要组件是芯片,但设计和制造芯片与利用芯片设计和制造计算机有很大不同。

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

但是,如果某个层次的设计结合了自由和非自由部分——例如,包含非自由(专有)“软核”的“自由”HDL电路代码——我们必须得出结论,该设计在该层次是非自由的。类似的情况也适用于某些“向导”或“宏”,如果它们指定了芯片内部的一部分互联或可编程连接(译者注释:如果这些向导或宏里包含了非自由的专有电路,那么它就是非自由的)。部分组件的自由可能是朝着未来全自由设计目标迈出的一步,在实现未来目标的过程中需要更换那些非自由组件。这些非自由的组件在自由世界中永远不会被接纳。

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

您可以通过以下方式使得硬件自由:在自由许可下发布硬件设计。我们建议使用 GNU 通用公共许可证,版本 3 或更高版本。我们设计 GPL 版本 3 就是为了这种用途。

电路和非装饰性物体的 Copyleft 并没有人们想象的那么远。这些设计的版权仅适用于设计的绘制或书写方式。Copyleft 是一种使用版权法的方式,因此它的效力在版权法内,和版权发挥作用的范围相同。(译者注释:只有有版权,或者版权保护的东西,才能copyleft)

例如,电路的拓扑并不受版权保护(因此也就不存在copyleft的问题)。HDL代码可以有版权(因此也可以 copyleft),但 copyleft 仅涵盖 HDL 代码表达的细节,而不涵盖它生成的电路拓扑。同样,电路的绘图或布局可以受版权保护,因此也可以copyleft,但这仅涵盖绘图或布局,不包括它代表的拓扑。对于同一个电路拓扑,任何人都可以合法地以不同的方式绘制它的实现,或者编写不同的 HDL 代码来生成这个电路拓扑。

版权不涵盖电路被制造出来后的物理实体,因此当人们制造电路实体时,电路设计所采用的许可(译者注释:协议、license)对电路实体没有法律效力。(译者注释:那就是任何人都有权利照着有版权的电路图来制造电路?的确,从版权的角度是这样,但后面作者提到了专利权可能会阻止你)

对于物理实体的临摹、描绘和 3D 打印模型,版权不保护相同物理实体的不同绘图(译者注释:我理解,比如同一个桌子,你先照着它画了一张图,我之后也照着它画了一张图,你不能说我侵权了。再次强调,这是版权角度,最后会提到专利权问题)。版权也不保护由图纸制成的功能性物理实体(译者注释:我理解版权只保护图纸本身,并不保护照着图纸做出来的物体。再次强调,这仅仅是从版权角度来说,照着图纸做实物并不侵犯版权,但这要和后面将会提到的专利权区分开来,不侵犯版权不意味着不侵犯专利权,如果有)。就版权而言,每个人都可以自由地制作和使用它们(这是我们非常需要的自由)(译者注释:即还是在强调版权保护的是图纸本身,而不是按照图纸制作的实体。也就是你复制图纸或者临摹图纸,可能会侵权,但你有权利照着图纸做出东西。再次重申,这是版权角度,后面会说专利权的事情)。在美国,版权不涵盖设计所描述的功能方面,但涵盖了装饰方面 https://www.copyright.gov/title17/92chap13.html#1301 。当一件物品同时具有装饰性和功能性时,你就会陷入棘手的境地 https://www.gnu.org/philosophy/free-hardware-designs.html#fn2 。

所有这些在您的国家可能也是如此,也可能不是。在商业化或大量生产产品之前,您应该咨询当地律师。版权不是您需要关注的唯一问题。您可能会受到使用专利的攻击,这些专利很可能由与您使用的设计无关的公司持有(译者注释:比如专利流氓?),并且可能还有其他法律问题。

请记住,版权法和专利法是完全不同的。不要假设他们有任何共同点。这就是为什么“知识产权”( https://www.gnu.org/philosophy/not-ipr.html )一词纯属混淆,应该完全弃用。

八、通过仓库(译者注释:例如git repository代码库)推广自由硬件设计

推动自由硬件设计的最有效方法是制定一定的仓库规则来发布它们。仓库运营者应该确保硬件用户的的自由(译者注释:四种自由)高于硬件设计人员对许可协议的偏好。这意味着在此仓库中发布硬件设计的条件是,这些设计必须是自由的。(译者注释:这里只针对那些可操作、有实际用途的功能性硬件,与下文装饰性硬件区分)

对于装饰性硬件,该论点(译者注释:即硬件发布必须自由)不适用,因此我们不必坚持它们必须是自由的。但是,我们应该坚持它们是可共享的(sharable)(译者注释:类似于分享照片?文字?)。因此,发布硬件设计的仓库应该对装饰性硬件和功能性硬件制定不同的许可协议。

对于数字硬件设计,我建议仓库使用 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 格式( https://en.wikipedia.org/wiki/STL_%28file_format%29 )不便于设计更改,因此不是首选格式,不属于源代码,因此仓库不应接受它,除非附带真实的源代码。

没有理由统一硬件设计的源代码格式,也许有些源代码现在还不能用自由软件处理(译者注释:比如针对Nvidia显卡的CUDA源代码目前只能用非自由的Nvidia CUDA编译器处理),目前也勉强可以接受。

九、自由硬件设计的保修

一般来说,自由硬件设计的作者没有义务向按此设计制造真实硬件的人提供保证。这与物理硬件的销售不同,后者应附带卖方和/或制造商的保修。

十、结论

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

十一、脚注

如本文所用,“数字硬件”也包括那些使用了一些辅助性模拟电路和元器件的数字硬件。
Public Knowledge 的一篇文章为美国提供了有关这种复杂性( https://web.archive.org/web/2021 ... D_Printed_Stuff.pdf )的有用信息,尽管它陷入了使用虚假的“知识产权”概念和宣传术语“保护”的常见错误 https://www.gnu.org/philosophy/words-to-avoid.html#Protection 。

本文大部分内容于 2015 年 3 月在《连线》杂志上分两部分发表。
https://www.risc-v1.com/data/attachment/forum/202109/15/190710crf7p2vqwtpq2p2c.jpg完

linghuch 发表于 2022-2-23 11:31:42

学习了。谢谢楼主分享!
页: [1]
查看完整版本: 开源硬件(自由硬件):开源精神领袖RMS(理查德·斯托曼)怎么说?