Is it Real or is it Virtual?
Virtualization and virtual machines have been getting a lot of attention lately. This is mainly due to the increased availability and reliability of commercial virtual machine software from VMware and Microsoft. There is nothing new under the sun though – Gerald J. Popek and Robert P. Goldberg's seminal 1974 paper. "Formal Requirements for Virtualizable Third Generation Architecture" pretty much defined the playing field for virtual machines – even though the field they were playing on was big iron. We may be heading down the road of esoterica today – my spell checker doesn't even recognize the word virtualizable.
So what is reality?
Just what do we mean when we use the term virtual? It is generally applied to something that is not conceived or perceived as real but that acts like a real thing. So what is reality? Ren? Descartes' greatest contribution to western culture was his work in mathematics but he is still best known for his contention that his reality was defined by his ability to think or reason – Cogito ergo sum. His ideas provided the basis of western rational philosophy which was in turn opposed by empiricism. The Irish philosopher Bishop George Berkeley took that idea to its extreme by asserting that the only real existence of anything is the perception we have of that thing in our mind. Thus nothing is real beyond its perception – and you know what that means for trees falling in the forest. Dr. Samuel Johnson the 18th century poet, essayist and biographer was particularly frustrated with Bishop Berkeley's theories and is reputed to have kicked a heavy stone saying "Thus I refute him".
Virtual Memory
Reality (as opposed to virutality) has taken on new meanings in the world of digital computing and is still as difficult to define as ever. Virtual memory is something we are all familiar with. A digital computer operating system uses a persistent storage device (like a hard drive) to expand the volatile memory it has at its command. Random Access Memory or RAM is generally the working area – the area where data is manipulated and processed. When we use up all available RAM we can move portions of data to a persistent storage device and virtually expand main memory. This whole process also allows us to create multi-processing machines. Entire running process can be swapped in and out of RAM allowing us to time share the central processor. Ideally we do all the swapping in RAM thereby eliminating the latency of hard disk writes and reads.
Virtual Application Processes
Sun Microsystems coined the phrase "Write once, run anywhere" to describe the portability of Java bytecode – or more generally code written using the Java programming language. By portability we mean the ability to run on a wide variety of machines using diverse and often incompatible operating systems. That portability dictates that the Java code cannot be compiled before distribution or it would not run on diverse systems. That little problem was solved by distributing Java virtual machines which interpret the code at run time or by compiling it at run time using a Just In Time (JIT) compiler. A java virtual machine is computer software that creates an isolated environment in which the Java bytecode can be interpreted and then translates that into processes that can be accomplished by the host operating system. Sun "only" needs to distribute Java Virtual Machines for all major operating systems and then deliver on the "write once, run anywhere" claim. Of course we all know this got a little confusing when Microsoft decided to distribute its own Java VM….which broke a lot of Sun stuff. So we learned to code the Microsoft Java VM. Then the justice system made us return to the Sun Java VM which broke all our new code. So much for standards.
Virtual Machines
Our present interest in virtual computing does not really jive with what we have been discussing so far. VMware and Virtual PC are products that allow us to run entire computer systems within the context of another computer system. Just what is it that makes a digital computer a digital computer? Consider these three things or three layers:
Hardware – the CPU and associated input, output and storage devices.
The Operating System – this is a stretch but for our purposes lets call an operating system computer software that provides a link between the hardware and productivity software.
Application software – the reason we are using computers in the first place – software that can only function within the operating system.