Sunday, February 14, 2010

Single-workstation virtualized development environment

At work and at home I have just one development machine and I usually need to use different versions of development environments and tools. For example, to build Windows CE 6.0 images, one needs Visual Studio 2005, Windows CE 6.0 Platform Builder, their service packs, Windows Vista/Windows 7 compatibility updates (if you don’t use Windows XP), Windows CE monthly updates. If you have a clean development machine with just the previous listed software, there should be no problems. Everything should work fine, debugging on remote devices works, builds should complete successfully (apart from normal building errors and bad configurations, but nothing depending on operating system configurations or installed software).

But what if you also need to develop .NET Compact Framework 3.5 applications for Windows Phones? On your development machine you have to install Visual Studio 2008 and Windows Mobile SDKs/tools. Of course, you would like that all the previous installed software still continue to work as before: that’s the problem. It’s not that easy reaching this goal. Visual Studio 2008 updates some system components that are used by Visual Studio 2005 and Platform Builder for Windows CE development, and that can cause compatibility issues when debugging Windows Mobile/Windows CE devices. It’s not impossible installing and working side-by-side with the two systems, but it is necessary to pay great attention with applications installation order, tools installation order, updates installation order. As time goes by, something will break and, for example, it will not be possible anymore to build Windows CE images or remotly debug a device.

If you also need to use SQL Server databases, some 2005 version and some 2008 version, you have to install both on your machine. I know that the problem wouldn’t exist if 2005 databases could be updated to 2008 version (but some customers don’t allow this) or if I had other machines/development servers to install them separately. Searching on the web, in forums and blogs, many people say that the two versions can work together without any problems. I tried and for my work needs (Management Studio, query analyzer, database backups, remote database access) it works. Nevertheless, many people reported problems with Management Studio, Integration Services and Analysis services, but I cannot say more about that, because I have no experience.

Upset with these (and many others) compatibility issues in everyday development tasks, during Christmas holiday I started to experiment a virtualized development environment on my home workstation. After one month of everyday usage, I decided to adopt the same development configuration at work.

In a number of next posts I’ll give you an overview of my virtualization experiments, with problems I had and solutions I found.

For those who doesn’t know what virtualization is, there’s a brief introduction. For more information, start having a look at Wikipedia entries (http://en.wikipedia.org/wiki/virtualization).

 

What is virtualization?

The term "virtualization" was coined in the 1960s, to refer to a virtual machine: in general an abstraction of a computer resource. This includes making a single physical resource appear to work as multiple logical resources (such as a server, an operating system, an application, a device) or it can include making multiple physical resources (such as servers or storage devices) appear as a single logical resource. The creation and management of virtual machines has been called platform virtualization, or server virtualization, more recently.

Platform virtualization is performed on a given hardware platform by a control program (host software), which creates a simulated computer environment, a virtual machine, for its guest software. The guest software is not limited to user applications; many hosts allow the execution of complete operating systems. The guest software executes as if it were running directly on the physical hardware, but with some limitations. Access to physical system resources (network access, display, keyboard, disk storage, USB devices, etc.) is generally managed at a more restrictive level than the processor and system-memory. Guests are often restricted from accessing specific peripheral devices, or may be limited to a subset of the device's native capabilities, depending on the hardware access policies implemented by the virtualization host.

Many commercial, freeware (and some even open-source) virtualization software exist for many operating systems. Just to cite some of them, without any particular order:

  • VMWare Workstation
  • Microsoft VirtualPC
  • VMWare Server
  • Sun VirtualBox
  • Microsoft Hyper-V
  • QEMU
  • Microsoft Virtual Server
  • Parallels for Desktop
  • Parallels Workstation

For other software and further information: http://en.wikipedia.org/wiki/Comparison_of_platform_virtual_machines

 

Virtualization Uses

Virtualization can be used in various context and modes. Mainly it can be useful for:

  • Server consolidation (consolidating low-usage systems onto one physical server; consolidating systems using old or outdated operating systems)
  • Software testing (QA testing; portability validation; new operating systems)
  • Safe web navigation (dangerous sites; research; downloads; automated scripts; validation; security testing; etc.)
  • Tech support (customer OS/software in VMs; re-create client’s environments in virtual ones)
  • Software evaluation (features and compatibility tests; scalability simulation; screen capture; snapshots of deployed VM for future replay)
  • Training (no configuration issues from trainers and students; practice machines)
  • Demos (fresh VM for every demo provides repeatable experience)
  • Load balancing (clusters of VMs rather than of hardware nodes)
  • Grids (Cloud computing)
  • Software development (developers use a hosted VM with all resources on local systems)

In the last few years virtualization started to take greater and greater place in IT deployment strategies and usage. Some of the previous scenarios are currently used, while other are just entering the virtualization world. Sure is that virtualization in IT will grow in the future,  because its benefits are compelling.

The last point is the previous list represents the starting point of my experiments. In one of the next posts, we’ll see how I interpreted this use of virtualization.

No comments:

Post a Comment