Friday, June 16, 2006

Software Prognostications

I've regularly contemplated what the future holds for software on a macro level. Over the years, I have observed the cycle between centralized and decentralized computing, and every time I see centralized solutions come to the forefront, I look past them to see yet another round of decentralization on the horizon.

I believe that centralized computing paradigms, including the current push to offer "hosted solutions" is reflective of the lack of sufficient system-interconnectivity-bandwidth to support what ultimately becomes the follow-on generation of more widely distributed computing solutions. Mainframes and minicomputers with attached terminals pre-dated the client-server push; client-server solutions came into their own as Ethernet bandwidth in the office expanded; HTML and "thin client" solutions then pushed processing back to the servers due to Internet (and inter-office Intranet) bandwidth limitations (and, sacrificed user experience for widespread accessibility), then richer Graphical web-interfaces using Flash, Client-Side Java, AJAX, and the likes have pushed some processing back to the clients. So, what is next?

Since the late 1990's, with the advent of widespread high-speed Internet connections, I have said that the time will come (soon) when networking speeds will allow for software with very powerful client-side processing and robust GUIs (Graphical User Interfaces) to dominate the desktop once again (supplanting lame or lackluster HTML and web-applications). Many programs now do this, using powerful client-side software with rich GUIs to exploit the processing power of the client machine (aka, PC) as well as the network bandwidth of the Internet and the power of Servers on the Net. Some examples include BitTorrent clients, stock-trading interfaces, and so on. Again, what is next?

Well, we aren't quite where I wanted to see us by now. I envisioned a world of native-executable applications being downloaded on demand over the Internet as users need a particular bit of functionality. In late 2000, the Cleveland Software Development and Consulting firm (Intersoft Development, Inc) that I owned and was CEO of, actually created a rudimentary software infrastructure to support the hosting, distribution, verification (authenticated / secure software signatures), and automatically updating of native executable applications -- calling the whole thing "Robust Internet" featuring the "Robust Widget/Package Manager". We stored full blown single-file EXE's on a server, along with various information in an accompanying database (like, software description, owning-company, version info, software-dependencies including OS, and so forth), coupled with the "Robust Widget Manager" GUI that allowed users to: search (over the web) for particular software/packages, download the desired software (executable), verify the issuer/certificate, track what downloaded software was currently available on their machine, and update/remove as desired. Some companies have emulated this methodology to some extent since, though still not quite as I envisioned. I still think it is a viable method of robust client-side software distribution that would nearly eliminate all the hell that accompanies installation/removal of programs, since any and all files needed by a program were to be kept in one directory-tree "owned" by that downloaded program and only that downloaded program (making updates/removals a snap since no DLL dependencies would exist, no inter-program conflicts would exist, etc). And, now that disk space is nearly free, and RAM is also quite affordable, Dynamic Link Libraries (DLLs) in general should be a thing of the past - they served their purpose, and generally no longer make any sense on the client.

Ok, so that is what I envisioned back in 2000,... and, it may still happen... but, I am now seeing further into the future. And, what do I see? Something quite similar to what I envisioned with the Robust Web experience, but a step further down that path, especially now that it is obvious that processing power, disk space, RAM, and bandwidth potential can support what I have in mind.

The future, in short: "applications" will be completely and totally self-sufficient and not rely on anything outside themselves except for a network connection and the hardware they run on. How can this be? Won't applications need an Operating System? Yes, but, in my future "applications", the OS will be an integral part of the "application". Thus the "application" will be completely autonomous. In essence, each application will be the software you desire, already installed in a completely configured Operating System that contains exactly what is needed for that software to perform its functions. So, if you want a word-processor, that "word processor application" will be the word-processor plus the OS it needs to run (plus, as I mentioned, proper network/Internet connectivity built in). If by now you think I have lost my mind, consider that what I am really talking about is highly specialized virtual machines that are pre-configured and ready to run. Though not quite what I portend to see, the VMWare Virtual Appliances are a precursor to my vision.

Microsoft is one company that wants to successfully combat the hosted-application siege that is coming at it from all sides (including Google and the likes). I say, take it up a notch Microsoft! As bandwidth, storage, processing power, and the likes increase exponentially and price per unit of each falls, it will be possible for Microsoft to offer pre-configured purpose-built Windows Virtual Machines that target specific user needs. This is a bet that MS executives would probably find incredibly tough to take, but perhaps the sum of all sales of task-specific pre-configured VM's could actually exceed the sales that their traditional (complete desktop domination) approach is able to maintain in the future as other players come on line with hosted solutions or solutions similar to what I'm discussing.

You need just a Word Processor? Well, Google may likely offer an online word processor soon, or Microsoft could offer a Word Processing VM (that will only run Word). Better yet Microsoft, think of this: every software developer that would want to offer its Microsoft-Centric-Solution in a pre-configured Microsoft Windows VM would pay Microsoft a license (reasonable) fee for a per-client-VM fee to host its application on your OS inside a VM. Notice I have not mentioned Linux yet -- well, if you looked at that VMWare appliance directory, you will have noticed that it is predictably all Linux / Open-Source operating system based appliances, since only such open-source solutions can be freely distributed. Take notice now MS.

What I am proposing would require a significant paradigm shift for Microsoft - having it adopt and welcome a fee-per-VM-hosted-application in order to maintain its OS dominance. Moreover, there needs to be some grand software vision implemented to make this all possible, whereby the OS is marginalized a bit (it is no longer the focus, the applications are), a "usage governor" is placed in the OS to only allow licensed applications to run in the OS-VM, and a simple inter-VM-connectivity framework is implemented to facilitate standardized inter-program communication between applications hosted in various VMs (much of this does exist via TCP/IP, and such, though a clean simple abstraction layer could make this much simpler and standardized), and data-storage on one or more VMs (and/or a "host" OS if desired).

I personally believe that my ideal application-VMs should only contain the programs and OS needed to run the application, and that all user-settings, user-data, and the likes should be stored on a "host" OS (or specialized user-data-VM), since this will allow for the application-VM to be completely and totally replaced at will (with an upgrade or whatever). Which, if you have been thinking, "gee, how will I perform a Windows update on 20 Windows VMs?",... I say not to worry, just download the entire application-VM from MS (or any application-VM vendor) that has all the latest OS and application updates applied, since inevitably bandwidth will support this! And, there we are: the ultimate evolution of decentralized processing!

If anyone wants me to further expand on this vision, I will gladly address questions and ideas in a future posting. I have much more to say about this vision, but this posting should be enough to stimulate discussion :)

Thursday, June 01, 2006

Virtual Machine Advantages with VMWare

Stop wasting your time "setting up" and "fixing" your computers!

Ask yourself:
  • How many times have I purchased a new computer only to then waste hours (or days) installing the operating system (OS) and my your favorite applications?
  • How long did it take restore my backup when my hard-drive crashed last time (better yet, how long did it take me to find a recent backup)?
  • How difficult was it is to move my application settings over to a different machine?
  • When was the last time I installed an application on my system only to cause chaos for other existing applications or cause the system to crash completely?
  • How long will it take me to setup 25 computers with a similar development environment for each member of our programming team?
  • Oh no! Did I just get a Virus from that Word document a friend sent me?!!
  • Finally: how many machines do I have to host all my favorite OS's and applications? Gee, I wonder why my electric bill is so high! :)
If you have experienced any of the pain just mentioned, then you know full well how much time, money, and resources can quickly be wasted setting up, configuring, and restoring your computing environment(s). There is a better way: Virtual Machine (VM), or virtualization, technology! And, VMWare's product(s) in particular.

If you have yet to put VM technology to use, whether for your personal computing needs or for your business, you are really missing out on some incredible productivity and efficiency opportunities. VMs can save you some serious time, make better use of your computing hardware, and nearly eliminate the pain associated with setting up a new computer or computing environment. In more industry specific terms, VM technology enables:
  • server / desktop consolidation;
  • simplified development and testing environment setup;
  • easier business continuity plan execution;
  • simplified server / desktop environment management and security.
If VM technology is a complete unknown to you, then here's a quick description of what it does: it allows a single computer to appear to be more than one computer. Your computer becomes the "host" for one or more virtual computers ("machines"), by using software such as VMWare Workstation or the free VMWare Player to allow another "computer" to run on your system (there are also Server-level products like the free VMWare Server that is currently in beta).

If you are still not following what the technology is, I suggest reading this article entitled "what is virtualization technology". And, better yet, just dive right in. How? Simple. Download and install the free VMWare Player. Next, get ready for something really exciting! There is a super simple way to see a VM in action. Just download a pre-configured VM! There are many pre-configured VMs available for download, referred to as Virtual Appliances, that feature all sorts of pre-configured applications and operating environments. VMWare hosts a directory of virtual appliances to help you quickly find one that fits your needs; currently over 50 choices exist, and there are more showing up every day! I recommend trying out one called "Damn Small Linux" for starters, since, as its name implies, it is a reasonably small download (55MB), and once you "unzip" the download into a directory of your choosing, simply double-click on the ".vmx" file and watch your VM start to run in a window of its own, as if it was a computer running on your computer (which, it is -- just a software-only computer!)

Now, if the lightbulb in your brain has gone on and you think: "now I get it!", that is great! And, perhaps you see how VM technology can make your life easier. But, just in case it is a mystery to you yet, why would you want this VM anyhow? That's simple. You can keep the host system installation and configuration to a bare minimum, and invest your time getting your VMs to contain the applications you need access to most. Then, you can easily move / copy that VM to another machine and run it from there on short notice. Because the "machine" is just a few files, copying it, backing it up, and moving it is quite simple. And, you can make "snapshots" of the VM at different points in time (and, using VMWare Workstation, you can easily manage these snapshots and roll-back to prior verions, and so forth).

By way of examples, perhaps I can further encourage thinking about how VMs can help you:
  1. Let's say I have 4 different PCs running web servers that each host their own web site. These PCs are rarely at or near capacity in terms of computing power utilization. In fact, they are at a fraction thereof. Wouldn't it be nice if I could have all of these web-sites remain completely independent of each other (since one uses PHP, another uses Python, one DotNet 1.1, another DotNet 2.0, and that is just the web-dev language!) but yet get rid of some machines? This is where the "server consolidation" side of VM technology is a perfect fit. Replace the four PCs with one box capable of running all the sites, and have each of what was a physical web-server now be a Virtual web-server. With ample NICs, each can even be bound to their own physical network connection.
  2. I have a complex developer-desktop configuration where each person in my team needs a Windows XP environment with Visual Studio, SQL-Server Client tools, OpenOffice, a few utilities, and so on. Well, this is a perfect time to create a VM with these required applications, and distribute the VM to each of the team members. When an update to Windows needs to be applied, or a Visual Studio Upgrade is ready for use, and so on, simply roll out the new developer-VM to the masses. Note: this implies that the VMs will not be altered by the team members lest their changes be lost when the new VM is put in place; I will discuss in the future ways to minimize issues with this approach.
So, the VM technology is here to allow you to:
  • Ease movement and migration of entire systems;
  • Simplify large-scale deployment of a common system configuration;
  • Quickly restore to a particular state in the event of a system failure, program-installation chaos, or virus infection or other issue (notice: you still need to have a snapshot/copy of your VM stored somewhere safe, but it is as simple as copying a directory with a few files in it -- I burn DVDs with my VM images for safe keeping);
  • Reduce the number of physical machines that are sitting in your home or office sucking electricity, taking up space, and producing excess heat.
  • Easily test new programs and/or OS's, especially with pre-built "appliance" VMs and/or ISO-Images (see my prior post on Linux Live CDs that discusses running bootable-ISO images in VMWare).
There are a couple caveats to keep in mind with VM technology currently. First, because the VM must "abstract" the underlying hardware, it does not make full use of things like hardware acceleration in your super graphics card, and it may not make optimal use of your Gigabit NIC, and worse yet, it may simply not allow access to various devices on your system. So, you will want to install your latest 3D first-person shooter game directly onto your PC (host system) in order to realize the benefits of your 20GHz PCI-Express ultra-mega-video-card. But, many business, software development, and office applications will run quite adequately inside a VM.

Also, keep in mind that VMs do not get you out of proper licensing. I.e., if you distribute 25 copies of your development VM to 25 desktops, and that VM uses Windows XP or another commercial OS (plus any commercial applications you may have installed), you need to purchase as many copies of the appropriate licenses are you are using simultaneously. Consult with your software provider(s) for the specifics of how they treat licensing for VMs.

A final note: there are even ways to convert a physical machine into a virtual machine (P2V), and vice-versa. That is a bit out of scope for now, but it is possible, and lends even more flexibility to computer utilization scenarios.

Consider the possibilities for simplifying your computing life with VM / virtualization technology now, and act soon - you have nothing to lose, and much to gain!