Kernels & generations

Choosing a kernel

scraps add scraplinux-base-kernel
scraplinux-base-kernel the default. Linux 7.1.3, broad hardware support, most drivers as modules.
scraplinux-kernel Linux 6.12 LTS with the ZEN patchset merged on top. See below.
scraplinux-libre-kernel no binary blob loading paths, no nonfree microcode.
scraplinux-small-kernel monolithic: no module loader at all, so no initramfs is needed either. Fast boot, fixed hardware.
scraplinux-rt-kernel realtime preemption.
scraplinux-hardened-kernel hardening-focused config options turned up.

More than one kernel can be installed on the same machine at once; the bootloader gets a separate entry for each - the same mechanism generations use, below, for a different purpose.

scraplinux-kernel: a real fork, not a config change

Source at github.com/apiwo/scraplinux-kernel. Linux 6.12 LTS with the ZEN patchset merged directly into the tree, plus one small ScrapLinux-authored patch on top.

The ScrapLinux-authored patch raises the default readahead window to 512 KiB.

ZEN is maintained against a moving 6.12 point-release line; this fork pinned to 6.12.100 after the patchset itself had drifted through 83 upstream point releases since the patches were originally written. One hunk genuinely did not apply cleanly and was dropped rather than forced - ZEN's AMD INVLPGB broadcast-TLB-flush backport conflicted with upstream changes in a way that risked subtle TLB invalidation bugs - recorded in the repository's PATCHES.md rather than silently skipped.

What a generation is

A complete, self-contained record of what the system was declared to be at one moment: the six config files, the explicit package set with exact versions, enabled services, and which kernel was in use. Every scraplinux-rebuild writes one before it changes anything, and another once it has succeeded - so a rebuild that fails partway through still leaves a clean "before" record.

scraplinux generations

GEN   DATE                 PACKAGES SERVICES  DESCRIPTION
*5    2026-08-01 14:02:11  84       7         rebuild
 4    2026-08-01 14:02:03  82       6         before rebuild
 3    2026-07-31 09:14:55  82       6         rebuild
 2    2026-07-31 09:14:48  79       6         before rebuild
 1    2026-07-30 22:41:02  79       6         initial install

* = current

Rolling back

scraplinux rollback            go back one generation
scraplinux rollback 3          go back to generation 3 specifically
scraplinux diff 3 5            what changed between them
scraplinux-generation show 3   everything generation 3 recorded

Rolling back restores that generation's config and reconciles the running machine to it - the same reconciling operation an ordinary rebuild performs, against an older set of files instead of the current one. Switching to a generation is itself recorded as a new generation first, so a rollback is also undoable.

From the boot menu

The recent generations are listed directly in the bootloader:

ScrapLinux
ScrapLinux (verbose)
ScrapLinux (recovery shell)
ScrapLinux (generation 4)
ScrapLinux (generation 3)

Choosing one boots with scraplinux.generation=N on the kernel command line. /etc/rc.boot checks for it very early, before any service starts, and reconciles the system to that generation if it isn't already current - so booting that entry means the same thing as scraplinux-generation switch N before powering on. If the switch itself fails, the machine still finishes booting normally and reports the failure - an escape hatch that can get stuck is not an escape hatch.

More: scraplinux linux docs · install · configuration · packages · networking, desktops & init · troubleshooting & reference