Virtualization is too often talked about from a very narrow view: either raw hardware perspective or simplly the software library/drivers [so that you can install a software without disturbing others].
Virtualization is basically where an abstraction allows programmers have one less thing to worry about. Hardware virtualization (I'm thinking "HaVirt" or "HawVirt/HwVirt" is easier to say than HV or HardVirt) where the programmer doesn't have to worry about the underlying hardware. With HaVirt CPU, you can run more than one OS (or multiple copies of the same OS) on a single processor without changing the hardware or rebooting to run each instance of an OS. With virtualized storage, you can mount a drive and not worry how or where the space is mounted (unlike SAN which is managed per set of drives).
In the past (and present), virtual machines tried to virtualize programming languages by making the language independent of the hardware (JavaVM or Smalltalk VM).
In my mind, virtualization happens at the most basic level: input and output should be independent of any OS or hardware. UNIX has some ability with text based programs where IO is can be piped from one program to another. This, however, is conditional on using stdin and stdout "channels" for input and output, respectively. This should not be: I as a programmer shouldn't have to worry where and what my IO are: I get input and I dump output. Be it text or graphics or mouse/tablet movements, I shouldn't have to worry about where I get my stuff and how my output gets handled (by another program or OS). Yes, for text and graphics, I can worry about formatting but not something I should specify in detail since some things like button locations should be up to the user, not the programmer. Just as people have language preference, they should be able to chose what the default dialog box size and location and its button locations and mouse focus [along with specific setting per program types and individual programs -- hierarchy of user preferences]. Same goes for font name, font/background colors, default size, and even spacing (double space, single space, etc.). Look and feel should be dictated by user first and programmers second and override must be done with user permission. [OK, it seems I'm getting sidetracked into more UI issues than programming/virtualization issues.]
And you can argue that processing [the core of any program] should be virtualizable. That is, I as a programmer shouldn't have to worry about the underlying language of the machine I'm programming be it assembly language, pseudo code (VM) or some higher level language. What can this core be is where I'm pondering to see if there is a better way...
Copyright 2006, DannyHSDad, All Rights Reserved.
Labels: virtualization