While I am quite aware of app developers' tendency to blame device driversIt is because this is the only thing that makes sense. As an 'app developer' you don't mess with device drivers or hardware, you only mess with operating system provided services which are themselves linked to layers of abstraction, validations and failure handling. You don't 'play a sound through the soundcard' for example, you play a sound through 'a sound API'. You don't use the videocard to render graphics, you use Direct3D or OpenGL which themselves are abstractions on top of the videodrivers. You don't access memory location 0xBAADF00D directly, you ask a block of memory from the operating system and you use that. You don't write bytes to a specific cluster on the harddrive, you write to a 'file'. Etc. etc.