A method of enabling multiple different operating systems to run concurrently on the same computer, comprising: selecting a first operating system to have a high priority; selecting at least one second operating system to have a lower priority than the first operating system; and providing a common program arranged to switch between and control said first and second operating systems; characterised in that on occurrence of a hardware interrupt during execution of an executing operating system, (a) arranging the common program to call interrupt handling routines of the first operating system to service the hardware interrupt; (b) if the hardware interrupt was intended for a predetermined second operating system, creating a virtual interrupt message; (c) after the hardware interrupt has been serviced by the first operating system, arranging the common program to return to execution of the executing operating system; (d) when the common program next switches to the predetermined second operating system, notifying the virtual interrupt message which is pending to the predetermined second operating system; and calling a virtual interrupt handling routine of the predetermined second operating system corresponding to the said virtual interrupt message to service it, wherein the second operating system is enabled to mask or unmask pending interrupt messages, and wherein hardware interrupts are enabled when the second operating system is running. selecting a first operating system to have a high priority; selecting at least one second operating system to have a lower priority than the first operating system; and providing a common program arranged to switch between and control said first and second operating systems; characterised in that on occurrence of a hardware interrupt during execution of an executing operating system, (a) arranging the common program to call interrupt handling routines of the first operating system to service the hardware interrupt; (b) if the hardware interrupt was intended for a predetermined second operating system, creating a virtual interrupt message; (c) after the hardware interrupt has been serviced by the first operating system, arranging the common program to return to execution of the executing operating system; (d) when the common program next switches to the predetermined second operating system, notifying the virtual interrupt message which is pending to the predetermined second operating system; and calling a virtual interrupt handling routine of the predetermined second operating system corresponding to the said virtual interrupt message to service it, wherein the second operating system is enabled to mask or unmask pending interrupt messages, and wherein hardware interrupts are enabled when the second operating system is running. (a) arranging the common program to call interrupt handling routines of the first operating system to service the hardware interrupt; (b) if the hardware interrupt was intended for a predetermined second operating system, creating a virtual interrupt message; (c) after the hardware interrupt has been serviced by the first operating system, arranging the common program to return to execution of the executing operating system; (d) when the common program next switches to the predetermined second operating system, notifying the virtual interrupt message which is pending to the predetermined second operating system; and calling a virtual interrupt handling routine of the predetermined second operating system corresponding to the said virtual interrupt message to service it, wherein the second operating system is enabled to mask or unmask pending interrupt messages, and wherein hardware interrupts are enabled when the second operating system is running.