專有設備驅動程序
專有設備驅動程序(英語: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]:BSDDebian項目包括來自Linux 內核的自由和非自由二進制固件,並根據 Debian 社會契約清楚地標記和分隔非自由軟件包[20]。從 Debian 6.0 開始,這些 blob 已被刪除。[19]:Debian
對於 OpenBSD,項目負責人西奧·德若特捍衛了只為微代碼固件請求分發權的政策。「一旦它們被分發……至少設備可以工作」,暗示他的小項目的成員可以用許多芯片組的匯編語言自己編寫免費固件,他懇求「不要讓我們承擔更多任務」。儘管如此,他還是偏愛無需固件即可運行的芯片組。[17]
在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
編輯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] 請檢查
|url=
值 (幫助). 缺少或|title=
為空 (幫助) - ^ 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).
外部連結
編輯- McMillan, Robert. Researchers hack Wi-Fi driver to breach laptop. InfoWorld. June 21, 2006 [2006-06-23]. (原始內容存檔於July 2, 2006).
- KernelTrap article on Damien Bergamini's wpi(4) driver, a blobless ipw3945 alternative for OpenBSD
- KernelTrap interview with Jonathan Gray and Damien Bergamini regarding binary blobs
- The Black Hat Wireless Exploit Interview, Verbatim by Brian Krebs on the Washington Post's website, archived on May 5, 2012
- A creative example of the value of free drivers (頁面存檔備份,存於網際網路檔案館), LWN.net