## Linux Kernel - Communicates "directly" with hardware - Provides drivers - Initializes hardware - Provides HAL - Provides userspace APIs - Provides planes for userspace to draw to
![Image.](media/overview.svg)
Notes: Then there's the beloved Linux kernel. Being that it is a kernel, one of it's main jobs is to communicate with the hardware. It does this through the use of drivers, which provides the rest of the kernel with a stable interface. Popular examples of these drivers are: - i915 and xe, which are for Intel GPUs - amdgpu, which is for AMD GPUs - And nouveau, which is for NVIDIA. There are quite a few more than this, but I'd be here all day if I talked about them. The kernel also brings up the hardware to a usable state so that userspace can communicate with it. Userspace can communicate with the graphics hardware using a Hardware Abstraction Layer, which in the kernel is provided by the Direct Rendering Manager and the Kernel Mode Setting interface. [comment]: # (!!!)