Signed-off-by: Leah Rowe <info@minifree.org>
master
Leah Rowe 2024-05-07 18:08:39 +01:00
parent 72a4ffea39
commit 507ea08b12
23 changed files with 7 additions and 1403 deletions

View File

@ -6,8 +6,6 @@ x-toc-enable: true
The main purpose of this article is to describe how the Canoeboot project
operates, why it exists and what it does. Who, what, why and when.
You may also be interested in: [Canoeboot vs GNU Boot](gnuboot.md)
What is Canoeboot?
===================
@ -66,95 +64,6 @@ a handful of mainboards from coreboot, and sometimes
several [mitigations](https://browse.libreboot.org/lbmk.git/plain/resources/coreboot/default/patches/0012-fix-speedstep-on-x200-t400-Revert-cpu-intel-model_10.patch?id=9938fa14b1bf54db37c0c18bdfec051cae41448e)
may be required to stabilise certain functionalities under these conditions.
The project called *GNU Boot* launched
during June 2023, in opposition to Libreboot's new policy as of November 2022;
however, GNU Boot's base Libreboot revision was from around the time of the
Libreboot 20220710 release, so their base was roughly 1 year out of date
compared to Libreboot. Canoeboot was created to directly compete with GNU Boot,
which is lead by different people.
GNU Boot *originally* started as a hostile fork attempt; the FSF tried to steal
the name Libreboot by setting up a Libreboot project at another TLD (instead of
libreboot.org) and claiming to be the real thing, despite the fact that the
real Libreboot project was actively developed, and doing releases. [This
video](https://media.libreplanet.org/u/libreplanet/m/taking-control-over-the-means-of-production-free-software-boot/)
at LibrePlanet 2023, on 19 March 2023, announced the FSF's *Libreboot* project,
which was the *hostile* fork; this was anticipated, so the *real* Libreboot at
libreboot.org made a new release that same day, having prepared for it several
weeks beforehand. This resulted in the *[Libreboot 20230319
release](https://libreboot.org/news/libreboot20230319.html)*, and
started an aggressive counter-coup out-competing them. It succeeded, and the FSF
lost; they renamed their project to GNU Boot, starting from June 2023.
Canoeboot was originally designated as *GNU Boot* unofficially, launching in
the month of July 2023 as a proof of concept based
upon [Libreboot 20230625](https://libreboot.org/news/libreboot20230625.html) to
help the real GNU Boot get up to date
versus Libreboot. GNU Boot's June 2023 revision was nearly 1 year behind on
Libreboot. The unofficial GNU Boot was renamed and re-branded to nonGeNUine Boot
on [21 July 2023](../news/nongenuineboot20230717.html#update-21-july-2023) when
the real GNU Boot sent a legal threat to the Libreboot project (citing trademark
infringement) - an innocent mistake, based on a misunderstanding. The purpose
of the original *unofficial* project was merely to provide a base for the real
GNU Boot project to just use however they wish, but they took it the wrong way.
The logic then was: if there is *going* to be another FSDG distro, continuing
on from the *old* Libreboot policy (based on GNU FSDG), it should at least be
high quality, and released to a high standard, so the unofficial project was
made to show them precisely how the Libreboot project is run, so as to provide
them with inspiration.
GNU FSDG policy is [heavily
misguided](https://libreboot.org/news/policy.html#problems-with-fsdg). Libreboot
is vastly superior to Canoeboot, but it can at least be developed to a high
standard (within the FSF and GNU dogma); as of 26 October 2023, GNU Boot's build
system and revisions were still largely based on Libreboot 20220710, with very
few meaningful changes; Canoeboot was released on that day (26 Oct 2023), based
on Libreboot 20231021 which is *13 months newer* than Libreboot 20220710; the
[nonGeNUine Boot 20230717 change log](news/nongenuineboot20230717.md) was in
reference to Libreboot 20220710, and the [Canoeboot 20231026 change
log](news/canoeboot20231026.md) is in reference to nonGeNUine Boot 20230717 -
if you combine both change logs, you then more or less have a list of all the
things *Canoeboot 20231026* can do that *GNU Boot* 0.1 RC didn't. It's a lot!
On this day, 26 October 2023, Canoeboot also supported *more boards* than GNU
Boot, namely: Dell Latitude E6400, gru\_bob chromebooks and gru\_kevin
chromebooks. The chromebooks are using ARM-based RK3399 SoCs with a heavily
modified version of U-Boot, developed for Libreboot. GNU Boot still didn't
have bootable U-Boot configurations on that day!
nonGeNUine Boot was renamed to Canoeboot, with the [Canoeboot 20231026
release](../news/canoeboot20231026.md) in October 2023, based
upon [Libreboot 20231021](https://libreboot.org/news/libreboot20231021.html).
Why does Canoeboot exist?
----
On the day of the first Canoeboot release, GNU Boot 0.1 RC was out but not much
different to the state it was in during July 2023, and they had not accepted the
help of the original nonGeNUine Boot project; their 0.1 RC release was essentially
Libreboot 20220710, but with a few build fixes on newer distros, some of which
were created by the unofficial GNU Boot first (e.g. fix KGPE-D16 build errors).
It was decided then that Canoeboot would be created, as an official project in
direct competition with GNU Boot, for fun - the GNU Boot project started in June
2023, in opposition to Libreboot's change of policy. Canoeboot started, with
the desire to provide FSDG-compliant releases based on Libreboot, exactly in
line with the GNU Free System Distribution Guidelines, as a proof of concept
to show what *Libreboot* would otherwise be.
Libreboot is on the forefront, bringing coreboot to ordinary people, and Canoeboot
follows the same pattern, providing high quality releases in parallel to it.
Canoeboot exists purely *for fun*, to see what is technically possible under GNU
policy. It is a fun technical challenge. Every effort is made to ensure perfect
compliance with GNU FSDG criteria.
Libreboot's Binary Blob Reduction Policy is more ideal, because it allows
more people to use coreboot, thus increasing software freedom overall for more
people, but there is no harm in Canoeboot so long as it does not stifle Libreboot
development; so Canoeboot is only updated after each Libreboot release,
cherry-picking what can be included under Canoeboot policy and done in an
extremely efficient manner.
Release schedule
--------------

View File

@ -52,13 +52,6 @@ executed from Canoeboot's SeaBIOS payload.
Encrypted /boot via LUKS2 with argon2
=======================================
**WARNING: The Canoeboot 0.1 release only supports LUKS1 with PBKDF2. It's
a special release that uses much older GRUB. The November 2023 releases of
Canoeboot contain LUKS2 support. If you're using LUKS encryption, please
use Canoeboot from November 2023 - or use a release after 0.1. The reason why
Canoeboot 0.1 has this issue will be clear if you read the Canoeboot 0.1
release announcement. Canoeboot 0.1 is not intended for production use.**
Full encryption for basic LUKS2 (with PBKDF or argon2 key derivation) is
supported in Canoeboot. Legacy LUKS1 is also supported. On *most* other
systems, `/boot` must be unencrypted, but Canoeboot supports use of the

View File

@ -4,7 +4,6 @@
* [Diese Seite bearbeiten](/git.de.md)
* [Wer entwickelt Canoeboot?](/who.md)
* [Lizenz](/license.md)
* [History of Canoeboot vs GNU Boot](/about.md)
* [Vorlage](/template-license.md)
* [Autoren](/contrib.md)

View File

@ -4,7 +4,6 @@
* [Edit this page](/git.md)
* [Who develops Canoeboot?](/who.md)
* [License](/license.md)
* [History of Canoeboot vs GNU Boot](/about.md)
* [Template](/template-license.md)
* [Authors](/contrib.md)

View File

@ -4,7 +4,6 @@
* [Modifica questa pagina](/git.de.md)
* [Chi sviluppa Canoeboot?](/who.de.md)
* [Licenza](/license.md)
* [History of Canoeboot vs GNU Boot](/about.md)
* [Modelli di licenze](/template-license.md)
* [Autori](/contrib.md)

View File

@ -4,7 +4,6 @@
* [Редагувати цю сторінку](/git.md)
* [Хто розробляє Canoeboot?](/who.md)
* [Ліцензія](/license.md)
* [History of Canoeboot vs GNU Boot](/about.md)
* [Шаблон](/template-license.uk.md)
* [Автори](/contrib.md)

View File

@ -4,7 +4,6 @@
* [编辑本页面](/git.md)
* [谁在开发 Canoeboot?](/who.md)
* [许可证](/license.md)
* [History of Canoeboot vs GNU Boot](/about.md)
* [模板](/template-license.md)
* [作者](/contrib.md)

View File

@ -1,764 +0,0 @@
---
title: Canoeboot vs GNU Boot
x-toc-enable: true
...
If you want to understand the issue Canoeboot had with GNU Boot, please
read the [about page](about.md) and the [Libreboot Binary Blob Reduction
Policy](https://libreboot.org/news/policy.html). Basically, the FSF
decided to attempt a *hostile fork* of Libreboot, which they announced on 19
March 2023 at their 2023 *LibrePlanet* conference. You can read about *that*
and more of the history between GNU/FSF and Libreboot, by also reading
the [10-year anniversary history page on
libreboot.org](https://libreboot.org/news/10.html) - Canoeboot started in self
defense, to provide a project that is as technically superior to GNU Boot as
possible, while adhering to GNU Free System Distribution Guidelines as policy,
which is the same policy that GNU Boot uses, in contrast to
Libreboot's [Binary Blob Reduction Policy](https://libreboot.org/news/policy.html).
Canoeboot is *aggressively* developed, rebasing upon each new release of
Libreboot and, thus, maintaining absolute sync with Libreboot. It does this by
providing all of the same boards and features, minus those boards/features or
behaviours that are not in line with GNU policy. As a result, Canoeboot has
weaker hardware support, but it provides a solution to those hardcore diehards
who absolutely must have everything adhere to GNU.
Canoeboot is technically superior
----------------------------------
tl;dr as of 26 October 2023, Canoeboot code is about 1 year ahead of GNU Boot
in terms of development, and about 2 years ahead in terms of documentation.
Read on, if you want details. GNU Boot is also known as *gnuboot*. The purpose
of *Canoeboot* is to demonstrate the inferiority of GNU policy, by providing the
highest quality releases possible, based on Libreboot, keeping sync with
Libreboot while showing what boards/features would have to be removed from
Libreboot, if it were to comply with GNU Boot. In other words, Canoeboot is the
logical conclusion of what is *possible* under GNU policy.
Libreboot's [Binary Blob Reduction
Policy](https://libreboot.org/news/policy.html) provides an alternative, where
users have boot firmware that is as much free software as possible, while not
being dogmatic about it. You can learn more by reading that policy.
Canoeboot and GNU Boot are *both* forks of Libreboot, designed to comply with
the GNU Free System Distribution Guidelines. This page is maintained, to show
the differences between these two projects.
This current version of the page pertains to *Canoeboot 20231026*
versus *GNU Boot 0.1 RC*. You can find GNU Boot ("gnuboot") on the GNU Savannah
website.
You can also read the [Canoeboot 20231101 changelog](news/canoeboot20231101.md);
that release only came out 7 days after the 20231026 release, so the rest of
this page is more or less accurate, when combined with the facts on
the 20231101 announcement.
GNU Boot 0.1 RC based on Libreboot 20220710
===========================================
This fact is very important; nonGeNUine Boot's 20230717 changelog is relative
to Libreboot 20220710, and Canoeboot 20231026's changelog is relative to
nonGeNUine Boot 20230717's changelog.
Therefore, this page will analyse differences in both projects, at these two
points. First, let's analyse GNU Boot, with the tag reset to `0.1-rc1`, which
corresponds to commit ID `a64d284fd798d843133c9d7274bba17bd7837174`. Since GNU
Boot also contains the Libreboot history that it forked from, it contains the
Libreboot 20220710 release tag, so we can do this:
git log --graph --pretty=format:'%Cred%h%Creset %s %Creset' --abbrev-commit 20220710..0.1-rc1
Within the GNU Boot git repository, this would yield the following response:
```
* a64d284 .gitignore: order alphabetically
* 0df4fe5 GRUB: config from HDD/SSD: Add support for gnuboot_grub.cfg
* ce13d22 GRUB: Use GNU Boot logo
* 74b678c GRUB: Say the name GNUBoot in the grub menu
* eeddd2b build/dependencies: debian: adding python-is-python3 to build seabios properly
* 58b8e09 coreboot/fam15h: don't build ada toolchain for generic platforms
* f7c0fec coreboot/fam15h: update code base, deblob, unset CONFIG_STM (see bug #64535)
* de9297f coreboot/fam15h: fix crossgcc acpica build on newer hostcc
* c38348d coreboot/fam15h: fix for gcc/gnat building
* 0d77d99 coreboot/fam15h: fixing binutils not building properly
* b773079 coreboot/default, coreboot/fam15h: use GNU mirror for acpica
* bf17993 Continue Libreboot under the GNU project
```
And that's all. The fam15h-related fixed are actually merged from
the `fsdg20230625` branch of Libreboot, made during July 2023. See:
<https://browse.libreboot.org/lbmk.git/log/?h=fsdg20230625>
The other patches are also merged (cherry-picked) from Libreboot! The above
commit log is all that GNU Boot did, for their 0.1 RC1 release.
Therefore, to know the differences between Canoeboot and GNU Boot, I will copy
all items first from the nonGeNUine Boot 20230717 change log, and then the
Canoeboot 20231026 change log, but I will skip those entries that define
features which GNU Boot already has.
On this day, GNU Boot's current commit ID (in the `main` branch)
is `54c6ae497d49c233b654c171978baa77b90ffe17` from 12 October 2023. Most of
the changes since 0.1 RC1 up to that commit are just documentation changes,
and even still, only cherry-picking minor patches here and there that were
already done in Libreboot, in some cases years ago. It's worth noting that
the GNU Boot documentation is based on Libreboot documentation from *late 2021*
or at most, very early 2022.
I don't need to compare documentation, and it would take too long. Their
documentation is *2 years out of date*, what more is there to say?
Now, feature comparisons in the build systems:
Canoeboot 20231026 features that GNU Boot lacks
===============================================
Board support
-------------
Canoeboot has *these* boards fully supported, that GNU Boot currently lacks
support for:
* [Dell Latitude E6400](docs/hardware/e6400.md)
* [ASUS Chromebook Flip C101 (gru-bob)](docs/install/chromebooks.md)
* [Samsung Chromebook Plus (v1) (gru-kevin)](docs/install/chromebooks.md)
Git revisions in Canoeboot 20231026:
------------------------------------
* Coreboot (default): commit ID `d862695f5f432b5c78dada5f16c293a4c3f9fce6`, 12 October 2023
* Coreboot (fam15h\_udimm): commit ID `1c13f8d85c7306213cd525308ee8973e5663a3f8`, 16 June 2021
* GRUB: commit ID `e58b870ff926415e23fc386af41ff81b2f588763`, 3 October 2023
* SeaBIOS: commit ID `1e1da7a963007d03a4e0e9a9e0ff17990bb1608d`, 24 August 2023
* U-Boot: commit ID `4459ed60cb1e0562bc5b40405e2b4b9bbf766d57`, 2 October 2023
Git revisions in GNU Boot 0.1 RC1:
---------------------------------
* Coreboot (default): commit ID `b2e8bd83647f664260120fdfc7d07cba694dd89e`, 17 November 2021
* Coreboot (fam15h\_udimm): commit ID `1c13f8d85c7306213cd525308ee8973e5663a3f8`, 16 June 2021
* GRUB: commit ID `f7564844f82b57078d601befadc438b5bc1fa01b`, 25 October 2021
* SeaBIOS: commit ID `1281e340ad1d90c0cc8e8d902bb34f1871eb48cf`, 24 September 2021
* U-Boot: **does not exist** (no ARM/U-Boot support in Libreboot 20220710)
NOTE: GNU Boot *does* support downloading, deblobbing and re-compressing
U-Boot archives, and in fact does a better job of *that* than Canoeboot in
some ways, but it does not yet actually build U-Boot, and it does not boot
U-Boot in any way, on any actual mainboards.
As you can see, Canoeboot's revisions are a lot newer.
GRUB LUKS2 support with argon2
------------------------------
Canoeboot 20231026 contains a heavily patched version of GRUB, which contains
argon2 support. This allows full decryption of LUKS2 volumes, without having
to switch to different key derivation (PBKDF2) and without needing to use
LUKS1. You can simply use the default LUKS2 setup provided by any distro, and
it will work. More information is available about GRUB cryptomount, in
the [GNU+Linux guide](docs/gnulinux/) - search on that page for LUKS2 or argon2.
GNU Boot completely *lacks* this feature, as of 26 October 2023. It can only
support LUKS2 if the key derivation is downgraded to PBKDF2 (insecure, or to
LUKS1 (also insecure).
For all intentions, the average user cannot have a fully encrypted system on
GNU Boot. They must leave `/boot` unencrypted on GNU+Linux distros.
With Canoeboot, you can have encrypted `/boot` very easily. This is a boon for
security, because it reduces the chance of someone tampering with your data
successfully, and combined with [other steps](docs/gnulinux/grub_hardening.md),
can be used to reduce the risk of evil maid attacks (by making it infeasible).
GRUB detached LUKS headers
--------------------------
GRUB 2.12 also supports detached LUKS headers, whereas GRUB 2.06 does not.
GNU Boot *currently* uses GRUB 2.06 as its payload. Canoeboot and Libreboot
both use GRUB 2.12 as a payload.
Serprog support
---------------
Canoeboot can build firmware images for RP2040 and STM32 microcontrollers,
using `pico-serprog` and `stm32-vserprog` respectively. This can be used to
set up an SPI flasher of high quality, but these parts are low-cost.
GNU Boot does not support this feature, as of 26 October 2023.
Simplified command structure
----------------------------
There are *9* shell scripts in Canoeboot 20231026, versus about 50 in GNU
Boot 0.1 RC1, because GNU Boot uses the pre-audit design; Libreboot used to
have lots of very simple scripts, but ended up with a lot of code repetition.
The new lbmk design generalises all of the logic, doing away with the very
hacky logic that existed in the old build system design.
The interface in Canoeboot's build system is much easier to use. For example,
the commands are shorter, and easier to remember. See:
[cbmk maintenance manual](docs/maintain/) tells you everything about the
Canoeboot build system.
GNU Boot doesn't even *have* a maintenance manual, in their version. Their
documentation exists in the same repository as code, but their
version of `docs/maintain/` does not actually contain any instructions,
at least as of commit ID a64d284fd798d843133c9d7274bba17bd7837174 on 17
August 2023.
Better documentation
--------------------
Canoeboot has much better documentation, but this is obvious if you've been
paying attention. As already stated: GNU Boot's documentation is horribly
out of date, even relative to the version of Libreboot that they're using!
(which itself is also horribly out of date)
Canoeboot's build system is smaller
-----------------------------------
Smaller doesn't mean worse; in fact, Canoeboot's build system is more
efficient. It's about 1250 sloc (source lines of code), when counting shell
scripts in the core of the build system. Libreboot, Canoeboot and GNU Boot
build systems all use the same design, written in shell scripts.
1250 sloc in Canoeboot, versus 2111 in gnuboot; gnuboot however lacks many
of the features and improvements that you're about to see below. The
Canoeboot build system does several times as many things, in half
the amount of code! The code is generally just more reliable, less error
prone, and easier to work with, in Canoeboot. GNU Boot uses a very old version
of the Libreboot build system design, from long before I started any massive
audits. There have been *three* Libreboot build system audits in 2023, as
of 26 October 2023.
Three audits, and Canoeboot has inherited the improvements of all of them.
GNU Boot's design is based on the pre-audit lbmk codebase.
Build system / performance improvements in Canoeboot:
* Much stricter, more robust error handling; too many changes to list here, so
check the git log. Also, errors that *are not errors* are no longer treated as
such; nonGeNUine Boot 20230717's build system was actually too strict, sometimes.
* Most logic has been unified in single scripts that perform once type of task
each, instead of multiple scripts performing the same type of talk; for
example, defconfig-based projects now handled with the same scripts, and
preparing trees for them is done the same. These unifications have been done
carefully and incrementally, with great thought so as to prevent *spaghetti*.
The code is clean, and small.
* GitHub is no longer used on main Git repository links, instead only as backup
* Backup repositories now defined, for all main repos under `config/git/`
* Single-tree projects are no longer needlessly re-downloaded when they already
have been downloaded.
* GRUB LUKS2 support now available, with argon2 key derivation; previously, only
PBKDF2 worked so most LUKS2 setups were unbootable in Canoeboot. This is fixed.
* Vastly reduced number of modules in GRUB, keeping only what is required.
* Use `--mtime` and option options in GNU Tar (if it is actually GNU Tar), when
creating Tar archives. This results in partially reproducible source archives,
and consistent hashes were seen in testing, but not between distros.
* Always re-inialitise `.git` within lbmk, for the build system itself, if
Git history was removed as in releases. This work around some build systems
like coreboot that use Git extensively, and are error-prone without it.
* More robust makefile handling in source trees; if one doesn't exist, error
out but also check other makefile name combinations, and only error out if
the command was to actually build.
* ROMs build script: support the "all" argument, even when getopt options are
used e.g. `-k`
* Disabled the pager in `grub.cfg`, because it causes trouble in some
non-interactive setups where the user sees an errant message on the screen
and has to press enter. This fixes boot interruptions in some cases, allowing
normal use of the machine. The pager was initially enabled many years ago,
to make use of cat a bit easier in the GRUB shell, but the user can just
enable the pager themselves if they really want to.
* U-Boot can now be compiled standalone, without using the ROMs build script,
because crossgcc handling is provided for U-Boot now in addition to coreboot.
* All helper scripts are now under `include/`, and main scripts in `script/`,
called by the main `build` script
* Generally purge unused variables in shell scripts
* Simplified initialisation of variables in shell scripts, using the `setvars`
function defined under `include/err.sh`
* Support patch subdirectories, when applying patches. This is done recursively,
making it possible to split up patch files into smaller sets inside sub
directories, per each source tree (or target of each source tree, where a
project is multi-tree within lbmk)
* SPDX license headers now used, almost universally, in all parts of cbmk.
* Files such as those under `config/git` are now
concatenated, traversing recursively through the target directory; files first,
then directories in order, and for each directory, follow the same pattern
until all files are concatenated. This same logic is also used for patches.
This now enables use of subdirectories, in some config/patch directories.
* General code cleanup on `util/nvmutil`
* Git histories are more thoroughly deleted, in third party source trees during
release time.
* Symlinks in release archives are no longer hard copies; the symlinks are
re-created by the release script, because it clones the current lbmk work
directory via Git (local git clone), rather than just using `cp` to copy links.
* Properly output to stderr, on printf commands in scripts where it is either
a warning prior to calling `err`, or just something that belongs on the error
output (instead of standard output).
* Don't use the `-B` option in make commands.
* SECURITY: Use sha512sum (not sha1sum) when verifying certain downloads. This
reduces the chance for collisions, during checksum verification.
* Set GRUB timout to 5s by default, but allow override and set to 10s or 15s
on some mainboards.
* Support both curl and wget, where files are downloaded outside of Git; defer
to Wget when Curl fails, and try each program three times before failing. This
results in more resilient downloading, on wobbly internet connections.
* Don't clone Git repositories into `/tmp`, because it might be a tmpfs with
little memory available; clone into `tmp/gitclone` instead, within lbmk,
and `mv` it to avoid unnecessary additional writes (`mv` is much more efficient
than `cp`, for this purpose).
* Removed unused `target.cfg` handling in vendor scripts, because they use
the concatenated config format instead (they always have).
* Coreboot builds: automatically run make-oldconfig, to mitigate use of raw
coreboot config where a revision was updated but the config was untouched.
This may still result in a confirmation dialog, and it's still recommended
that the configs be updated per revision (or switch them to defconfigs).
* Vastly simplified directory structure; `resources/scripts/` is now `script/`,
and `resources/` was renamed to `config/`; ifd and gbe files were also moved
to `config/ifd/`. Commands are now 1-argument instead of 2, for example
the `./build boot roms` command is now `./build roms`.
* memtest86plus: only build it on 64-bit hosts, for now (32-bit building is
broken on a lot of distros nowadays, and lbmk doesn't properly handle cross
compilation except on coreboot or U-Boot)
* (courtesy of Riku Viitanen) don't use cat on loops that handle lines of text.
Instead, use the `read` command that is built into `sh`, reading each line.
This is more efficient, and provides more robust handling on lines with
spaces in them.
* *ALL* projects now have submodules downloaded at build time, not just multi
tree projects such as coreboot - and a few projects under `config/git` have
had certain `depend` items removed, if a given project already defines it
under `.gitmodules` (within its repository).
* Improved cbutils handling; it's now even less likely to needlessly re-build
if it was already built.
* The release build script no longer archives what was already built, but
instead builds from scratch, creating an archive from source downloads
first before building the ROM archives. This saves time because it enables
a single build test per release, whereas at was previously necessary to test
the Git repository and then the release archive. Testing both is still desired,
but this behaviour also means that whatever is built at release time is
guaranteed to be the same as what the user would build (from archives).
* Improved handling of `target.cfg` files in multi-tree projects coreboot,
SeaBIOS and U-Boot. Unified to all such projects, under one script, and
with improved error handling.
* GRUB payload: all ROM images now contain the same ELF, with all keymaps
inserted. This speeds up the build process, and enables easier configuration
when changing the keyboard layout because less re-flashing is needed.
* Simplified IFD handling on ICH9M platforms (e.g. X200/T400 thinkpads); the
ich9gen utility wasn't needed anymore so ich9utils has been removed, and now
the IFD/GbE files are included pre-assembled (generated by ich9gen). Ich9gen
can still be used, or you can re-generate with coreboot's bincfg; the ifdtool
util can be used to edit IFD and nvmutil (part of Canoeboot) can change MAC
addresses. The ich9utils code was always redundant for the last few years,
especially since 2022 when nvmutil was first written.
* Running as root is now forbidden, for most commands; lbmk will exit with
non-zero status if you try. The `./build dependencies x` commands still work
as root (they're the only commands available as root).
* Enabled memtest86plus on more boards, where it wasn't previously enabled.
* Only enable SeaBIOS as first payload on desktops, but still enable GRUB as
second payload where GRUB is known to work (on each given host). The text
mode and coreboot framebuffer modes are provided in each case, where feasible.
* The `list` command has been mostly unified, making it easier to tell (from
lbmk) what commands are available, without having to manually poke around
under `script/`.
* The `-T0` flag is now used, universally, on xz commands. This makes `xz` run
on multiple threads, greatly speeding up the creation of large tar archives.
* Universally use `-j` in make commands, for multi-threading, but it relies
on `nproc` to get thread count, so this only works if you have `nproc` (you
probably don't, if you run BSD; BSD porting is still on TODO for Canoeboot)
* File names as arguments now universally have quotes wrapped around them, and
similar auditing has been done to all variables used as arguments everywhere
in lbmk. There were cases where multiple arguments were wrongly quoted then
treated as a single argument, and vice versa. This is now fixed.
* Re-wrote `.gitcheck`; now, a global git name/email config is always required.
The only behaviour (setting local config, and unsetting) was quite error-prone
under fault conditions, where cleanup may not have been provided, or when
execution was interrupted, resulting sometimes in accidentally committing
to `lbmk.git` as author named `lbmkplaceholder`.
* The new BSD-like coding style is now used on *all* shell scripts in lbmk. A
few scripts still used the old lbmk coding style, as of audit 2.
* Scripts no longer directly exit with non-zero status, under fault conditions;
instead, `x_` or `err` is used to provide such behaviour. This results in all
exits from lbmk being consolidated to `err`, under fault conditions. - zero
exits are also consolidated, going only through the main script, which has its
own exit function called `lbmk_exit` that provides `TMPDIR` cleanup.
* BSD-style error handling implemented, with an `err` function (and functions
that use it) inside `include/err.sh`; there is also `x_` which can be used
to run a command and exit automatically with non-zero status, useful because
it provides more verbose output than if you just relied on `set -e`, and it
still works when a script *does not* use `set -e` - however, it is not used
on all functions, because it works by executing `$@` directly, which can break
depending on arguments. Therefore, some scripts just default to `|| err` for
providing breakage in scripts.
* Memtest *6.2* now used (instead of *5.x* releases). This is essentially a
re-write, and it works on the coreboot framebuffer, whereas previous revisions
only worked on text mode setups.
* NO MAKEFILE. The Makefile in lbmk has been removed. It was never meaningfully
used because all it did was run lbmk commands, without implementing any logic
itself. A Makefile may be added again in the future, but with a view to
installing *just the build system* onto the host system, to then build ROM
images under any number of directories. Lbmk's design is strictly no-Makefile,
but it uses Makefiles provided by third party source trees when building them.
* Safer GRUB configuration file handling between GRUB memdisk and coreboot CBFS;
it is no longer possible to boot without a GRUB config, because the one in
GRUB memdisk is provided as a failsafe, overridden by *inserting* one in CBFS,
but there is no config in CBFS by default anymore.
* The build system *warns* users about `elf/` vs `bin/`, when it comes to
flashing coreboot ROM images; it tells them to use `bin/` because those
images do contain payloads, whereas the ones under `elf/` do not.
* VASTLY more efficient build process; all coreboot ROMs without payload are
now cached under `elf/`, as are payloads, then they are joined separately by
the usual ROMs build script, and these cached ROMs contain many changes in
them that were previously handled by `moverom` in the main ROM build script.
Under the new design, repetitive steps are avoided; payloads are inserted into
a copy of the cached ROMs under `TMPDIR`, *before* being copied for keymaps
and small files; this eliminates delays caused by slow compression (LZMA is
always used, when inserting payloads). After crossgcc and the payloads are
compiled, the ROM with coreboot builds in under a minute, whereas it would
have previously taken several minutes on most Canoeboot-supported hardware.
* VASTLY reduced GRUB payload size; modules that aren't needed have been removed
resulting in much smaller GRUB payloads, that also boot faster.
* ALL defconfig creation, updating and modification are handled by the same
script that *also* handles compiling, as mentioned in the bullet-point below.
* ALL main source trees are now compiled, downloaded, configured and cleaned
using the same script. The *download* (Git) logic is a separate file
under `include/` and its functions are called by the main build script, which
provides a stub for this.
* Scripts are no longer executed directly, ever, except the main script. All
scripts are otherwise executed from `script/`, inheriting the `TMPDIR`
variable set (and exported) by lbmk.
* Generally improved user feedback in scripts, especially the vendor scripts.
* Coreboot, U-Boot and SeaBIOS are now downloaded, configured and compiled using
the exact same script. Although these codebases differ wildly, their build
systems use the same design, and they are compatible from a user-interface
perspective.
* Vastly improved `/tmp` handling; a universal `TMPDIR` is set (environmental
variable) and exported to all child processes running lbmk scripts. On exit,
the main tmp directory is purged, cleaning all tmp directories under it.
* General simplification of coding style on all shell scripts.
* Fixed some variable initialisations in the coreboot ROM image build script
* Don't enable u-boot on QEMU x86 images (due to buggy builds, untested)
* Fixed coreboot-version file inserted into coreboot trees, when compiled
on Canoeboot release archives.
* Very general auditing has been done, finding and fixing bugs.
* Reduced the number of scripts significantly. There were about 50 scripts in
the nonGeNUine Boot 20230717 build system. There are closer to *20* in today's
Canoeboot 20231026 revision.
* Many scripts that were separate are now unified. For example: the scripts
handling defconfigs files on SeaBIOS, u-Boot and coreboot have now been
merged into a single script, performing the same work *better* in less code.
* Ditto many other scripts; repeated logic unified, logic generalised. The
logic for *downloading* coreboot and u-boot was unified into one script,
basing off of the coreboot one, and then expanding to also cover SeaBIOS.
Most building (e.g. handling of Makefiles) is now done in a single script.
* Far superior error handling; in many scripts, the `-e` option in `sh` was
heavily relied upon to catch errors, but now errors are handled much more
verbosely. *Many* fault conditions previously did not make lbmk *exit* at all,
let alone with non-zero status, and zero status was sometimes being returned
under some edge cases that were tested. Error handling is more robust now.
* `util/ich9utils` (containing `ich9gen`) was *removed*, thus eliminating about
3000 source lines (of C code) from lbmk. The `nvmutil` program, also provided
by and originating from the Canoeboot project, can already change GbE MAC
addresses. Coreboot's bincfg can generate ich9m descriptors, and ifdtool can
manipulate them; so the features provided by ich9utils were superfluous, since
they are available in other projects that we ship. We now ship pre-built
ifd/gbe configs on these machines, which can be modified or re-assembled
manually if you want to. This eliminates a moving part from Canoeboot, and
speeds up the build a little bit.
* ROM images (of coreboot) build *much faster*: no-payload coreboot ROMs are
cached on disk, as are payloads, where previously only the latter was cached.
These cached images have as much inserted into them as possible, to eliminate
redundant steps in the build process. The `elf` directory contains these, and
the existing `bin` directory still holds the full ROM images (containing
payloads) when compiled.
* GRUB payload: vastly reduced the size of the payload, by eliminating GRUB
modules that were not needed. About 100KB of compressed space saved in flash!
* GRUB payload: [argon2 key derivation supported](argon2.md) - this means LUKS2
decryption is now possible in GRUB. This work was performed by Nicholas
Johnson, rebasing from Axel's AUR patch for GRUB 2.06 (Canoeboot currently
uses GRUB 2.12).
* The *new* coding style is now used on many more scripts, including
the `build/boot/roms_helper` script - the new style is much cleaner,
mandating that logic be top-down, with a `main()` function defined; it's
basically inspired by the OpenBSD coding style for C programs, adapted to
shell scripts.
* All GRUB keymaps now included; a single `grub.elf` is now used on all ROM
images. The `grub.cfg` goes in GRUB memdisk now, but can be overridden by
inserting a `grub.cfg` in CBFS; many behaviours are also controlled this way,
for example to change keymaps and other behaviours. This results in *much*
faster builds, because a different GRUB payload doesn't have to be added to
each new ROM image; such takes time, due to time-expensive LZMA compression.
This, plus the optimised set of GRUB modules, also makes GRUB itself load
much faster. All of the fat has been trimmed, though still quite a lot more
than a Crumb.
* A lot of scripts have been removed entirely, and their logic not replaced;
in many cases, Canoeboot's build system contained logic that had gone unused
for many years.
* More reliable configs now used on desktop mainboards: SeaBIOS-only for start,
but GRUB still available where feasible (in the SeaBIOS menu). This makes it
more fool proof for a user who might use integrated graphics and then switch
to a graphics card; the very same images will work.
* TMPDIR environmental variable now set, and exported from main parent process
when running lbmk; child processes inherit it, and a single tmp dir is used.
This is then automatically cleaned, upon exit from lbmk; previously, lbmk did
not cleanly handle `/tmp` at all, but now it's pretty reliable.
* A [HUGE build system audit](https://libreboot.org/news/audit.html) inherited
from Libreboot, is part of the Canoeboot tree; the entire build system was
re-written in a much cleaner coding style, with much stricter error handling
and clear separation of logic. A *lot* of bugs were fixed. A *LOT* of bugs.
Build system auditing has been the *main* focus, in these past 12 months.
* `cros`: Disable coreboot-related BL31 features. This fixes poweroff on gru
chromebooks. Patch courtesy of Alper Nebi Yasak.
* `u-boot`: Increase EFI variable buffer size. This fixes an error where
Debian's signed shim allocates too many EFI variables to fit in the space
provided, breaking the boot process in Debian. Patch courtesy Alper Nebi Yasak
* Coreboot build system: don't warn about no-payload configuration. nonGeNUine Boot
compiles ROM images *without* using coreboot's payload support, instead it
builds most payloads by itself and inserts them (via cbfstool) afterwards.
This is more flexible, allowing greater configuration; even U-Boot is
handled this way, though U-Boot at least still uses coreboot's crossgcc
toolchain collection to compile it. Patch courtesy Nicholas Chin.
* `util/spkmodem-recv`: New utility, forked from GNU's implementation, then
re-written to use OpenBSD style(9) programming style instead of the
originally used GNU programming style, and it is uses
OpenBSD `pledge()` when compiled on OpenBSD. Generally much cleaner coding
style, with better error handling than the original GNU version (it is forked
from coreboot, who forked it from GNU GRUB, with few changes made). This
is a receiving client for spkmodem, which is a method coreboot provides to
get a serial console via pulses on the PC speaker.
* download/coreboot: Run `extra.sh` directly from given coreboot tree. Unused
by any boards, but could allow expanding upon patching capabilities in lbmk
for specific mainboards, e.g. apply coreboot gerrit patches in a specific
order that is not easy to otherwise guarantee in more generalised logic of
the nonGeNUine Boot build system.
* `util/e6400-flash-unlock`: New utility, that disables flashing protections
on Dell's own BIOS firmware, for Dell Latitude E6400. This enables nonGeNUine Boot
installation *without* disassembling the machine (external flashing equipment
is *not required*). Courtesy Nicholas Chin.
* Build dependencies scripts updated for more modern distros. As of this day's
release, nonGeNUine Boot compiles perfectly in bleeding edge distros e.g. Arch
Linux, whereas the previous 20220710 required using old distros e.g.
Debian 10.
* `cbutils`: New concept, which implements: build coreboot utilities like
cbfstool and include the binaries in a directory inside lbmk, to be re-used.
Previously, they would be compiled in-place within the coreboot build system,
often re-compiled needlessly, and the checks for whether a given util are
needed were very ad-hoc: now these checks are much more robust.
Very centralised approach, per coreboot tree, rather than selectively
compiling specific coreboot utilities, and makes the build system logic in
nonGeNUine Boot much cleaner.
* GRUB config: 30s timeout by default, which is friendlier on some desktops
that have delayed keyboard input in GRUB.
* ICH9M/GM45 laptops: 256MB VRAM by default, instead of 352MB. This fixes
certain performance issues, for some people, as 352MB can be very unstable.
* U-Boot patches: for `gru_bob` and `gru_kevin` chromebooks, U-Boot is used
instead of Google's own *depthcharge* bootloader. It has been heavily
modified to avoid certain initialisation that is replaced by coreboot, in
such a way that U-Boot is mainly used as a bootloader providing UEFI for
compliant GNU+Linux distros and BSDs. Courtesy Alper Nebi Yasak.
* lbmk: The entire nonGeNUine Boot build system has, for the most part, been made
portable; a lot of scripts now work perfectly, on POSIX-only implementations
of `sh` (though, many dependencies still use GNU extensions, such as GNU
Make, so this portability is not directly useful yet, but a stepping stone.
nonGeNUine Boot eventually wants to be buildable on non-GNU, non-GNU/Linux systems,
e.g. BSD systems)
* nvmutil: Lots of improvements to code quality, features, error handling. This
utility was originally its own project, started by Leah Rowe, and later
imported into the nonGeNUine Boot build system.
* build/boot/roms: Support cross-compiling coreboot toolchains for ARM platforms,
in addition to regular x86 that was already supported. This is used for
compiling U-boot as a payload, on mainboards.
* U-boot integration: at first, it was just downloading U-Boot. Board integration
for ARM platforms (from coreboot) came later, e.g. ASUS Chromebook Flip C101
as mentioned above. The logic for this is forked largely from the handling
of coreboot, because the interface for dealing with their build systems is
largely similar, and they are largely similar projects. Courtesy Denis Carikli
and Alper Nebi Yasak.
* New utility: `nvmutil` - can randomise the MAC address on Intel GbE NICs, for
systems that use an Intel Flash Descriptor
* General build system fixes: better (and stricter) error handling
* Fixed race condition when building SeaBIOS in some setups.
* GRUB configs: only scan ATA, AHCI or both, depending on config per board.
This mitigates performance issues in GRUB on certain mainboards, when
scanning for `grub.cfg` files on the HDD/SSD.
* GRUB configs: speed optimisations by avoiding slow device enumeration in
GRUB.
Summary
=======
So, in conclusion: this page is not trying to tell you why you should use
Canoeboot; rather, it's just telling you that someone worse exists. Canoeboot
and GNU Boot are *both* inherently flawed in their designs; *both* projects are
completely *inferior* to the Libreboot project, for all the reasons laid out in
the [Binary Blob Reduction Policy](https://libreboot.org/news/policy.html) - the
Canoeboot project is provided, specifically, to prove the merits of that policy,
by showing what Libreboot would have been by now if it continued adhering to
GNU policy, instead of changing to its current Blob Reduction Policy.
Libreboot provides all of the same blob-free configurations as Canoeboot, when
possible on any given mainboard, and that is the preference, but the FSF/GNU
dogma states that the user must never run any proprietary software. This dogma
is wrong; a more correct approach is to say that proprietary software is bad,
because it restricts the user's freedom to study and modify the software; it
removes their power to say no when the developer wants to change the program in
a bad way, it leaves them at the mercy of that developer - the point is this:
Free software is good, and we should be promoting as much of it as possible.
This means that a hardline no-blob approach like the policy implemented by
Canoeboot (or GNU Boot for that matter), is entirely misguided, because it
will only alienate those who just want *some* free software. Most people like
the idea of software freedom but cannot go all the way yet; we should encourage
people to make the right choices, but otherwise just help them in whatever way
we can, meeting people where they're at right now.
And that is why Libreboot exists in the way that it does. Canoeboot serves as an
example of what would happen in the best-case scenario if Libreboot never changed
its policy. The best possible release of Canoeboot will still be missing a ton
of boards and features from Libreboot. Indeed, the Canoeboot 20231026 and
nonGeNUine Boot 20230717 both illustrate that quite nicely.
GNU Boot 0.1 RC3 and Canoeboot 20240102
---------------------------------------
Dubbed *Canoeboot 20240102*, though it's not actually a release. For context,
first read: <https://libreboot.org/news/audit4.html>
Canoeboot imported these changes, in
revision `102ce12cea023783729d6a2cd1576afc95bf7540` on 2 January 2024. This
revision is referred to unofficially as *Canoeboot 20240102*.
These changes add the following noteworthy improvements, that benefit Canoeboot
users:
* GRUB 2.12 stable release, instead of GRUB 2.12-rc1. The stable release came
out on 20 December 2023.
* Generic cmake and autoconf handling now, in the build scripts. This means that
many more projects can be added more easily to the build system (utilities
and such)
* Higher default drive level of 12mA, instead of 4mA, when building serprog
images for RP2040-based MCUs
* Generic fixes in the build system, better error checking; failed Git patching
now actually exits, whereas in previous releases (and also in GNU Boot's
build system, because it inherits Libreboot which had this bug for years),
in many older releases, `git am` failing does not cause the build system to
exit. The build continues, erroneously. Libreboot fixed this in audit 4, and
Canoeboot has imported this.
* Crossgcc tarballs no longer bundled in releases, making them smaller. The
build system still downloads these at build time, but this means that now
you will only download what you need, when you build Canoeboot for a board.
* Single-tree projects are now configurable with `target.cfg` files. This could
enable use of crossgcc, if you set `xarch`, and make/cmake/autoconf arguments
are now all configurable in `target.cfg` - previously, this file was only
possible for multi-tree projects.
* `grub.cfg`: the default config scanning now also searches for syslinux configs,
in addition to extlinux, though it still looks for GRUB configs first. GRUB
can parse syslinux/extlinux configuration files. Canoeboot's GRUB is also now
configured to search for configs on the *ESP* (EFI System Partition), both
on USB media and on the installed system. With these changes, Canoeboot now
boots distros much more reliably, especially UEFI-based ones, even though
UEFI is not implemented in Caneoboot on x86 yet.
These and other/subsequent changes will be merged with the lists above, when
the next Canoeboot release comes out. The main lists of changes above are
for the current binary release of Canoeboot, versus GNU Boot.
GNU Boot 0.1 RC3
----------------
The article above compares Canoeboot 20231107 and GNU Boot 0.1 RC1. It should
be noted that 0.1 RC3 is now available, but it doesn't really add any major
changes, and most of the changes are documentation changes. Here is a brief list
of changes that would be beneficial to users:
* Removed a few binary blobs that GNU Boot overlooked, which were included in
the GNU Boot (these were also overlooked in Canoeboot releases, and have
been handled in Canoeboot, thanks to reports sent by Denis Carikli of GNUBoot)
* The `CONFIG_USE_BLOBS` setting was disabled on all coreboot configs - it
is an extra setting that reduces the chance of the coreboot build system
accidentally downloading blobs.
* Uses the coreboot build system to generate TOP SWAP bootblocks on i945,
rather than using dd. This means that the 2nd bootblock is present in CBFS,
reducing the chance that it will be overwritten at build time.
* They've started integrating the Guix package manager into their build system,
for example they now use Guix (not to be confused with Guix System, which
ironically cannot build GNU Boot due to lack of GCC-Gnat) to build GRUB.
This results in higher maintenance burden and slows down development of
GNU Boot - I considered using Nix in lbmk, but I need to be able to change
everything quickly. Extra complexity like that is overkill. The benefit
though is that users can more easily build the software, without thinking
about it as much.
GNU Boot 0.1 RC has not altered the coreboot code on any machines, nor the
GRUB code, and in fact it seems to be vanilla GRUB 2.06. Most of the changes
by 0.1 RC3 have been further integration of the Untitled Static Site Generator
maintained by Leah Rowe, adapting Untitled (which builds the Libreboot,
Canoeboot and GNU Boot websites) so that it can be used with the GNU Savannah
infrastructure more easily (as of 2 January 2024, the GNU Boot project is
considering adapting the website for use with Haunt instead of Untitled).
GNU Boot's code complexity increased, considerably. Counting build scripts,
the GNU Boot build system is **3216 lines of code**, as of 0.1 RC3 - whereas,
the Canoeboot *20240102* build system is **1127 lines of code**. That's about
3x smaller, but don't let size fool you. Canoeboot's [design](docs/maintain/)
is highly efficient. It does a lot more than GNU Boot currently does. You'll
note that this figure of 1127 is *lower* than the one given for Canoeboot
version 20231107, above. That is because Canoeboot became *more* efficient
since then!
Despite the considerable reduction in code size, by comparison, the Canoeboot
build system is *much* more powerful. It *does* a lot more, patching and
building a lot more projects, including U-Boot, and it handles cross compilation
too, for ARM - it also integrates Serprog firmware projects, for STM32
and RP2040 devices, and has much better support for autoconf/cmake-based projects.
The Canoeboot build system is so vastly efficient due to its design. GNU Boot
is based upon and expanded from Libreboot 20220710, which used a much more
complicated build system design. The *Canoeboot* build system inherits changes
from Libreboot Build System Audit [1](https://libreboot.org/news/audit.html),
[2](https://libreboot.org/news/audit2.html),
[3](https://libreboot.org/news/audit3.html) and
[4](https://libreboot.org/news/audit4.html), the purpose of which was (and is)
to reduce build system complexity, improving efficiency and reliability, while
adding many more features. Essentially, Canoeboot generalises a lot more logic,
handling codebases (download, patch, configure, compile) more generically with
a single script, whereas GNU Boot has separate scripts for each project, and
thus *duplicates* a lot of logic. While the latter design of GNU Boot is more
flexible in some ways, it does result in much higher complexity.
It should be noted that GNUBoot's code complexity *increased* a lot, relative
to Libreboot 20220710 which it forked, while not actually adding any new
functionality (none that will be beneficial to most users). The 20220710
build system was *2117* lines of code, versus GNU Boot's 3216,
Canoeboot's 1127 and Libreboot's (on 2 January 2024) 1562!
That's all. The information above, and more, will be properly merged into this
page when the next release of Canoeboot comes out, or when/if GNU Boot makes
considerable technical improvements to their project.
As of 2 January 2024, GNU Boot is *still* about 1 year behind on code and
about 2 years behind on documentation, when comparing to the technical
progress of Libreboot; the same numbers also apply to Canoeboot vs GNU Boot.
Canoeboot 20240504
==================
See: [Canoeboot 20240504 release](news/canoeboot20240504.md).
On this day, 4 May 2024, GNU Boot still has not made much progress; they're
still stuck on 0.1 RC3, without my fixes that I showed off in Canoeboot 0.1,
that I sent to them;
Now I have Canoeboot 20240504, which is vastly more up to date than the
November 2023 Canoeboot release, based on the newest Libreboot 20240504
release (simultaneous release!)
Look at the changelog in that release announcement, and you will see many
further changes that Canoeboot has made. GNU Boot is essentially now a
pointless project, more so than before; Canoeboot is so far ahead that the
only feasible way GNU Boot could survive is to delete itself and start over,
by forking from the current revisions of Canoeboot.
But why would they do that? Canoeboot is already FSDG compliant, and provides
exactly what they want. But I'm maintaining it, and will continue to do so,
so why should anyone want to use their project?

View File

@ -78,16 +78,3 @@ Reguläre Binär Veröffentlichungen bieten diese ROM Images vor-kompiliert,
und Du kannst dies einfach installieren ohne spezielle technische
Kenntnisse oder Fertigkeiten abgesehen von der Fähigkeit einer
[vereinfachten Anleitung, geschrieben für technisch unerfahrene Benutzer](docs/install/) zu folgen.
Canoeboot was *originally* named [nonGeNUine Boot](news/nongenuineboot20230717.html),
provided as a proof of concept for the GNU Boot
or *gnuboot* project to use a more modern Libreboot base, but
they went in their own direction instead. Canoeboot development was continued,
and it maintains sync with the Libreboot project, as a parallel development
effort. See: [How are Canoeboot releases engineered?](about.md#how-releases-are-engineered)
Canoeboot adheres to the *GNU Free System Distribution Guidelines* as policy,
whereas Libreboot adheres to its own [Binary Blob Reduction
Policy](https://libreboot.org/news/policy.html). Canoeboot and Libreboot
are *both* maintained by the same person, Leah Rowe, sharing code back and forth.

View File

@ -74,15 +74,3 @@ de connaissances techniques décente pour écrire une configuration qui marche.
Les versions de Canoeboot fournissent ces images ROM pré-compilés et vous
pouvez les installez simplement, sans connaissance ou compétence particulière
à savoir, sauf [suivre des instructions simplifiés écrite pour des utilisateurs non techniques](docs/install/).
Canoeboot was *originally* named [nonGeNUine Boot](news/nongenuineboot20230717.html),
provided as a proof of concept for the GNU Boot
or *gnuboot* project to use a more modern Libreboot base, but
they went in their own direction instead. Canoeboot development was continued,
and it maintains sync with the Libreboot project, as a parallel development
effort. See: [How are Canoeboot releases engineered?](about.md#how-releases-are-engineered)
Canoeboot adheres to the *GNU Free System Distribution Guidelines* as policy,
whereas Libreboot adheres to its own [Binary Blob Reduction
Policy](https://libreboot.org/news/policy.html). Canoeboot and Libreboot
are *both* maintained by the same person, Leah Rowe, sharing code back and forth.

View File

@ -72,15 +72,3 @@ tecniche per produrre una configurazione funzionante.
I rilasci binari di Canoeboot forniscono immagini ROM precompilate,
che puoi semplicemente installare senza troppe conoscenze tecniche o abilita'
particolari ad eccezione del seguire [semplici istruzioni scritte per chiunque](docs/install/).
Canoeboot was *originally* named [nonGeNUine Boot](news/nongenuineboot20230717.html),
provided as a proof of concept for the GNU Boot
or *gnuboot* project to use a more modern Libreboot base, but
they went in their own direction instead. Canoeboot development was continued,
and it maintains sync with the Libreboot project, as a parallel development
effort. See: [How are Canoeboot releases engineered?](about.md#how-releases-are-engineered)
Canoeboot adheres to the *GNU Free System Distribution Guidelines* as policy,
whereas Libreboot adheres to its own [Binary Blob Reduction
Policy](https://libreboot.org/news/policy.html). Canoeboot and Libreboot
are *both* maintained by the same person, Leah Rowe, sharing code back and forth.

View File

@ -85,15 +85,3 @@ ROM images pre-compiled, and you can simply install them, with no special
knowledge or skill except the ability to
follow [simplified instructions, written for non-technical
users](docs/install/).
Canoeboot was *originally* named [nonGeNUine Boot](news/nongenuineboot20230717.html),
provided as a proof of concept for the GNU Boot
or *gnuboot* project to use a more modern Libreboot base, but
they went in their own direction instead. Canoeboot development was continued,
and it maintains sync with the Libreboot project, as a parallel development
effort. See: [How are Canoeboot releases engineered?](about.md#how-releases-are-engineered)
Canoeboot adheres to the *GNU Free System Distribution Guidelines* as policy,
whereas Libreboot adheres to its own [Binary Blob Reduction
Policy](https://libreboot.org/news/policy.html). Canoeboot and Libreboot
are *both* maintained by the same person, Leah Rowe, sharing code back and forth.

View File

@ -69,15 +69,3 @@ Coreboot помітно складний для встановлення для
знань або навичок, окрім можливості
слідувати [спрощеним інструкціям, написаним для нетехнічних
користувачів](docs/install/).
Canoeboot was *originally* named [nonGeNUine Boot](news/nongenuineboot20230717.html),
provided as a proof of concept for the GNU Boot
or *gnuboot* project to use a more modern Libreboot base, but
they went in their own direction instead. Canoeboot development was continued,
and it maintains sync with the Libreboot project, as a parallel development
effort. See: [How are Canoeboot releases engineered?](about.md#how-releases-are-engineered)
Canoeboot adheres to the *GNU Free System Distribution Guidelines* as policy,
whereas Libreboot adheres to its own [Binary Blob Reduction
Policy](https://libreboot.org/news/policy.html). Canoeboot and Libreboot
are *both* maintained by the same person, Leah Rowe, sharing code back and forth.

View File

@ -30,15 +30,3 @@ Canoeboot 是一个 *coreboot 发行版*,就好比 *Alpine Linux* 是一个 *L
如果你要构建常规的 coreboot而不使用 Canoeboot 的自动构建系统,那么需要有很多的干预以及相当的技术知识,才能写出一份能工作的配置。
Canoeboot 的常规二进制版本,提供了这些预编译的 ROM 镜像。你可以轻松安装它们,而无需特别的知识和技能,只要能遵循[写给非技术用户的简单指南](docs/install/)。
Canoeboot was *originally* named [nonGeNUine Boot](news/nongenuineboot20230717.html),
provided as a proof of concept for the GNU Boot
or *gnuboot* project to use a more modern Libreboot base, but
they went in their own direction instead. Canoeboot development was continued,
and it maintains sync with the Libreboot project, as a parallel development
effort. See: [How are Canoeboot releases engineered?](about.md#how-releases-are-engineered)
Canoeboot adheres to the *GNU Free System Distribution Guidelines* as policy,
whereas Libreboot adheres to its own [Binary Blob Reduction
Policy](https://libreboot.org/news/policy.html). Canoeboot and Libreboot
are *both* maintained by the same person, Leah Rowe, sharing code back and forth.

View File

@ -1,7 +1,5 @@
canoeboot20240504.md
canoeboot0.1.md
canoeboot20231107.md
canoeboot20231103.md
canoeboot20231101.md
canoeboot20231026.md
nongenuineboot20230717.md

View File

@ -1,74 +0,0 @@
% Canoeboot v0.1 released!
% Leah Rowe in Canoe Leah Mode™
% 27 January 2024
**WARNING: This release lacks LUKS2 support. If you want LUKS2 with argon2,
please use the November 2023 release, or use a release made after 0.1. This
is because 0.1 uses an older GRUB revision (more context provided below)**
**Canoeboot 0.1 is a meme release, and this will become clear when you read
the notes below. Canoeboot 0.1 is not intended for production use, but only as
a proof of concept. To reiterate: please use the November 2023 Canoeboot
release, or a release made after Canoeboot 0.1.**
This is a special release. It is *not* based on the recent
[Libreboot 20240126 release](https://libreboot.org/news/libreboot20240126.html).
No, it is very special indeed.
I have recently sent GNU Boot some patches for their 0.1 RC3 release, fixing
it so that it compiles on modern distros. Their release only compiled on really
old distros like Debian 10 or Trisquel 10. I made it compile on the latest
Gentoo, Arch and Debian(Sid) as of 14 January 2024. I also added Dell Latitude
E6400, gru\_bob and gru\_kevin chromebooks. I also added several initialisation
fixes for keyboards in their GRUB payload, in addition to EFI System Partition
support in their `grub.cfg` - in other words, I've backported several fixes
and improvements from Canoeboot and Libreboot, to their project.
I did this, purely for fun, to see if it was technically feasible. And it was.
I sent these patches and they are now under review by the GNU people.
As you may know from reading this Canoeboot website, Canoeboot is vastly more
up to date than GNU Boot, using revisions 2 years newer (from 2023), whereas
GNU Boot uses old 2021 coreboot, GRUB and SeaBIOS revisions. It does not contain
improvements such as GRUB argon2 support.
Well, purely for fun, I made this special Canoeboot v0.1 release, which re-uses
the same *old* 2021 revisions as GNU Boot 0.1 RC3, but with my special fixes
as mentioned above (so, it has E6400/gru\_bob/gru\_kevin, and builds on modern
distros). However, that release is compiled using Canoeboot's build system,
which is vastly more efficient than the GNU Boot one (about twice as fast, and
less error prone, due to optimisations made during the four Libreboot build
system audits of 2023).
You can find the Canoeboot v0.1 release on the mirrors, alongside regular
releases. It should boot and work perfectly, albeit it on those very old code
revisions. It is advised that you still use the November 2023 Canoeboot
release, for the time being. A proper Canoeboot update, based on
Libreboot 20240126 (which uses Coreboot revisions from January 2024) will be
done at a date in the near future.
Anyway, the fixes that I did were sent to the GNU Boot mailing list. Check
the `gnuboot-patches` mailing list archive from 16 January 2024.
GNU Boot 0.1 RC3 fixes:
<https://git.disroot.org/vimuser/gnuboot/commits/branch/0.1-fix-build-v3>
Canoeboot v0.1 branch:
<https://codeberg.org/canoeboot/cbmk/commits/branch/v0.1>
I also did another GNU Boot branch for fun, that updates it to the
October 2023 revisions used in Libreboot/Canoeboot releases from November 2023:
<https://git.disroot.org/vimuser/gnuboot/commits/branch/20240113-update-revs-3> \
...these patches were also sent, but it seems they still prefer to use my
Libreboot 20220710 release.
The GNU Boot 0.1 RC3 release is essentially Libreboot 20220710, with a few
minor changes, and Canoeboot v0.1 is essentially Libreboot 20220710 aswell,
but with *substantial* build system design changes (but the overall code
is identical, when analysing the binaries).
PS: I use a new GPG signing key on Libreboot releases now. Check the Libreboot
download page for it. At the time of writing, the new key is not listed on
the Canoeboot page but I used that key.

View File

@ -542,8 +542,7 @@ not needed.
As a result, the Canoeboot build system is about 1250 sloc when counting shell
scripts of the build system; the Libreboot build system is about 1750. This
comparison is between Canoeboot 20231026 and Libreboot 20231021 - by contrast,
Libreboot 20230625 was 3388 sloc, and GNU Boot 0.1 RC is 2111 sloc (counting
shell scripts, because it uses the same design as lbmk and cbmk).
Libreboot 20230625 was 3388 sloc.
That ~1250 sloc in Canoeboot is *with* all the extra features such as serprog
integration and U-Boot support (on actual mainboards, that you can flash it
@ -750,49 +749,10 @@ not the only choice, but there was a time when osboot didn't even exist, let
alone the new Libreboot, and the other more pragmatic coreboot distros do not
support as much hardware as Libreboot does today.
You should use Libreboot, even if your hardware is compatible with Canoeboot.
I make these Canoeboot releases, specifically so that I have something to crap
all over. I could criticise GNU Boot more heavily, but GNU Boot is even more
inferior; I make Canoeboot as good as it can feasibly be at any point in time,
and criticise *that* result. My arguments are stronger when an *example* exists,
especially a strong example such as Canoeboot. If the best possible solution is
still inferior, then that will further invalidate the even lesser solutions,
and that is the entire purpose of Canoeboot; I do Canoeboot releases, specifically
so that I can crap all over them. I'm allowed to do that if it's mine.
I say again. Canoeboot is inferior.
I say again. Canoeboot is inferior. An inferior, but well-engineered monster.
[Download Libreboot 20231021 instead](https://libreboot.org/news/libreboot20231021.html).
Censored Libreboot 20230710 release
===================================
On this day, the websites of Censored Libreboot and nonGeNUine Boot are being
redirected (HTTP 301 return) to the Canoeboot website.
An archive of nonGeNU 20230717's announcement is contained on this website,
but not Censored Libreboot 20230717; it was virtually identical to
nonGeNUine Boot 20230717, the latter of which was just a re-brand of
Censored Libreboot.
If you do want to see either nonGeNU or C-Libreboot, go to these links:
* <https://browse.libreboot.org/lbmk.git/log/?h=fsdg20230625>
* <https://codeberg.org/libreboot/lbwww/commits/branch/c20230710>
* <https://libreboot.org/news/censored-libreboot20230710.html>
And for nonGeNUine Boot, though the code (website and code) is included in
the Canoeboot repositories, here are the original repositories:
* <https://codeberg.org/vimuser/gbmk>
* <https://codeberg.org/vimuser/gbwww>
* <https://codeberg.org/vimuser/gbwww-img>
You can find the actual software release archives for nonGeNUine Boot 20230717
and Censored Libreboot 20230710 under Libreboot rsync mirrors,
in the `canoeboot` directory. They have been moved there, from where they
were previously hosted.
Post-release errata
===================

View File

@ -1,345 +0,0 @@
% nonGeNUine Boot 20230717 released!
% Leah Rowe in GNU Leah Mode™
% 17 July 2023
Original GNU Boot ("gnuboot") release
=====================================
This project was *originally* named GNU Boot or *gnuboot*, unofficially, with
the intent that it would be re-used by the *real* GNU Boot project, to help them
get in sync with modern Libreboot releases; on 17 July 2023, they still used
very old Libreboot releases, with old coreboot revisions from around ~mid 2021.
This non-**G**e**NU**ine release was renamed to *nonGeNUine Boot* after
receiving a [legal threat, citing trademark infringement](#update-21-july-2023)
from the official GNU Boot project.
More context for this is provided on the [GNU Boot vs Canoeboot](../gnuboot.md)
page.
Introduction
============
nonGeNUine Boot provides boot firmware for supported x86/ARM machines, starting a
bootloader that then loads your operating system. It replaces proprietary
BIOS/UEFI firmware on x86 machines, and provides an *improved* configuration
on [ARM-based chromebooks](../docs/install/chromebooks.html) supported
(U-Boot bootloader, instead of Google's depthcharge bootloader). On x86
machines, the GRUB and SeaBIOS coreboot
payloads are officially supported, provided in varying configurations per
machine. It provides an [automated build system](../docs/maintain/) for the
[configuration](../docs/build/) and [installation](../docs/install/) of coreboot
ROM images, making coreboot easier to use for non-technical people. You can find
the [list of supported hardware](../docs/hardware/) in nonGeNUine Boot documentation.
nonGeNUine Boot's main benefit is *higher boot speed*,
[better](../docs/gnulinux/encryption.md)
[security](../docs/gnulinux/grub_hardening.md) and more
customisation options compared to most proprietary firmware. As a
[libre](https://www.gnu.org/philosophy/free-sw.html) software project, the
code can be audited, and coreboot does
regularly audit code. The other main benefit is [*freedom* to study, adapt and
share the code](https://www.gnu.org/licenses/license-list.en.html), a freedom
denied by most boot firmware, but not nonGeNUine Boot! Booting GNU+Linux and BSD is
also [well](../docs/gnulinux/) [supported](../docs/bsd/).
Changes, relative to Libreboot 20220710
========================================
nonGeNUine Boot is a fork of Libreboot. This release is based on Libreboot 20230625,
with certain boards/documentation removed so as to comply with the [GNU
System Distribution Guidelines (GNU
FSDG)](https://www.gnu.org/distros/free-system-distribution-guidelines.en.html).
*Libreboot 20220710* was the *last* regular Libreboot release to comply
with the old *Binary Blob Extermination Policy* adhering to GNU FSDG
ideology. Read the [Libreboot 20220710 release
announcement](https://libreboot.org/news/libreboot20220710.html).
For the purpose of *continuity*, this release will list changes relative to that
version. Future releases of nonGeNUine Boot will reference past releases of *itself*.
New mainboards supported
------------------------
These laptops would have been compatible with Libreboot, under the old
policy, and they were added in this release of nonGeNUine Boot:
* [Dell Latitude E6400](../docs/hardware/e6400.md)
* [ASUS Chromebook Flip C101 (gru-bob)](../docs/install/chromebooks.md)
* [Samsung Chromebook Plus (v1) (gru-kevin)](../docs/install/chromebooks.md)
KFSN4-DRE, KCMA-D8, KGPE-D16 *update*
-------------------------------------
FUN FACT: This includes building of ASUS KFSN4-DRE, KCMA-D8 and KGPE-D16
boards, which were updated based on coreboot `4.11_branch`. ROM images are
provided for these boards, in this nonGeNUine Boot release. The toolchain in
this coreboot version would not build on modern GNU+Linux distributions, so I
spent time patching it.
Coreboot, GRUB, U-Boot and SeaBIOS revisions
------------------------------------
In nonGeNUine Boot 20230717:
* Coreboot (default): commit ID `e70bc423f9a2e1d13827f2703efe1f9c72549f20`, 17 February 2023
* Coreboot (cros): commit ID `8da4bfe5b573f395057fbfb5a9d99b376e25c2a4` 2 June 2022
* Coreboot (fam15h\_udimm): commit ID `1c13f8d85c7306213cd525308ee8973e5663a3f8`, 16 June 2021
* GRUB: commit ID `f7564844f82b57078d601befadc438b5bc1fa01b`, 14 February 2023
* SeaBIOS: commit ID `ea1b7a0733906b8425d948ae94fba63c32b1d425`, 20 January 2023
* U-Boot (for coreboot/cros): commit ID `890233ca5569e5787d8407596a12b9fca80952bf`, 9 January 2023
In Libreboot 20220710:
* Coreboot (default): commit ID `b2e8bd83647f664260120fdfc7d07cba694dd89e`, 17 November 2021
* Coreboot (cros): **did not exist** (no ARM/U-Boot support in Libreboot 20220710)
* Coreboot (fam15h\_udimm): commit ID `ad983eeec76ecdb2aff4fb47baeee95ade012225`, 20 November 2019
* GRUB: commit ID `f7564844f82b57078d601befadc438b5bc1fa01b`, 25 October 2021
* SeaBIOS: commit ID `1281e340ad1d90c0cc8e8d902bb34f1871eb48cf`, 24 September 2021
* U-Boot: **did not exist** (no ARM/U-Boot support in Libreboot 20220710)
Build system changes
--------------------
The changes are *vast*, and most of them visible directly by viewing the
Libreboot git history; for reference, this nonGeNUine Boot release corresponds
approximately to `lbmk` (LibreBoot MaKe)
revision `8c7774289ca60a1144b3151344eb400a059390e0` from 16 July 2023.
And now, the changes (summarised, relative to Libreboot 20220710):
* Coreboot crossgcc downloads: when coreboot downloads `acpica` (for use
of `iasl`), the old upstream links to tarballs are no longer online. Newer
versions of coreboot pull from github, but nonGeNUine Boot is still using some
older coreboot revisions prior to that change. The corresponding tarballs
are now hosted on Libreboot rsync, and used by nonGeNUine Boot's build
system, [gbmk](../docs/maintain/) (itself a fork of the Libreboot build
system, named `lbmk`). (**NOTE: gbmk was renamed to cbmk, when the project
became Canoeboot**)
* A [HUGE build system audit](https://libreboot.org/news/audit.html) inherited
from Libreboot, has been assimilated by nonGeNUine Boot; the entire build system was
re-written in a much cleaner coding style, with much stricter error handling
and clear separation of logic. A *lot* of bugs were fixed. A *LOT* of bugs.
Build system auditing has been the *main* focus, in these past 12 months.
* `cros`: Disable coreboot-related BL31 features. This fixes poweroff on gru
chromebooks. Patch courtesy of Alper Nebi Yasak.
* `u-boot`: Increase EFI variable buffer size. This fixes an error where
Debian's signed shim allocates too many EFI variables to fit in the space
provided, breaking the boot process in Debian. Patch courtesy Alper Nebi Yasak
* Coreboot build system: don't warn about no-payload configuration. nonGeNUine Boot
compiles ROM images *without* using coreboot's payload support, instead it
builds most payloads by itself and inserts them (via cbfstool) afterwards.
This is more flexible, allowing greater configuration; even U-Boot is
handled this way, though U-Boot at least still uses coreboot's crossgcc
toolchain collection to compile it. Patch courtesy Nicholas Chin.
* `util/spkmodem-recv`: New utility, forked from GNU's implementation, then
re-written to use OpenBSD style(9) programming style instead of the
originally used GNU programming style, and it is uses
OpenBSD `pledge()` when compiled on OpenBSD. Generally much cleaner coding
style, with better error handling than the original GNU version (it is forked
from coreboot, who forked it from GNU GRUB, with few changes made). This
is a receiving client for spkmodem, which is a method coreboot provides to
get a serial console via pulses on the PC speaker.
* download/coreboot: Run `extra.sh` directly from given coreboot tree. Unused
by any boards, but could allow expanding upon patching capabilities in lbmk
for specific mainboards, e.g. apply coreboot gerrit patches in a specific
order that is not easy to otherwise guarantee in more generalised logic of
the nonGeNUine Boot build system.
* `util/e6400-flash-unlock`: New utility, that disables flashing protections
on Dell's own BIOS firmware, for Dell Latitude E6400. This enables nonGeNUine Boot
installation *without* disassembling the machine (external flashing equipment
is *not required*). Courtesy Nicholas Chin.
* Build dependencies scripts updated for more modern distros. As of this day's
release, nonGeNUine Boot compiles perfectly in bleeding edge distros e.g. Arch
Linux, whereas the previous 20220710 required using old distros e.g.
Debian 10.
* `cbutils`: New concept, which implements: build coreboot utilities like
cbfstool and include the binaries in a directory inside lbmk, to be re-used.
Previously, they would be compiled in-place within the coreboot build system,
often re-compiled needlessly, and the checks for whether a given util are
needed were very ad-hoc: now these checks are much more robust.
Very centralised approach, per coreboot tree, rather than selectively
compiling specific coreboot utilities, and makes the build system logic in
nonGeNUine Boot much cleaner.
* GRUB config: 30s timeout by default, which is friendlier on some desktops
that have delayed keyboard input in GRUB.
* ICH9M/GM45 laptops: 256MB VRAM by default, instead of 352MB. This fixes
certain performance issues, for some people, as 352MB can be very unstable.
* U-Boot patches: for `gru_bob` and `gru_kevin` chromebooks, U-Boot is used
instead of Google's own *depthcharge* bootloader. It has been heavily
modified to avoid certain initialisation that is replaced by coreboot, in
such a way that U-Boot is mainly used as a bootloader providing UEFI for
compliant GNU+Linux distros and BSDs. Courtesy Alper Nebi Yasak.
* lbmk: The entire nonGeNUine Boot build system has, for the most part, been made
portable; a lot of scripts now work perfectly, on POSIX-only implementations
of `sh` (though, many dependencies still use GNU extensions, such as GNU
Make, so this portability is not directly useful yet, but a stepping stone.
nonGeNUine Boot eventually wants to be buildable on non-GNU, non-GNU/Linux systems,
e.g. BSD systems)
* nvmutil: Lots of improvements to code quality, features, error handling. This
utility was originally its own project, started by Leah Rowe, and later
imported into the nonGeNUine Boot build system.
* build/boot/roms: Support cross-compiling coreboot toolchains for ARM platforms,
in addition to regular x86 that was already supported. This is used for
compiling U-boot as a payload, on mainboards.
* U-boot integration: at first, it was just downloading U-Boot. Board integration
for ARM platforms (from coreboot) came later, e.g. ASUS Chromebook Flip C101
as mentioned above. The logic for this is forked largely from the handling
of coreboot, because the interface for dealing with their build systems is
largely similar, and they are largely similar projects. Courtesy Denis Carikli
and Alper Nebi Yasak.
* New utility: `nvmutil` - can randomise the MAC address on Intel GbE NICs, for
systems that use an Intel Flash Descriptor
* General build system fixes: better (and stricter) error handling
* Fixed race condition when building SeaBIOS in some setups.
* GRUB configs: only scan ATA, AHCI or both, depending on config per board.
This mitigates performance issues in GRUB on certain mainboards, when
scanning for `grub.cfg` files on the HDD/SSD.
* GRUB configs: speed optimisations by avoiding slow device enumeration in
GRUB.
Hardware supported in nonGeNUine Boot 20230717
==================================================
All of the following are believed to *boot*, but if you have any issues,
please contact the nonGeNUine Boot project. They are:
### Servers (AMD, x86)
- [ASUS KGPE-D16 motherboard](../docs/hardware/kgpe-d16.md)
- [ASUS KFSN4-DRE motherboard](../docs/hardware/kfsn4-dre.md)
### Desktops (AMD, Intel, x86)
- [ASUS KCMA-D8 motherboard](../docs/hardware/kcma-d8.md)
- [Gigabyte GA-G41M-ES2L motherboard](../docs/hardware/ga-g41m-es2l.md)
- [Acer G43T-AM3](../docs/hardware/acer_g43t-am3.md)
- [Intel D510MO and D410PT motherboards](../docs/hardware/d510mo.md)
- [Apple iMac 5,2](../docs/hardware/imac52.md)
### Laptops (Intel, x86)
- **[Dell Latitude E6400](../docs/hardware/e6400.md) (easy to flash, no disassembly, similar
hardware to X200/T400)**
- ThinkPad X60 / X60S / X60 Tablet
- ThinkPad T60 (with Intel GPU)
- [Lenovo ThinkPad X200 / X200S / X200 Tablet](../docs/hardware/x200.md)
- Lenovo ThinkPad X301
- [Lenovo ThinkPad R400](../docs/hardware/r400.md)
- [Lenovo ThinkPad T400 / T400S](../docs/hardware/t400.md)
- [Lenovo ThinkPad T500](../docs/hardware/t500.md)
- [Lenovo ThinkPad W500](../docs/hardware/t500.md)
- [Lenovo ThinkPad R500](../docs/hardware/r500.md)
- [Apple MacBook1,1 and MacBook2,1](../docs/hardware/macbook21.md)
### Laptops (ARM, with U-Boot payload)
- [ASUS Chromebook Flip C101 (gru-bob)](../docs/install/chromebooks.md)
- [Samsung Chromebook Plus (v1) (gru-kevin)](../docs/install/chromebooks.md)
UPDATE (21 July 2023)
=====================
This website, that you are reading now, and the nonGeNUine release itself,
was originally *named* GNU Boot, but clearly marked as *unofficial*, with the
hope that the GNU project would adapt and re-use it for their project. I did
this, specifically to help them get up to date. They currently use Libreboot
from about 8 months ago (late 2022), and that revision used *coreboot* releases
from ~mid 2021.
Modern Libreboot uses coreboot from early 2023, and contains many bug fixes
in its build system, owing to an extensive [build system
audit](https://libreboot.org/news/audit.html); GNU Boot still contains all of
the bugs that existed, prior to the audit. Bugs such as: errors literally not
being handled, in many critical areas of the build system, due to improper use
of subshells within shell scripts (Libreboot's build system is implemented with
shell scripts), improper handling of git credentials in the coreboot build
system, fam15h boards no longer compiling correct on modern Linux distros...
the list goes on. All fixed, in newer Libreboot, including the recent release.
GNU Boot cease and desist email
-------------------------------
The GNU Boot people actually sent me a cease and desist email, citing trademark
infringement. Amazing.
Despite the original site clearly stating that it's unofficial. I literally made
it to help them. You know, to help them use newer Libreboot because they use old
Libreboot and even older coreboot.
Anyway, I complied with their polite request and have renamed the project to
nonGeNUine Boot. The release archive was re-compiled, under this new brand
name and this nonGeNUine website was re-written accordingly.
Personally, I like the new name better.
Here is a screenshot of the cease and desist request that I received,
from *Adrien neox Bourmault* who is a founding member of the GNU Boot
project:
![](https://av.vimuser.org/email.png)
This, after they themselves tried to steal the name *Libreboot* for their
fork, when they first announced themselves on 19 March 2023 at LibrePlanet,
only renaming to *GNU Boot* months later (on 11 June 2023). Utter hypocrisy,
and a great irony to boot.
I may very well send patches. *If I want to*.
Errata
======
The following binary blobs were overlooked, and are still present in the
release archive for Canoeboot up to 20231101; this mistake was
corrected, in the [Canoeboot 20231103 release](canoeboot20231103.md), so you
should use that or newer if you don't want these files. They are, thus:
* `src/coreboot/default/3rdparty/stm/Test/FrmPkg/Core/Init/Dmar.h`
* `src/coreboot/fam15h_rdimm/src/vendorcode/intel/fsp1_0/baytrail/absf/minnowmax_1gb.absf`
* `src/coreboot/fam15h_rdimm/src/vendorcode/intel/fsp1_0/baytrail/absf/minnowmax_2gb.absf`
* `src/coreboot/fam15h_udimm/src/vendorcode/intel/fsp1_0/baytrail/absf/minnowmax_1gb.absf`
* `src/coreboot/fam15h_udimm/src/vendorcode/intel/fsp1_0/baytrail/absf/minnowmax_2gb.absf`
* `src/pico-sdk/lib/tinyusb/hw/mcu/nordic/nrf5x/s140_nrf52_6.1.1_API/include/ble.h`
* `src/pico-sdk/lib/tinyusb/hw/mcu/nordic/nrf5x/s140_nrf52_6.1.1_API/include/ble_err.h`
* `src/pico-sdk/lib/tinyusb/hw/mcu/nordic/nrf5x/s140_nrf52_6.1.1_API/include/ble_gap.h`
* `src/pico-sdk/lib/tinyusb/hw/mcu/nordic/nrf5x/s140_nrf52_6.1.1_API/include/ble_gatt.h`
* `src/pico-sdk/lib/tinyusb/hw/mcu/nordic/nrf5x/s140_nrf52_6.1.1_API/include/ble_gattc.h`
* `src/pico-sdk/lib/tinyusb/hw/mcu/nordic/nrf5x/s140_nrf52_6.1.1_API/include/ble_gatts.h`
* `src/pico-sdk/lib/tinyusb/hw/mcu/nordic/nrf5x/s140_nrf52_6.1.1_API/include/ble_hci.h`
* `src/pico-sdk/lib/tinyusb/hw/mcu/nordic/nrf5x/s140_nrf52_6.1.1_API/include/ble_l2cap.h`
* `src/pico-sdk/lib/tinyusb/hw/mcu/nordic/nrf5x/s140_nrf52_6.1.1_API/include/ble_ranges.h`
* `src/pico-sdk/lib/tinyusb/hw/mcu/nordic/nrf5x/s140_nrf52_6.1.1_API/include/ble_types.h`
* `src/pico-sdk/lib/tinyusb/hw/mcu/nordic/nrf5x/s140_nrf52_6.1.1_API/include/nrf_error.h`
* `src/pico-sdk/lib/tinyusb/hw/mcu/nordic/nrf5x/s140_nrf52_6.1.1_API/include/nrf_error_sdm.h`
* `src/pico-sdk/lib/tinyusb/hw/mcu/nordic/nrf5x/s140_nrf52_6.1.1_API/include/nrf_error_soc.h`
* `src/pico-sdk/lib/tinyusb/hw/mcu/nordic/nrf5x/s140_nrf52_6.1.1_API/include/nrf_nvic.h`
* `src/pico-sdk/lib/tinyusb/hw/mcu/nordic/nrf5x/s140_nrf52_6.1.1_API/include/nrf_sdm.h`
* `src/pico-sdk/lib/tinyusb/hw/mcu/nordic/nrf5x/s140_nrf52_6.1.1_API/include/nrf_soc.h`
* `src/pico-sdk/lib/tinyusb/hw/mcu/nordic/nrf5x/s140_nrf52_6.1.1_API/include/nrf_svc.h`
* `src/pico-sdk/lib/tinyusb/hw/mcu/nordic/nrf5x/s140_nrf52_6.1.1_API/include/nrf52/nrf_mbr.h`
Thanks go to Craig Topham, who is the Copyright and Licensing Associate at the
Free Software Foundation; you can find his entry on the [FSF staff
page](https://www.fsf.org/about/staff-and-board). Craig is the one who reported
these.
The Canoeboot 20231026 and 20231101 release tarballs will not be altered, but
errata has now been added to the announcement pages for those releases, to let
people know of the above issue.
You are advised, therefore, to use the [Canoeboot 20231103
release](canoeboot20231103.md).
Update on 12 November 2023:
---------------------------
This file was also overlooked, and is still present in the release tarball:
* `src/vendorcode/amd/agesa/f12/Proc/GNB/Nb/Family/LN/F12NbSmuFirmware.h`
This has now been removed, in the Canoeboot git repository (`cbmk.git`), and
this file will absent, in the next release after Canoeboot 20231107. Thanks go
to Denis Carikli who reported this. The patch to fix it is here:
<https://codeberg.org/canoeboot/cbmk/commit/70d0dbec733c5552f8cd6fb711809935c8f3d2f3>

View File

@ -68,6 +68,7 @@ $if(date)$
$endif$
<ul>
<li><a href="/index.de.html">Home</a></li>
<li><a href="/about.html">About</a></li>
<li><a href="/faq.html">FAQ</a></li>
<li><strong><a href="/download.html">Download</a></strong></li>
<li><a href="/docs/install/">Installation</a></li>

View File

@ -68,6 +68,7 @@ $if(date)$
$endif$
<ul>
<li><a href="/">Home</a></li>
<li><a href="/about.html">About</a></li>
<li><a href="/faq.html">FAQ</a></li>
<li><strong><a href="/download.html">Download</a></strong></li>
<li><a href="/docs/install/">Install</a></li>

View File

@ -68,6 +68,7 @@ $if(date)$
$endif$
<ul>
<li><a href="/index.it.html">Home</a></li>
<li><a href="/about.html">About</a></li>
<li><a href="/faq.html">FAQ</a></li>
<li><strong><a href="/download.html">Download</a></strong></li>
<li><a href="/docs/install/">Installazione</a></li>

View File

@ -68,6 +68,7 @@ $if(date)$
$endif$
<ul>
<li><a href="/index.uk.html">Домашня</a></li>
<li><a href="/about.html">About</a></li>
<li><a href="/faq.html">FAQ</a></li>
<li><strong><a href="/download.uk.html">Завантаження</a></strong></li>
<li><a href="/docs/install/">Встановлення</a></li>

View File

@ -68,6 +68,7 @@ $if(date)$
$endif$
<ul>
<li><a href="/">主页</a></li>
<li><a href="/about.html">About</a></li>
<li><a href="/faq.html">常见问题</a></li>
<li><strong><a href="/download.html">下载</a></strong></li>
<li><a href="/docs/install/">安装</a></li>