Before an operating system can run applications, the machine must pass through a chain of carefully defined stages.
Firmware finds bootable code. A bootloader places the kernel in memory. The kernel initializes the machine and starts the first user-space process.
Later, whenever Linux launches a compiled program, another chain of components must agree on the program's binary format, processor instructions, register usage, memory layout, and library interface.
These two chains depend on the same broad principle:
One component can hand control to the next only when both agree on a precise contract.
This chapter follows the Linux boot path, examines the ELF executable format, and explains the application binary interface that makes separately compiled code work together.