专有装置驱动程式

僅以二進位程式碼發佈的封閉原始碼裝置驅動程式

专有装置驱动程式(英语:Proprietary device driver)是指仅以二进制代码发布的闭源装置驱动程式。在自由及开放原始码的语境中,专有装置驱动程式称为blob二进制 blob(英语:binary blob)。尽管 blob 可以作为十六进制数组包含在原始码中,就像一些在 Linux 内核中的 blob 一样,该术语通常是指加载到开源操作系统内核中的专有内核模块。这个术语有时也适用于在外部运行的代码内核,例如系统固件映像、微代码更新或用户空间程序。[1][2][3][4][5][6]术语 blob 最初指二进制大型物件,即在数据库管理系统中将二进制资料存储为一个单一个体的集合。

电脑硬件供应商为其产品提供完整的技术文档时,操作系统开发人员能够编写硬件装置驱动程式以包含在操作系统内核中。但是,一些供应商,例如英伟达 ,不为其某些产品提供完整的文档,而是仅提供二进制格式的驱动程式。这种做法最常见于被加速的图形处理器驱动程式、无线网卡和硬件 RAID 控制器。[7]值得注意的是,二进制 blob 对于非无线网络接口控制器非常少见,它们几乎总是可以通过开箱即用的标准实用程序(如ifconfig)进行配置。[8][9]

开源操作系统

一些自由软件基金会批准的项目力求提供完全自由的操作系统。因此,在硬件文档或装置驱动程式和所有适用固件的原始码不可用时,将删除所有相关二进制 blob;此类项目包括来自FSFLA 、ParabolaDevuanTrisquel和LibreCMC的Linux-libre内核打包。[10]然而,绝大多数开源项目都区分了仅二进制装置驱动程式(blob)和仅二进制固件(固件不被视作 blob [11] ),允许某些专有固件作为其内核的一部分自由分发,并且,对于一些核心贡献者的不同意见,还支持使用外部分发的专有装置驱动程式,为此类专有驱动程式和用户空间提供内部兼容接口组件与他们的系统一起工作。[12][13]遵循此政策的项目包括Linux内核本身、NetBSDFreeBSDDragonFly BSD和大多数Linux发行版[14]其中一些项目提供了在没有专有固件的情况下安装系统的选项,因此非自由原始码的微代码是可选的。[15]

OpenBSD项目有一个值得注意的政策,不仅不接受任何二进制装置驱动程式进入其原始码树,而且官方也不在其平台上支持任何第三方专有装置驱动程式组件,[16]:38...因为这不仅导致了无法检测或无法修复的安全漏洞的可能性,而且还导致了对其软件的开放性和自由度的侵犯。[17]自由软件基金会正在积极反对二进制 blob。[18]自由软件基金会还认为 OpenBSD 的政策措辞令人困惑,因为 BSD 社区中的“blob”仅指其认为的非自由驱动程式,不适用于专有固件和无原始码的微代码。[19]:BSDDebian项目包括来自Linux 内核的自由和非自由二进制固件,并根据 Debian 社会契约清楚地标记和分隔非自由软件包[20]。从 Debian 6.0 开始,这些 blob 已被删除。[19]:Debian

对于 OpenBSD,项目负责人西奥·德若特捍卫了只为微代码固件请求分发权的政策。“一旦它们被分发……至少装置可以工作”,暗示他的小项目的成员可以用许多晶片组的汇编语言自己编写免费固件,他恳求“不要让我们承担更多任务”。尽管如此,他还是偏爱无需固件即可运行的晶片组。[17]

 
专有的 Linux 图形驱动程式,libGL-fglrx-glx将与Mesa 3D共享相同的DRM基础设施。由于没有稳定的内核ABI ,AMD 不得不不断调整 Catalyst 使用的二进制 blob 。

Linux内核开发社区中,林纳斯·托瓦兹就纯二进制模块的问题发表了强有力的声明,声称:“我什至拒绝考虑将我的手绑在一些纯二进制模块上……我希望人们知道当他们使用纯二进制模块时,这是他们的问题。”[21]2008 年,176位 Linux 内核开发人员签署了一份《关于 Linux 内核模块的立场声明》。

Linux 内核维护者葛雷格·克罗哈曼表示,为GNU通用公共许可证之下授权的Linux 内核重新分发封闭原始码模块是非法的。[22]

但是,Linux 内核包含各种装置驱动程式所需的闭源固件。[23][19]Linux-libre是 Linux 内核的一个版本,它试图删除所有二进制 blob,包括无源微码。其维护者Alexandre Oliva在 2011 年写道:“自 1996 年以来,Linux 一直不是自由软件,当时Torvalds 先生接受了他自 1991 年以来发布的 Linux 发行版中的第一批非自由软件。这些年来,虽然这个内核增长了 14 倍,但 Linux 驱动程式所需的非自由固件数量增长了 83 倍,令人震惊。[24] 

问题

二进制 blob 存在问题的原因有很多,[11]主要有四:

第一,用户无法准确知道它们的行为,且无法通过原始码审计发现错误;错误通常只有在系统开始出现意外行为时才能通过艰苦的调查来诊断。此类未检测到的错误也可能默默地将用户和系统暴露于安全隐患之中。也因此无法检查驱动程式是否符合其目的,即使发现错误也没有简单的方法来修复它。

其次,由于原始码不可用,驱动程式不能被用户轻易改进,不能移植到最初不支持的架构,也不能适应硬件的轻微改变或在具有更改了 API 和架构的更新版本上运作。

第三,使用该软件会迫使用户相信供应商或第三方不会将后门、间谍软件或恶意代码放入 blob。同样,硬件供应商可以决定不支持给定的操作系统并随时放弃驱动程式维护,或者,如果公司倒闭,驱动程式将完全不受支持。

最后,二进制 blob 可以被视为在相信自由软件理想、拒绝专有软件的社区部分和出于纯技术原因认为开源是可取的部分之间划清界限,“只要他们工作”,社群通常缺乏对二进制 blob 的强烈反对。这种碎片化,以及越来越多的专有组件被接受到 Linux 中,被视为削弱了社区抵制制造商越来越多地拒绝为其二进制文件提供文档的趋势的能力。

通过包装使用

包装器是允许一个操作系统使用为另一个操作系统编写的二进制专有装置驱动程式的软件。包装器的例子有Linux的NdisWrapper和FreeBSDNetBSD的Project Evil 。这些包装器允许这些操作系统通过实现微软网络驱动程式接口规范接口来使用为Microsoft Windows编写的网络驱动程式。

另一个例子是提供兼容层,以便可以使用外部实用程序来为硬件提供服务。示例包括 FreeBSD 中的一些RAID 控制器驱动程式,其中系统管理员必须在FreeBSD中启用Linux 兼容层,并直接从硬件制造商独立采购特定于 Linux 的二进制 blob,以便监控和服务硬件。[12][13][25]大约在 2005 年,这种情况促使OpenBSD创建并推广其bio(4) 、 bioctl和传感器驱动概念,作为RAID监控的替代解决方案。[26][16]这两个概念随后都进入了NetBSD

装置固件

固件是一些硬件附带的板载微控制器所需的软件,通常不被认为是二进制 blob。 [27][19]:BSD[11]:.... .在许多装置中,固件存储在非易失性存储器中,但为了降低成本和简化升级,一些装置仅包含静态随机存取存储器 ,并且每次连接时都需要主机操作系统上传固件(尤其是USB装置)。尽管固件因此存在于操作系统驱动程式中,但它只是复制到装置而不由 CPU 执行,即使固件已经存储在装置中,也消除了对额外安全漏洞(例如DMA攻击)的担忧。OpenBSD 项目接受二进制固件或微码映像,如果许可证允许,将重新分发这些映像;[27] [28]如果供应商不允许免费和无条件重新分发,则可以在Ports Tree中提供有关获取这些映像的脚本(这会阻止某些受阻的无线装置(例如,英特尔无线)在初始安装系统的过程中安装)。[29]

BIOS 和 UEFI

 
SeaBIOS是 BIOS 的开源实现,在 Lenovo ThinkPad X60 上作为 coreboot 有效负载运行

BIOS作为引导加载程序并支持传统实模式应用程式,是许多IBM PC兼容电脑的关键组件。 BIOS 可以是一个安全后门[30] [31] 在 1990 年代后期,可扩展固件接口的工作开始了,目标是将旧版 BIOS 迁移到具有模块化驱动程式模型的现代接口。EFI 是封闭原始码的,并最终被许多行业领先的硬件制造商采用为统一可扩展固件接口。EFI 开发工具包(英语:EFI Development Kit)旨在协助开发 EFI 固件。[32]

同样在 1990 年代后期,coreboot项目开始从头开始创建传统 BIOS 的开源替代方案。[32]Coreboot 开发者社区围绕斯特凡·赖诺组织,由具有提交权限的固件开发者领导。[33]尽管闭源二进制固件一直是x86架构的核心,但 coreboot 仅包含为用户提供基本硬件支持所必需的少数专有二进制文件。[34]libreboot是 BIOS 和 UEFI 的完全开源替代方案,它由自由软件基金会推广。[35]

参见

参考

  1. ^ Michael Larabel. Coreboot: Replacing Intel's Binary Video BIOS Blob. Phoronix. 2012-08-06 [2015-06-23]. (原始内容存档于2022-03-30). 
  2. ^ Chris Hoffmann. How Intel and PC makers prevent you from modifying your laptop's firmware. pcworld.com. 2015-02-13 [2015-06-23]. (原始内容存档于2021-08-04). 
  3. ^ BIOS Freedom Status. puri.sm. 2014-11-12 [2015-06-23]. (原始内容存档于2022-09-01). 
  4. ^ Michael Larabel. Raspberry Pi GPU Driver Turns Out To Be Crap. Phoronix. 2012-10-24 [2015-06-23]. (原始内容存档于2022-06-19). 
  5. ^ Jake Edge. Chromium suddenly starts downloading a binary blob. LWN.net. 2015-06-17 [2015-06-23]. (原始内容存档于2022-03-21). 
  6. ^ 3.9: "Blob!". OpenBSD Release Songs. OpenBSD. 2006-05-01 [2022-03-20]. (原始内容存档于2013-07-28). Blobs are vendor-compiled binary drivers without any source code. 
  7. ^ Debian packages built from the source package 'firmware-nonfree' - Binary firmware for various drivers in the Linux kernel. 2010 [2010-03-25]. (原始内容存档于2022-10-04). 
  8. ^ Constantine A. Murenin. Почему так важно иметь документацию по программированию железа. Linux.org.ru. 2006-12-10 [2022-03-20]. (原始内容存档于2022-07-30) (俄语). 
  9. ^ 存档副本. [2022-03-20]. 原始内容存档于2007-01-09. 
  10. ^ List of Free GNU/Linux Distributions. GNU Project. Free Software Foundation. [2022-03-20]. (原始内容存档于2020-07-06). 
  11. ^ 11.0 11.1 11.2 Andrews, Jeremy. Interview with Jonathan Gray and Damien Bergamini. kerneltrap.org. 2006-04-19 [2008-01-06]. (原始内容存档于2007-12-11). 
  12. ^ 12.0 12.1 Scott Long. aac(4) — Adaptec AdvancedRAID Controller driver. BSD Cross Reference. FreeBSD. 2000. If the kernel is compiled with the COMPAT_LINUX option, or the aac_linux.ko and linux.ko modules are loaded... 
  13. ^ 13.0 13.1 Achim Leubner. aacraid(4) — Adaptec AACRAID Controller driver. BSD Cross Reference. FreeBSD. 2013. If the kernel is compiled with the COMPAT_LINUX option, or the aacraid_linux.ko and linux.ko modules are loaded... 
  14. ^ Matzan, Jem. BSD cognoscenti on Linux. NewsForge. 15 June 2005 [2006-07-07]. (原始内容存档于23 March 2006).  See Christos Zoulas's response to "Is sharing between Free/Open/NetBSD and the Linux kernel a common occurrence? And if so, does it go both ways?"
  15. ^ build/options/WITHOUT_SOURCELESS_UCODE. BSD Cross Reference. FreeBSD. 2012-02-04. 
  16. ^ 16.0 16.1 3.8: "Hackers of the Lost RAID". OpenBSD Release Songs. OpenBSD. 2005-11-01 [2022-03-20]. (原始内容存档于2013-07-28). 
  17. ^ 17.0 17.1 Andrews, Jeremy, Interview: Theo de Raadt, KernelTrap (Jeremy Andrews), 2006-05-02, (原始内容存档于2006-06-03) 
  18. ^ Protest against ATI nearly led to the arrest of RMS. Free Software Foundation. 27 April 2006 [2006-10-10]. (原始内容存档于2019-04-20). 
  19. ^ 19.0 19.1 19.2 19.3 Explaining Why We Don't Endorse Other Systems. GNU Project. Free Software Foundation. [2022-03-20]. (原始内容存档于2011-04-24). 
  20. ^ Debian firmware-linux packages. 2010 [2010-03-25]. 
  21. ^ a/lt-binary. lwn.net. [2022-03-20]. (原始内容存档于2022-04-11). 
  22. ^ Greg Kroah-Hartman. Myths, Lies, and Truths about the Linux kernel. Linux Symposium. 2006 [2022-03-20]. (原始内容存档于2018-10-16). 
  23. ^ Nonfree Firmware. GNU Project § Free System Distribution Guidelines (GNU FSDG). Free Software Foundation. [2022-03-20]. (原始内容存档于2015-12-08). 
  24. ^ ::[FSFLA]:: Take your freedom back, with Linux-2.6.33-libre. fsfla.org. [2022-03-20]. (原始内容存档于2022-03-18). 
  25. ^ 存档副本. [2019-03-27]. 原始内容存档于2007-01-09. 
  26. ^ (邮件列表) [Theo de Raadt Theo de Raadt] 请检查|url=值 (帮助).  缺少或|title=为空 (帮助)
  27. ^ 27.0 27.1 OpenBSD Works To Open Wireless Chipsets. KernelTrap. November 2, 2004 [2006-06-23]. (原始内容存档于2006-06-20). 
  28. ^ /sys/dev/microcode/. OpenBSD. 
  29. ^ sysutils/firmware. OpenBSD ports. 
  30. ^ Intel vPro Technology. Intel.com. 2012-05-14 [2014-04-10]. (原始内容存档于2017-10-03). 
  31. ^ BIOS & Firmware Compatibility. Absolute.com. [2014-04-10]. (原始内容存档于2014-11-15). 
  32. ^ 32.0 32.1 Vincent Zimmer; Jiming Sun; Marc Jones; Stefan Reinauer. Embedded Firmware Solutions: Development Best Practices for the Internet of Things. Apress. 2015: 121. ISBN 9781484200704. 
  33. ^ Vincent Zimmer; Jiming Sun; Marc Jones; Stefan Reinauer. Embedded Firmware Solutions: Development Best Practices for the Internet of Things. Apress. 2015: 61. ISBN 9781484200704. 
  34. ^ Vincent Zimmer; Jiming Sun; Marc Jones; Stefan Reinauer. Embedded Firmware Solutions: Development Best Practices for the Internet of Things. Apress. 2015: 65. ISBN 9781484200704. 
  35. ^ Campaign for Free BIOS. Free Software Foundation. 2006-11-29 [2007-01-02]. (原始内容存档于2015-02-15). 

外部链接