index.php 65 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092
  1. <?php
  2. /*
  3. Frequently asked questions
  4. Copyright (C) 2015, 2016 Leah Woods <info@minifree.org>
  5. This program is free software: you can redistribute it and/or modify
  6. it under the terms of the GNU Affero General Public License as
  7. published by the Free Software Foundation, either version 3 of the
  8. License, or (at your option) any later version.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. GNU Affero General Public License for more details.
  13. You should have received a copy of the GNU Affero General Public License
  14. along with this program. If not, see <http://www.gnu.org/licenses/>.
  15. */
  16. header('Content-type: text/html; charset=utf-8');
  17. ob_start();
  18. include_once "../common/variables.php";
  19. include_once "../common/functions.php";
  20. ?>
  21. <!DOCTYPE html>
  22. <html>
  23. <head>
  24. <link rel="stylesheet" type="text/css" href="../common/css/main.css" />
  25. <link rel="stylesheet" type="text/css" href="../common/css/cssbox/cssbox.css" />
  26. <title>Answers to Frequently Asked Questions about libreboot</title>
  27. </head>
  28. <body>
  29. <div id="pagetop">
  30. <h1>Answers to Frequently Asked Questions about libreboot</h1>
  31. <p>
  32. Over time, there have been many questions asked about libreboot. We have to answer them every time,
  33. so it makes sense to document them here instead. More questions and answers will be added here,
  34. as time goes by. <a href="../">Back to home page</a>
  35. </p>
  36. <h2>Important issues</h2>
  37. <ul class="c">
  38. <li><a href="#epochfail">My computer thinks it's 1970-01-01. How do I fix this?</a></li>
  39. </ul>
  40. <h2>Hardware compatibility</h2>
  41. <ul class="c">
  42. <li><a href="#compatibility">What systems are compatible with libreboot?</a></li>
  43. <li><a href="#librem">Will the Purism Librem laptops be supported?</a></li>
  44. <li>
  45. <a href="#intel">Why is the latest Intel hardware unsupported in libreboot?</a>
  46. <ul>
  47. <li><a href="#intelme">Intel Management Engine (ME)</a></li>
  48. <li><a href="#fsp">Firmware Support Package (FSP)</a></li>
  49. <li><a href="#microcode">CPU microcode updates</a></li>
  50. <li><a href="#intelbastards">Intel is uncooperative</a></li>
  51. </ul>
  52. </li>
  53. <li>
  54. <a href="#amd">Why is the latest AMD hardware unsupported in libreboot?</a>
  55. <ul class="c">
  56. <li>
  57. <li><a href="#amdpsp">AMD Platform Security Processor (PSP)</a></li>
  58. <li><a href="#amdimc">AMD IMC firmware</a></li>
  59. <li><a href="#amdsmu">AMD SMU firmware</a></li>
  60. <li><a href="#amdagesa">AMD AGESA firmware</a></li>
  61. <li><a href="#amdmicrocode">AMD CPU microcode updates</a></li>
  62. <li><a href="#amdbastards">AMD is incompetent (and uncooperative)</a></li>
  63. </li>
  64. </ul>
  65. </li>
  66. <li><a href="#thinkpads">Will the latest Thinkpad models be supported?</a></li>
  67. <li><a href="#t400t500ati">Will libreboot work on a ThinkPad T400 or T500 with an ATI GPU?</a></li>
  68. <li><a href="#desktops">Will desktop/server hardware be supported?</a></li>
  69. <li><a href="#randomhardware">Hi, I have &lt;insert random system here&gt;, is it supported?</a></li>
  70. <li><a href="#arm">What about ARM?</a></li>
  71. </ul>
  72. <h2>General questions</h2>
  73. <ul class="c">
  74. <li><a href="#install">How do I install libreboot?</a></li>
  75. <li><a href="#repugnantpi">How do I program an SPI flash chip with the Raspberry Pi?</a></li>
  76. <li><a href="#bootpassword">How do I set a boot password?</a></li>
  77. <li><a href="#writeprotect">How do I write-protect the flash chip?</a> (for example, to protect against firmware-level malware being installed)</li>
  78. <li><a href="#biossettings">How do I change the BIOS settings?</a></li>
  79. <li><a href="#bootloader">Do I need to install a bootloader when installing GNU/Linux?</a></li>
  80. <li><a href="#reinstallos">Do I need to re-flash when I re-install GNU/Linux?</a></li>
  81. <li><a href="#flashchip">What does a flash chip look like?</a></li>
  82. </ul>
  83. <h2>Freedom questions</h2>
  84. <ul class="c">
  85. <li><a href="#external-gpu">Are external GPUs (e.g. PCI-E) OK?</a></li>
  86. <li>
  87. <a href="#otherfirmware">What other firmware exists outside of libreboot?</a>
  88. <ul>
  89. <li><a href="#firmware-ec">EC (embedded controller) firmware</a></li>
  90. <li><a href="#firmware-hddssd">HDD/SSD firmware</a></li>
  91. <li><a href="#firmware-nic">NIC (ethernet controller)</a></li>
  92. <li><a href="#firmware-cpu">CPU microcode</a></li>
  93. <li><a href="#firmware-sound">Sound card</a></li>
  94. <li><a href="#firmware-webcam">Web cam</a></li>
  95. <li><a href="#firmware-usbhost">USB host controller</a></li>
  96. <li><a href="#firmware-wwan">WWAN firmware</a></li>
  97. </ul>
  98. </li>
  99. </ul>
  100. <h2>Operating Systems</h2>
  101. <ul class="c">
  102. <li><a href="#gnulinux">Can I use GNU/Linux?</a> (yes, you can)</li>
  103. <li><a href="#gnuhurd">Can I use GNU/Hurd?</a></li>
  104. <li><a href="#bsd">Can I use BSD?</a></li>
  105. <li><a href="#windows">Can I use Windows?</a></li>
  106. <li><a href="#otheros">Are other operating systems compatible?</a></li>
  107. </ul>
  108. <h2></h2>
  109. </div>
  110. <div>
  111. <h1>Important issues</h1>
  112. <h2 id="epochfail">My computer thinks it's 1970-01-01 (GM45 laptops) <span class="r"><a href="#epochfail">#epochfail</a></span></h2>
  113. <p>
  114. <strong>Use libreboot-unstable releases for now (until next stable release):
  115. <a href="https://libreboot.org/beta/">libreboot.org/beta</a> or build
  116. from libreboot.git. This was a bug in coreboot, fixed upstream and merged
  117. in libreboot-unstable.</strong>
  118. </p>
  119. <p>
  120. Alternatively, you can use kernel version 4.2 or older, if you
  121. wish to use libreboot 20150518.
  122. </p>
  123. <p>
  124. <a href="#pagetop">Back to top of page</a>
  125. </p>
  126. </div>
  127. <div>
  128. <h1>Hardware compatibility</h1>
  129. <h2 id="compatibility">What systems are compatible with libreboot? <span class="r"><a href="#compatibility">#compatibility</a></span></h2>
  130. <p>
  131. See <a href="../docs/hcl/index.html">../docs/hcl/index.html</a>.
  132. </p>
  133. <p>
  134. Several supported systems are also available with libreboot preinstalled.
  135. Check the <a href="../suppliers/">suppliers</a> page for more information.
  136. </p>
  137. <p>
  138. <a href="#pagetop">Back to top of page</a>
  139. </p>
  140. <h2 id="librem">Will the Purism Librem laptops be supported? <span class="r"><a href="#librem">#librem</a></span></h2>
  141. <p>
  142. Probably not. There are several privacy, security and freedom issues with these laptops, due to the Intel chipsets
  143. that they use. See <a href="#intel">#intel</a>. There are signed proprietary blobs which cannot be replaced
  144. (e.g. <a href="#intelme">Intel Management Engine</a> and <a href="#microcode">CPU microcode updates</a>).
  145. It uses the proprietary <a href="#fsp">Intel FSP</a> blob for the entire hardware initialization, which
  146. Intel <a href="#intelbastards">won't provide</a> the source code for. The Video BIOS (initialization firmware
  147. for the graphics hardware) is also proprietary. The libreboot project recommends avoiding this hardware entirely.
  148. </p>
  149. <p>
  150. 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,
  151. which immediately disqualifies these laptops from being added to libreboot. Google engineers have tried
  152. for many years to get source code from Intel, and to reverse engineer the blobs that Intel provides. So far, they have
  153. been unsuccessful. Google is also one of the companies that funds the coreboot project, and they hire a lot of the core
  154. developers, so it's not like they don't have vast resources at their disposal. Smaller companies have no chance.
  155. </p>
  156. <p>
  157. The librem does have coreboot support, but it's pretty meaningless (it's shimboot, which
  158. means that coreboot is just incorporating blobs. It's not real coreboot support,
  159. but rather, what is shamelessly passed off as coreboot support these days, where
  160. binary blobs for <strong>the entire</strong> hardware initialization is considered acceptable in the coreboot project).
  161. It should be noted, that the coreboot port for librem was done by a lone Google software
  162. developer (Duncan Laurie), not Purism, working independently. Purism had nothing to do with the port.
  163. </p>
  164. <p>
  165. <a href="#pagetop">Back to top of page</a>
  166. </p>
  167. <h2 id="intel">Why is the latest Intel hardware unsupported in libreboot? <span class="r"><a href="#intel">#intel</a></span></h2>
  168. <p>
  169. It is extremely unlikely that any post-2008 Intel hardware will ever be supported in libreboot, due to
  170. severe security and freedom issues; so severe, that <em>the libreboot project recommends avoiding all modern Intel hardware.
  171. If you have an Intel based system affected by the problems described below, then you should get rid of it as soon as possible</em>. The main issues are as follows:
  172. </p>
  173. <h3 id="intelme">Intel Management Engine (ME) <span class="r"><a href="#intelme">#intelme</a></span></h3>
  174. <p>
  175. Introduced in June 2006 in Intel's 965 Express Chipset Family of (Graphics and)
  176. Memory Controller Hubs, or (G)MCHs, and the ICH8 I/O Controller Family, the
  177. Intel Management Engine (ME) is a separate computing environment physically
  178. located in the (G)MCH chip. In Q3 2009, the first generation of Intel Core
  179. i3/i5/i7 (Nehalem) CPUs and the 5 Series Chipset family of Platform Controller
  180. Hubs, or PCHs, brought a more tightly integrated ME (now at version 6.0) inside
  181. the PCH chip, which itself replaced the ICH. Thus, the ME is <strong><em>present on all
  182. Intel desktop, mobile (laptop), and server systems since mid 2006</em></strong>.
  183. </p>
  184. <p>
  185. The ME consists of an ARC processor core (replaced with other processor cores in
  186. later generations of the ME), code and data caches, a timer, and a secure
  187. internal bus to which additional devices are connected, including a cryptography
  188. engine, internal ROM and RAM, memory controllers, and a <strong><em>direct memory access
  189. (DMA) engine</em></strong> to access the host operating system's memory as well as to
  190. reserve a region of protected external memory to supplement the ME's limited
  191. internal RAM. The ME also has <strong><em>network access</em></strong> with its own MAC address
  192. through an Intel Gigabit Ethernet Controller. Its boot program, stored on the
  193. internal ROM, loads a firmware "manifest" from the PC's SPI flash chip. This
  194. manifest is <strong><em>signed with a strong cryptographic key</em></strong>, which differs
  195. between versions of the ME firmware. If the manifest isn't signed by a specific
  196. Intel key, the boot ROM won't load and execute the firmware and the ME processor
  197. core will be halted.
  198. </p>
  199. <p>
  200. The ME firmware is compressed and consists of modules that are listed in the
  201. manifest along with secure cryptographic hashes of their contents. One module
  202. is the operating system kernel, which is based on a <strong><em>proprietary real-time
  203. operating system (RTOS) kernel</em></strong> called "ThreadX". The developer, Express
  204. Logic, sells licenses and source code for ThreadX. Customers such as Intel are
  205. forbidden from disclosing or sublicensing the ThreadX source code. Another
  206. module is the Dynamic Application Loader (DAL), which consists of a <strong><em>Java
  207. virtual machine</em></strong> and set of preinstalled Java classes for cryptography,
  208. secure storage, etc. The DAL module can load and execute additional ME modules
  209. from the PC's HDD or SSD. The ME firmware also includes a number of native
  210. application modules within its flash memory space, including Intel Active
  211. Management Technology (AMT), an implementation of a Trusted Platform Module
  212. (TPM), Intel Boot Guard, and audio and video DRM systems.
  213. </p>
  214. <p>
  215. The <a href="https://www.fsf.org/blogs/community/active-management-technology">
  216. Active Management Technology (AMT)</a> application, part of the Intel "vPro"
  217. brand, is a Web server and application code that enables remote users to power
  218. on, power off, view information about, and otherwise manage the PC. It can
  219. be <strong><em>used remotely even while the PC is powered off</em></strong> (via Wake-on-Lan).
  220. Traffic is encrypted using SSL/TLS libraries, but recall that all of the major
  221. SSL/TLS implementations have had highly publicized vulnerabilities. The AMT
  222. application itself has <strong><em><a
  223. href="https://en.wikipedia.org/wiki/Intel_Active_Management_Technology#Known_vulnerabilities_and_exploits">
  224. known vulnerabilities</a></em></strong>, which have been exploited to develop rootkits
  225. and keyloggers and covertly gain encrypted access to the management features of
  226. a PC. Remember that the ME has full access to the PC's RAM. This means that an
  227. attacker exploiting any of these vulnerabilities may gain access to everything
  228. on the PC as it runs: all open files, all running applications, all keys
  229. pressed, and more.
  230. </p>
  231. <p>
  232. <a href="https://mjg59.dreamwidth.org/33981.html">Intel Boot Guard</a> is an ME
  233. application introduced in Q2 2013 with ME firmware version 9.0 on 4th Generation
  234. Intel Core i3/i5/i7 (Haswell) CPUs. It allows a PC OEM to generate an
  235. asymmetric cryptographic keypair, install the public key in the CPU, and prevent
  236. the CPU from executing boot firmware that isn't signed with their private key.
  237. This means that <strong><em>coreboot and libreboot are impossible to port</em></strong> to such
  238. PCs, without the OEM's private signing key. Note that systems assembled from
  239. separately purchased mainboard and CPU parts are unaffected, since the vendor of
  240. the mainboard (on which the boot firmware is stored) can't possibly affect the
  241. public key stored on the CPU.
  242. </p>
  243. <p>
  244. ME firmware versions 4.0 and later (Intel 4 Series and later chipsets) include
  245. an ME application for <strong><em>audio and video <a
  246. href="https://defectivebydesign.org/what_is_drm_digital_restrictions_management">
  247. DRM</a></em></strong> called "Protected Audio Video Path" (PAVP). The ME receives from
  248. the host operating system an encrypted media stream and encrypted key, decrypts
  249. the key, and sends the encrypted media decrypted key to the GPU, which then
  250. decrypts the media. PAVP is also used by another ME application to draw an
  251. authentication PIN pad directly onto the screen. In this usage, the PAVP
  252. application directly controls the graphics that appear on the PC's screen in a
  253. way that the host OS cannot detect. ME firmware version 7.0 on PCHs with 2nd
  254. Generation Intel Core i3/i5/i7 (Sandy Bridge) CPUs replaces PAVP with a similar
  255. DRM application called "Intel Insider". Like the AMT application, these DRM
  256. applications, which in themselves are defective by design, demonstrate the
  257. omnipotent capabilities of the ME: this hardware and its proprietary firmware
  258. can access and control everything that is in RAM and even <strong><em>everything that is
  259. shown on the screen</em></strong>.
  260. </p>
  261. <p>
  262. The Intel Management Engine with its proprietary firmware has complete access to
  263. and control over the PC: it can power on or shut down the PC, read all open
  264. files, examine all running applications, track all keys pressed and mouse
  265. movements, and even capture or display images on the screen. And it has a
  266. network interface that is demonstrably insecure, which can allow an attacker on
  267. the network to inject rootkits that completely compromise the PC and can report
  268. to the attacker all activities performed on the PC. It is a threat to freedom,
  269. security, and privacy that can't be ignored.
  270. </p>
  271. <p>
  272. Before version 6.0 (that is, on systems from 2008/2009 and earlier), the ME can
  273. be disabled by setting a couple of values in the SPI flash memory. The ME
  274. firmware can then be removed entirely from the flash memory space. libreboot <a
  275. href="../docs/hcl/gm45_remove_me.html">does this</a> on the Intel 4 Series
  276. systems that it supports, such as the <a
  277. href="../docs/install/x200_external.html">Libreboot X200</a> and <a
  278. href="../docs/install/t400_external.html">Libreboot T400</a>. ME firmware
  279. versions 6.0 and later, which are found on all systems with an Intel Core
  280. i3/i5/i7 CPU and a PCH, include "ME Ingition" firmware that performs some
  281. hardware initialization and power management. If the ME's boot ROM does not
  282. find in the SPI flash memory an ME firmware manifest with a valid Intel
  283. signature, the whole PC will shut down after 30 minutes.
  284. </p>
  285. <p>
  286. Due to the signature verification, developing free replacement firmware for the
  287. ME is basically impossible. The only entity capable of replacing the ME
  288. firmware is Intel. As previously stated, the ME firmware includes proprietary
  289. code licensed from third parties, so Intel couldn't release the source code even
  290. if they wanted to. And even if they developed completely new ME firmware
  291. without third-party proprietary code and released its source code, the ME's boot
  292. ROM would reject any modified firmware that isn't signed by Intel. Thus, the ME
  293. firmware is both hopelessly proprietary and "tivoized".
  294. </p>
  295. <p><strong>
  296. In summary, the Intel Management Engine and its applications are a backdoor with
  297. total access to and control over the rest of the PC. The ME is a threat to
  298. freedom, security, and privacy, and the libreboot project strongly recommends
  299. avoiding it entirely. Since recent versions of it can't be removed, this means
  300. avoiding all recent generations of Intel hardware.
  301. </strong></p>
  302. <p>
  303. More information about the Management Engine can be found on various Web sites,
  304. including <a href="http://me.bios.io/Main_Page">me.bios.io</a>, <a
  305. href="http://io.netgarage.org/me/">unhuffme</a>, <a
  306. href="http://www.coreboot.org/Intel_Management_Engine">coreboot wiki</a>, and <a
  307. href="https://en.wikipedia.org/wiki/Intel_Active_Management_Technology">
  308. Wikipedia</a>. The book <strong><em><a href="https://www.apress.com/9781430265719">
  309. Platform Embedded Security Technology Revealed</a></em></strong> describes in great
  310. detail the ME's hardware architecture and firmware application modules.
  311. </p>
  312. <h3 id="fsp">Firmware Support Package (FSP) <span class="r"><a href="#fsp">#fsp</a></span></h3>
  313. <p>
  314. On all recent Intel systems, coreboot support has revolved around integrating a blob (for each system) called
  315. the <em>FSP</em> (firmware support package), which handles all of the hardware initialization, including
  316. 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,
  317. it would take years to replace. Intel distributes this blob to firmware developers, without source.
  318. </p>
  319. <p>
  320. Since the FSP is responsible for the early hardware initialization, that means it also handles SMM (System Management Mode). This is
  321. a special mode that operates below the operating system level. <strong>It's possible that rootkits could be implemented there, which could
  322. 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
  323. all.</strong> In fact, several SMM rootkits have been demonstrated in the wild (use a search engine to find them).
  324. </p>
  325. <h3 id="microcode">CPU microcode updates <span class="r"><a href="#microcode">#microcode</a></span></h3>
  326. <p>
  327. All modern x86 CPUs (from Intel and AMD) use what is called <em>microcode</em>. CPUs are extremely complex,
  328. and difficult to get right, so the circuitry is designed in a very generic way, where only basic instructions
  329. are handled in hardware. Most of the instruction set is implemented using microcode, which is low-level software
  330. running inside the CPU that can specify how the circuitry is to be used, for each instruction. The built-in microcode
  331. is part of the hardware, and read-only. Both the circuitry and the microcode can have bugs, which could cause reliability issues.
  332. </p>
  333. <p>
  334. Microcode <em>updates</em> are proprietary blobs, uploaded to the CPU at boot time, which patches the built-in
  335. microcode and disables buggy parts of the CPU to improve reliability. In the past, these updates were
  336. handled by the operating system kernel, but on all recent systems it is the boot firmware that must perform this task.
  337. Coreboot does distribute microcode updates for Intel and AMD CPUs, but libreboot cannot, because the whole point of libreboot
  338. is to be 100% <a href="https://www.gnu.org/philosophy/free-sw.html">free software</a>.
  339. </p>
  340. <p>
  341. On some older Intel CPUs, it is possible to exclude the microcode updates and not have any reliability issues in practise.
  342. All current libreboot systems work without microcode updates (otherwise, they wouldn't be supported in libreboot). However,
  343. all modern Intel CPUs require the microcode updates, otherwise the system will not boot at all, or it will be extremely
  344. unstable (memory corruption, for example).
  345. </p>
  346. <p>
  347. Intel CPU microcode updates are <em>signed</em>, which means that you could not even run a modified version, even if
  348. you had the source code. If you try to upload your own modified updates, the CPU will reject them. In other words,
  349. the microcode updates are <em><a href="https://www.gnu.org/proprietary/proprietary-tyrants.html">tivoized</a></em>.
  350. </p>
  351. <p>
  352. The microcode updates alter the way instructions behave on the CPU. That means they affect the way the CPU works, in
  353. a very fundamental way. That makes it software. The updates are proprietary, and are software, so we exclude them from
  354. libreboot. The microcode built into the CPU already is not so much of an issue, since we can't change it anyway (it's
  355. read-only).
  356. </p>
  357. <h3 id="intelbastards">Intel is uncooperative <span class="r"><a href="#intelbastards">#intelbastards</a></span></h3>
  358. <p>
  359. For years, coreboot has been struggling against Intel. Intel has been shown to be extremely uncooperative in general.
  360. Many coreboot developers, and companies, have tried to get Intel to cooperate; namely, releasing source code
  361. for the firmware components. Even Google, which sells millions of <em>chromebooks</em> (coreboot preinstalled)
  362. have been unable to persuade them.
  363. </p>
  364. <p>
  365. Even when Intel does cooperate, they still don't provide source code. They might provide limited information
  366. (datasheets) under strict corporate NDA (non-disclosure agreement), but even that is not guaranteed. Even ODMs and IBVs can't
  367. get source code from Intel, in most cases (they will just integrate the blobs that Intel provides).
  368. </p>
  369. <p>
  370. Recent Intel graphics chipsets also <a href="https://01.org/linuxgraphics/intel-linux-graphics-firmwares?langredirect=1">require firmware blobs</a>.
  371. </p>
  372. <p>
  373. Intel is <a href="https://www.phoronix.com/scan.php?page=news_item&px=Intel-Gfx-GuC-SLPC">only going to get worse</a> when it comes to user freedom. Libreboot has no support recent Intel platforms, precisely because
  374. of the problems described above. The only way to solve this is to get Intel to change their policies and to be more friendly
  375. to the <a href="https://www.gnu.org/philosophy/free-sw.html">free software</a> community. Reverse engineering won't solve anything long-term, unfortunately, but we need to keep doing it
  376. anyway. Moving forward, Intel hardware is a non-option unless a radical change happens within Intel.
  377. </p>
  378. <p>
  379. <strong>Basically, all Intel hardware from year 2010 and beyond will never be supported by libreboot. The libreboot project
  380. is actively ignoring all modern Intel hardware at this point, and focusing on alternative platforms.</strong>
  381. </p>
  382. <p>
  383. <a href="#pagetop">Back to top of page</a>
  384. </p>
  385. <h2 id="amd">Why is the latest AMD hardware unsupported in libreboot? <span class="r"><a href="#amd">#amd</a></span></h2>
  386. <p>
  387. It is extremely unlikely that any post-2013 AMD hardware will ever be supported in libreboot, due to
  388. severe security and freedom issues; so severe, that <em>the libreboot project recommends avoiding all modern AMD hardware.
  389. If you have an AMD based system affected by the problems described below, then you should get rid of it as soon as possible</em>. The main issues are as follows:
  390. </p>
  391. <h3 id="amdpsp">AMD Platform Security Processor (PSP) <span class="r"><a href="#amdpsp">#amdpsp</a></span></h3>
  392. <p>
  393. This is basically AMD's own version of the <a href="#intelme">Intel Management Engine</a>. It has
  394. all of the same basic security and freedom issues, although the implementation is wildly different.
  395. </p>
  396. <p>
  397. The Platform Security Processor (PSP) is built in on all Family 16h +
  398. systems (basically anything post-2013), and controls the main x86 core startup. PSP firmware is
  399. cryptographically signed with a strong key similar to the Intel ME. If
  400. the PSP firmware is not present, or if the AMD signing key is not
  401. present, the x86 cores will not be released from reset, rendering the
  402. system inoperable.
  403. </p>
  404. <p>
  405. The PSP is an ARM core with TrustZone technology, built onto the main
  406. CPU die. As such, it has the ability to hide its own program code,
  407. scratch RAM, and any data it may have taken and stored from the
  408. lesser-privileged x86 system RAM (kernel encryption keys, login data,
  409. browsing history, keystrokes, who knows!). To make matters worse, the
  410. PSP theoretically has access to the entire system memory space (AMD
  411. either will not or cannot deny this, and it would seem to be required to
  412. allow the DRM "features" to work as intended), which means that it has
  413. at minimum MMIO-based access to the network controllers and any other
  414. PCI/PCIe peripherals installed on the system.
  415. </p>
  416. <p>
  417. In theory any malicious entity with access to the AMD signing key would
  418. be able to install persistent malware that could not be eradicated
  419. without an external flasher and a known good PSP image. Furthermore,
  420. multiple security vulnerabilities have been demonstrated in AMD firmware
  421. in the past, and there is every reason to assume one or more zero day
  422. vulnerabilities are lurking in the PSP firmware. Given the extreme
  423. privilege level (ring -2 or ring -3) of the PSP, said vulnerabilities
  424. would have the ability to remotely monitor and control any PSP enabled
  425. machine. completely outside of the user's knowledge.
  426. </p>
  427. <p>
  428. Much like with the Intel Boot Guard (an application of the Intel Management Engine),
  429. AMD's PSP can also act as a tyrant by checking signatures on
  430. any boot firmware that you flash, making replacement boot firmware (e.g. libreboot, coreboot)
  431. impossible on some boards. Early anecdotal reports indicate that AMD's boot guard counterpart
  432. will be used on most OEM hardware, disabled only on so-called &quot;enthusiast&quot; CPUs.
  433. </p>
  434. <h3 id="amdimc">AMD IMC firmware <span class="r"><a href="#amdimc">#amdimc</a></span></h3>
  435. <p>
  436. Read <a href="https://www.coreboot.org/AMD_IMC">https://www.coreboot.org/AMD_IMC</a>.
  437. </p>
  438. <h3 id="amdsmu">AMD SMU firmware <span class="r"><a href="#amdsmu">#amdsmu</a></span></h3>
  439. <p>
  440. Handles some power management for PCIe devices (without this, your laptop
  441. will not work properly) and several other power management related features.
  442. </p>
  443. <p>
  444. The firmware is signed, although on older AMD hardware it is a symmetric key, which means
  445. that with access to the key (if leaked) you could sign your own modified version and run it.
  446. Rudolf Marek (coreboot hacker) found out how to extract this key <a href="https://media.ccc.de/v/31c3_-_6103_-_en_-_saal_2_-_201412272145_-_amd_x86_smu_firmware_analysis_-_rudolf_marek">in this video demonstration</a>, and
  447. based on this work, Damien Zammit (another coreboot hacker) <a href="https://github.com/zamaudio/smutool/">partially replaced it</a> with
  448. free firmware, but on the relevant system (ASUS F2A85-M) there were still other blobs present (Video BIOS, and others) preventing
  449. the hardware from being supported in libreboot.
  450. </p>
  451. <h3 id="amdagesa">AMD AGESA firmware <span class="r"><a href="#amdagesa">#amdagesa</a></span></h3>
  452. <p>
  453. This is responsible for virtually all core hardware initialization on modern AMD systems. In 2011,
  454. AMD started cooperating with the coreboot project, releasing this as source code under a
  455. free license. In 2014, they stopped releasing source code and started releasing AGESA
  456. as binary blobs instead. This makes AGESA now equivalent to <a href="#fsp">Intel FSP</a>.
  457. </p>
  458. <h3 id="amdmicrocode">AMD CPU microcode updates <span class="r"><a href="#amdmicrocode">#amdmicrocode</a></span></h3>
  459. <p>
  460. Read the Intel section <a href="#microcode">#microcode</a>. AMD's updates are practically the same, though
  461. it was found with much later hardware in AMD that you could run without microcode updates. It's unknown
  462. whether the updates are needed on all AMD boards (depends on CPU).
  463. </p>
  464. <h3 id="amdbastards">AMD is incompetent (and uncooperative) <span class="r"><a href="#amdbastards">#amdbastards</a></span></h3>
  465. <p>
  466. AMD seemed like it was on the right track in 2011 when it started cooperating with
  467. and releasing source code for several critical components to the coreboot project.
  468. It was not to be. For so-called economic reasons, they decided that it was not
  469. worth the time to invest in the coreboot project anymore.
  470. </p>
  471. <p>
  472. For a company to go from being so good, to so bad, in just 3 years, shows
  473. that something is seriously wrong with AMD. Like Intel, they do not deserve your
  474. money.
  475. </p>
  476. <p>
  477. Given the current state of Intel hardware with the Management Engine, it
  478. is our opinion that all performant x86 hardware newer
  479. than the AMD Family 15h CPUs (on AMD's side) or anything post-2009 on Intel's
  480. side is defective by design and cannot safely be
  481. used to store, transmit, or process sensitive data. Sensitive data is
  482. any data in which a data breach would cause significant economic harm to
  483. the entity which created or was responsible for storing said data, so
  484. this would include banks, credit card companies, or retailers (customer
  485. account records), in addition to the "usual" engineering and software
  486. development firms. This also affects whistleblowers, or anyone who needs
  487. actual privacy and security.
  488. </p>
  489. <p>
  490. <a href="#pagetop">Back to top of page</a>
  491. </p>
  492. <h2 id="whatcaniuse">What *can* I use, then?</h2>
  493. <p>
  494. Libreboot has support for fam15h AMD hardware (~2012 gen) and some older Intel platforms (~2006-2009 gen).
  495. We also have support for some ARM chipsets (rk3288). On the Intel side, we're also interested in some
  496. of the chipsets that use Atom CPUs (rebranded from older chipsets, mostly using ich7-based southbridges).
  497. We're also interested in PowerPC (POWER8 and POWER9, or <em title="NewerPOOP">OpenPOWER</em>) which <a href="https://raptorengineeringinc.com/content/base/main.htm">Raptor Engineering Inc.</a> is
  498. looking into.
  499. </p>
  500. <p>
  501. Check <a href="#compatibility">#compatibility</a> for more information.
  502. </p>
  503. <h2 id="t400t500ati">Will libreboot work on a ThinkPad T400 or T500 with an ATI GPU? <span class="r"><a href="#t400t500ati">#t400t500ati</a></span></h2>
  504. <p>
  505. Short answer: yes. These laptops also have an Intel GPU inside, which libreboot uses. The ATI GPU is ignored by libreboot.
  506. </p>
  507. <p>
  508. These laptops use what is called <em>switchable graphics</em>, where it will have both an Intel and ATI GPU.
  509. Coreboot will allow you to set (using nvramtool) a parameter, specifying whether you would like to use
  510. Intel or ATI. The ATI GPU lacks free native graphics initialization in coreboot, unlike the Intel GPU.
  511. </p>
  512. <p>
  513. Libreboot modifies coreboot, in such a way where this nvramtool setting is ignored. Libreboot will just
  514. assume that you want to use the Intel GPU. Therefore, the ATI GPU is completely disabled on these laptops.
  515. Intel is used instead, with the free native graphics initialization (VBIOS replacement) that exists in
  516. coreboot.
  517. </p>
  518. <p>
  519. <a href="#pagetop">Back to top of page</a>
  520. </p>
  521. <h2 id="thinkpads">Will the latest ThinkPad models be supported? <span class="r"><a href="#thinkpads">#thinkpads</a></span></h2>
  522. <p>
  523. The latest ThinkPad generation supported in libreboot are the ones
  524. using the GM45 (ICH9) chipsets, such as the ThinkPad X200 or T400.
  525. ThinkPads newer than this generation will probably never be supported in libreboot,
  526. due to the fact that there are signed blobs that cannot be removed or replaced
  527. (e.g. <a href="#intelme">Intel Management Engine</a>). See <a href="#intel">#intel</a>. Newer Lenovo laptops are
  528. also <a href="https://www.phoronix.com/scan.php?page=news_item&px=Intel-Boot-Guard-Kills-Coreboot">starting to use</a> the <a href="https://mjg59.dreamwidth.org/33981.html">Intel Boot Guard</a>, which specifically blocks the use of
  529. firmware that has not been signed by the OEM.
  530. </p>
  531. <p>
  532. Coreboot does have support for some more recent Lenovo laptops, but libreboot cannot support most of these.
  533. </p>
  534. <p>
  535. <a href="#pagetop">Back to top of page</a>
  536. </p>
  537. <h2 id="desktops">Will desktop/server hardware be supported? <span class="r"><a href="#desktops">#desktops</a></span></h2>
  538. <p>
  539. Libreboot now supports desktop hardware: <a href="../docs/hcl/index.html#supported_desktops_x86amdintel">../docs/hcl/index.html#supported_desktops_x86amdintel</a> (with full native video initialization).
  540. </p>
  541. <p>
  542. A common issue with desktop hardware is the Video BIOS, when no onboard video is present, since
  543. every video card has a different Video BIOS. Onboard GPUs also require one, so those still have to be
  544. replaced with free software (non-trivial task). Libreboot has to initialize the graphics chipset,
  545. but most graphics cards lack a free Video BIOS for this purpose. Some desktop motherboards supported in
  546. coreboot do have onboard graphics chipsets, but these also require a proprietary Video BIOS, in most cases.
  547. </p>
  548. <p>
  549. <a href="#pagetop">Back to top of page</a>
  550. </p>
  551. <h2 id="randomhardware">Hi, I have &lt;insert random system here&gt;, is it supported? <span class="r"><a href="#randomhardware">#randomhardware</a></span></h2>
  552. <p>
  553. Most likely not. First, you must consult coreboot's own hardware compatibility list
  554. at <a href="http://www.coreboot.org/Supported_Motherboards">http://www.coreboot.org/Supported_Motherboards</a> and,
  555. if it is supported, check whether it can run without any proprietary blobs in the ROM image. If it can: wonderful! Libreboot
  556. can support it, and you can add support for it using the notes at <a href="../docs/maintain/index.html">../docs/maintain/index.html</a>.
  557. 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
  558. where the system is still usable in some defined way.
  559. </p>
  560. <p>
  561. For those systems where no coreboot support exists, you must first port it to coreboot and,
  562. if it can then run without any blobs in the ROM image, it can be added to libreboot.
  563. See: <a href="http://www.coreboot.org/Motherboard_Porting_Guide">Motherboard Porting Guide</a> (this is just the tip of the iceberg!)
  564. </p>
  565. <p>
  566. Please note that board development should be done upstream (in coreboot) and merged downstream (into libreboot). This is
  567. the correct way to do it, and it is how the libreboot project is coordinated so as to avoid too much forking of the
  568. coreboot source code.
  569. </p>
  570. <p>
  571. <a href="#pagetop">Back to top of page</a>
  572. </p>
  573. <h2 id="arm">What about ARM? <span class="r"><a href="#arm">#arm</a></span></h2>
  574. <p>
  575. Libreboot has support for some ARM based laptops, using the <em>Rockchip RK3288</em> SoC.
  576. Check the libreboot <a href="../docs/hcl/index.html#supported_list">hardware compatibility list</a>, for more information.
  577. </p>
  578. <p>
  579. <a href="#pagetop">Back to top of page</a>
  580. </p>
  581. </div>
  582. <div>
  583. <h1>General questions</h1>
  584. <h2 id="install">How do I install libreboot? <span class="r"><a href="#install">#install</a></span></h2>
  585. <p>
  586. See <a href="../docs/install/index.html">../docs/install/index.html</a>
  587. </p>
  588. <p>
  589. <a href="#pagetop">Back to top of page</a>
  590. </p>
  591. <h2 id="repugnantpi">How do I program an SPI flash chip with the Raspberry Pi? <span class="r"><a href="#repugnantpi">#repugnantpi</a></span></h2>
  592. <p>
  593. The RPi can be used to install libreboot onto a system that uses SPI flash, but libreboot intentionally doesn't document it.
  594. Why? Blobs. The RPi requires a blob for the integrated video chipset, in order to boot. This was true of the original RPi, and
  595. has continued to be true for all subsequent revisions of the hardware. The RPi people clearly don't give a damn about your freedom,
  596. so we don't give a damn about endorsing them.
  597. </p>
  598. <p>
  599. There are other, more freedom-friendly SPI programmers available, documented on <a href="../docs/install/index.html">../docs/install/index.html</a>.
  600. </p>
  601. <p>
  602. <a href="#pagetop">Back to top of page</a>
  603. </p>
  604. <h2 id="bootpassword">How do I set a boot password? <span class="r"><a href="#bootpassword">#bootpassword</a></span></h2>
  605. <p>
  606. If you are using the GRUB payload, you can add a username and password (salted, hashed)
  607. to your GRUB configuration that resides inside the flash chip. The following guides (which
  608. also cover full disk encryption, including the /boot/ directory) show how to set a boot password
  609. in GRUB: <a href="../docs/gnulinux/encrypted_trisquel.html">../docs/gnulinux/encrypted_trisquel.html</a> and <a href="../docs/gnulinux/encrypted_parabola.html">../docs/gnulinux/encrypted_parabola.html</a>
  610. </p>
  611. <p>
  612. <a href="#pagetop">Back to top of page</a>
  613. </p>
  614. <h2 id="writeprotect">How do I write-protect the flash chip? <span class="r"><a href="#writeprotect">#writeprotect</a></span></h2>
  615. <p>
  616. By default, there is no write-protection on a libreboot system. This is for usability reasons,
  617. because most people do not have easy access to an external programmer for re-flashing their firmware,
  618. or they find it inconvenient to use an external programmer.
  619. </p>
  620. <p>
  621. On some systems, it is possible to write-protect the firmware, such that it is rendered read-only
  622. at the OS level (external flashing is still possible, using dedicated hardware). For example, on
  623. current GM45 laptops (e.g. ThinkPad X200, T400), you can write-protect (see <a href="../docs/hcl/gm45_remove_me.html#ich9gen">../docs/hcl/gm45_remove_me.html#ich9gen</a>).
  624. Depending on your flash chip,
  625. you can also write-protect the i945 laptops, such as the ThinkPad X60 or T60 (see <a href="../docs/security/x60_security.html">../docs/security/x60_security.html</a>)
  626. and <a href="../docs/security/t60_security.html">../docs/security/t60_security.html</a> for links to a video explaining it).
  627. </p>
  628. <p>
  629. It's possible to write-protect on all libreboot systems, but the instructions need to be written.
  630. The documentation is in the main git repository, so you are welcome to submit patches adding these instructions.
  631. </p>
  632. <p>
  633. <a href="#pagetop">Back to top of page</a>
  634. </p>
  635. <h2 id="biossettings">How do I change the BIOS settings? <span class="r"><a href="#biossettings">#biossettings</a></span></h2>
  636. <p>
  637. Libreboot actually uses the <a href="http://www.coreboot.org/GRUB2">GRUB payload</a>.
  638. More information about payloads can be found at <a href="http://www.coreboot.org/Payloads">coreboot.org/Payloads</a>.
  639. </p>
  640. <p>
  641. Libreboot inherits the modular payload concept from coreboot, which means that pre-OS bare-metal <em>BIOS setup</em> programs
  642. are not very practical. Coreboot (and libreboot) does include a utility called <em>nvramtool</em>, which can be used
  643. to change some settings. You can find nvramtool under <em>coreboot/util/nvramtool/</em>, in the libreboot source archives.
  644. </p>
  645. <p>
  646. The <em>-a</em> option in nvramtool will list the available options, and <em>-w</em> can be used to change them. Consult
  647. the nvramtool documentation on the coreboot wiki for more information.
  648. </p>
  649. <p>
  650. In practise, you don't need to change any of those settings, in most cases.
  651. </p>
  652. <p>
  653. Libreboot locks the CMOS table, to ensure consistent functionality for all users.
  654. You can use:<br/>
  655. <strong>nvramtool -C yourrom.rom -w somesetting=somevalue</strong><br/>
  656. This will change the default inside that ROM image, and then you can re-flash it.
  657. </p>
  658. <p>
  659. <a href="#pagetop">Back to top of page</a>
  660. </p>
  661. <h2 id="bootloader">Do I need to install a bootloader when installing GNU/Linux? <span class="r"><a href="#bootloader">#bootloader</a></span></h2>
  662. <p>
  663. Libreboot integrates the GRUB bootloader already, as a <em><a href="http://www.coreboot.org/Payloads">payload</a></em>. This means
  664. that the GRUB bootloader is actually <em>flashed</em>, as part of the boot firmware (libreboot). This means that you do
  665. not have to install a boot loader on the HDD or SSD, when installing GNU/Linux. You'll be able to boot GNU/Linux just fine,
  666. using the bootloader (GRUB) that is in the flash chip.
  667. </p>
  668. <p>
  669. This also means that even if you remove the HDD or SSD, you'll still have a functioning bootloader installed which
  670. could be used to boot a live GNU/Linux distribution installer from a USB flash drive.
  671. See <a href="../docs/gnulinux/grub_boot_installer.html">.../docs/gnulinux/grub_boot_installer.html</a>
  672. </p>
  673. <p>
  674. <a href="#pagetop">Back to top of page</a>
  675. </p>
  676. <h2 id="reinstallos">Do I need to re-flash when I re-install GNU/Linux? <span class="r"><a href="#reinstallos">#reinstallos</a></span></h2>
  677. <p>
  678. Not anymore. Recent versions of libreboot (using the GRUB payload) will automatically
  679. switch to a GRUB configuration on the HDD or SSD, if it exists. You can also load a different
  680. GRUB configuration, from any kind of device that is supported in GRUB (such as a USB flash drive). For more information,
  681. see <a href="../docs/gnulinux/grub_cbfs.html">../docs/gnulinux/grub_cbfs.html</a>
  682. </p>
  683. <p>
  684. <a href="#pagetop">Back to top of page</a>
  685. </p>
  686. <h2 id="flashchip">What does a flash chip look like? <span class="r"><a href="#flashchip">#flashchip</a></span></h2>
  687. <p>
  688. Click on the images for the full size.
  689. </p>
  690. <p>
  691. SOIC-8 SPI flash chip:<br/>
  692. <img class="thumb cssbox_thumb" tabindex=1 src="images/soic8.jpg" alt="SOIC-8 SPI flash chip" /><span class="cssbox_full"><img src="images/soic8.jpg" alt="SOIT-8 SPI flash chip" /></span>
  693. </p>
  694. <p>
  695. SOIC-16 SPI flash chip:<br/>
  696. <img class="thumb cssbox_thumb" tabindex=1 src="images/soic16.jpg" alt="SOIC-16 SPI flash chip" /><span class="cssbox_full"><img src="images/soic16.jpg" alt="SOIC-16 SPI flash chip" /></span>
  697. </p>
  698. <p>
  699. <a href="#pagetop">Back to top of page</a>
  700. </p>
  701. </div>
  702. <div>
  703. <h1>Freedom questions</h1>
  704. <h2 id="external-gpu">Are external GPUs (e.g. PCI-E) OK? <span class="r"><a href="#external-gpu">#external-gpu</a></span></h2>
  705. <p>
  706. The Video BIOS is present on most video hardware. On all current libreboot systems, this is implemented using free software.
  707. The Video BIOS is responsible for initializing any sort of visual display; without it, you'd have what's called
  708. a <em>headless</em> system.
  709. </p>
  710. <p>
  711. For integrated graphics, the VBIOS is usually embedded as an <em>option ROM</em> in the main boot firmware. For external
  712. graphics, the VBIOS is usually on the graphics card itself. This is usually proprietary; the only difference is that
  713. SeaBIOS executes it (alternatively, you embed it in a coreboot ROM image and have coreboot executes it, if you use
  714. a different payload, such as GRUB).
  715. </p>
  716. <p>
  717. We're going to tentatively say no, they're not OK. Unless you're actively working to replace the VBIOS, or find out how
  718. to get a visual display without it (possible in some cases, if the kernel driver can be modified to work without it,
  719. possibly only needing certain non-executable data).
  720. </p>
  721. <p>
  722. <a href="#pagetop">Back to top of page</a>
  723. </p>
  724. <h2 id="otherfirmware">What other firmware exists outside of libreboot? <span class="r"><a href="#otherfirmware">#otherfirmware</a></span></h2>
  725. <p>
  726. The main freedom issue on any system, is the boot firmware (usually referred to as a BIOS or UEFI). Libreboot replaces the boot firmware
  727. with fully free code, but even with libreboot, there may still be other hardware components in the system (e.g. laptop) that run
  728. their own dedicated firmware, sometimes proprietary. These are on secondary processors, where the firmware is usually read-only, written for very specific tasks.
  729. While these are unrelated to libreboot, technically speaking, it makes sense to document some of the issues here.
  730. </p>
  731. <p>
  732. Note that these issues are not unique to libreboot systems. They apply universally, to most systems. The issues described below
  733. are the most common (or otherwise critical).
  734. </p>
  735. <p>
  736. Dealing with these problems will most likely be handled by a separate project.
  737. </p>
  738. <h3 id="firmware-ec">EC (embedded controller) firmware <span class="r"><a href="#firmware-ec">#firmware-ec</a></span></h3>
  739. <p>
  740. Most (all?) laptops have this. The EC (embedded controller) is a small, separate processor that basically processes inputs/outputs
  741. that are specific to laptops. For example:
  742. </p>
  743. <ul class="c">
  744. <li>
  745. When you flick the radio on/off switch, the EC will enable/disable the wireless devices (wifi, bluetooth, etc) and enable/disable
  746. an LED that indicates whether it's turned on or not
  747. </li>
  748. <li>
  749. Listen to another chip that produces temperature readings, adjusting fan speeds accordingly (or turning the fan(s) on/off).
  750. </li>
  751. <li>
  752. Takes certain inputs from the keyboard, e.g. brightness up/down, volume up/down.
  753. </li>
  754. <li>
  755. Detect when the lid is closed or opened, and send a signal indicating this.
  756. </li>
  757. <li>
  758. Etc.
  759. </li>
  760. </ul>
  761. <p>
  762. Alexander Couzens from coreboot (lynxis on coreboot IRC) is working on a free EC firmware replacement for the ThinkPads
  763. that are supported in libreboot. See: <a href="https://github.com/lynxis/h8s-ec">https://github.com/lynxis/h8s-ec</a> (not ready yet).
  764. </p>
  765. <p>
  766. Most (all?) chromebooks have free EC firmware. Libreboot is currently looking into supporting a few ARM-based chromebooks.
  767. </p>
  768. <p>
  769. EC is only present on laptops. On desktop/server boards it is absent (not required).
  770. </p>
  771. <p>
  772. <a href="#pagetop">Back to top of page</a>
  773. </p>
  774. <h3 id="firmware-hddssd">HDD/SSD firmware <span class="r"><a href="#firmware-hddssd">#firmware-hddssd</a></span></h3>
  775. <p>
  776. HDDs and SSDs have firmware in them, intended to handle the internal workings of the device while exposing a simple,
  777. standard interface (such as AHCI/SATA) that the OS software can use, generically. This firmware is transparent to the user
  778. of the drive.
  779. </p>
  780. <p>
  781. HDDs and SSDs are quite complex, and these days contain quite complex hardware which is even capable of running an entire
  782. operating system (by this, we mean that the drive itself is capable of running its own embedded OS), even GNU/Linux
  783. or BusyBox/Linux.
  784. </p>
  785. <p>
  786. SSDs and HDDs are a special case, since they are persistent storage devices as well as computers.
  787. </p>
  788. <p>
  789. Example attack that malicious firmware could do: substitute your SSH keys, allowing unauthorized remote access by an unknown
  790. adversary. Or maybe substitute your GPG keys. SATA drives can also have DMA (through the controller), which means that they could read
  791. from system memory; the drive can have its own hidden storage, theoretically, where it could read your LUKS keys and store them
  792. unencrypted for future retrieval by an adversary.
  793. </p>
  794. <p>
  795. With proper IOMMU and use of USB instead of SATA, it might be possible to mitigate any DMA-related issues that could arise.
  796. </p>
  797. <p>
  798. Some proof of concepts have been demonstrated. For HDDs:<br/>
  799. <a href="https://spritesmods.com/?art=hddhack&page=1">https://spritesmods.com/?art=hddhack&amp;page=1</a><br/>
  800. For SSDs:<br/>
  801. <a href="http://www.bunniestudios.com/blog/?p=3554">http://www.bunniestudios.com/blog/?p=3554</a>
  802. </p>
  803. <p>
  804. Viable free replacement firmware is currently unknown to exist. For SSDs, the <a href="http://www.openssd-project.org/wiki/The_OpenSSD_Project">OpenSSD</a> project may be interesting.
  805. </p>
  806. <p>
  807. Apparently, SATA drives themselves don't have DMA but can make use of it through the controller.
  808. This <a href="http://www.lttconn.com/res/lttconn/pdres/201005/20100521170123066.pdf">http://www.lttconn.com/res/lttconn/pdres/201005/20100521170123066.pdf</a> (pages
  809. 388-414, 420-421, 427, 446-465, 492-522, 631-638) and this <a href="http://www.intel.co.uk/content/dam/www/public/us/en/documents/technical-specifications/serial-ata-ahci-spec-rev1_3.pdf">http://www.intel.co.uk/content/dam/www/public/us/en/documents/technical-specifications/serial-ata-ahci-spec-rev1_3.pdf</a> (pages 59, 67, 94, 99).
  810. </p>
  811. <p>
  812. The following is based on discussion with Peter Stuge (CareBear\) in the coreboot IRC channel on Friday, 18 September 2015,
  813. when investigating whether the SATA drive itself can make use of DMA. The following is based on the datasheets linked above:
  814. </p>
  815. <p>
  816. According to those linked documents, FIS type 39h is <em>&quot;DMA Activate FIS - Device to Host&quot;</em>. It mentions
  817. <em>&quot;transfer of data from the host to the device, and goes on to say:
  818. 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
  819. and shall transmit in this FIS the data corresponding to the host memory regions indicated by the DMA controller's context.&quot;</em>
  820. 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
  821. for DMA to happen, but unless the host software has already or will in the future set up this DMA transfer then nothing happens.
  822. <strong>A drive can also send DMA Setup</strong>.
  823. 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.
  824. The document goes on to say <em>&quot;Upon receiving a DMA Setup, the receiver of the FIS shall validate the received DMA Setup request.&quot;</em> -
  825. in other words, the host is supposed to validate; but maybe there's a bug there.
  826. The document goes on to say <em>&quot;The specific implementation of the buffer identifier and buffer/address validation is not specified&quot;</em> - so noone will actually bother.
  827. <em>&quot;the receiver of the FIS&quot;</em> - in the case we're considering, that's the host controller hardware in the chipset and/or the kernel driver (most
  828. likely the kernel driver). All SATA devices have flash-upgradeable firmware, which can usually be updated by running software in the operating system (e.g. GNU/Linux);
  829. <strong>malicious software running as root could update this firmware, or the firmware could already be malicious</strong>.
  830. 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.
  831. </p>
  832. <p>
  833. 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
  834. can use more bandwidth than USB 2.0 is capable of),
  835. but for SSDs it might be problematic (unless you're using USB 3.0, which is not yet usable in freedom. See <a href="#firmware-usbhost">#firmware-usbhost</a>).
  836. </p>
  837. <p>
  838. 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
  839. attempt a &quot;fuzzing&quot; attack (e.g. sending malformed USB descriptors, which is how the tyrant DRM on the Playstation 3 was broken, so
  840. that users could run their own operating system and run unsigned code).
  841. (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
  842. safest protocols, precisely because USB devices have no DMA)
  843. </p>
  844. <p>
  845. Other links:
  846. </p>
  847. <ul class="c">
  848. <li><a href="http://motherboard.vice.com/read/the-nsas-undetectable-hard-drive-hack-was-first-demonstrated-a-year-ago">http://motherboard.vice.com/read/the-nsas-undetectable-hard-drive-hack-was-first-demonstrated-a-year-ago</a></li>
  849. </ul>
  850. <p>
  851. It is recommended that you use full disk encryption, on HDDs connected via USB. There are several adapters available
  852. online, that allow you to connect SATA HDDs via USB. Libreboot documents how to install several GNU/Linux distributions
  853. with full disk encryption. You can adapt these for use with USB drives:
  854. </p>
  855. <ul class="c">
  856. <li><a href="../docs/gnulinux/encrypted_trisquel.html">Full disk encryption with Trisquel GNU/Linux</a></li>
  857. <li><a href="../docs/gnulinux/encrypted_parabola.html">Full disk encryption with Parabola GNU/Linux</a></li>
  858. </ul>
  859. <p>
  860. The current theory (unproven) is that this will at least prevent malicious drives from wrongly manipulating data
  861. being read from or written to the drive, since it can't access your LUKS key if it's only ever in RAM,
  862. provided that the HDD doesn't have DMA (USB devices don't have DMA). The worst that it could do in this case
  863. is destroy your data. Of course, you should make sure never to put any keyfiles in the LUKS header. <strong>Take what
  864. this paragraph says with a pinch of salt. This is still under discussion, and none of this is proven.</strong>
  865. </p>
  866. <p>
  867. <a href="#pagetop">Back to top of page</a>
  868. </p>
  869. <h3 id="firmware-nic">NIC (ethernet controller) <span class="r"><a href="#firmware-nic">#firmware-nic</a></span></h3>
  870. <p>
  871. Ethernet NICs will typically run firmware inside, which is responsible for initializing the device internally.
  872. Theoretically, it could be configured to drop packets, or even modify them.
  873. </p>
  874. <p>
  875. With proper IOMMU, it might be possible to mitigate the DMA-related issues.
  876. A USB NIC can also be used, which does not have DMA.
  877. </p>
  878. <p>
  879. <a href="#pagetop">Back to top of page</a>
  880. </p>
  881. <h3 id="firmware-cpu">CPU microcode <span class="r"><a href="#firmware-cpu">#firmware-cpu</a></span></h3>
  882. <p>
  883. Implements an instruction set. See <a href="#microcode">#microcode</a> for a brief description.
  884. Here we mean microcode built in to the CPU. We are not talking about the updates supplied by the boot firmware
  885. (libreboot does not include microcode updates, and only supports systems that will work without it)
  886. Microcode can be very powerful. No proof that it's malicious, but it could theoretically
  887. </p>
  888. <p>
  889. There isn't really a way to solve this, unless you use a CPU which does not have microcode.
  890. (ARM CPUs don't, but most ARM systems require blobs for the graphics hardware at present, and typically
  891. have other things like soldered wifi which might require blobs)
  892. </p>
  893. <p>
  894. CPUs often on modern systems have a processor inside it for things like power management.
  895. ARM for example, has lots of these.
  896. </p>
  897. <p>
  898. <a href="#pagetop">Back to top of page</a>
  899. </p>
  900. <h3 id="firmware-sound">Sound card <span class="r"><a href="#firmware-sound">#firmware-sound</a>)</h3>
  901. <p>
  902. Sound hardware (integrated or discrete) typically has firmware on it (DSP) for processing input/output.
  903. Again, a USB DAC is a good workaround.
  904. </p>
  905. <p>
  906. <a href="#pagetop">Back to top of page</a>
  907. </p>
  908. <h3 id="firmware-webcam">Web cam <span class="r"><a href="#firmware-webcam">#firmware-webcam</a></h3>
  909. <p>
  910. Webcams have firmware integrated into them that process the image input into the camera; adjusting focus,
  911. white balancing and so on. Can use USB webcam hardware, to work around potential DMA issues; integrated webcams
  912. (on laptops, for instance) are discouraged by the libreboot project.
  913. </p>
  914. <p>
  915. <a href="#pagetop">Back to top of page</a>
  916. </p>
  917. <h3 id="firmware-usbhost">USB host controller <span class="r"><a href="#firmware-usbhost">#firmware-usbhost</a></span></h3>
  918. <p>
  919. Doesn't really apply to current libreboot systems (none of them have USB 3.0 at the moment), but
  920. USB 3.0 host controllers typically rely on firmware to implement the XHCI specification. Some newer
  921. coreboot ports also require this blob, if you want to use USB 3.0.
  922. </p>
  923. <p>
  924. This doesn't affect libreboot at the moment, because all current systems that are supported only
  925. have older versions of USB available. USB devices also don't have DMA (but the USB host controller itself does).
  926. </p>
  927. <p>
  928. With proper IOMMU, it might be possible to mitigate the DMA-related issues (with the host controller).
  929. </p>
  930. <p>
  931. <a href="#pagetop">Back to top of page</a>
  932. </p>
  933. <h3 id="firmware-wwan">WWAN firmware <span class="r"><a href="#firmware-wwan">#firmware-wwan</a></span></h3>
  934. <p>
  935. Some laptops might have a simcard reader in them, with a card for handling WWAN, connecting to a 3g/4g (e.g. GSM) network.
  936. This is the same technology used in mobile phones, for remote network access (e.g. internet).
  937. </p>
  938. <p>
  939. NOTE: not to be confused with wifi. Wifi is a different technology, and entirely unrelated.
  940. </p>
  941. <p>
  942. The baseband processor inside the WWAN chip will have its own embedded operating system, most likely proprietary. Use of this
  943. technology also implies the same privacy issues as with mobile phones (remote tracking by the GSM network, by triangulating the signal).
  944. </p>
  945. <p>
  946. On some laptops, these cards use USB (internally), so won't have DMA, but it's still a massive freedom and privacy issue.
  947. If you have an internal WWAN chip/card, the libreboot project recommends that you disable and (ideally, if possible) physically
  948. remove the hardware. If you absolutely must use this technology, an external USB dongle is much better because it can be
  949. easily removed when you don't need it, thereby disabling any external entities from tracking your location.
  950. </p>
  951. <p>
  952. Use of ethernet or wifi is recommended, as opposed to mobile networks, as these are generally much safer.
  953. </p>
  954. <p>
  955. 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
  956. sim card (if installed) will be in a slot underneath the battery, or next to the RAM.
  957. </p>
  958. <p>
  959. <a href="#pagetop">Back to top of page</a>
  960. </p>
  961. </div>
  962. <div>
  963. <h1>Operating Systems</h1>
  964. <h2 id="gnulinux">Can I use GNU/Linux? <span class="r"><a href="#gnulinux">#gnulinux</a></span></h2>
  965. <p>
  966. Absolutely! GNU/Linux is well-tested in libreboot, and highly recommended.
  967. See <a href="../docs/gnulinux/grub_boot_installer.html">installing GNU/Linux</a> and <a href="../docs/gnulinux/grub_cbfs.html">booting GNU/Linux</a>.
  968. </p>
  969. <p>
  970. Any recent distribution should work, as long as it uses KMS (kernel mode setting) for the graphics.
  971. </p>
  972. <p>
  973. The <a href="https://fsf.org/">Free Software Foundation</a> maintains
  974. a <a href="https://gnu.org/distros/free-distros.html">list of free GNU/Linux distributions</a>, certified
  975. to distribute and endorse <a href="https://www.gnu.org/philosophy/free-sw.html">free software</a>, exclusively.
  976. </p>
  977. <p>
  978. <a href="#pagetop">Back to top of page</a>
  979. </p>
  980. <h2 id="gnuhurd">Can I use GNU/Hurd? <span class="r"><a href="#gnuhurd">#gnuhurd</a></span></h2>
  981. <p>
  982. Unknown. Probably not. Feel free to try it, and report your findings.
  983. </p>
  984. <p>
  985. <a href="https://www.gnu.org/software/hurd/hurd.html">GNU Hurd</a> is a microkernel developed by
  986. the <a href="https://gnu.org/">GNU project</a>, and was (still is) intended to be the kernel for the
  987. GNU operating system. For historical reasons, <a href="https://kernel.org/">Linux</a> became the primarily
  988. adopted kernel (the libreboot project urges everyone to install and use <a href="http://www.fsfla.org/ikiwiki/selibre/linux-libre/">linux-libre</a> on their GNU systems),
  989. and was adapted for use with the GNU system. This is <a href="https://www.gnu.org/gnu/why-gnu-linux.html">why</a> we
  990. say <a href="https://www.gnu.org/gnu/linux-and-gnu.en.html">GNU/Linux</a>. Read the <a href="https://www.gnu.org/gnu/gnu-linux-faq.html">GNU/Linux FAQ</a>.
  991. </p>
  992. <p>
  993. <a href="#pagetop">Back to top of page</a>
  994. </p>
  995. <h2 id="bsd">Can I use BSD? <span class="r"><a href="#bsd">#bsd</a></span></h2>
  996. <p>
  997. For the most part, BSD systems remain untested in libreboot.
  998. BSD systems <a href="https://www.gnu.org/distros/common-distros.html">contain blobs</a>, so do beware.
  999. </p>
  1000. <p>
  1001. Anecdotal reports indicate that NetBSD should be compatible,
  1002. as should OpenBSD 5.9 or higher (libertyBSD might also work).
  1003. It is unknown whether other BSD distributions are compatible
  1004. with libreboot at this time.
  1005. </p>
  1006. <p>
  1007. The BSD community in general is quite hostile towards the
  1008. GNU project, and being permissively licensed (they believe
  1009. that companies should be able to sell proprietary forks),
  1010. it is less than ideal philosophically, from the libreboot
  1011. project's point of view.
  1012. </p>
  1013. <p>
  1014. Libreboot will not officially document how to install or
  1015. boot BSD on a libreboot system. You must consult with your
  1016. BSD distribution provider, for more information.
  1017. </p>
  1018. <p>
  1019. <a href="#pagetop">Back to top of page</a>
  1020. </p>
  1021. <h2 id="windows">Can I use Windows? <span class="r"><a href="#windows">#windows</a></span></h2>
  1022. <p>
  1023. Windows is incompatible with libreboot, and will probably remain so. <a href="https://gnu.org/philosophy/malware-microsoft.html">Never use Windows</a>.
  1024. </p>
  1025. <p>
  1026. Windows incompatibility is a feature, not a bug.
  1027. </p>
  1028. <p>
  1029. <a href="#pagetop">Back to top of page</a>
  1030. </p>
  1031. <h2 id="otheros">Are other operating systems compatible? <span class="r"><a href="#otheros">#otheros</a></span></h2>
  1032. <p>
  1033. Unknown. Probably not.
  1034. </p>
  1035. <p>
  1036. <a href="#pagetop">Back to top of page</a>
  1037. </p>
  1038. </div>
  1039. <?php
  1040. include "../common/footer.php";
  1041. ?>
  1042. </body>
  1043. </html>
  1044. <?php
  1045. $strHtml = ob_get_clean();
  1046. echo miniHtml($strHtml);
  1047. ?>