1. A method of generating a device driver for a hardware device for which there is no said device driver within a user system, said device driver comprising a plurality of instructions and enabling a user application executing in a user system to communicate with said hardware device, said user system supporting said user application and said device driver in a runtime environment, said method comprising: receiving a first specification in a formal language indicating a plurality of characteristics of said hardware device; receiving a second specification in a formal language indicating a plurality of characteristics of said runtime environment, wherein said second specification comprises an operating system specification, and said runtime environment comprises existing devices within said user system; and generating said plurality of instructions according to said plurality of characteristics of said hardware device and said plurality of characteristics of said runtime environment such that said plurality of instructions execute on said user system and enable said user application to communicate with said hardware device, wherein when said second specification is changed to correspond to a second user system with a second runtime environment, a second device driver is generated for said second user system based on said second runtime environment, and wherein said first specification further specifies a plurality of registers present in said hardware device also in said formal language, said generating further comprises generating a first subset of instructions providing an interface for said user application to access said plurality of registers, wherein said first subset of instructions are contained in said plurality of instructions.