Binary blob: Difference between revisions

Content deleted Content added
SgtShyGuy (talk | contribs)
No edit summary
m Removing link(s) Wikipedia:Articles for deletion/Alexandre Oliva closed as delete (XFDcloser)
 
(40 intermediate revisions by 21 users not shown)
Line 1:
{{short description|Closed-source device driverSoftware published only in binary code}}
{{Redirectdistinguish|Binary blob|thelarge database data type|object{{!}}Binary large object (BLOB)}}
{{short description|Closed-source device driver published only in binary code}}
 
A '''proprietary device driver''' is a closed-source [[device driver]] published only in [[binary code]]. In the context of [[free and open-source software]], a [[Proprietaryproprietary software|closed-source]] deviceonly driveravailable as a [[executable|binary executable]] is referred to as a '''blob''' or '''binary blob'''. The term usually refers to a closed-source[[device driver]] [[Loadable kernel module|kernel module]] [[Linker (computing)|loaded]] into the [[Kernel (computeroperating sciencesystem)|kernel]] of an open-source [[operating system]], and is sometimes also applied to code running outside the kernel, such as system [[firmware]] images, [[microcode]] updates, or [[User space and kernel space|userland]] programs.<ref>{{cite web
| url = https://www.phoronix.com/scan.php?page=news_item&px=MTE1NDc
| title = Coreboot: Replacing Intel's Binary Video BIOS Blob
Line 33 ⟶ 34:
}}</ref> The term ''[[Binary large object|blob]]'' was first used in [[database management system]]s to describe a collection of [[binary data]] stored as a single entity.
 
When [[computer hardware]] vendors provide complete technical documentation for their products, operating system developers are able to write hardware device drivers to be included in the operating system kernels. However, some vendors, such as [[Nvidia#DocumentationOpen-source andsoftware driverssupport|Nvidia]], do not provide complete documentation for some of their products and instead provide binary-only drivers. This practice is most common for [[GPUGraphics processing unit|accelerated graphics]] drivers, [[Wireless network interface controller|wireless networking device]]s, and hardware [[RAIDDisk array controller|RAID controllers]]s.<ref>{{cite web | url = https://packages.debian.org/source/sid/firmware-nonfree | title = Debian packages built from the source package 'firmware-nonfree' - Binary firmware for various drivers in the Linux kernel | year = 2010 | access-date = 2010-03-25}}</ref> Most notably, binaryclosed-source blobsdrivers are very uncommon for non-wireless [[network interface controller]]s, which can almost always be configured via standard utilities (like [[ifconfig]]) out of the box; [[Theo de Raadt]] of [[OpenBSD]] attributes this to the work done by a single [[FreeBSD]] developer.<ref name=lor-opencon06>{{cite web
|author= Constantine A. Murenin |date= 2006-12-10
|url= https://www.linux.org.ru/news/hardware/1690470
Line 52 ⟶ 53:
}}</ref>
 
== OpenPolicy sourceby operating systemsproject ==
Some [[Free Software Foundation|FSF]]-approved projects strive to provide a [[Free software movement|free]] operating system and will remove all binary blobs when no documentation for hardware or [[source code]] for device drivers and all applicable firmware is available; such projects include [[Linux-libre]] kernel packaging from [[FSFLA]], [[Parabola (software)|Parabola]], [[Devuan]], [[Trisquel]], and [[LibreCMC]].{{r|gnu/free-distros}} However, the vast majority of open-source projects make a distinction between binary-only device drivers (blobs) and binary-only firmware (not considered blobs{{r|kerneltrap/6497|p=...|q=Firmwares are not considered blobs}}), allowing for certain proprietary firmware to be freely distributed as part of their kernels, and, to the disagreement of some core contributors, also support the use of proprietary device drivers that are distributed externally, providing internal compatibility interfaces for such proprietary drivers and userspace components to work with their system.{{r|f-aac|f-aacraid}} Projects following this policy include the [[Linux kernel]] itself, [[NetBSD]], [[FreeBSD]], [[DragonFly BSD]], and most [[Linux distribution]]s.<ref name="bsdinterview">{{cite web | url = http://os.newsforge.com/os/05/06/09/2132233.shtml?tid=8&tid=2 | title = BSD cognoscenti on Linux | access-date = 2006-07-07 | last = Matzan | first = Jem | date = 15 June 2005 | publisher = NewsForge | url-status = dead | archive-url = https://web.archive.org/web/20060323022626/http://os.newsforge.com/os/05/06/09/2132233.shtml?tid=8&tid=2 | archive-date = 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?"</ref> Some of these projects do provide options for building the system without proprietary firmware, thus excluding sourceless microcode on demand.<ref name=f-sourceless-ucode>{{cite web |url= http://bxr.su/f/tools/build/options/WITHOUT_SOURCELESS_UCODE |title= build/options/WITHOUT_SOURCELESS_UCODE |website= BSD Cross Reference |publisher= [[FreeBSD]] |date= 2012-02-04}}</ref>
 
The [[OpenBSD]] project has a notable policy of not only not accepting any binary device drivers into its source tree, but also officially not supporting any third-party proprietary device driver components on its platform, either;{{r|lyrics-38|p=38…38...|q=we refuse to accept our users being forced into depending on vendor binaries}} citing not only the potential for undetectable or irreparable security flaws, but also the encroachment onto the openness and freedom of its software.<ref name="deraadt_interview_200605">{{citation
|url=http://kerneltrap.org/node/6550
|title=Interview: Theo de Raadt
Line 70 ⟶ 71:
For OpenBSD, project leader [[Theo de Raadt]] defends the policy of asking for distribution rights only for microcode firmware. "Once they are distributed... at least the device works." Implying that the alternative would be for the members of his small project to code free firmware themselves in the assembly language of many chipsets, he pleads "don't load us up with more tasks." Despite this he favours chipsets that run without firmware and speaks warmly of Asian designs which he describes as slower to market but more mature.<ref name="deraadt_interview_200605" />
 
[[File:Linux AMD graphics stack.svg|thumb|300px| The proprietary Linux graphic driver, {{Mono|[[AMD Catalyst|libGL-fglrx-glx]]}}, will share the same [[Direct Rendering Manager|DRM]] infrastructure with [[Mesa 3D]]. As there is no stable in-kernel [[Application binary interface|ABI]], AMD had to constantly adapt the former [[binary blob]] used by Catalyst.]]
In the [[Linux kernel]] development community, [[Linus Torvalds]] has made strong statements on the issue of binary-only modules, asserting: "I ''refuse'' to even consider tying my hands over some binary-only module", and continuing: "I want people to know that when they use binary-only modules, it's THEIR problem."<ref>{{cite web|url=https://lwn.net/1999/0211/a/lt-binary.html|title=a/lt-binary|work=lwn.net}}</ref> In 2008, 176 Linux kernel developers signed a ''Position Statement on Linux Kernel Modules'' that stated "We, the undersigned Linux kernel developers, consider any closed-source Linux kernel module or driver to be harmful and undesirable... We have repeatedly found them to be detrimental to Linux users, businesses, and the greater Linux ecosystem."<ref>{{cite web|url=https://lwn.net/Articles/287056/|title=A position statement on Linux Kernel Modules|date=June 2008|author=Greg Kroah-Hartman|author-link=Greg Kroah-Hartman|publisher=[[The Linux Foundation]]}}</ref> The Linux kernel maintainer [[Greg Kroah-Hartman]] has stated that it is illegal to redistribute closed source modules for the [[GNU General Public License|GNU General Public License-licensed]] Linux kernel.<ref>{{cite web|url=http://www.kroah.com/log/linux/ols_2006_keynote.html|author=Greg Kroah-Hartman|author-link=Greg Kroah-Hartman|publisher=[[Linux Symposium]]|title=Myths, Lies, and Truths about the Linux kernel|year=2006}}</ref>
 
However, the Linux kernel contains closed-source firmware required by various device drivers.{{r|gnu/free-sys-d-g--nonfree-fw|q1=Nonfree Firmware|gnu/common-d}} [[Alexandre Oliva]], the maintainer of [[Linux-libre]], a version of the Linux kernel that attempts to remove all binary blobs, including sourceless microcode, wrote in 2011: "Linux hasn't been Free Software since 1996, when Mr Torvalds accepted the first pieces of non-Free Software in the distributions of Linux he has published since 1991. Over these years, while this kernel grew by a factor of 14, the amount of non-Free firmware required by Linux drivers grew by an alarming factor of 83."<ref>{{cite web|url=https://www.fsfla.org/ikiwiki/anuncio/2010-03-Linux-2.6.33-libre.en|title=::[FSFLA]:: Take your freedom back, with Linux-2.6.33-libre|work=fsfla.org}}</ref>
 
Most of the drivers for [[mobile device]]s running the [[Android (OSoperating system)|Android operating system]] are shipped in binary and are linked against a specific version of the Linux kernel. This makes it very hard to upgrade a kernel version because it may require [[reverse- engineering]], reimplementing the proprietary device drivers as free software, creating and debugging wrappers, [[binary patch]]ing, or a combination of these steps, all of which implies that legacy devices will never get the latest Android version.{{citation needed||date=March 2019}}
 
== Problems ==
Line 90 ⟶ 91:
 
== Use via wrappers ==
A [[Driver wrapper|wrapper]] is software which allows one operating system to use a binary proprietary device driver written for another operating system. Examples of wrappers are [[NdisWrapperNDISwrapper]] for [[Linux]], and [[Project Evil]] for [[FreeBSD]] and [[NetBSD]]. These wrappers allow these operating systems to use network drivers written for [[Microsoft Windows]] by implementing [[Microsoft]]'s [[Network Driver Interface Specification|NDIS]] [[Application programming interface|API]].
 
Another example is providing compatibility layers so that foreign utilities could be used to service the hardware. Examples include some [[Disk array controller|RAID controller]] drivers in [[FreeBSD]], where the [[system administrator]] would have to enable [[FreeBSD#OS compatibility layers|Linux compatibility layer in FreeBSD]] and independently procure Linux-specific binary blobs directly from the hardware manufacturer in order to monitor and service the hardware.<ref name=f-aac>{{cite web
|url= http://bxr.su/f/share/man/man4/aac.4
|title= aac(4) — Adaptec AdvancedRAID Controller driver
|website= BSD Cross Reference |publisher= [[FreeBSD]]
|author1= Scott Long |author2= Adaptec, Inc |author2-link= Adaptec |date= 2000
|quote= If the kernel is compiled with the COMPAT_LINUX option, or the aac_linux.ko and linux.ko modules are loaded,…...
|lay-url= http://mdoc.su/f/aac.4
}}
|quote= If the kernel is compiled with the COMPAT_LINUX option, or the aac_linux.ko and linux.ko modules are loaded,…
*{{cite book |section=aac -- Adaptec AdvancedRAID Controller driver |title=FreeBSD Manual Pages |url= http://mdoc.su/f/aac.4}}</ref><ref name=f-aacraid>{{cite web
|url= http://bxr.su/f/share/man/man4/aacraid.4
|title= aacraid(4) — Adaptec AACRAID Controller driver
|website= BSD Cross Reference |publisher= [[FreeBSD]]
|author1= Achim Leubner |date= 2013
|quote= If the kernel is compiled with the COMPAT_LINUX option, or the aacraid_linux.ko and linux.ko modules are loaded,…...
|lay-url= http://mdoc.su/f/aacraid.4
}}
|quote= If the kernel is compiled with the COMPAT_LINUX option, or the aacraid_linux.ko and linux.ko modules are loaded,…
*{{cite book |section=aacraid -- Adaptec AACRAID Controller driver |title=FreeBSD Manual Pages |url=http://mdoc.su/f/aacraid.4}}</ref><ref name=opencon06-drivers-f>{{Cite conference
|author= Jonathan Gray |date= 2006-12-02
|section-url= http://www.openbsd.org/papers/opencon06-drivers/mgp00026.html
Line 118 ⟶ 119:
|quote= drivers designed for binary only Linux RAID management tools
}}</ref>
Circa 2005, this state of affairs prompted [[OpenBSD]] to create and popularise its [[bioctl|bio(4)]], [[bioctl]] and [[sensor drive]] concepts as an alternative solution for [[RAID]] monitoring,<ref name=theo-misc-38>{{cite mailing list
|url= //marc.info/?l=openbsd-misc&m=112630095818062
|author= Theo de Raadt
Line 133 ⟶ 134:
== Device firmware ==
{{main|Firmware|Microcode}}
[[Firmware]] is the software required by the onboard [[microcontroller]]s that accompanyaccompanied by some hardware, is generally not considered to be a binary blob.{{r|kerneltrap/4118|gnu/common-d|p2=BSD|kerneltrap/6497|p3=...|q3=Firmwares are not considered blobs}} In many devices, firmware is stored in [[non-volatile]] onboard [[flash memory]], but to decrease costs and ease upgradesto fix bugs, some devices contain only [[static RAM]] and require the host operating system to upload firmware / microcode each time they are connectedpowered (especially [[USB]] devices)on. Although the firmware is thus present in the operating system driver, it is merely copied to the device and not executed by the CPU, removing concerns about extra security flaws compared to what's already possible with a [[DMA attack]] even if the firmware was already stored within the device at all times. The OpenBSD project accepts binary firmware/[[microcode]] images and will redistribute these images if the license permits;<ref name="kerneltrap/4118">{{cite web |title=OpenBSD Works To Open Wireless Chipsets |date=November 2, 2004 |publisher=KernelTrap |url=http://kerneltrap.org/node/4118 |access-date=2006-06-23 |url-status=dead |archive-url=https://web.archive.org/web/20060620051155/http://kerneltrap.org/node/4118 |archive-date=2006-06-20 }}</ref><ref>{{cite web |url= http://openbsd.su/src/sys/dev/microcode/ |title=/sys/dev/microcode/ |work= [[OpenBSD]] }}</ref> if free and unconditional redistribution is not permitted by the vendor, the machine instructions on fetching these images may be provided in the [[OpenBSD ports|ports]] tree (which precludes some encumbered wireless devices (e.g., Intel Wireless) from being available during the initial install).<ref name=o-ports>{{cite web |url= http://openbsd.su/ports/sysutils/firmware |title=sysutils/firmware |work= [[OpenBSD ports]]}}</ref> On Microsoft Windows implementations, the microcode binary may be embedded in the SYS / DLL / VXD device driver directly, as opposed to separated microcode file.
 
== BIOS and UEFI==
[[File:Coreboot+seaBIOS+on-x60.JPG|thumb|upright|[[SeaBIOS]], an open-source implementation of BIOS, running as coreboot payload on a Lenovo [[ThinkPad]] X60]]
The [[BIOS]], which functions as a [[bootloader]] and supports legacy [[real mode]] applications, is a crucial component of many [[IBM-compatible]] computers. The BIOS is always 16-bit, can be a security [[Backdoor (computing)|backdoor]].<ref>{{cite web|url=http://www.intel.com/content/www/us/en/architecture-and-technology/vpro/vpro-technology-general.html |title=Intel vPro Technology |publisher=Intel.com |date=2012-05-14 |access-date=2014-04-10}}</ref><ref>{{cite web|url=https://www.absolute.com/en/partners/bios-compatibility.aspx |title=BIOS & Firmware Compatibility |publisher=Absolute.com |access-date=2014-04-10}}</ref>{{failed verification|date=April 2014}} In the late 1990s work started on EFI (Extensible Firmware Interface) with the objective to move legacy BIOS to a modern interface with a modular driver model. EFI is closed source and was eventually adopted by many industry leading hardware manufacturers as [[UEFI]] (Unified Extensible Firmware Interface). The EDK (EFI Development Kit) was developed to assist EFI firmware development projects.<ref name="Apress">{{cite book |authors author= Vincent Zimmer, |author2=Jiming Sun, |author3=Marc Jones & |author4=Stefan Reinauer |date= 2015 |title= Embedded Firmware Solutions: Development Best Practices for the Internet of Things |publisher= Apress |isbn= 9781484200704 | page = 121}}</ref>
 
Also in the late 1990s, the [[coreboot]] project was started to create an open source alternative to legacy BIOS from scratch.<ref name="Apress"/> The coreboot developer community organises around [[Stefan Reinauer]] and is led by firmware developers with commit rights.<ref>{{cite book |authors author= Vincent Zimmer, |author2=Jiming Sun, |author3=Marc Jones & |author4=Stefan Reinauer |date= 2015 |title= Embedded Firmware Solutions: Development Best Practices for the Internet of Things |publisher= Apress |isbn= 9781484200704 | page = 61}}</ref> Despite closed source binary firmware having been at the heart of the [[x86]] architecture coreboot only incorporates the few proprietary binaries that are necessary to provide users with a base level hardware support.<ref>{{cite book |authors author= Vincent Zimmer, |author2=Jiming Sun, |author3=Marc Jones & |author4=Stefan Reinauer |date= 2015 |title= Embedded Firmware Solutions: Development Best Practices for the Internet of Things |publisher= Apress |isbn= 9781484200704 | page = 65}}</ref> A completely open source alternative to BIOS and UEFI is [[libreboot]], which was promoted by the [[Free Software Foundation]] (FSF).<ref>{{cite web|url=https://www.fsf.org/campaigns/free-bios.html|title=Campaign for Free BIOS|publisher=Free Software Foundation|date=2006-11-29|access-date=2007-01-02}}</ref>
 
== See also ==
Line 159 ⟶ 160:
 
== References ==
{{Reflist|30emreflist|refs=
 
<ref name="gnu/free-distros">{{cite web
Line 169 ⟶ 170:
|url= https://www.gnu.org/distros/free-system-distribution-guidelines.html#nonfree-firmware
|title= Nonfree Firmware
|work= {{Section link|GNU Project#|Free System Distribution Guidelines (GNU FSDG)}}
|publisher= [[Free Software Foundation]]
}}</ref>
Line 192 ⟶ 193:
 
[[Category:Free software culture and documents]]
[[Category:PejorativesPejorative terms related to technology]]
[[Category:Firmware]]
[[Category:Device drivers]]
[[Category:Booting]]