allow the computer to communicate with various different hardware devices
software used to allow the operating system to communicate with hardware
software written by the developer of a hardware component that tells the operating system how to talk to and control the hardware.