diff --git a/README.md b/README.md index 15c03fa..fe61aec 100644 --- a/README.md +++ b/README.md @@ -1,57 +1,70 @@ GNU Boot ======== -GNU Boot is a GNU project and a -[freedom-respecting](https://www.gnu.org/philosophy/free-sw.html) -*boot firmware* that initializes the hardware (e.g. -memory controller, CPU, peripherals) in your computer so that software can run. -GNU Boot then starts a bootloader to load your operating system. It replaces the -proprietary BIOS/UEFI firmware typically found on a computer. GNU Boot is -compatible with specific computer models that use the Intel/AMD x86 -architecture. GNU Boot works well with GNU+Linux and BSD -operating systems. +This software is part of the GNU Project. -GNU Boot uses [coreboot](https://www.coreboot.org/) for hardware initialization. -However, *coreboot* is notoriously difficult to compile and install for most -non-technical users. There are many complicated configuration steps required, -and coreboot by itself is useless; coreboot only handles basic hardware -initialization, and then jumps to a separate *payload* program. The payload -program can be anything, for example a Linux kernel, bootloader (such as -GNU GRUB), UEFI implementation (such as Tianocore) or BIOS implementation -(such as SeaBIOS). While not quite as complicated as building a GNU+Linux -distribution from scratch, it may aswell be as far as most non-technical users -are concerned. +To load an operating system, computers need to be able to access storage +devices (like an HDD or SSD) where the operating system is installed. +They need RAM to work to load part of the operating system in RAM. Users +also expect the display and keyboard to work before the operating system +is loaded. -GNU Boot solves this problem : -GNU Boot is a *coreboot distribution* much like Debian is a *GNU+Linux -distribution*. GNU Boot provides an *automated build system* that downloads, -patches (where necessary) and compiles coreboot, GNU GRUB, various payloads and -all other software components needed to build a complete, working *ROM image* -that you can install to replace your current BIOS/UEFI firmware, much like a -GNU+Linux distribution (e.g. Debian) provides an ISO image that you can use to -replace your current operating system (e.g. Windows). +But on most computers, software is needed to initialize the RAM, the storage +devices, the graphic card, to load the operating system, and give some +information to the operating system on what hardware it is running on. +Because of that computers usually require boot software that is bundled in the +computer. It is usually found on a very small storage chip that is inside the +mainboard. That software is specific to a given computer. + +Unfortunately that software is usually nonfree and GNU boot aims to replace +that with 100% free software. + +Like with other type of software, the fact that is nonfree has real impacts. +For instance this software often continues to run once the operating system +is loaded and as it loads the operating system it can also modify it. +So having a nonfree boot software make it impossible for users to really +trust their computers. Another common issue is that some BIOS/UEFI add +restrictions to prevent users from replacing the WiFi card for instance. +There are many more issues but listing them all here would make this +description too long. + +To replace nonfree boot software, GNU boot reuses various software projects +(like Coreboot, U-boot, GRUB, SeaBIOS, etc), configure and build them to +produce an image that can be installed to replace the nonfree boot software +for specific computers. + +Users can also do all that without GNU Boot but that tend to be complicated. +Having a free software project that does all that enable people to collaborate +on making sure that computers boot fine regardless of the upstream project +status, for instance by making binary releases and collaborating to test them. + +In addition GNU boot also comes with extensive documentation to make it as easy +as possible to install GNU Boot and to empower users to modify the way their +computer boot. + +Since not all the project it reuses are 100% free software it also removes all +the nonfree software found in them along the way and will also make the scripts +and/or data that does that reusable for distributions or users that want to +build their own free boot software without reusing the GNU Boot configuration +or build system. Not a coreboot fork! -------------------- -GNU Boot is not a fork of coreboot. Every so often, the project -re-bases on the latest version of coreboot, with the number of custom -patches in use minimized. Tested, *stable* (static) releases are then provided -in GNU Boot, based on specific coreboot revisions. +GNU Boot is not a fork of coreboot, but more a boot firmware distribution +including a modified version of coreboot, and other software like SeaBIOS, +GRUB or u-boot. -Coreboot is not entirely free software. It has binary blobs in it for some -platforms. What GNU Boot does is download several revisions of coreboot, for -different boards, and *de-blob* those coreboot revisions. This is done using -the *linux-libre* deblob scripts, to find binary blobs in coreboot. +Coreboot is not entirely free software as it includes binary blobs in it for +some platforms. What GNU Boot does is download several revisions of coreboot, +for different boards, and *de-blob* those coreboot revisions. This is done +using the *linux-libre* deblob scripts, to find binary blobs in coreboot. All new coreboot development should be done in coreboot (upstream), not -GNU Boot ! GNU Boot is about deblobbing and packaging coreboot in a -user-friendly way, where most work is already done for the user. - -For example, if you wanted to add a new board to GNU Boot, you should -add it to coreboot first. GNU Boot will automatically receive your code -at a later date, when it updates itself. +GNU Boot. For example, if you wanted to add a new board to GNU Boot, you +should add it to coreboot first. GNU Boot would then receive your code at +a later date, when it updates itself. The deblobbed coreboot tree used in GNU Boot is referred to as *coreboot-libre*, to distinguish it as a component of *GNU Boot*.