View Single Post
Old 26th June 2016
jggimi's Avatar
jggimi jggimi is offline
More noise than signal
 
Join Date: May 2008
Location: USA
Posts: 6,819
Default

The confusion comes from three sources: the acronym "BLOB", and the definitions of the words "Firmware" and "Driver".

BLOB - "Binary Large OBject" or sometimes "Binary Large Object Block"

The current definition refers to a closed-source component delivered to customers as a compiled or assembled binary object, typically, as device drivers.

Driver - more completely, "Device Driver"

A component of an Operating System kernel which interfaces with a device.

Hardware vendors who develop kernel drivers for other operating systems (Windows, Linux, ...) will often deliver drivers as BLOBs. Some vendors will release sources to partners (such as to Microsoft or to Linux kernel developers) under Non-Disclosure Agreements ("NDAs").

Firmware - a device's control program, loaded into device memory from on-board ROM, or loaded into device memory from the system.

Here's a picture, which might help.
Code:
+----------+
|          |
|  Device  |
|          |
| Firmware |
|          |
+----------+
     ||
    (bus)
     ||
+----------+
|          |
|  Kernel  |
|          |
|  Driver  |
|          |
+----------+
Unlike many other OSes, the OpenBSD Project does not permit any BLOB device drivers in its kernel, under any circumstance -- such as through an NDA.

Firmware is vendor-supplied and are either already included with the device hardware in ROM, so no action must be taken, or must be loaded onto the vendor's device by the OS in order to have the hardware function.

Firmware is never executed by the OS. It is only loaded onto the appropriate device when that device requires it.