A device-independent interface expresses requests without exposing each peripheral's control registers or protocol to the client. A device driver translates these requests into device-specific operations. This lets an application retain its interface when the supported hardware changes.
New to topics? Read the docs here!