SeaBIOS
SeaBIOS is an open-source implementation of a 16-bit x86 BIOS that provides the legacy PC BIOS application programming interface (API) for initializing hardware and booting operating systems on x86 systems.[1][2] It supports execution in emulators or natively on real hardware, serving as a payload for the coreboot firmware to deliver full BIOS compatibility after coreboot's hardware initialization.[1][2] Developed primarily by Kevin O'Connor, SeaBIOS originated in early 2008 as an extension of the open-source BIOS from the Bochs emulator, with the goal of enabling reliable booting on physical x86 hardware.[3] It was adopted as the default BIOS firmware for the QEMU emulator and KVM hypervisor in late 2009, replacing earlier implementations and enhancing virtualization workflows.[3] The project is built using standard GNU tools, including GCC for much of its codebase to minimize inline assembly, and is dual-licensed under the GNU Lesser General Public License version 3 (LGPLv3) and GNU General Public License version 3 (GPLv3).[4][3] SeaBIOS supports a wide range of hardware interfaces, including USB (UHCI, OHCI, EHCI, and XHCI controllers), Virtio virtual devices, multiple PCI buses, option ROMs, and the BIOS Boot Specification for fast booting.[1][3] It includes the SeaVGABIOS sub-project for VGA BIOS emulation and features like SMBIOS version 3.0 support on QEMU, NVMe storage improvements, and configurable runtime options via tools like kconfig.[5][6] As a coreboot payload, it enables legacy BIOS interrupts for operating systems that do not support UEFI, and can be chainloaded from bootloaders like GRUB2 for hybrid setups.[2] The latest stable release, version 1.17.0 from June 10, 2025, introduced enhancements such as preferred PCI I/O allocations above 4 GiB on 64-bit systems, support for multiple USB keyboards and mice, SeaVGABIOS VBE palette handling, and various bug fixes alongside the removal of legacy ACPI table support.[6] SeaBIOS remains actively maintained through a community mailing list and Git repository, with over 70 contributors focusing on compatibility, performance, and integration with modern x86 environments.[7][4]Development History
Origins and Initial Release
SeaBIOS was developed by Kevin O'Connor, who began work on the project in early 2008. The initiative aimed to create an open-source alternative to proprietary BIOS firmware, providing a robust foundation for x86 systems in both emulated and native environments.[3] The project originated as a redesign of the Bochs BIOS, an existing open-source effort primarily suited for emulation. Unlike its predecessor, SeaBIOS was engineered for superior native hardware support and extensibility on real x86 platforms, addressing limitations such as heavy reliance on inline assembly and limited real-world applicability. This redesign emphasized a clean, modular structure to facilitate ongoing improvements and broader adoption.[3] Key initial goals included delivering a 16-bit x86 BIOS implementation built exclusively with standard GNU tools like gcc, ld, and gas, thereby eliminating any proprietary dependencies. The codebase prioritized modularity by shifting much of the logic from assembly to C, standardizing entry points, and operating in 32-bit flat mode for easier maintenance and hardware integration. These choices enabled better support for real hardware features, such as precise timing delays and comprehensive option ROM handling.[3] The first public release, version 0.1.0, occurred on February 25, 2008. From the outset, SeaBIOS targeted compatibility with emulators including QEMU and Bochs, while supporting bare-metal deployment as a coreboot payload to boot directly on physical x86 hardware. This versatility positioned it as a versatile firmware solution for diverse computing scenarios.[3]Key Milestones and Releases
SeaBIOS achieved a significant milestone in 2009 when it was adopted as the default BIOS implementation for QEMU starting with version 0.12.[1] By 2010, it had been integrated into the coreboot ecosystem as a primary payload option, enabling native execution on x86 hardware.[6] In 2011, the SeaVGABIOS sub-project was introduced to provide dedicated open-source VGA BIOS support, enhancing graphics initialization capabilities.[5] The project marked version 1.6.3 in October 2011 with support for Xen virtualization and fixes to AHCI storage handling.[6] Version 1.7.0, released in April 2012, introduced virtio-scsi device support and enhancements to VGA functionality.[6] In July 2013, version 1.7.3 added initial UEFI Compatibility Support Module (CSM) compatibility, allowing legacy BIOS booting in UEFI environments.[6] Subsequent releases focused on expanding hardware compatibility and performance. Version 1.10.0 in October 2016 brought TPM 2.0 support and enabled virtio devices to operate above 4GB memory addresses, improving security and resource utilization.[6] By November 2017, version 1.11.0 incorporated NVMe storage support and coreboot cbmem log integration for better debugging.[6] Version 1.15.0 in December 2021 enhanced PCIe-based NVMe handling and USB XHCI MMIO support.[6] The most recent release, version 1.17.0 on June 10, 2025, includes support for PCI I/O allocations above 4GB, multi-USB keyboard and mouse handling, and the removal of legacy ACPI table support, alongside optimizations for modern x86 CPUs and various security fixes.[6] SeaBIOS development employs Git for version control, with the primary repository hosted at git.seabios.org.[8] Releases are announced and detailed on the official website, ensuring transparency for contributors and users.[6] The firmware undergoes rigorous testing with bootloaders such as GRUB, Linux kernels, Windows, and FreeDOS to verify compatibility across diverse operating environments.[1]Technical Architecture
Core Implementation
SeaBIOS is implemented primarily in the C programming language, supplemented by assembly code for low-level x86 operations such as real-mode entry points and hardware-specific interactions.[9] The codebase leverages the GNU toolchain, including gcc for compilation in 16-bit mode (via extensions like Code16gcc) and make for building, to generate a compact 16-bit real-mode binary suitable for firmware execution.[9] This approach ensures compatibility with legacy x86 environments while maintaining portability across emulators and hardware platforms supported by coreboot.[9] The architecture of SeaBIOS is modular, with distinct components handling core firmware responsibilities; for instance, CPU initialization is managed through routines in source files like smp.c for symmetric multiprocessing setup, while memory management adheres to segmented real-mode constraints detailed in the project's memory model documentation.[10] Interrupt handling occurs via software interrupt vectors (e.g., INT 10h for video services), routed through dedicated handler code that emulates standard BIOS interrupt table functionality. Due to its open-source nature under the LGPLv3 or GPLv3 licenses, SeaBIOS omits support for proprietary extensions like the Extended System Configuration Data (ESCD) standard, as well as Intel Management Engine (ME) and AMD Platform Security Processor (PSP) modules, which require closed-source vendor firmware not compatible with the project's licensing constraints.[11] In terms of resource footprint, SeaBIOS binaries are typically under 256 KB in size—for example, distribution packages often provide binaries around 128 KB—allowing deployment on constrained firmware storage like ROM chips.[12] It targets x86 systems with 386 or newer CPUs, operating in real mode, and requires a minimum of 1 MB of RAM to perform hardware initialization and hand over control to a payload such as an operating system loader.[4][10] Extensibility is facilitated by the Kconfig configuration system, integrated via tools like menuconfig, which enables developers to customize builds by selectively including features such as Compatibility Support Module (CSM) support or specific hardware drivers, resulting in tailored binaries for diverse use cases.[9] This menu-driven interface, borrowed from the Linux kernel build system, allows fine-grained control over compilation options without altering the core codebase.[9]Boot Process and Protocols
SeaBIOS initializes the system through a structured boot sequence that begins with the Power-On Self-Test (POST), where it performs basic hardware verification and switches to 32-bit mode to facilitate further operations.[13] Following POST, SeaBIOS detects available RAM, initializes memory allocation mechanisms such as malloc, relocates its code into RAM, and sets up the POST Memory Manager (PMM) to manage memory regions during initialization.[13] Device enumeration then occurs, identifying essential components like keyboards and storage devices to prepare for booting, after which SeaBIOS either presents a boot menu for user selection or proceeds directly to loading a payload based on configured boot order.[13] The boot process relies on standard legacy BIOS protocols to interact with hardware and initiate booting. SeaBIOS implements INT 13h for disk access operations, enabling read/write interactions with storage devices during boot.[3] It also supports INT 19h to invoke boot loaders from designated devices and PXE for network-based booting, allowing systems to retrieve boot images over Ethernet when local media is unavailable.[3] Additionally, SeaBIOS adheres to the BIOS Boot Specification (BBS), which provides a framework for prioritizing and ordering boot devices, ensuring flexible and configurable boot paths.[3] Once initialization completes, SeaBIOS hands over control to subsequent boot components, such as OS loaders like GRUB or direct coreboot payloads, by transferring execution to the selected boot device or network image.[1] This handover maintains compatibility with traditional x86 boot mechanisms without introducing additional intermediaries. For error handling during the process, SeaBIOS displays screen messages and provides debug logging to indicate failures, such as hardware initialization issues, though it lacks advanced built-in diagnostics beyond the core POST routines.[13] SeaBIOS operates exclusively in legacy BIOS mode as a 16-bit x86 implementation, focusing on real-mode and protected-mode operations for broad compatibility with older systems and software.[1] When integrated into UEFI environments, it can function as an optional Compatibility Support Module (CSM), emulating legacy BIOS services to support non-UEFI operating systems or bootloaders through option ROM execution.[9] This CSM capability, introduced in later releases, allows SeaBIOS to bridge legacy and modern firmware paradigms without native UEFI protocol support.[6]Features and Capabilities
Hardware Support
SeaBIOS provides comprehensive support for x86 processors, ranging from the Intel 80386 and 80486 to modern architectures such as Intel's Alder Lake (12th generation) and AMD's Zen 4 series, as integrated in coreboot firmware up to version 25.09 released in October 2025.[14][6] It initializes symmetric multiprocessing (SMP) systems by detecting and enabling additional processors during boot, with version 1.17.0 adding preferred PCI I/O allocations above 4 GiB on 64-bit systems to improve performance on modern hardware. SeaBIOS also handles Advanced Programmable Interrupt Controller (APIC) setup for xAPIC mode, though it does not yet support x2APIC for systems exceeding 255 logical processors. Internal generation of ACPI tables was removed in version 1.17.0; ACPI tables may still be provided externally by the platform firmware (e.g., via QEMU or coreboot configurations) for basic power management and hardware enumeration where needed, but advanced ACPI features are deferred to the operating system or payload.[6] For storage peripherals, SeaBIOS supports IDE/ATA interfaces natively and SATA via AHCI controllers, including booting from NVMe drives introduced in version 1.11.0 and enhanced in later releases.[6] Input devices are handled through USB keyboards and mice with multi-interface support since version 1.15.0, alongside legacy PS/2 ports and serial/parallel ports for console access.[6] Graphics initialization relies on SeaVGABIOS, an integrated option ROM that enables text modes and basic VESA graphics for VGA-compatible hardware, including QEMU's bochs-display and ramfb emulations, with version 1.17.0 adding VBE palette handling support.[5][6] SeaBIOS has notable limitations in advanced hardware integration: it lacks native support for Wi-Fi adapters, requiring network booting via wired Ethernet such as PXE over supported NICs.[6] GPU acceleration is not provided beyond basic VGA modes, with complex graphics deferred to option ROMs or payloads.[5] While optional TPM 2.0 support has been available since version 1.10.0 for compatible hardware like Infineon SLB9665 chips, it is platform-specific and not universally enabled.[6][15] An optional SLIC table can be included via ACPI for Windows OEM activation, typically added during custom builds. Advanced features like full GPU or TPM initialization often rely on subsequent payloads such as coreboot or the operating system loader.[6] In emulated environments, SeaBIOS offers full compatibility with QEMU's virtual devices, including virtio block and SCSI for storage, e1000 network interfaces for PXE booting, and Cirrus VGA for graphics output.[6][16] This ensures seamless operation in virtualization setups without additional configuration.[1]User Interface and Configuration
SeaBIOS provides a text-based boot menu that users can access by pressing the Esc key during the initial boot phase, allowing selection of boot devices, modification of boot order, and viewing of system information screens. This menu supports hotkeys to toggle quiet boot mode, which suppresses the display of the menu for faster booting unless manually invoked, and includes options to adjust boot priorities on the fly. The boot menu is configurable through runtime settings, such as the display message and wait time before automatic booting proceeds.[17] Configuration in SeaBIOS occurs at both runtime and build time. Runtime options are managed via CMOS settings or the boot menu, including boot order defined using [Open Firmware](/page/Open Firmware) device paths in a configuration file, and features like enabling serial debug ports or custom bootsplash images. Build-time customization uses the.config file generated by make menuconfig, enabling or disabling modules such as USB support or network boot capabilities to tailor the firmware to specific hardware needs. For example, enabling the Compatibility Support Module (CSM) adds UEFI compatibility without altering core functionality.[17][9]
Logging and debugging in SeaBIOS rely on text-mode output, with no graphical user interface available. Debug messages are directed to a serial console when enabled via build options like CONFIG_DEBUG_SERIAL, allowing real-time monitoring through tools such as serial port readers. Configuration files support parsing for custom boot behaviors, though advanced scripting is limited to embedded payloads and option ROMs. Quiet operation can be achieved by disabling verbose output in the build configuration.[18][17]
Accessibility features emphasize keyboard-only navigation, using arrow keys to select options in the boot menu and Enter to confirm choices. International keymap support is partial, with improvements for non-standard USB keyboards but primarily assuming US layouts for reliability across diverse hardware.[19][6]
Applications and Integrations
Virtualization Environments
SeaBIOS serves as the default firmware for virtual machines in QEMU and KVM environments, having been adopted in late 2009 to replace the older Bochs BIOS for improved compatibility and performance in emulated setups.[3] In these hypervisors, it initializes virtual hardware components, including virtio-block devices for efficient block storage, the RTL8139 emulated network interface card for networking, and USB passthrough for peripheral devices, enabling seamless booting and operation within the virtualized context.[6][16] A primary use case for SeaBIOS in virtualization is within Proxmox VE, where it facilitates the booting of legacy operating systems in virtual machines that do not require UEFI support.[20] It is often preferred over OVMF (an open-source UEFI implementation) for such scenarios due to its smaller memory footprint—typically under 256 KB—and inherent compatibility with traditional BIOS-based boot processes, making it suitable for older Windows or Linux distributions that lack native UEFI drivers.[20] Performance-wise, SeaBIOS achieves a rapid Power-On Self-Test (POST) phase in emulated QEMU environments, often completing in under 1 second, which minimizes boot delays for guest systems.[21] It also supports live migration of virtual machines across KVM hosts, preserving BIOS configuration and state through QEMU's migration framework to ensure continuity without rebooting the guest.[22] Despite these strengths, SeaBIOS has limitations in advanced virtualization features; it is not ideal for GPU passthrough configurations, where OVMF/UEFI is recommended to handle modern graphics cards that rely on UEFI GOP (Graphics Output Protocol) for initialization.[23] SeaBIOS remains compatible and tested with a range of guest operating systems, including Windows versions up to 10 and Linux distributions through kernel 6.x as of 2025, particularly in legacy boot modes; Windows 11 requires UEFI firmware such as OVMF.[20][24] As of 2025, SeaBIOS integrates with QEMU 9.x for enhanced virtio device support, improving performance in modern virtualization setups.[25]Embedded and Hardware Systems
SeaBIOS serves as a payload for coreboot, an open-source firmware that performs initial hardware initialization on x86 systems before handing over control to SeaBIOS for legacy BIOS emulation and boot processes.[2] This integration allows SeaBIOS to initialize after coreboot's hardware setup, providing compatibility for systems requiring traditional PC BIOS functionality without the overhead of proprietary firmware.[2] In physical hardware deployments, SeaBIOS with coreboot has been utilized in select Chromebook models since around 2011 to enable legacy boot options alongside the primary Chrome OS payload.[26] It supports various motherboards compatible with coreboot, including ASUS models like the P8Z77-M and Gigabyte variants such as the GA-H61M-S2PV, where it facilitates booting on desktop and server platforms.[27][28] For embedded x86 systems, SeaBIOS appears in networking appliances such as PC Engines apu series devices with custom firmware like Dasharo, which function as routers or firewalls needing reliable legacy boot support.[29] The combination of coreboot and SeaBIOS offers advantages in embedded and hardware-constrained environments by significantly reducing overall firmware size compared to full proprietary BIOS implementations, often limiting the footprint to under 1 MB while maintaining essential boot capabilities.[30] This lightweight approach enables custom boot flows, such as direct payload loading or integration with specialized operating systems, avoiding vendor lock-in and allowing modifications for specific hardware needs.[30] Notable examples include its integration in the Dasharo firmware suite, which pairs coreboot and SeaBIOS for PCs and embedded platforms like Protectli Vault series mini-PCs used in networking applications. Additionally, SeaBIOS supports FreeDOS installations on coreboot-equipped systems for retro computing setups, enabling the execution of legacy DOS applications on modern x86 hardware without proprietary firmware dependencies.[31]Community and Licensing
Open-Source Model
SeaBIOS is dual-licensed under the GNU Lesser General Public License version 3 (LGPLv3) or the GNU General Public License version 3 (GPLv3), permitting the free redistribution and modification of its source code and binaries while providing flexibility for integration with other software.[4][32] The project's source code is hosted in a public Git repository atgit.seabios.org/seabios.git, allowing developers worldwide to access, fork, and contribute updates directly.[32]
Official releases of SeaBIOS are made available for download from the project's website at seabios.org, including both source tarballs and pre-built binaries for various platforms.[32] It is also integrated into major Linux distributions, such as Debian (which includes version 1.17.0 in its repositories as of 2025), Fedora, and Ubuntu, facilitating easy installation and updates through package managers.[33][34]
The governance of SeaBIOS operates without a formal foundation or centralized organization, relying instead on community-driven processes through its public mailing list at [email protected], hosted by the coreboot community.[35] Contributions, including patches for new features or bug fixes, along with testing reports, are encouraged and reviewed via this mailing list, with changes integrated by volunteer maintainers.[36] Issue tracking primarily occurs through the mailing list discussions or distribution-specific bug report systems, promoting transparent and collaborative development.[1]
SeaBIOS provides comprehensive documentation tailored for developers, covering the build process using standard GNU tools, runtime configuration options via command-line parameters or option ROMs, and procedures for unit testing and debugging.[37] Additionally, it includes detailed specifications for extending the firmware, such as implementing custom hardware support or modifying the memory model, to guide advanced integrations.[37]