On Linux systems, vmlinux is a statically linked executable file that contains the Linux kernel in one of the executable file formats supported by Linux, including ELF, COFF and a.out. The vmlinux file might be required for kernel debugging, generating symbol table or other operations, but must be made bootable before being used as an operating system kernel by adding a multiboot header, bootsector and setup routines.
To overcome this, Linux distributors encouraged users to create a partition at the beginning of their drives specifically for storing bootloader and kernel related files. GRUB, LILO and SYSLINUX are common bootloaders.
By convention, this partition is mounted on the filesystem hierarchy as /boot. This was later standardised by the Filesystem Hierarchy Standard, or FHS, which now requires the Linux kernel image to be located in either / or /boot, although there is no technical restriction enforcing this. See section 3.5.2 of FHS 2.3
The decompression routine is a negligible factor in boot time, and prior to the development of the bzImage, the size constraints of some architectures, notably i386, were extremely limiting, making compression a necessity.
The filename of the bootable image is not important, but by convention it is called vmlinuz or zImage.
The bzImage (big zImage) format was developed to overcome this limitation by cleverly splitting the kernel over discontiguous memory regions.
The bzImage format is still compressed using the zlib algorithm. Although there is the popular misconception that the bz- prefix means that bzip2 compression is used (the bzip2 package is often distributed with tools prefixed with bz-, such as bzless, bzcat, etc.), this is not the case.
/unix. With the development of Virtual Memory, kernels that supported this feature were given the vm- prefix to differentiate them. The name vmlinux is a mutation of vmunix.
$ readelf -h vmlinux ELF Header: Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: EXEC (Executable file) Machine: Intel 80386 Version: 0x1 Entry point address: 0xc019d000 Start of program headers: 52 (bytes into file) Start of section headers: 3135092 (bytes into file) Flags: 0x0 Size of this header: 52 (bytes) Size of program headers: 32 (bytes) Number of program headers: 3 Size of section headers: 40 (bytes) Number of section headers: 33 Section header string table index: 30