There are a ton of reverse-engineered drivers in the Linux kernel tree. Yet some drivers, especially wireless drivers, require firmware binary blobs to run properly.What prevents someone from reverse-engineering these, too, and making the driver 100% free? Or is it different for different drivers?
Why do some drivers still require firmware?
drivers;firmware
Firmware is software that runs on a processor in the device itself, not on the main CPU. Firmware is more likely to be closed source than drivers for a variety of reasons.Firmware has to be made only once, whereas different operating systems require different drivers. Therefore hardware manufacturers have an incentive to allow third parties to write their own drivers for their favorite operating system, whereas there is no such incentive for firmware.Firmware is closer to the hardware, and hardware companies often want to to keep the workings of the hardware secret. Therefore they don't like to reveal how the firmware was made either.Firmware is a lot harder to reverse engineer than driver code. Often peripheral devices cannot be debugged easily, unlike drivers running on the main CPU. Also firmware is running in an environment which is often poorly documented if at all (while there are few CPU types, which I/O devices are mapped to which addresses is extremely variable).In the case of wifi drivers, there is an additional issue. The law in most locales forbids the use of certain radio frequencies and mandates that consumer devices be protected against broadcasting at these forbidden frequencies. Often the hardware is quite flexible and the only protection is in the firmware. If the manufacturer made it too easy to modify the firmware to broadcast on forbidden frequencies, they might breach these regulations.