1. A method for controlling hardware components through a layered device driver, the method comprising: receiving, at an application driver component operating in user space, instructions for controlling the hardware components, each of the instructions comprising content from an application, wherein receiving the instruction comprises reading the instruction from a shared memory and placing the instructions on an application driver thread queue, further wherein the application driver component comprises an application driver process, and wherein operating in user space allows a driver component crash to not compromise system containing the hardware components; processing the instruction for controlling the hardware components by the application driver component in the user space using the application driver process; transmitting the instructions from the application driver component to an interface driver component operating in kernel space, wherein the interface driver component interfaces the application driver component with a physical driver component; implementing a standard operating system debugger to debug the application driver component in user space in the event of the driver component crash; transmitting the instructions directly from the interface driver component to the physical driver component without processing the content in kernel space; and manipulating the hardware components in accordance with the instructions, wherein the hardware components include different types of hardware.