A self-contained operating environment that behaves as if it is a separate computer. For example, Java applets run in a Java virtual machine (VM) that has no access to the host operating system. This design has two advantages: System Independence: A Java application will run the same in any Java VM, regardless of the hardware and software underlying the system. Security: Because the VM has no contact with the operating system, there is little possibility of a Java program damaging other files or applications. The second advantage, however, has a downside. Because programs running in a VM are separate from the operating system, they cannot take advantage of special operating system features.