Fact-checked by Grok 2 weeks ago

systemd-boot

systemd-boot, also known as sd-boot, is a simple boot manager developed as part of the project for operating systems. It operates exclusively on the (ESP) or Extended Boot Loader Partition (XBOOTLDR), loading boot entries from configuration files and executing EFI images such as kernels with EFI stub support. Originally released in 2012 as gummiboot, it was renamed and integrated into to provide a lightweight alternative to more complex bootloaders like . systemd-boot features a textual for selecting boot entries, with options to edit kernel command lines, and supports automatic default entry selection via patterns or interaction. configurations are managed through simple text files in /loader/, including loader.conf for settings like timeout and console mode, and entries/ for defining specific boot options with paths, initramfs images, and command-line arguments. It adheres to the Boot Loader Specification, ensuring compatibility with unified images in /EFI/Linux/ and integration with tools like bootctl for installation and management. Notable capabilities include Secure Boot support through automatic enrollment of machine owner keys, boot counting for fallback mechanisms, and generation of a for early boot entropy. systemd-boot is compatible with UEFI firmware on systems such as and , booting not only but also other EFI applications like (via 'w' hotkey) or macOS (via 'a' hotkey). It requires kernels compiled with CONFIG_EFI_STUB and is commonly used in distributions such as as the default bootloader, with optional support in . The emphasizes simplicity and speed, avoiding complex scripting in favor of direct EFI execution, and supports key bindings for navigation, editing, and system controls during boot. Developed primarily by contributors including Kay Sievers, it is maintained in the GitHub repository and benefits from ongoing updates aligned with releases.

Introduction

Overview

systemd-boot, also known as sd-boot, is a simple and lightweight boot manager that loads EFI executables directly from the () or the optional XBOOTLDR partition. It presents a textual menu for selecting boot entries and includes an in-memory editor to modify command-line parameters before booting. Originally developed as gummiboot, it emphasizes minimalism and ease of configuration for systems. As an integral component of the systemd ecosystem, systemd-boot functions as a bootloader for numerous Linux distributions that employ systemd, enabling integrated boot management through the bootctl command-line tool. This integration supports automated updates and configuration of boot entries in line with the Boot Loader Specification. In its operation, systemd-boot scans designated partitions for bootable images, such as kernel files with EFI stub support, displays a selectable menu (activated by keypress during the timeout period), and chains to the chosen kernel or operating system loader. As of November 2025, it is included in systemd version 258.2, with ongoing maintenance by the systemd project—primarily sponsored by Red Hat and bolstered by community contributions via GitHub.

Development origins

The development of systemd-boot originated within the broader project, initiated by in collaboration with Kay Sievers around 2010, as part of efforts to modernize Linux system initialization. By 2011-2012, with firmware becoming increasingly standard on new hardware from major vendors like and , the focus shifted to creating a dedicated boot manager to handle the transition from legacy to EFI systems. Primary development was led by engineers Kay Sievers and Harald Hoyer, who addressed key limitations in existing bootloaders such as , including its complexity, support for outdated modes, and slower boot processes on pure setups. The initial motivations centered on producing a minimal, UEFI-specific tool tailored for Linux environments, emphasizing simplicity and performance to capitalize on the direct EFI stub loading capabilities in modern kernels (enabled via CONFIG_EFI_STUB). Unlike feature-heavy bootloaders like , which required extensive scripting and multi-stage loading, the project aimed to streamline the boot path for faster initialization, particularly beneficial for desktop and embedded systems where quick startup was a priority. This approach was driven by the rapid hardware shift toward , with distributions like beginning to default to it by late 2011, necessitating a lightweight alternative that avoided GRUB's overhead while ensuring compatibility with the (). Early design principles revolved around a "rubber " metaphor—lightweight and unencumbered, much like an —focusing on direct execution of EFI images without complex scripting or dependencies outside the ESP. relied on simple directory-based entries, enabling an on-screen for selection via patterns or keyboard input, which prioritized ease of use and reduced compared to scriptable alternatives. The first public release of the standalone gummiboot project occurred on June 28, 2012, licensed under the GNU LGPL v2.1 and hosted on GitHub and FreeDesktop.org repositories. Adoption was propelled by the surging UEFI prevalence in consumer and server hardware, positioning gummiboot as a swift, EFI-optimized option ahead of its later renaming and integration into systemd in 2015.

History

Origins as gummiboot

Gummiboot was introduced in mid-2012 as a minimalist boot manager developed primarily by engineers Kay Sievers and Harald Hoyer under the project. The initial code import occurred around late June 2012, positioning it as a lightweight alternative to more complex bootloaders like GRUB2 for early experimentation on Linux systems. Designed exclusively for environments without any legacy support, gummiboot focused on simplicity by executing EFI images directly from the (), relying on kernels compiled with the CONFIG_EFI_STUB option to bypass traditional boot loader complexities. At its core, gummiboot supported FAT file systems on the ESP and provided automatic detection of bootable EFI images through configurable glob patterns, enabling it to identify and include common OS loaders such as the (bootmgfw.efi) or (grubx64.efi) without manual entry creation for each. Users could select entries via a basic text-based menu navigated with arrow keys, with a configurable timeout for the default boot option defined in a simple loader.conf file. Boot entries were managed through plain-text .conf files in the loader/entries directory, emphasizing ease of configuration over extensive scripting or plugin support. Released under the version 2.1, gummiboot was distributed as a standalone package, allowing independent adoption by Linux distributions. Development activity centered on the FreeDesktop.org cgit repository from 2012 to 2014, with iterative releases enhancing compatibility and menu usability while maintaining a focus on minimalism—such as avoiding emulation and prioritizing direct EFI service calls. Early versions, like the one packaged for 19 testing in 2013 (gummiboot-26), demonstrated its experimental into distribution prototypes for setups. The project garnered positive reception in the community for its speed and straightforward approach, particularly in nascent environments where complex bootloaders often introduced overhead; it was lauded as a "simple EFI boot loader that just works" for quick prototyping and dual-boot scenarios. This standalone phase lasted until 2015, after which it transitioned into with the ecosystem and a subsequent renaming.

Integration into systemd

In February 2015, during the conference in , developers and Kay Sievers announced plans to integrate the gummiboot UEFI boot manager into the project to enhance the ecosystem's security chain, particularly for UEFI Secure Boot support. The merger was completed with the release of version 220 on May 22, 2015, at which point gummiboot was renamed to systemd-boot to better align with 's branding conventions. The primary reasons for the integration included streamlining boot management within the suite, providing unified tools like the updated bootctl utility for , , and updates, and eliminating the need for separate of a standalone project. Post-merger, systemd-boot was bundled directly with the package, facilitating easier distribution and reducing fragmentation. Key enhancements introduced systemd-specific capabilities, such as unified boot counting via the Boot Loader Specification for automatic fallback on boot failures, and improved Secure Boot compatibility through an EFI stub that enables creation of signed EFI binaries embedding the , initrd, and other boot data. Following the integration, systemd-boot saw rapid adoption as a lightweight UEFI bootloader alternative in several Linux distributions, including starting in mid-2015, select Silverblue and CoreOS variants, and openSUSE's UEFI setups. The standalone gummiboot project was effectively deprecated by late 2015, with no further independent releases after its absorption into . Maintenance shifted to the team, led primarily by engineers including Kay Sievers, ensuring ongoing development aligned with 's evolution.

Design and features

Architecture

systemd-boot features a minimalistic and modular architecture tailored for UEFI firmware environments, emphasizing simplicity and efficiency in boot management. At its core, the boot loader consists of the primary executable bootx64.efi, which handles the initial UEFI entry point and menu rendering for x86-64 architectures. These components are compiled as Portable Executable (PE) binaries compliant with UEFI standards, ensuring seamless integration with firmware boot services. The discovery mechanism relies on automated file system scanning of the EFI System Partition (ESP), which must be formatted as FAT32, or the optional Extended Boot Loader Partition (XBOOTLDR). systemd-boot enumerates boot entries by parsing configuration files in the /loader/entries/ directory, utilizing glob patterns like *.conf to identify valid entries that specify kernel paths (e.g., via linux keys) and associated parameters. This approach supports both Type #1 entries (traditional conf files with separate kernel/initrd) and Type #2 entries (Unified Kernel Images in /EFI/Linux/), allowing flexible multi-OS setups without hardcoded paths. The scanning occurs at runtime, merging entries from accessible partitions to build the boot menu dynamically. systemd-boot supports recovery via boot counting, where failed boot attempts rename entry files (e.g., appending +N for remaining tries) to automatically fall back to previous configurations. To optimize performance, systemd-boot operates in a fully memory-based manner, loading all menu data, entries, and necessary assets into immediately after UEFI initialization. This eliminates subsequent disk I/O during menu interaction or selection, contributing to reduced latency. The avoids persistent state beyond EFI variables, relying instead on transient memory for the session. Interaction with the UEFI environment is mediated through standard EFI protocols, particularly Boot Services for image loading, file system access, and variable storage (using the vendor GUID 4a67b082-0a4c-41cf-b6c7-440b29bb8c4f for keys like LoaderConfigTimeout). systemd-boot eschews low-level , delegating such tasks to the and loaded OS components, which maintains its lightweight footprint. On the security front, the architecture incorporates support for Unified Kernel Images (UKIs), which bundle the kernel, initrd, and into a single signed executable for streamlined verification. This enables measured boot, where systemd-boot records measurements to TPM 2.0 devices, integrating with systemd's broader TPM2 support for chain-of-trust enforcement and integrity attestation during boot. Since systemd v258, systemd-boot supports measured boot with TPM 2.0 for measurements, network booting from URLs, and additional menu entries derived from SMBIOS firmware data. A key limitation of this design is its exclusive reliance on , precluding compatibility with legacy () modes. The menu supports full navigation with arrow keys and type-specific hotkeys (e.g., 'w' for ).

Key features

systemd-boot offers a simple textual boot menu that allows users to select from available boot entries, with a configurable timeout that defaults to no menu display for headless systems, enabling direct booting of the default entry. The menu supports real-time editing of kernel command line parameters, such as adding options like nomodeset for troubleshooting issues, using keyboard shortcuts to modify and boot with changes. A core functionality is its automatic detection and inclusion of boot entries without requiring manual configuration, identifying Linux kernels, , macOS installations, and the UEFI Shell from standard directories on the . This auto-detection scans locations like /loader/entries/ and /EFI/Linux/, simplifying multi-OS setups by dynamically populating the menu. Integration with tools enhances manageability, including the bootctl command for listing entries, selecting the next boot option, and checking installation status, alongside a service that automates updates to the . These tools facilitate seamless kernel installations via kernel-install, ensuring boot entries are generated and maintained automatically. Customization options include console mode switching between and text modes configurable via console-mode settings in loader.conf. The is a simple textual menu. Additionally, systemd-boot generates a during early to provide for cryptographic operations, improving in environments lacking hardware random number generators. In terms of performance, the design contributes to faster overall processes compared to more feature-rich bootloaders. It also supports snapshot booting for file systems like and by passing appropriate parameters in boot entries, allowing users to boot into specific snapshots for recovery or testing. Advanced capabilities include compatibility with Secure Boot through the use of signed EFI binaries, requiring enrollment of keys but enabling verified chain-of-trust from to . Console mode can be dynamically switched during boot, supporting transitions between graphical and text interfaces for flexibility in diverse hardware environments.

Configuration

Loader configuration

The global configuration for systemd-boot is managed through the loader.conf file, located at /loader/loader.conf on the (ESP), which is typically mounted at /boot or /efi in distributions. This file follows a simple INI-style format, consisting of encoded lines with key-value pairs separated by whitespace, where lines beginning with # are treated as comments and empty lines are ignored. Boolean values accept strings such as yes/no, true/false, 1/0, or on/off. The configuration influences system-wide boot behaviors, including menu visibility, default selection, and integration with other firmware features. Key options in loader.conf include default, which specifies the glob pattern or exact ID of the boot entry to select by default (e.g., default auto-* to match automatic entries or default @saved to use the last chosen entry stored in an EFI variable). The timeout option controls the menu display duration in seconds (default: 0, which disables the menu for a quiet boot); special values like menu-force ensure the menu always appears, while menu-hidden conceals it unless a key is held. For console output, console-mode sets the resolution mode (e.g., 0 for 80x25, auto for automatic detection, or max for the highest available); this affects both menu rendering and kernel console. The editor boolean (default: enabled) toggles the built-in command-line editor for modifying kernel parameters at boot time, with disabling it (editor no) enhancing security by preventing accidental changes. Additional settings encompass auto-entries, a boolean (default: enabled) that enables automatic detection and inclusion of boot entries from other operating systems following the Boot Loader Specification. The auto-firmware option (default: enabled) adds a menu entry for rebooting into the UEFI firmware interface, useful for accessing BIOS/UEFI settings. For systems using BitLocker with TPM, the experimental reboot-for-bitlocker (default: no, added in systemd v251) sets the EFI BootNext variable to the current boot entry when a new kernel is found, to work around issues with BitLocker and TPM on some firmware. Newer options include beep (default: no, added in v251) to enable audio feedback during menu timeouts or entry selection; secure-boot-enroll (added in v252) to control automatic enrollment of machine owner keys for Secure Boot (off, manual, if-safe, or force); auto-reboot and auto-poweroff (default: no, added in v255) to add menu entries for rebooting or powering off the system; and reboot-on-error (default: auto, added in v258) to handle boot failures by rebooting based on boot counting mechanisms. These options were introduced progressively starting from systemd v239, allowing fine-tuned control over boot interactivity and compatibility. Setting timeout to 0 promotes a streamlined, non-interactive boot process, while disabling editor mitigates risks in shared or production environments. Individual boot entry configurations, such as kernel parameters, are handled separately in per-entry files.

Boot entry management

Boot entries in systemd-boot are defined using Type #1 description files from the Boot Loader Specification, stored as plain text configuration files with the .conf extension in the /loader/entries/ directory on the (ESP) or Extended Boot Loader Partition (XBOOTLDR). These files follow a simple INI-style format, consisting of key-value pairs under an implicit [entry] section, with encoding and newline-separated lines. The filename serves as the entry identifier, typically structured as <entry-token>-<version>.conf, where the entry token is often the system's machine ID for uniqueness, and the version reflects kernel or OS details; filenames are limited to 255 characters and restricted to ASCII letters, digits, plus signs, hyphens, underscores, and periods. For boots, essential keys include title for a human-readable name (e.g., ""), linux specifying the relative path to the image (e.g., /vmlinuz-linux), and options for command-line parameters such as root=UUID=... quiet. The initrd key, which can appear multiple times, points to initial RAM disk images (e.g., initrd /initramfs-linux.img), ensuring a complete . An example entry file might appear as follows:
title   Arch Linux
linux   /vmlinuz-linux
initrd  /initramfs-linux.img
options root=UUID=1234-5678 rw
This format allows manual creation and editing of entries for custom setups or specialized boots, providing flexibility without requiring bootloader recompilation. Automatic generation of these entries is handled by the kernel-install tool, which integrates with to create and manage them during package installations. When invoked with kernel-install add <version> <image> [initrd...], it executes plugins from /usr/lib/kernel/install.d/ and /etc/kernel/install.d/, including the standard 90-loaderentry.install plugin that copies and initrd files to a versioned directory under $BOOT/<entry-token>/<version>/ and generates the corresponding .conf file using details from /etc/os-release for the title. Distributions like extend this through hooks in tools such as mkinitcpio (via the systemd-boot hook) or dracut (via configuration modules), which trigger entry creation post-initramfs generation during updates. Management of boot entries is facilitated by the bootctl utility, which provides commands to inspect, select, and maintain them. The bootctl list command enumerates all available entries, displaying their IDs, titles, and paths for review. To set a persistent default, bootctl set-default <ID> marks the specified entry as primary, while bootctl set-oneshot <ID> (formerly set-next) configures it for a single boot only, useful for testing. Entries can be removed with bootctl remove <ID-or-glob>, which deletes the .conf file and associated /initrd files if unreferenced. The bootctl update command refreshes the bootloader installation on the ESP but does not directly regenerate entries; instead, re-running kernel-install or distro hooks handles updates after kernel changes. Systemd-boot supports multi-OS environments by allowing entries for other operating systems or chained loaders through the same format, using the efi key instead of linux to specify the path to an EFI executable. For Windows, an entry might chain to the Boot Manager via efi /EFI/Microsoft/Boot/bootmgfw.efi, with a title like "Windows 11" and optional sort-key windows for ordering. Similar entries can target macOS loaders or other UEFI applications. Entries are sorted alphabetically by sort-key (if provided), then by machine ID, and finally by version in descending order, ensuring predictable menu organization; entries lacking valid components are deprioritized to the end. Best practices for entry management include deriving the entry token from the system's machine ID (generated via systemd-machine-id-setup) to ensure uniqueness across multi-boot setups and avoid conflicts. Always specify full initrd paths for Linux entries to support complex boot requirements like encrypted roots, and verify paths relative to the root to prevent loading failures. After modifications, use bootctl list to confirm visibility, as the global loader.conf may influence overall menu behavior such as timeouts.

Installation and usage

Prerequisites and installation

systemd-boot requires a system booted in UEFI mode with access to UEFI variables, without compatibility support module (CSM) or legacy BIOS support enabled. An (ESP) formatted as FAT32 is mandatory, with a recommended minimum size of 100 MB for standard drives or 260 MB for 4K Native (4Kn) drives to accommodate bootloader files and future updates. The package must be installed, as it provides the bootctl tool essential for installation. Secure Boot should initially be disabled if not using signed binaries, though systemd-boot supports Secure Boot with appropriate certificates. Installation begins by mounting the , typically at /boot or /efi. The bootctl install command copies the systemd-boot EFI binaries to the at /EFI/BOOT/BOOTX64.EFI (or equivalent for other architectures) and creates a corresponding NVRAM boot entry named "Linux Boot Manager" by default. Run it as sudo bootctl --path=/boot install, replacing /boot with the actual mount point if different. For systems using an Extended Boot Loader Partition (XBOOTLDR) mounted separately at /boot, use sudo bootctl --path=/boot --xbootldr=/boot install to specify both paths and enable unified images or other advanced features. The command requires root privileges and verifies the is a valid partition. On Arch Linux, install the systemd package via sudo pacman -S systemd, which includes bootctl, then proceed with the install command. On Fedora, use sudo dnf install systemd-boot to obtain the dedicated package before installation. Verify the installation by running efibootmgr -v to list UEFI boot entries and confirm the systemd-boot entry, or bootctl status to check the bootloader's presence in the ESP. After installation, generate kernel and initramfs images (e.g., via mkinitcpio -P on Arch Linux), then create boot entry files in /loader/entries/ manually or using kernel-install(1) to add presets. For automatic boot entry management, use the kernel-install(1) tool to add kernel presets, which generates .conf files in /loader/entries/. If multiple bootloaders are present, set systemd-boot as the default using efibootmgr by adjusting the boot order, e.g., sudo efibootmgr -o XXXX where XXXX is the hex ID of the systemd-boot entry from efibootmgr -v. For dual-boot setups with Windows, ensure the existing Windows EFI boot entry in NVRAM is preserved during installation, as bootctl install adds rather than overwrites entries. Use efibootmgr -v to list firmware boot entries and confirm preservation of the . For chainloading Windows from the systemd-boot menu, create a loader entry file (e.g., windows.conf) pointing to \EFI\Microsoft\Boot\bootmgfw.efi; then use bootctl list to view menu entries. Configuration of loader entries can follow post-installation as detailed in the configuration sections.

Boot process and management

The boot process of systemd-boot begins when the UEFI firmware loads the bootloader executable, typically named bootx64.efi, from the NVRAM boot variable on an (). This executable, part of the systemd-boot package, then scans the ESP for its loader/loader.conf and the loader/entries/ containing boot entry files. If multiple valid entries are found, systemd-boot displays a listing them, provided the timeout value in loader.conf is greater than zero; otherwise, it boots the default entry immediately. Upon selection or timeout, the bootloader executes the specified image (e.g., vmlinuz) with appended command-line options, such as filesystem parameters, initiating the handoff to the operating system . Ongoing management of systemd-boot is facilitated by the bootctl utility, which provides commands to inspect and control the setup. For instance, bootctl status displays the current configuration, including the default entry, timeout settings, and a list of available entries, helping administrators verify the system's readiness. To schedule a specific entry for the next , use systemctl --boot-loader-entry=ENTRY_TOKEN, allowing temporary overrides for testing or without altering persistent entries. Additionally, logs can be examined using journalctl -b, which retrieves systemd journal entries from the current or previous s to diagnose issues like failed kernel handoffs. Boot entries are automatically updated through integration with systemd's kernel-install(8) tool and distribution package manager hooks. The systemd-boot-update.service updates the bootloader binaries on boot if a newer version is detected. In distributions like or , package manager hooks—such as those in or DNF—invoke kernel-install during kernel updates, pulling in new images and rebuilding the entry files accordingly. This process maintains an up-to-date boot environment while preserving fallback options for older kernels. For recovery scenarios, includes built-in fallbacks to mitigate boot failures. If the primary bootx64.efi cannot load an entry, the UEFI firmware may fall back to a predefined shell.efi utility, providing an interactive EFI shell for manual troubleshooting, such as mounting the to inspect files. Alternatively, administrators can recreate missing NVRAM boot entries using the efibootmgr tool from the command line, ensuring the bootloader remains discoverable by the firmware. Monitoring the boot process is supported through systemd's analysis tools, which integrate seamlessly with systemd-boot. The systemd-analyze command collects timing metrics from the handoff to userspace initialization, revealing durations for stages like loading and execution to identify performance bottlenecks. This integration allows for detailed profiling of the entire boot chain without requiring separate logging mechanisms.

Comparisons and alternatives

Comparison with

systemd-boot and represent two distinct approaches to boot loading, with systemd-boot emphasizing minimalism for environments while prioritizes versatility across legacy and modern systems. systemd-boot is designed as a lightweight boot manager that directly chainloads EFI executables, avoiding the need for a or extensive modules, which results in lower complexity compared to 's full-featured configuration system that includes scripting capabilities and modular support for both and firmware. This simplicity makes systemd-boot easier to understand and maintain for users focused on setups, whereas 's broader feature set, including built-in support for various filesystems and device probing, introduces greater overhead and potential for configuration errors. In terms of performance, systemd-boot achieves faster boot times through direct EFI chainloading of kernels from the (), bypassing staged loading processes and leveraging filesystem support, which suits simple configurations. GRUB, by contrast, employs a multi-stage loading mechanism with dynamic module loading for filesystem access and hardware detection, which can extend boot durations, particularly in complex environments, though it can be optimized by minimizing loaded modules. User tests in UEFI-only scenarios have reported systemd-boot achieving faster loader execution times relative to . Configuration in systemd-boot relies on straightforward .conf files in /loader/entries/ for boot entries and loader.conf for global settings, facilitating easy updates without regenerating complex scripts or searching for OS installations. , however, uses a generated grub.cfg file that incorporates search modules for automatic OS detection and supports intricate scripting for custom behaviors, making it more labor-intensive for routine changes like updates. This difference highlights systemd-boot's suitability for environments where boot entries are manually managed or auto-detected via the Boot Loader Specification, in contrast to 's reliance on tools like update-grub for reconfiguration. For use cases, systemd-boot excels in Linux-only installations or minimal dual-boot setups with Windows on UEFI systems, where its lightweight nature and native integration with systemd tools suffice without needing advanced customization. GRUB is preferable for legacy BIOS systems, complex multi-OS configurations involving encrypted or RAID volumes, or scenarios requiring custom themes and extensive hardware support, as it handles MBR partitioning and non-UEFI environments seamlessly. Maintenance of systemd-boot is streamlined through the bootctl utility, which automates installation, updates, and entry management via services or package hooks, resulting in a lighter resource footprint. GRUB maintenance involves running the update-grub script after or changes, which can be more error-prone due to its dependency on probing and module handling, though it offers greater flexibility for diverse setups. Overall, systemd-boot's approach reduces administrative burden in pure contexts, while GRUB's robustness comes at the cost of increased maintenance complexity.

Comparison with other UEFI bootloaders

systemd-boot distinguishes itself among UEFI bootloaders through its tight integration with the ecosystem, offering a lightweight, text-based interface that prioritizes simplicity and efficiency for environments. Unlike more feature-rich alternatives, it relies on manual configuration for boot entries and lacks graphical capabilities, making it ideal for users seeking minimal overhead without extensive customization. In comparison to , systemd-boot provides a purely textual menu for boot selection and kernel command-line editing, without the graphical icons or automatic OS detection that employs to scan for kernels across partitions. , as a boot manager rather than a direct loader, excels in broader OS detection for multi-boot setups involving macOS, Windows, and , and offers extensive options like themes and icons, which are particularly useful on Apple . systemd-boot, by contrast, requires explicit boot entry files adhering to the Boot Loader Specification and integrates seamlessly with tools like bootctl for management, but it does not auto-detect non- OSes beyond basic EFI executables. This makes more suitable for visually oriented or cross-platform booting on Macs, while systemd-boot favors streamlined workflows. Relative to Limine, another minimal UEFI bootloader, systemd-boot is deeply embedded in the systemd suite, leveraging tools such as kernel-install for automated entry creation and systemctl for runtime boot control, which ties it closely to distributions using systemd as the init system. Limine operates as a standalone solution, supporting a wider array of architectures (including x86, ARM64, RISC-V, and LoongArch) and boot protocols like Multiboot, with support for BTRFS snapshots via external tools like limine-snapper-sync, and multi-OS chainloading without init system dependencies. While both emphasize portability and low resource use, Limine includes advanced file system handling for FAT32 checksums and ISO9660, appealing to non-systemd Linux distros or embedded systems, whereas systemd-boot's EFI System Partition focus limits it to UEFI-only environments optimized for systemd-based setups. systemd-boot contrasts sharply with macOS-oriented bootloaders like and OpenCore, which incorporate hardware-specific patches, kext injections, and SMBIOS spoofing to enable macOS on non-Apple PCs, features absent in systemd-boot's Linux-centric design. and OpenCore prioritize compatibility with Apple's Secure Boot and through complex configuration of tables and drivers, often requiring significant setup for dual-booting with , in contrast to systemd-boot's straightforward EFI stub support for kernels without such hacks. For users, systemd-boot offers superior simplicity by avoiding these overheads, though it lacks the cross-OS emulation that makes and OpenCore essential for communities. Adoption of systemd-boot is prominent in systemd-reliant distributions such as , where it serves as the default UEFI option, and , where it is supported as an alternative to for immutable variants like Silverblue. As of 2025, remains the default in Silverblue. This contrasts with rEFInd's niche use in multi-OS environments, Limine's appeal in custom or non-systemd builds, and Clover/OpenCore's dominance in macOS modding circles, highlighting systemd-boot's role in mainstream portability trade-offs. Users should select systemd-boot for its speed and ease in pure Linux or systemd-integrated setups, opting for when graphical interfaces and automatic detection are needed for diverse OSes, Limine for independent, multi-architecture flexibility without init dependencies, or Clover/OpenCore for macOS-specific booting requirements.

References

  1. [1]
    systemd-boot - Freedesktop.org
    systemd-boot (short: sd-boot) is a simple UEFI boot manager. It provides a textual menu to select the entry to boot and an editor for the kernel command line.Missing: documentation | Show results with:documentation
  2. [2]
    systemd-boot - ArchWiki
    Oct 3, 2025 · An easy-to-configure UEFI boot manager. It provides a textual menu to select the boot entry and an editor for the kernel command line.Systemd-boot(7) · Loader.conf(5) · Persistent block device naming · Bootctl(1)Missing: adoption | Show results with:adoption
  3. [3]
    Managing EFI Boot Loaders for Linux: Using gummiboot/systemd-boot
    Nov 5, 2012 · This boot manager was previously known as gummiboot, which is German for rubber boat. Under either name, it is, like rEFIt and rEFInd, a boot ...
  4. [4]
    systemd-boot UEFI Boot Manager - Freedesktop.org
    May 13, 2024 · systemd-boot is a UEFI boot manager which executes configured EFI images. The default entry is selected by a configured pattern (glob) or an on-screen menu.
  5. [5]
    loader.conf - Freedesktop.org
    systemd-boot(7) reads ESP /loader/loader.conf . This file configures whether the menu is shown and for how long, the font, audible beep, types of menu entries ...
  6. [6]
  7. [7]
    bootctl - Freedesktop.org
    bootctl can check the EFI firmware and boot loader status, list and manage available boot loaders and boot loader entries, and install, update, or remove the ...
  8. [8]
    Change the default from grub to systemd-boot - Fedora Discussion
    Oct 4, 2023 · If you grab the latest F39 everything/network ISO and put 'inst.sdboot' on the grub command line anaconda will install a systemd-boot system.
  9. [9]
  10. [10]
    Systemd-boot(it's actually not tied to systemd) possible in devuan?
    Oct 22, 2023 · Kay Sievers is the developer who created Gummiboot, and the same person who back in 2015 merged it into systemd, (whilst blanking the gummiboot ...
  11. [11]
    Boot Loader Specification - The Linux Userspace API (UAPI) Group
    A boot loader locates the XBOOTLDR partition and the ESP, then simply reads all the files /loader/entries/*.conf in them, and populates its boot menu (and ...The Partitions · Boot Loader Entries · Locating Boot Entries · Boot counting
  12. [12]
  13. [13]
    Gummiboot: A Simple UEFI Boot Manager - Phoronix
    "gummiboot is a simple UEFI boot manager which executes configured EFI images. The default entry is selected by a configured pattern (glob) or ...
  14. [14]
    obsoleted - gummiboot - Simple EFI boot loader (mirrored from https ...
    Jul 7, 2015 · - * Copyright (C) 2012-2013 Kay Sievers <kay@vrfy.org>. - * Copyright (C) 2012 Harald Hoyer <harald@redhat.com> ... gummiboot/gummiboot ...Missing: announcement | Show results with:announcement
  15. [15]
    [systemd-devel] [ANNOUNCE] systemd v220 - Mailing Lists
    May 21, 2015 · ... Contributions from: Aaro Koskinen, Adam Goode, Alban Crequy, Alberto ... Karel Zak, Kay Sievers, Koen Kooi, Lennart Poettering, Lubomir ...
  16. [16]
    gummiboot (software)
    Jan 30, 2015 · "gummiboot - Simple EFI boot loader". freedesktop.org. · Rod Smith (2013-04-27). · Michael Larabel (2015-05-21). · Lennart Poettering (2015-05-21).
  17. [17]
    gummiboot - Simple EFI boot loader (mirrored from https://gitlab ...
    Kay Sievers, 29, -8096/+1. 2015-03-12, efi: rename config option to "editor" and ... Harald Hoyer, 3, -7/+14. 2015-02-01, test/test-create-disk.sh: fixup the ...
  18. [18]
    2013 - Karel Zak's blog
    Oct 15, 2013 · I guess that for Fedora 19 we will have rpm packages and some nice way how to integrate gummiboot to the distribution (don't forget that with ...
  19. [19]
    Gummiboot UEFI Boot Loader To Be Added To Systemd - Phoronix
    Feb 2, 2015 · Lennart and Kay Sievers are looking at adding Gummiboot to systemd to complete the safety chain of the boot process with UEFI Secure Boot.Missing: origins 2012
  20. [20]
    systemd-boot
    ### Summary of systemd-boot (https://www.freedesktop.org/software/systemd/man/systemd-boot.html)
  21. [21]
    Boot Components & Root File System Discovery
    The boot loader is primarily a single PE UEFI binary, called either systemd-boot.efi or BOOTX64.EFI depending on context (the latter name contains an ...
  22. [22]
    loader.conf
    ### Summary of Key systemd-boot Configurations in loader.conf
  23. [23]
    bootctl
    ### Summary of `bootctl` Commands for Loader Configuration Management
  24. [24]
    systemd/systemd-boot - Gentoo Wiki
    Aug 19, 2025 · Overview: Main configuration for systemd-boot is done in file /loader/loader.conf of the EFI System Partition (ESP). Boot menu entries are ...<|control11|><|separator|>
  25. [25]
    Improving performance/Boot process - ArchWiki
    Changing your boot loader (e.g. a simpler boot loader such as systemd-boot) may reduce boot time by seconds. If your setup allows it, try using only an EFI boot ...Missing: sub- | Show results with:sub-
  26. [26]
    Systemd-boot - openSUSE Wiki
    Feb 11, 2025 · In order to integrate systemd-boot with btrfs snapshots, some extra tooling is required. Upstream does not support it at this point (but is WIP) ...Basic Installation · Secure Boot · Installation with full BTRFS...
  27. [27]
  28. [28]
    kernel-install
    ### Summary: How kernel-install Generates Boot Entries for systemd-boot
  29. [29]
    Hard Drives and Partitions | Microsoft Learn
    Mar 16, 2022 · For Advanced Format 4K Native drives (4-KB-per-sector) drives, the minimum partition size is 260 MB, due to a limitation of the FAT32 file ...<|control11|><|separator|>
  30. [30]
    GRUB - ArchWiki
    Sep 24, 2025 · GRUB (GRand Unified Bootloader) is a boot loader. The current GRUB is also referred to as GRUB 2. The original GRUB, or GRUB Legacy, corresponds to versions 0. ...GRUB/EFI examples · GRUB/Tips and tricks · EFI system partition · GRUB Legacy
  31. [31]
    systemd-boot(7) - Arch manual pages
    BOOT COUNTING. systemd-boot implements a simple boot counting mechanism on top of the Boot Loader Specification[1], for automatic and unattended fallback to ...
  32. [32]
    Comparison of bootloaders - Manjaro Linux Forum
    Oct 13, 2020 · You always have to balance developer time with execution time. In my tests, systemd-boot is 0,5-1,5s seconds at booting than grub. Booting ...
  33. [33]
  34. [34]
  35. [35]
    The rEFInd Boot Manager
    ### Key Features of rEFInd
  36. [36]
    OpenCore Install Guide
    ### Summary of OpenCore and Clover from OpenCore Install Guide
  37. [37]
    Why OpenCore over Clover and others - Dortania
    Oct 17, 2025 · This section contains a brief rundown as to why the community has been transitioning over to OpenCore, and aims to dispel a few common myths in the community.