The Linux kernel operates at the most fundamental (hardware) level, and it is responsible for providing the many software abstractions that modern Linux systems rely upon. Fundamentally, the job of the kernel is to provide all of these conveniences while keeping out of the way as much as possible. Time spent by the kernel is time that cannot be spent performing useful work within application code, even if that application is the latest version of Angry Birds. The kernel is also intended to run on a wide range of different hardware systems ‘out of the box’ – from the smallest embedded device, to the largest supercomputer. As such, the many algorithms it uses have been heavily optimised over the past two decades, but there are limits.