1. A method for executing a software application, comprising: authenticating a non-volatile memory device coupled to a host system; detecting a host operating system, wherein the non-volatile memory device detects the host operating system; executing a virtual operating system in a virtual environment, wherein the virtual operating system is stored in a read only segment of the non-volatile memory device; and executing the software application in the virtual operating system while the virtual operating system executes in the virtual environment, wherein the software application is stored in a read-only segment of the non-volatile memory device; wherein the virtual environment is controlled by a virtual engine rather than by the host operating system and wherein execution of the virtual engine code is split such that a first portion of the virtual engine code is executed by the host system and a second portion of the virtual engine code is executed by the non-volatile memory device.