专有设备驱动程序 (英語: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 、Parabola 、Devuan 、Trisquel 和LibreCMC的Linux-libre 内核打包。[ 10] 然而,绝大多数开源项目都区分了仅二进制设备驱动程序(blob)和仅二进制固件(固件不被视作 blob [ 11] ),允许某些专有固件作为其内核的一部分自由分发,并且,对于一些核心贡献者的不同意见,还支持使用外部分发的专有设备驱动程序,为此类专有驱动程序和用户空间提供内部兼容接口组件与他们的系统一起工作。[ 12] [ 13] 遵循此政策的项目包括Linux内核 本身、NetBSD 、FreeBSD 、DragonFly BSD 和大多数Linux发行版 。[ 14] 其中一些项目提供了在没有专有固件的情况下安裝系统的选项,因此非自由源代碼的微代码是可选的。[ 15]
OpenBSD 项目有一个值得注意的政策,不仅不接受任何二进制设备驱动程序进入其源代码树,而且官方也不在其平台上支持任何第三方专有设备驱动程序组件,[ 16] :38... 因為這不仅導致了无法检测或无法修复的安全漏洞的可能性,而且还導致了对其软件的开放性和自由度的侵犯。[ 17] 自由软件基金会 正在积极反对二进制 blob。[ 18] 自由软件基金会还认为 OpenBSD 的政策措辞令人困惑,因为 BSD 社区中的“blob”仅指其认为的非自由驱动程序,不适用于专有固件和无源代碼的微代码。[ 19] :BSD Debian 项目包括来自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 内核开发人员,认为任何闭源 Linux 内核模块或驱动程序都是有害且不受欢迎的。……我们一再发现它们对 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和FreeBSD 和NetBSD 的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]
參見
参考
^ Michael Larabel. Coreboot: Replacing Intel's Binary Video BIOS Blob . Phoronix . 2012-08-06 [2015-06-23 ] . (原始内容存档 于2022-03-30).
^ 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).
^ BIOS Freedom Status . puri.sm. 2014-11-12 [2015-06-23 ] . (原始内容存档 于2022-09-01).
^ Michael Larabel. Raspberry Pi GPU Driver Turns Out To Be Crap . Phoronix . 2012-10-24 [2015-06-23 ] . (原始内容存档 于2022-06-19).
^ Jake Edge. Chromium suddenly starts downloading a binary blob . LWN.net . 2015-06-17 [2015-06-23 ] . (原始内容存档 于2022-03-21).
^ 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.
^ 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).
^ Constantine A. Murenin. Почему так важно иметь документацию по программированию железа . Linux.org.ru. 2006-12-10 [2022-03-20 ] . (原始内容存档 于2022-07-30) (俄语) .
^ 存档副本 . [2022-03-20 ] . 原始内容存档于2007-01-09.
^ List of Free GNU/Linux Distributions . GNU Project . Free Software Foundation . [2022-03-20 ] . (原始内容存档 于2020-07-06).
^ 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.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.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...
^ 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?"
^ build/options/WITHOUT_SOURCELESS_UCODE . BSD Cross Reference. FreeBSD . 2012-02-04.
^ 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.0 17.1 Andrews, Jeremy, Interview: Theo de Raadt , KernelTrap (Jeremy Andrews), 2006-05-02, (原始内容 存档于2006-06-03)
^ Protest against ATI nearly led to the arrest of RMS . Free Software Foundation. 27 April 2006 [2006-10-10 ] . (原始内容存档 于2019-04-20).
^ 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).
^ Debian firmware-linux packages . 2010 [2010-03-25 ] .
^ a/lt-binary . lwn.net. [2022-03-20 ] . (原始内容存档 于2022-04-11).
^ Greg Kroah-Hartman . Myths, Lies, and Truths about the Linux kernel . Linux Symposium . 2006 [2022-03-20 ] . (原始内容存档 于2018-10-16).
^ Nonfree Firmware . GNU Project § Free System Distribution Guidelines (GNU FSDG) . Free Software Foundation . [2022-03-20 ] . (原始内容存档 于2015-12-08).
^ ::[FSFLA]:: Take your freedom back, with Linux-2.6.33-libre . fsfla.org. [2022-03-20 ] . (原始内容存档 于2022-03-18).
^ 存档副本 . [2019-03-27 ] . 原始内容存档于2007-01-09.
^ (邮件列表) [Theo de Raadt Theo de Raadt].
^ 27.0 27.1 OpenBSD Works To Open Wireless Chipsets . KernelTrap. November 2, 2004 [2006-06-23 ] . (原始内容 存档于2006-06-20).
^ /sys/dev/microcode/ . OpenBSD .
^ sysutils/firmware . OpenBSD ports .
^ Intel vPro Technology . Intel.com. 2012-05-14 [2014-04-10 ] . (原始内容存档 于2017-10-03).
^ BIOS & Firmware Compatibility . Absolute.com. [2014-04-10 ] . (原始内容存档 于2014-11-15).
^ 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 .
^ Vincent Zimmer; Jiming Sun; Marc Jones; Stefan Reinauer. Embedded Firmware Solutions: Development Best Practices for the Internet of Things. Apress. 2015: 61. ISBN 9781484200704 .
^ Vincent Zimmer; Jiming Sun; Marc Jones; Stefan Reinauer. Embedded Firmware Solutions: Development Best Practices for the Internet of Things. Apress. 2015: 65. ISBN 9781484200704 .
^ Campaign for Free BIOS . Free Software Foundation. 2006-11-29 [2007-01-02 ] . (原始内容存档 于2015-02-15).
外部链接