Canoeboot vs GNU Boot

Return to index

If you want to understand the beef Canoeboot has with GNU Boot, please read the about page, the Libreboot Binary Blob Reduction Policy and the GNU Boot article on - all of that energy has fuelled the creation of this page, and in fact the entire Canoeboot project. The main purpose of Canoeboot is to be technically superior to GNU Boot, while complying with all of its policies by providing ROM images and source tarballs adhering to the GNU Free System Distribution Guidelines, even though GNU FSDG is deeply flawed; this page describes precisely how that has been achieved, and it will be updated over time as Canoeboot continues to develop.

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.

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; 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:

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:

Git revisions in Canoeboot 20231026:

Git revisions in GNU Boot 0.1 RC1:

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 - 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, can be used to reduce the risk of evil maid attacks (by making it infeasible).

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 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:


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 - 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.

Markdown file for this page:

Subscribe to RSS for this site

Site map

This HTML page was generated by the untitled static site generator.