aboutsummaryrefslogtreecommitdiff
path: root/www/faq.md
diff options
context:
space:
mode:
Diffstat (limited to 'www/faq.md')
-rw-r--r--www/faq.md1041
1 files changed, 1041 insertions, 0 deletions
diff --git a/www/faq.md b/www/faq.md
new file mode 100644
index 00000000..09dc6c9d
--- /dev/null
+++ b/www/faq.md
@@ -0,0 +1,1041 @@
+---
+title: Frequently Asked Questions
+x-toc-enable: true
+...
+
+Important issues
+================
+
+What version of libreboot do I have?
+----------------------------------------------------------------
+
+See [../docs/\#version](../docs/#version)
+
+The backlight is darker on the left side of the screen when lowering the brightness on my X200/T400/T500/R400
+---------------------------------------------------------------------------------------------------------------
+
+We don't know how to detect the correct PWM value to use in
+coreboot-libre, so we just use the default one in coreboot which has
+this issue on some CCFL panels, but not LED panels.
+
+You can work around this in your distribution, by following the notes at
+[../docs/misc/\#backlight%20control](../docs/misc/#backlight%20control).
+
+My computer thinks it's 1970-01-01 (GM45 laptops)
+--------------------------------------------------
+
+Use Libreboot 20160818 or higher. This was a bug in coreboot, fixed
+upstream and merged in Libreboot 20160818.
+
+Alternatively, you can use kernel version 4.2 or older, if you wish to
+use libreboot 20150518 or earlier.
+
+The ethernet doesn't work on my X200/T400/X60/T60 when I plug in it
+-------------------------------------------------------------------
+
+This was observed on some systems using network-manager. This happens
+both on the original BIOS and in libreboot. It's a quirk in the
+hardware. On debian systems, a workaround is to restart the networking
+service when you connect the ethernet cable:
+
+ sudo service network-manager restart
+
+On Parabola, you can try:
+
+ sudo systemctl restart network-manager
+
+(the service name might be different for you, depending on your
+configuration)
+
+My KCMA-D8 or KGPE-D16 doesn't boot with the PIKE2008 module installed
+-----------------------------------------------------------------------
+
+Libreboot 20160818, 20160902 and 20160907 all have a bug: in SeaBIOS,
+PCI options ROMs are loaded when available, by default. This is not
+technically a problem, because an option ROM can be free or non-free. In
+practise, though, they are usually non-free.
+
+Loading the option ROM from the PIKE2008 module on either ASUS KCMA-D8
+or KGPE-D16 causes the system to hang at boot. It's possible to use
+this in the payload (if you use a linux kernel payload, or petitboot),
+or to boot (with SeaGRUB and/or SeaBIOS) from regular SATA and then use
+it in GNU+Linux. The Linux kernel is capable of using the PIKE2008
+module without loading the option ROM.
+
+Libreboot-unstable (or git) now disables loading PCI option ROMs, but
+previous releases with SeaGRUB (20160818-20160907) do not. You can work
+around this by running the following command:
+
+ ./cbfstool yourrom.rom add-int -i 0 -n etc/pci-optionrom-exec
+
+You can find *cbfstool* in the \_util archive with the libreboot release
+that you are using.
+
+Hardware compatibility
+======================
+
+What systems are compatible with libreboot?
+-----------------------------------------------------------------------------------
+
+See [../docs/hcl/](docs/hcl/).
+
+Several supported systems are also available with libreboot
+preinstalled. Check the [suppliers](suppliers.md) page for more
+information.
+
+Will the Purism Librem laptops be supported?
+----------------------------------------------------------------------
+
+Probably not. There are several privacy, security and freedom issues
+with these laptops, due to the Intel chipsets that they use. See
+
+replaced (e.g. [Intel Management Engine](#intelme) and [CPU microcode
+updates](#microcode)). It uses the proprietary [Intel FSP](#fsp) blob
+for the entire hardware initialization, which Intel [won't
+provide](#intel-is-uncooperative) the source code for. The Video BIOS
+(initialization firmware for the graphics hardware) is also proprietary.
+The libreboot project recommends avoiding this hardware entirely.
+
+It will likely take many years to replace even one of these blobs, let
+alone all of them. Some of them (ME firmware and microcode) can't even
+be replaced, which immediately disqualifies these laptops from being
+added to libreboot. Google engineers have tried for many years to get
+source code from Intel, and to reverse engineer the blobs that Intel
+provides. So far, they have been unsuccessful. Google is also one of the
+companies that funds the coreboot project, and they hire a lot of the
+core developers, so it's not like they don't have vast resources at
+their disposal. Smaller companies have no chance.
+
+The librem does have coreboot support, but it's pretty meaningless
+(it's shimboot, which means that coreboot is just incorporating blobs.
+It's not real coreboot support, but rather, what is shamelessly passed
+off as coreboot support these days, where binary blobs for **the
+entire** hardware initialization is considered acceptable in the
+coreboot project). It should be noted, that the coreboot port for librem
+was done by a lone Google software developer (Duncan Laurie), not
+Purism, working independently. Purism had nothing to do with the port.
+
+Why is the latest Intel hardware unsupported in libreboot? {#intel}
+-----------------------------------------------------------
+
+It is extremely unlikely that any post-2008 Intel hardware will ever be
+supported in libreboot, due to severe security and freedom issues; so
+severe, that *the libreboot project recommends avoiding all modern Intel
+hardware. If you have an Intel based system affected by the problems
+described below, then you should get rid of it as soon as possible*. The
+main issues are as follows:
+
+### Intel Management Engine (ME) {#intelme}
+
+Introduced in June 2006 in Intel's 965 Express Chipset Family of
+(Graphics and) Memory Controller Hubs, or (G)MCHs, and the ICH8 I/O
+Controller Family, the Intel Management Engine (ME) is a separate
+computing environment physically located in the (G)MCH chip. In Q3 2009,
+the first generation of Intel Core i3/i5/i7 (Nehalem) CPUs and the 5
+Series Chipset family of Platform Controller Hubs, or PCHs, brought a
+more tightly integrated ME (now at version 6.0) inside the PCH chip,
+which itself replaced the ICH. Thus, the ME is ***present on all Intel
+desktop, mobile (laptop), and server systems since mid 2006***.
+
+The ME consists of an ARC processor core (replaced with other processor
+cores in later generations of the ME), code and data caches, a timer,
+and a secure internal bus to which additional devices are connected,
+including a cryptography engine, internal ROM and RAM, memory
+controllers, and a ***direct memory access (DMA) engine*** to access the
+host operating system's memory as well as to reserve a region of
+protected external memory to supplement the ME's limited internal RAM.
+The ME also has ***network access*** with its own MAC address through an
+Intel Gigabit Ethernet Controller. Its boot program, stored on the
+internal ROM, loads a firmware "manifest" from the PC's SPI flash
+chip. This manifest is ***signed with a strong cryptographic key***,
+which differs between versions of the ME firmware. If the manifest
+isn't signed by a specific Intel key, the boot ROM won't load and
+execute the firmware and the ME processor core will be halted.
+
+The ME firmware is compressed and consists of modules that are listed in
+the manifest along with secure cryptographic hashes of their contents.
+One module is the operating system kernel, which is based on a
+***proprietary real-time operating system (RTOS) kernel*** called
+"ThreadX". The developer, Express Logic, sells licenses and source
+code for ThreadX. Customers such as Intel are forbidden from disclosing
+or sublicensing the ThreadX source code. Another module is the Dynamic
+Application Loader (DAL), which consists of a ***Java virtual machine***
+and set of preinstalled Java classes for cryptography, secure storage,
+etc. The DAL module can load and execute additional ME modules from the
+PC's HDD or SSD. The ME firmware also includes a number of native
+application modules within its flash memory space, including Intel
+Active Management Technology (AMT), an implementation of a Trusted
+Platform Module (TPM), Intel Boot Guard, and audio and video DRM
+systems.
+
+The Active Management Technology (AMT) application, part of the Intel
+"vPro" brand, is a Web server and application code that enables remote
+users to power on, power off, view information about, and otherwise
+manage the PC. It can be ***used remotely even while the PC is powered
+off*** (via Wake-on-Lan). Traffic is encrypted using SSL/TLS libraries,
+but recall that all of the major SSL/TLS implementations have had highly
+publicized vulnerabilities. The AMT application itself has ***[known
+vulnerabilities](https://en.wikipedia.org/wiki/Intel_Active_Management_Technology#Known_vulnerabilities_and_exploits)***,
+which have been exploited to develop rootkits and keyloggers and
+covertly gain encrypted access to the management features of a PC.
+Remember that the ME has full access to the PC's RAM. This means that
+an attacker exploiting any of these vulnerabilities may gain access to
+everything on the PC as it runs: all open files, all running
+applications, all keys pressed, and more.
+
+[Intel Boot Guard](https://mjg59.dreamwidth.org/33981.html) is an ME
+application introduced in Q2 2013 with ME firmware version 9.0 on 4th
+Generation Intel Core i3/i5/i7 (Haswell) CPUs. It allows a PC OEM to
+generate an asymmetric cryptographic keypair, install the public key in
+the CPU, and prevent the CPU from executing boot firmware that isn't
+signed with their private key. This means that ***coreboot and libreboot
+are impossible to port*** to such PCs, without the OEM's private
+signing key. Note that systems assembled from separately purchased
+mainboard and CPU parts are unaffected, since the vendor of the
+mainboard (on which the boot firmware is stored) can't possibly affect
+the public key stored on the CPU.
+
+ME firmware versions 4.0 and later (Intel 4 Series and later chipsets)
+include an ME application for ***audio and video
+[DRM](https://defectivebydesign.org/what_is_drm_digital_restrictions_management)***
+called "Protected Audio Video Path" (PAVP). The ME receives from the
+host operating system an encrypted media stream and encrypted key,
+decrypts the key, and sends the encrypted media decrypted key to the
+GPU, which then decrypts the media. PAVP is also used by another ME
+application to draw an authentication PIN pad directly onto the screen.
+In this usage, the PAVP application directly controls the graphics that
+appear on the PC's screen in a way that the host OS cannot detect. ME
+firmware version 7.0 on PCHs with 2nd Generation Intel Core i3/i5/i7
+(Sandy Bridge) CPUs replaces PAVP with a similar DRM application called
+"Intel Insider". Like the AMT application, these DRM applications,
+which in themselves are defective by design, demonstrate the omnipotent
+capabilities of the ME: this hardware and its proprietary firmware can
+access and control everything that is in RAM and even ***everything that
+is shown on the screen***.
+
+The Intel Management Engine with its proprietary firmware has complete
+access to and control over the PC: it can power on or shut down the PC,
+read all open files, examine all running applications, track all keys
+pressed and mouse movements, and even capture or display images on the
+screen. And it has a network interface that is demonstrably insecure,
+which can allow an attacker on the network to inject rootkits that
+completely compromise the PC and can report to the attacker all
+activities performed on the PC. It is a threat to freedom, security, and
+privacy that can't be ignored.
+
+Before version 6.0 (that is, on systems from 2008/2009 and earlier), the
+ME can be disabled by setting a couple of values in the SPI flash
+memory. The ME firmware can then be removed entirely from the flash
+memory space. libreboot [does this](../docs/hcl/gm45_remove_me.html) on
+the Intel 4 Series systems that it supports, such as the [Libreboot
+X200](../docs/install/x200_external.html) and [Libreboot
+T400](../docs/install/t400_external.html). ME firmware versions 6.0 and
+later, which are found on all systems with an Intel Core i3/i5/i7 CPU
+and a PCH, include "ME Ignition" firmware that performs some hardware
+initialization and power management. If the ME's boot ROM does not find
+in the SPI flash memory an ME firmware manifest with a valid Intel
+signature, the whole PC will shut down after 30 minutes.
+
+Due to the signature verification, developing free replacement firmware
+for the ME is basically impossible. The only entity capable of replacing
+the ME firmware is Intel. As previously stated, the ME firmware includes
+proprietary code licensed from third parties, so Intel couldn't release
+the source code even if they wanted to. And even if they developed
+completely new ME firmware without third-party proprietary code and
+released its source code, the ME's boot ROM would reject any modified
+firmware that isn't signed by Intel. Thus, the ME firmware is both
+hopelessly proprietary and "tivoized".
+
+**In summary, the Intel Management Engine and its applications are a
+backdoor with total access to and control over the rest of the PC. The
+ME is a threat to freedom, security, and privacy, and the libreboot
+project strongly recommends avoiding it entirely. Since recent versions
+of it can't be removed, this means avoiding all recent generations of
+Intel hardware.**
+
+More information about the Management Engine can be found on various Web
+sites, including [me.bios.io](http://me.bios.io/Main_Page),
+[unhuffme](http://io.netgarage.org/me/), [coreboot
+wiki](http://www.coreboot.org/Intel_Management_Engine), and
+[Wikipedia](https://en.wikipedia.org/wiki/Intel_Active_Management_Technology).
+The book ***[Platform Embedded Security Technology
+Revealed](https://www.apress.com/9781430265719)*** describes in great
+detail the ME's hardware architecture and firmware application modules.
+
+If you're stuck with the ME (non-libreboot system), you might find this
+interesting:
+<http://hardenedlinux.org/firmware/2016/11/17/neutralize_ME_firmware_on_sandybridge_and_ivybridge.html>
+
+Also see (effort to disable the ME):
+<https://www.coreboot.org/pipermail/coreboot/2016-November/082331.html>
+- look at the whole thread
+
+### Firmware Support Package (FSP) {#fsp}
+
+On all recent Intel systems, coreboot support has revolved around
+integrating a blob (for each system) called the *FSP* (firmware support
+package), which handles all of the hardware initialization, including
+memory and CPU initialization. Reverse engineering and replacing this
+blob is almost impossible, due to how complex it is. Even for the most
+skilled developer, it would take years to replace. Intel distributes
+this blob to firmware developers, without source.
+
+Since the FSP is responsible for the early hardware initialization, that
+means it also handles SMM (System Management Mode). This is a special
+mode that operates below the operating system level. **It's possible
+that rootkits could be implemented there, which could perform a number
+of attacks on the user (the list is endless). Any Intel system that has
+the proprietary FSP blob cannot be trusted at all.** In fact, several
+SMM rootkits have been demonstrated in the wild (use a search engine to
+find them).
+
+### CPU microcode updates {#microcode}
+
+All modern x86 CPUs (from Intel and AMD) use what is called *microcode*.
+CPUs are extremely complex, and difficult to get right, so the circuitry
+is designed in a very generic way, where only basic instructions are
+handled in hardware. Most of the instruction set is implemented using
+microcode, which is low-level software running inside the CPU that can
+specify how the circuitry is to be used, for each instruction. The
+built-in microcode is part of the hardware, and read-only. Both the
+circuitry and the microcode can have bugs, which could cause reliability
+issues.
+
+Microcode *updates* are proprietary blobs, uploaded to the CPU at boot
+time, which patches the built-in microcode and disables buggy parts of
+the CPU to improve reliability. In the past, these updates were handled
+by the operating system kernel, but on all recent systems it is the boot
+firmware that must perform this task. Coreboot does distribute microcode
+updates for Intel and AMD CPUs, but libreboot cannot, because the whole
+point of libreboot is to be 100% [free
+software](https://en.wikipedia.org/wiki/Free_software).
+
+On some older Intel CPUs, it is possible to exclude the microcode
+updates and not have any reliability issues in practise. All current
+libreboot systems work without microcode updates (otherwise, they
+wouldn't be supported in libreboot). However, all modern Intel CPUs
+require the microcode updates, otherwise the system will not boot at
+all, or it will be extremely unstable (memory corruption, for example).
+
+Intel CPU microcode updates are *signed*, which means that you could not
+even run a modified version, even if you had the source code. If you try
+to upload your own modified updates, the CPU will reject them.
+
+The microcode updates alter the way instructions behave on the CPU. That
+means they affect the way the CPU works, in a very fundamental way. That
+makes it software. The updates are proprietary, and are software, so we
+exclude them from libreboot. The microcode built into the CPU already is
+not so much of an issue, since we can't change it anyway (it's
+read-only).
+
+### Intel is uncooperative
+
+For years, coreboot has been struggling against Intel. Intel has been
+shown to be extremely uncooperative in general. Many coreboot
+developers, and companies, have tried to get Intel to cooperate; namely,
+releasing source code for the firmware components. Even Google, which
+sells millions of *chromebooks* (coreboot preinstalled) have been unable
+to persuade them.
+
+Even when Intel does cooperate, they still don't provide source code.
+They might provide limited information (datasheets) under strict
+corporate NDA (non-disclosure agreement), but even that is not
+guaranteed. Even ODMs and IBVs can't get source code from Intel, in
+most cases (they will just integrate the blobs that Intel provides).
+
+Recent Intel graphics chipsets also [require firmware
+blobs](https://01.org/linuxgraphics/intel-linux-graphics-firmwares?langredirect=1).
+
+Intel is [only going to get
+worse](https://www.phoronix.com/scan.php?page=news_item&px=Intel-Gfx-GuC-SLPC)
+when it comes to user freedom. Libreboot has no support recent Intel
+platforms, precisely because of the problems described above. The only
+way to solve this is to get Intel to change their policies and to be
+more friendly to the [free
+software](https://en.wikipedia.org/wiki/Free_software) community.
+Reverse engineering won't solve anything long-term, unfortunately, but
+we need to keep doing it anyway. Moving forward, Intel hardware is a
+non-option unless a radical change happens within Intel.
+
+**Basically, all Intel hardware from year 2010 and beyond will never be
+supported by libreboot. The libreboot project is actively ignoring all
+modern Intel hardware at this point, and focusing on alternative
+platforms.**
+
+Why is the latest AMD hardware unsupported in libreboot? {#amd}
+----------------------------------------------------------------------------
+
+It is extremely unlikely that any post-2013 AMD hardware will ever be
+supported in libreboot, due to severe security and freedom issues; so
+severe, that *the libreboot project recommends avoiding all modern AMD
+hardware. If you have an AMD based system affected by the problems
+described below, then you should get rid of it as soon as possible*. The
+main issues are as follows:
+
+[We call on AMD to release source code and specs for the new AMD Ryzen
+platforms! We call on the community to put pressure on AMD. Click here
+to read more](amd-libre.md)
+
+### AMD Platform Security Processor (PSP)
+
+This is basically AMD's own version of the [Intel Management
+Engine](#intelme). It has all of the same basic security and freedom
+issues, although the implementation is wildly different.
+
+The Platform Security Processor (PSP) is built in on all Family 16h +
+systems (basically anything post-2013), and controls the main x86 core
+startup. PSP firmware is cryptographically signed with a strong key
+similar to the Intel ME. If the PSP firmware is not present, or if the
+AMD signing key is not present, the x86 cores will not be released from
+reset, rendering the system inoperable.
+
+The PSP is an ARM core with TrustZone technology, built onto the main
+CPU die. As such, it has the ability to hide its own program code,
+scratch RAM, and any data it may have taken and stored from the
+lesser-privileged x86 system RAM (kernel encryption keys, login data,
+browsing history, keystrokes, who knows!). To make matters worse, the
+PSP theoretically has access to the entire system memory space (AMD
+either will not or cannot deny this, and it would seem to be required to
+allow the DRM "features" to work as intended), which means that it has
+at minimum MMIO-based access to the network controllers and any other
+PCI/PCIe peripherals installed on the system.
+
+In theory any malicious entity with access to the AMD signing key would
+be able to install persistent malware that could not be eradicated
+without an external flasher and a known good PSP image. Furthermore,
+multiple security vulnerabilities have been demonstrated in AMD firmware
+in the past, and there is every reason to assume one or more zero day
+vulnerabilities are lurking in the PSP firmware. Given the extreme
+privilege level (ring -2 or ring -3) of the PSP, said vulnerabilities
+would have the ability to remotely monitor and control any PSP enabled
+machine completely outside of the user's knowledge.
+
+Much like with the Intel Boot Guard (an application of the Intel
+Management Engine), AMD's PSP can also act as a tyrant by checking
+signatures on any boot firmware that you flash, making replacement boot
+firmware (e.g. libreboot, coreboot) impossible on some boards. Early
+anecdotal reports indicate that AMD's boot guard counterpart will be
+used on most OEM hardware, disabled only on so-called "enthusiast"
+CPUs.
+
+### AMD IMC firmware
+
+Read <https://www.coreboot.org/AMD_IMC>.
+
+### AMD SMU firmware
+
+Handles some power management for PCIe devices (without this, your
+laptop will not work properly) and several other power management
+related features.
+
+The firmware is signed, although on older AMD hardware it is a symmetric
+key, which means that with access to the key (if leaked) you could sign
+your own modified version and run it. Rudolf Marek (coreboot hacker)
+found out how to extract this key [in this video
+demonstration](https://media.ccc.de/v/31c3_-_6103_-_en_-_saal_2_-_201412272145_-_amd_x86_smu_firmware_analysis_-_rudolf_marek),
+and based on this work, Damien Zammit (another coreboot hacker)
+[partially replaced it](https://github.com/zamaudio/smutool/) with free
+firmware, but on the relevant system (ASUS F2A85-M) there were still
+other blobs present (Video BIOS, and others) preventing the hardware
+from being supported in libreboot.
+
+### AMD AGESA firmware
+
+This is responsible for virtually all core hardware initialization on
+modern AMD systems. In 2011, AMD started cooperating with the coreboot
+project, releasing this as source code under a free license. In 2014,
+they stopped releasing source code and started releasing AGESA as binary
+blobs instead. This makes AGESA now equivalent to [Intel FSP](#fsp).
+
+### AMD CPU microcode updates
+
+Read the Intel section
+practically the same, though it was found with much later hardware in
+AMD that you could run without microcode updates. It's unknown whether
+the updates are needed on all AMD boards (depends on CPU).
+
+### AMD is incompetent (and uncooperative)
+
+AMD seemed like it was on the right track in 2011 when it started
+cooperating with and releasing source code for several critical
+components to the coreboot project. It was not to be. For so-called
+economic reasons, they decided that it was not worth the time to invest
+in the coreboot project anymore.
+
+For a company to go from being so good, to so bad, in just 3 years,
+shows that something is seriously wrong with AMD. Like Intel, they do
+not deserve your money.
+
+Given the current state of Intel hardware with the Management Engine, it
+is our opinion that all performant x86 hardware newer than the AMD
+Family 15h CPUs (on AMD's side) or anything post-2009 on Intel's side
+is defective by design and cannot safely be used to store, transmit, or
+process sensitive data. Sensitive data is any data in which a data
+breach would cause significant economic harm to the entity which created
+or was responsible for storing said data, so this would include banks,
+credit card companies, or retailers (customer account records), in
+addition to the "usual" engineering and software development firms.
+This also affects whistleblowers, or anyone who needs actual privacy and
+security.
+
+What *can* I use, then? {#whatcaniuse}
+-------------------------
+
+Libreboot has support for fam15h AMD hardware (~2012 gen) and some
+older Intel platforms (~2006-2009 gen). We also have support for some
+ARM chipsets (rk3288). On the Intel side, we're also interested in some
+of the chipsets that use Atom CPUs (rebranded from older chipsets,
+mostly using ich7-based southbridges).
+
+Will libreboot work on a ThinkPad T400 or T500 with an ATI GPU?
+---------------------------------------------------------------------------------------------------
+
+Short answer: yes. These laptops also have an Intel GPU inside, which
+libreboot uses. The ATI GPU is ignored by libreboot.
+
+These laptops use what is called *switchable graphics*, where it will
+have both an Intel and ATI GPU. Coreboot will allow you to set (using
+nvramtool) a parameter, specifying whether you would like to use Intel
+or ATI. The ATI GPU lacks free native graphics initialization in
+coreboot, unlike the Intel GPU.
+
+Libreboot modifies coreboot, in such a way where this nvramtool setting
+is ignored. Libreboot will just assume that you want to use the Intel
+GPU. Therefore, the ATI GPU is completely disabled on these laptops.
+Intel is used instead, with the free native graphics initialization
+(VBIOS replacement) that exists in coreboot.
+
+Will the latest ThinkPad models be supported?
+-----------------------------------------------------------------------------
+
+The latest ThinkPad generation supported in libreboot are the ones using the
+GM45 (ICH9) chipsets, such as the ThinkPad X200 or T400. ThinkPads newer than
+this generation will probably never be supported in libreboot, due to the fact
+that there are signed blobs that cannot be removed or replaced (e.g. Intel
+Management Engine]. Newer laptops are starting to
+[use](https://www.phoronix.com/scan.php?page=news_item&px=Intel-Boot-Guard-Kills-Coreboot)
+the [Intel Boot Guard](https://mjg59.dreamwidth.org/33981.html), which
+specifically blocks the use of firmware that has not been signed by the OEM.
+
+Coreboot does have support for some more recent Lenovo laptops, but libreboot
+cannot support most of these.
+
+Will desktop/server hardware be supported?
+------------------------------------------------------------------------
+
+Libreboot now supports desktop hardware:
+[../docs/hcl/\#supported\_desktops\_x86amdintel](../docs/hcl/#supported_desktops_x86/intel)
+(with full native video initialization).
+
+A common issue with desktop hardware is the Video BIOS, when no onboard
+video is present, since every video card has a different Video BIOS.
+Onboard GPUs also require one, so those still have to be replaced with
+free software (non-trivial task). Libreboot has to initialize the
+graphics chipset, but most graphics cards lack a free Video BIOS for
+this purpose. Some desktop motherboards supported in coreboot do have
+onboard graphics chipsets, but these also require a proprietary Video
+BIOS, in most cases.
+
+Hi, I have &lt;insert random system here&gt;, is it supported?
+--------------------------------------------------------------------------------------------------------
+
+Most likely not. First, you must consult coreboot's own hardware
+compatibility list at <http://www.coreboot.org/Supported_Motherboards>
+and, if it is supported, check whether it can run without any
+proprietary blobs in the ROM image. If it can: wonderful! Libreboot can
+support it, and you can add support for it. If not, then you will need
+to figure out how to reverse engineer and replace (or remove) those
+blobs that do still exist, in such a way where the system is still
+usable in some defined way.
+
+For those systems where no coreboot support exists, you must first port
+it to coreboot and, if it can then run without any blobs in the ROM
+image, it can be added to libreboot. See: [Motherboard Porting
+Guide](http://www.coreboot.org/Motherboard_Porting_Guide) (this is just
+the tip of the iceberg!)
+
+Please note that board development should be done upstream (in coreboot)
+and merged downstream (into libreboot). This is the correct way to do
+it, and it is how the libreboot project is coordinated so as to avoid
+too much forking of the coreboot source code.
+
+What about ARM?
+-----------------------------------
+
+Libreboot has support for some ARM based laptops, using the *Rockchip
+RK3288* SoC. Check the libreboot [hardware compatibility
+list](../docs/hcl/#supported_list), for more information.
+
+General questions
+=================
+
+How do I install libreboot?
+-------------------------------------------------------
+
+See [../docs/install/](docs/install/)
+
+How do I program an SPI flash chip with the BeagleBone Black?
+---------------------------------------------------------------------------------
+
+See [../docs/install/bbb\_setup.html](../docs/install/bbb_setup.html).
+
+How do I program an SPI flash chip with the Raspberry Pi?
+-----------------------------------------------------------------------------
+
+See [../docs/install/rpi\_setup.html](../docs/install/rpi_setup.html).
+
+How do I set a boot password?
+-------------------------------------------------------------------
+
+If you are using the GRUB payload, you can add a username and password
+(salted, hashed) to your GRUB configuration that resides inside the
+flash chip. The following guides (which also cover full disk encryption,
+including the /boot/ directory) show how to set a boot password in GRUB:
+[../docs/gnulinux/encrypted\_debian.html](../docs/gnulinux/encrypted_debian.html)
+and
+[../docs/gnulinux/encrypted\_parabola.html](../docs/gnulinux/encrypted_parabola.html)
+
+How do I write-protect the flash chip?
+----------------------------------------------------------------------------
+
+By default, there is no write-protection on a libreboot system. This is
+for usability reasons, because most people do not have easy access to an
+external programmer for re-flashing their firmware, or they find it
+inconvenient to use an external programmer.
+
+On some systems, it is possible to write-protect the firmware, such that
+it is rendered read-only at the OS level (external flashing is still
+possible, using dedicated hardware). For example, on current GM45
+laptops (e.g. ThinkPad X200, T400), you can write-protect (see
+[../docs/hcl/gm45\_remove\_me.html\#ich9gen](../docs/hcl/gm45_remove_me.html#ich9gen)).
+Depending on your flash chip, you can also write-protect the i945
+laptops, such as the ThinkPad X60 or T60 (see
+[../docs/hardware/x60\_security.html](../docs/hardware/x60_security.html))
+and
+[../docs/hardware/t60\_security.html](../docs/hardware/t60_security.html)
+for links to a video explaining it).
+
+It's possible to write-protect on all libreboot systems, but the
+instructions need to be written. The documentation is in the main git
+repository, so you are welcome to submit patches adding these
+instructions.
+
+How do I change the BIOS settings?
+------------------------------------------------------------------------
+
+Libreboot actually uses the [GRUB
+payload](http://www.coreboot.org/GRUB2). More information about payloads
+can be found at
+[coreboot.org/Payloads](http://www.coreboot.org/Payloads).
+
+Libreboot inherits the modular payload concept from coreboot, which
+means that pre-OS bare-metal *BIOS setup* programs are not very
+practical. Coreboot (and libreboot) does include a utility called
+*nvramtool*, which can be used to change some settings. You can find
+nvramtool under *coreboot/util/nvramtool/*, in the libreboot source
+archives.
+
+The *-a* option in nvramtool will list the available options, and *-w*
+can be used to change them. Consult the nvramtool documentation on the
+coreboot wiki for more information.
+
+In practise, you don't need to change any of those settings, in most
+cases.
+
+Libreboot locks the CMOS table, to ensure consistent functionality for
+all users. You can use:
+
+ nvramtool -C yourrom.rom -w somesetting=somevalue
+
+This will change the default inside that ROM image, and then you can
+re-flash it.
+
+Do I need to install a bootloader when installing a distribution?
+---------------------------------------------------------------------------------------------------
+
+Libreboot integrates the GRUB bootloader already, as a
+*[payload](http://www.coreboot.org/Payloads)*. This means that the GRUB
+bootloader is actually *flashed*, as part of the boot firmware
+(libreboot). This means that you do not have to install a boot loader on
+the HDD or SSD, when installing a new distribution. You'll be able to
+boot just fine, using the bootloader (GRUB) that is in the flash chip.
+
+This also means that even if you remove the HDD or SSD, you'll still
+have a functioning bootloader installed which could be used to boot a
+live distribution installer from a USB flash drive. See
+[\.../docs/gnulinux/grub\_boot\_installer.html](../docs/gnulinux/grub_boot_installer.html)
+
+Do I need to re-flash when I re-install a distribution?
+-------------------------------------------------------------------------------------------
+
+Not anymore. Recent versions of libreboot (using the GRUB payload) will
+automatically switch to a GRUB configuration on the HDD or SSD, if it
+exists. You can also load a different GRUB configuration, from any kind
+of device that is supported in GRUB (such as a USB flash drive). For
+more information, see
+[../docs/gnulinux/grub\_cbfs.html](../docs/gnulinux/grub_cbfs.html)
+
+What does a flash chip look like?
+-----------------------------------------------------------------
+
+SOIC-8 SPI flash chip:
+
+![SOIT-8 SPI flash chip](images/soic8.jpg)
+
+SOIC-16 SPI flash chip:
+
+![SOIT-8 SPI flash chip](images/soic16.jpg)
+
+Is this a GNU project anymore?
+-----------------------------------
+
+No. We left GNU on 2016-09-15, in protest of transphobia at the FSF.
+
+See [here](gnu.md) for details.
+
+Freedom questions
+=================
+
+Are external GPUs (e.g. PCI-E) OK?
+------------------------------------------------------------------------
+
+The Video BIOS is present on most video hardware. On all current
+libreboot systems, this is implemented using free software. The Video
+BIOS is responsible for initializing any sort of visual display; without
+it, you'd have what's called a *headless* system.
+
+For integrated graphics, the VBIOS is usually embedded as an *option
+ROM* in the main boot firmware. For external graphics, the VBIOS is
+usually on the graphics card itself. This is usually proprietary; the
+only difference is that SeaBIOS executes it (alternatively, you embed it
+in a coreboot ROM image and have coreboot executes it, if you use a
+different payload, such as GRUB).
+
+We're going to tentatively say no, they're not OK. Unless you're
+actively working to replace the VBIOS, or find out how to get a visual
+display without it (possible in some cases, if the kernel driver can be
+modified to work without it, possibly only needing certain
+non-executable data).
+
+What other firmware exists outside of libreboot?
+----------------------------------------------------------------------------------------
+
+The main freedom issue on any system, is the boot firmware (usually
+referred to as a BIOS or UEFI). Libreboot replaces the boot firmware
+with fully free code, but even with libreboot, there may still be other
+hardware components in the system (e.g. laptop) that run their own
+dedicated firmware, sometimes proprietary. These are on secondary
+processors, where the firmware is usually read-only, written for very
+specific tasks. While these are unrelated to libreboot, technically
+speaking, it makes sense to document some of the issues here.
+
+Note that these issues are not unique to libreboot systems. They apply
+universally, to most systems. The issues described below are the most
+common (or otherwise critical).
+
+Dealing with these problems will most likely be handled by a separate
+project.
+
+### EC (embedded controller) firmware
+
+Most (all?) laptops have this. The EC (embedded controller) is a small,
+separate processor that basically processes inputs/outputs that are
+specific to laptops. For example:
+
+- When you flick the radio on/off switch, the EC will enable/disable
+ the wireless devices (wifi, bluetooth, etc) and enable/disable an
+ LED that indicates whether it's turned on or not
+- Listen to another chip that produces temperature readings, adjusting
+ fan speeds accordingly (or turning the fan(s) on/off).
+- Takes certain inputs from the keyboard, e.g. brightness up/down,
+ volume up/down.
+- Detect when the lid is closed or opened, and send a signal
+ indicating this.
+- Etc.
+
+Alexander Couzens from coreboot (lynxis on coreboot IRC) is working on a
+free EC firmware replacement for the ThinkPads that are supported in
+libreboot. See: <https://github.com/lynxis/h8s-ec> (not ready yet).
+
+Most (all?) chromebooks have free EC firmware. Libreboot is currently
+looking into supporting a few ARM-based chromebooks.
+
+EC is only present on laptops. On desktop/server boards it is absent
+(not required).
+
+### HDD/SSD firmware
+
+HDDs and SSDs have firmware in them, intended to handle the internal
+workings of the device while exposing a simple, standard interface (such
+as AHCI/SATA) that the OS software can use, generically. This firmware
+is transparent to the user of the drive.
+
+HDDs and SSDs are quite complex, and these days contain quite complex
+hardware which is even capable of running an entire operating system (by
+this, we mean that the drive itself is capable of running its own
+embedded OS), even GNU+Linux or BusyBox/Linux.
+
+SSDs and HDDs are a special case, since they are persistent storage
+devices as well as computers.
+
+Example attack that malicious firmware could do: substitute your SSH
+keys, allowing unauthorized remote access by an unknown adversary. Or
+maybe substitute your GPG keys. SATA drives can also have DMA (through
+the controller), which means that they could read from system memory;
+the drive can have its own hidden storage, theoretically, where it could
+read your LUKS keys and store them unencrypted for future retrieval by
+an adversary.
+
+With proper IOMMU and use of USB instead of SATA, it might be possible
+to mitigate any DMA-related issues that could arise.
+
+Some proof of concepts have been demonstrated. For HDDs:
+<https://spritesmods.com/?art=hddhack&page=1> For SSDs:
+<http://www.bunniestudios.com/blog/?p=3554>
+
+Viable free replacement firmware is currently unknown to exist. For
+SSDs, the
+[OpenSSD](http://www.openssd-project.org/wiki/The_OpenSSD_Project)
+project may be interesting.
+
+Apparently, SATA drives themselves don't have DMA but can make use of
+it through the controller. This
+<http://www.lttconn.com/res/lttconn/pdres/201005/20100521170123066.pdf>
+(pages 388-414, 420-421, 427, 446-465, 492-522, 631-638) and this
+<http://www.intel.co.uk/content/dam/www/public/us/en/documents/technical-specifications/serial-ata-ahci-spec-rev1_3.pdf>
+(pages 59, 67, 94, 99).
+
+The following is based on discussion with Peter Stuge (CareBear\\) in
+the coreboot IRC channel on Friday, 18 September 2015, when
+investigating whether the SATA drive itself can make use of DMA. The
+following is based on the datasheets linked above:
+
+According to those linked documents, FIS type 39h is *"DMA Activate FIS
+- Device to Host"*. It mentions *"transfer of data from the host to
+the device, and goes on to say: Upon receiving a DMA Activate, if the
+host adapter's DMA controller has been programmed and armed, the host
+adapter shall initiate the transmission of a Data FIS and shall transmit
+in this FIS the data corresponding to the host memory regions indicated
+by the DMA controller's context."* FIS is a protocol unit (Frame
+Information Structure). Based on this, it seems that a drive can tell
+the host controller that it would like for DMA to happen, but unless the
+host software has already or will in the future set up this DMA transfer
+then nothing happens. **A drive can also send DMA Setup**. If a DMA
+Setup FIS is sent first, with the Auto-Activate bit set, then it is
+already set up, and the drive can initiate DMA. The document goes on to
+say *"Upon receiving a DMA Setup, the receiver of the FIS shall
+validate the received DMA Setup request."* - in other words, the host
+is supposed to validate; but maybe there's a bug there. The document
+goes on to say *"The specific implementation of the buffer identifier
+and buffer/address validation is not specified"* - so noone will
+actually bother. *"the receiver of the FIS"* - in the case we're
+considering, that's the host controller hardware in the chipset and/or
+the kernel driver (most likely the kernel driver). All SATA devices have
+flash-upgradeable firmware, which can usually be updated by running
+software in your operating system; **malicious software running as root
+could update this firmware, or the firmware could already be
+malicious**. Your HDD or SSD is the perfect place for a malicious
+adversary to install malware, because it's a persistent storage device
+as well as a computer.
+
+Based on this, it's safe to say that use of USB instead of SATA is
+advisable if security is a concern. USB 2.0 has plenty of bandwidth for
+many HDDs (a few high-end ones can use more bandwidth than USB 2.0 is
+capable of), but for SSDs it might be problematic (unless you're using
+USB 3.0, which is not yet usable in freedom. See
+
+
+Use of USB is also not an absolute guarantee of safety, so do beware.
+The attack surface becomes much smaller, but a malicious drive could
+still attempt a "fuzzing" attack (e.g. sending malformed USB
+descriptors, which is how the tyrant DRM on the Playstation 3 was
+broken, so that users could run their own operating system and run
+unsigned code). (you're probably safe, unless there's a security flaw
+in the USB library/driver that your OS uses. USB is generally considered
+one of the safest protocols, precisely because USB devices have no DMA)
+
+Other links:
+
+- <http://motherboard.vice.com/read/the-nsas-undetectable-hard-drive-hack-was-first-demonstrated-a-year-ago>
+
+It is recommended that you use full disk encryption, on HDDs connected
+via USB. There are several adapters available online, that allow you to
+connect SATA HDDs via USB. Libreboot documents how to install several
+distributions with full disk encryption. You can adapt these for use
+with USB drives:
+
+- [Full disk encryption with
+ Debian](../docs/gnulinux/encrypted_debian.html)
+- [Full disk encryption with
+ Parabola](../docs/gnulinux/encrypted_parabola.html)
+
+The current theory (unproven) is that this will at least prevent
+malicious drives from wrongly manipulating data being read from or
+written to the drive, since it can't access your LUKS key if it's only
+ever in RAM, provided that the HDD doesn't have DMA (USB devices don't
+have DMA). The worst that it could do in this case is destroy your data.
+Of course, you should make sure never to put any keyfiles in the LUKS
+header. **Take what this paragraph says with a pinch of salt. This is
+still under discussion, and none of this is proven.**
+
+### NIC (ethernet controller)
+
+Ethernet NICs will typically run firmware inside, which is responsible
+for initializing the device internally. Theoretically, it could be
+configured to drop packets, or even modify them.
+
+With proper IOMMU, it might be possible to mitigate the DMA-related
+issues. A USB NIC can also be used, which does not have DMA.
+
+### CPU microcode
+
+Implements an instruction set. See
+description. Here we mean microcode built in to the CPU. We are not
+talking about the updates supplied by the boot firmware (libreboot does
+not include microcode updates, and only supports systems that will work
+without it) Microcode can be very powerful. No proof that it's
+malicious, but it could theoretically
+
+There isn't really a way to solve this, unless you use a CPU which does
+not have microcode. (ARM CPUs don't, but most ARM systems require blobs
+for the graphics hardware at present, and typically have other things
+like soldered wifi which might require blobs)
+
+CPUs often on modern systems have a processor inside it for things like
+power management. ARM for example, has lots of these.
+
+### Sound card
+
+Sound hardware (integrated or discrete) typically has firmware on it
+(DSP) for processing input/output. Again, a USB DAC is a good
+workaround.
+
+### Webcam
+
+Webcams have firmware integrated into them that process the image input
+into the camera; adjusting focus, white balancing and so on. Can use USB
+webcam hardware, to work around potential DMA issues; integrated webcams
+(on laptops, for instance) are discouraged by the libreboot project.
+
+### USB host controller
+
+Doesn't really apply to current libreboot systems (none of them have
+USB 3.0 at the moment), but USB 3.0 host controllers typically rely on
+firmware to implement the XHCI specification. Some newer coreboot ports
+also require this blob, if you want to use USB 3.0.
+
+This doesn't affect libreboot at the moment, because all current
+systems that are supported only have older versions of USB available.
+USB devices also don't have DMA (but the USB host controller itself
+does).
+
+With proper IOMMU, it might be possible to mitigate the DMA-related
+issues (with the host controller).
+
+### WWAN firmware
+
+Some laptops might have a simcard reader in them, with a card for
+handling WWAN, connecting to a 3g/4g (e.g. GSM) network. This is the
+same technology used in mobile phones, for remote network access (e.g.
+internet).
+
+NOTE: not to be confused with wifi. Wifi is a different technology, and
+entirely unrelated.
+
+The baseband processor inside the WWAN chip will have its own embedded
+operating system, most likely proprietary. Use of this technology also
+implies the same privacy issues as with mobile phones (remote tracking
+by the GSM network, by triangulating the signal).
+
+On some laptops, these cards use USB (internally), so won't have DMA,
+but it's still a massive freedom and privacy issue. If you have an
+internal WWAN chip/card, the libreboot project recommends that you
+disable and (ideally, if possible) physically remove the hardware. If
+you absolutely must use this technology, an external USB dongle is much
+better because it can be easily removed when you don't need it, thereby
+disabling any external entities from tracking your location.
+
+Use of ethernet or wifi is recommended, as opposed to mobile networks,
+as these are generally much safer.
+
+On all current libreboot laptops, it is possible to remove the WWAN card
+and sim card if it exists. The WWAN card is next to the wifi card, and
+the sim card (if installed) will be in a slot underneath the battery, or
+next to the RAM.
+
+Operating Systems
+=================
+
+Can I use GNU+Linux?
+--------------------------------------------------
+
+Absolutely! It is well-tested in libreboot, and highly recommended. See
+[installing GNU+Linux](../docs/gnulinux/grub_boot_installer.html) and
+[booting GNU+Linux](../docs/gnulinux/grub_cbfs.html).
+
+Any recent distribution should work, as long as it uses KMS (kernel mode
+setting) for the graphics.
+
+We maintain a [list of distributions that we recommend to the
+public](docs/distros/).
+
+Can I use BSD?
+----------------------------------
+
+For the most part, BSD systems remain untested in libreboot. BSD systems
+contain binary blobs (non-free firmware and applications), so do beware.
+**We need proper documentation for BSD in libreboot. Documentation is in
+the git repository. [This page](git.md) shows how to send patches to
+the libreboot project.**
+
+[This reddit
+post](https://www.reddit.com/r/BSD/comments/53jt70/libreboot_and_bsds/)
+has some basic information.
+
+<https://libreboot.org/lists/old/libreboot/html/lists.gnu.org/archive/html/libreboot/2016-09/msg00010.html>
+
+OpenBSD 5.9 or higher is believed to be compatible with video in X11
+(libertyBSD 5.9 or higher is also compatible). See
+<https://libreboot.org/lists/old/libreboot/html/lists.gnu.org/archive/html/libreboot/2016-04/msg00010.html>.
+Another user also reported success with OpenBSD:
+<http://marc.info/?l=openbsd-misc&m=147492752806764&w=2>. **NOTE:
+[Libreboot has openbsd instructions now!](../docs/bsd/openbsd.html).
+Thanks go to Scott Bonds who submitted the initial documentation for it.
+TODO: Test LibertyBSD (deblobbed OpenBSD version) and make that the main
+recommended version of OpenBSD in the guide.**
+
+FreeBSD is believed to be compatible (text mode). We don't know if it
+can work with a framebuffer, although at least one user did report that
+FreeBSD supports kernel mode setting, so it might be possible. This
+individual was able to boot FreeBSD in text mode, using libreboot
+20160818: see
+<https://libreboot.org/lists/old/libreboot/html/lists.gnu.org/archive/html/libreboot/2016-08/msg00052.html>.
+
+At least one user reported to us that NetBSD should work in libreboot
+out of the box.
+
+We would like to merge instructions for installing and booting BSD on
+libreboot systems. [Patches are welcome!](https://libreboot.org/git/)
+
+Can I use Windows?
+----------------------------------------------
+
+Windows is incompatible with libreboot, and will probably remain so. You
+should not use Windows, because it is non-free and therefore bad for
+freedom. It is also known to have several severe security and privacy
+issues, both intentional and unintentional. It is known to contact
+backdoors, in addition to other nasty anti-features like DRM.
+
+Windows incompatibility is a feature, not a bug.
+
+Incompatible Time Sharing System?
+-----------------------------------------------------
+
+jxself asked this in the IRC channel. As far as we know, this won't
+work in libreboot systems, or indeed any modern system.
+
+Are other operating systems compatible?
+-------------------------------------------------------------------
+
+Unknown. Probably not.
+