专有设备驱动程序

**專有裝置驅動程式**（英語：Proprietary device driver）是指僅以二進位代碼發布的閉源裝置驅動程式。在自由及開放原始碼的語境中，專有裝置驅動程式稱為 **blob** 或**二進位 blob**（英語：binary blob）。儘管 blob 可以作為十六進位陣列包含在原始碼中，就像一些在 Linux 核心中的 blob 一樣，該術語通常是指載入到開源作業系統核心中的專有核心模組。這個術語有時也適用於在外部執行的代碼核心，例如系統韌體映像、微代碼更新或使用者空間程式。 術語 blob 最初指二進位大型物件，即在資料庫管理系統中將二進位資料儲存為一個單一個體的集合。

當電腦硬體供應商為其產品提供完整的技術文件時，作業系統開發人員能夠編寫硬體裝置驅動程式以包含在作業系統核心中。但是，一些供應商，例如輝達 ，不為其某些產品提供完整的文件，而是僅提供二進位格式的驅動程式。這種做法最常見於被加速的圖形處理器驅動程式、無線網卡和硬體 RAID 控制器。值得注意的是，二進位 blob 對於非無線網路介面控制器非常少見，它們幾乎總是可以通過開箱即用的標準實用程式（如 ifconfig）進行組態。 

## 開源作業系統

一些自由軟體基金會批准的專案力求提供完全自由的作業系統。因此，在硬體文件或裝置驅動程式和所有適用韌體的原始碼不可用時，將刪除所有相關二進位 blob；此類專案包括來自 FSFLA 、Parabola 、Devuan 、Trisquel 和 LibreCMC 的 Linux-libre 核心打包。然而，絕大多數開源專案都區分了僅二進位裝置驅動程式（blob）和僅二進位韌體（韌體不被視作 blob )，允許某些專有韌體作為其核心的一部分自由分發，並且，對於一些核心貢獻者的不同意見，還支援使用外部分發的專有裝置驅動程式，為此類專有驅動程式和使用者空間提供內部相容介面組件與他們的系統一起工作。遵循此政策的專案包括 Linux 核心本身、NetBSD 、FreeBSD 、DragonFly BSD 和大多數 Linux 發行版。其中一些專案提供了在沒有專有韌體的情況下安裝系統的選項，因此非自由原始碼的微代碼是可選的。

OpenBSD 專案有一個值得注意的政策，不僅不接受任何二進位裝置驅動程式進入其原始碼樹，而且官方也不在其平台上支援任何第三方專有裝置驅動程式組件，:38... 因為這不僅導致了無法檢測或無法修復的安全漏洞的可能性，而且還導致了對其軟體的開放性和自由度的侵犯。自由軟體基金會正在積極反對二進位 blob。自由軟體基金會還認為 OpenBSD 的政策措辭令人困惑，因為 BSD 社群中的「blob」僅指其認為的非自由驅動程式，不適用於專有韌體和無原始碼的微代碼。:BSDDebian 專案包括來自 Linux 核心的自由和非自由二進位韌體，並根據 Debian 社會契約清楚地標記和分隔非自由軟體套件。從 Debian 6.0 開始，這些 blob 已被刪除。:Debian

對於 OpenBSD，專案負責人西奧・德若特捍衛了只為微代碼韌體請求分發權的政策。「一旦它們被分發…… 至少裝置可以工作」，暗示他的小專案的成員可以用許多晶片組的組合語言自己編寫免費韌體，他懇求「不要讓我們承擔更多工」。儘管如此，他還是偏愛無需韌體即可執行的晶片組。

在 Linux 核心開發社群中，林納斯・托瓦茲就純二進位模組的問題發表了強有力的聲明，聲稱：「我什至拒絕考慮將我的手綁在一些純二進位模組上…… 我希望人們知道當他們使用純二進位模組時，這是他們的問題。」2008 年，176 位 Linux 核心開發人員簽署了一份《關於 Linux 核心模組的立場聲明》。

Linux 核心維護者葛雷格・克羅哈曼表示，為 GNU 通用公共許可證之下授權的 Linux 核心重新分發封閉原始碼模組是非法的。

但是，Linux 核心包含各種裝置驅動程式所需的閉源韌體。Linux-libre 是 Linux 核心的一個版本，它試圖刪除所有二進位 blob，包括無源微碼。其維護者 Alexandre Oliva 在 2011 年寫道：「自 1996 年以來，Linux 一直不是自由軟體，當時 Torvalds 先生接受了他自 1991 年以來發布的 Linux 發行版中的第一批非自由軟體。這些年來，雖然這個核心增長了 14 倍，但 Linux 驅動程式所需的非自由韌體數量增長了 83 倍，令人震驚。

## 問題

二進位 blob 存在問題的原因有很多，主要有四：

第一，使用者無法準確知道它們的行為，且無法通過原始碼審計發現錯誤；錯誤通常只有在系統開始出現意外行為時才能通過艱苦的調查來診斷。此類未檢測到的錯誤也可能默默地將使用者和系統暴露於安全隱患之中。也因此無法檢查驅動程式是否符合其目的，即使發現錯誤也沒有簡單的方法來修復它。

其次，由於原始碼不可用，驅動程式不能被使用者輕易改進，不能移植到最初不支援的架構，也不能適應硬體的輕微改變或在具有更改了 API 和架構的更新版本上運作。

第三，使用該軟體會迫使使用者相信供應商或第三方不會將後門、間諜軟體或惡意代碼放入 blob。同樣，硬體供應商可以決定不支援給定的作業系統並隨時放棄驅動程式維護，或者，如果公司倒閉，驅動程式將完全不受支援。

最後，二進位 blob 可以被視為在相信自由軟體理想、拒絕專有軟體的社群部分和出於純技術原因認為開源是可取的部分之間劃清界限，「只要他們工作」，社群通常缺乏對二進位 blob 的強烈反對。這種碎片化，以及越來越多的專有組件被接受到 Linux 中，被視為削弱了社群抵制製造商越來越多地拒絕為其二進位檔案提供文件的趨勢的能力。

## 通過包裝使用

包裝器是允許一個作業系統使用為另一個作業系統編寫的二進位專有裝置驅動程式的軟體。包裝器的例子有 Linux 的 NdisWrapper 和 FreeBSD 和 NetBSD 的 Project Evil 。這些包裝器允許這些作業系統通過實現微軟的網路驅動程式介面規範介面來使用為 Microsoft Windows 編寫的網路驅動程式。

另一個例子是提供相容層，以便可以使用外部實用程式來為硬體提供服務。範例包括 FreeBSD 中的一些 RAID 控制器驅動程式，其中系統管理員必須在 FreeBSD 中啟用 Linux 相容層，並直接從硬體製造商獨立採購特定於 Linux 的二進位 blob，以便監視和服務硬體。大約在 2005 年，這種情況促使 OpenBSD 建立並推廣其 bio (4) 、 bioctl 和感測器驅動概念，作為 RAID 監視的替代解決方案。這兩個概念隨後都進入了 NetBSD。

## 裝置韌體

韌體是一些硬體附帶的板載微控制器所需的軟體，通常不被認為是二進位 blob。 :BSD:.... . 在許多裝置中，韌體儲存在非揮發性記憶體中，但為了降低成本和簡化升級，一些裝置僅包含靜態隨機存取記憶體 ，並且每次連接時都需要主機作業系統上傳韌體（尤其是 USB 裝置）。儘管韌體因此存在於作業系統驅動程式中，但它只是複製到裝置而不由 CPU 執行，即使韌體已經儲存在裝置中，也消除了對額外安全漏洞（例如 DMA 攻擊）的擔憂。OpenBSD 專案接受二進位韌體或微碼映像，如果許可證允許，將重新分發這些映像； 如果供應商不允許免費和無條件重新分發，則可以在 Ports Tree 中提供有關取得這些映像的指令碼（這會阻止某些受阻的無線裝置（例如，英特爾無線）在初始安裝系統的過程中安裝）。

## BIOS 和 UEFI

BIOS 作為引導載入程式並支援傳統真實模式應用程式，是許多 IBM PC 相容電腦的關鍵組件。 BIOS 可以是一個安全後門。  在 1990 年代後期，可延伸韌體介面的工作開始了，目標是將舊版 BIOS 遷移到具有模組化驅動程式模型的現代介面。EFI 是封閉原始碼的，並最終被許多行業領先的硬體製造商採用為統一可延伸韌體介面。EFI 開發工具包（英語：EFI Development Kit）旨在協助開發 EFI 韌體。

同樣在 1990 年代後期，coreboot 專案開始從頭開始建立傳統 BIOS 的開源替代方案。Coreboot 開發者社群圍繞斯特凡・賴諾組織，由具有提交權限的韌體開發者領導。儘管閉源二進位韌體一直是 x86 架構的核心，但 coreboot 僅包含為使用者提供基本硬體支援所必需的少數專有二進位檔案。libreboot 是 BIOS 和 UEFI 的完全開源替代方案，它由自由軟體基金會推廣。

## 參見

* 字元大型物件
* 韌體
* 可載入核心模組
* 專有軟體

## 參考

## 外部連結

* 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