A software routine that links a peripheral device to the operating system. It acts like a translator between a device and the applications that use it. Each device has its own set of specialised commands known only to its driver. In contrast, most applications access devices by using high-level, generic commands. The driver accepts these generic and translates them into the low-level specialised commands required by the device.