In this paper we describe the design and implementation of the Userdev framework that allows implementation of device drivers at the user level in Linux. The user level device drivers written using this framework present exactly the same interface to the applications as a kernel driver and thus existing applications that use the device can be run without any change, recompilations or even relinking. We have also developed prototype user level device drivers for a parallel port line printer, a floppy drive and a RAM disk to demonstrate the feasibility of our model. Experiments show that these user level device drivers perform almost as efficiently as their kernel counterparts.