This article will show what’s technically possible in terms of running a legacy OS in Windows Azure. You also need to be aware that running a Desktop Operating System in a public cloud is not allowed as described in the Microsoft Product use Rights. Here is an extract from the Windows Azure licensing FAQ:
Can customers run Microsoft Office and Windows 7 Client on Virtual Machines using License Mobility for Software Assurance?
No. Under the Microsoft Product use Rights (PUR), Office and Windows 7 are not licensed to run on Virtual Machines. In particular, Microsoft Office is classified in the PUR as “Desktop Applications”, which is not included in Licensing Mobility.
The FAQ also mentions the Microsoft Product use Rights website for more information, but good luck at finding anything on that site… I’m not a licensing expert, but while running a Desktop OS is not allowed it should be allowed to run a Server OS like Windows Server 2003.
The options
OK so the Virtual Machines run in a modified version of Hyper-V. For a new OS like Windows Server 2012 this is not a problem at all since they have native support for Hyper-V and don’t require you to install the Hyper-V Integration Services. But if you want to run a legacy OS like Windows XP in Hyper-V you need to install the Integration Services. I could have tried creating a Windows XP VM on my local Hyper-V installation and upload it to Windows Azure using csupload.exe but I decided to approach this from a different perspective.
What about running a Virtual Machine in a Virtual Machine. For those who didn’t try this yet, installing Hyper-V in a Windows Azure Virtual Machine is not possible:
Something similar happens when you install VMWare, which does not allow you to be installed together with Hyper-V, which is caused by the fact that you’re already running a VM in Hyper-V. Without going into any more detail, let’s say that this is because the host OS is already “using the hypervisor”. The hypervisor is a virtualization technique which allows to virtualize a machine directly on the host’s system, without having to go through the OS of the host.
Why not try running a Virtual Machine without an hypervisor then? Virtualization solutions that “emulate” a system have been around for ages, take Virtual PC, Virtual Server, Virtual Box, … for example. Compared to virtualization with a hypervisor (which has some hardware requirements for the CPU etc…), the emulated virtualization solutions run in many more scenarios, like within a Windows Azure Virtual Machine.
Proof Of Concept
So just to do a quick test I deployed a Windows Server 2012 R2 on which I installed Virtual Box. After installing Virtual Box I also downloaded a Windows XP image from the modern.ie website. These are virtual machines running a trial version of Windows which allow you to test your website using a legacy version of Windows and IE.
After downloading the VM I simply extracted it, double clicked it and after a few minutes it opened in Virtual Box. I tried with both Windows XP and Windows Vista, but I had to admit that Windows Vista was waaaay faster than the Windows XP machine (how is that even possible :p). Virtual Box took care of the NATing, so my machines even had an internet connection!
Virtual Box also comes with a cool Port Forwarding option, where you can forward ports from the machine running Virtual Box (the Windows Azure Virtual Machine), to the guest (in this case Windows XP).
This is interesting because we can now open a port on the firewall of the Windows Azure Virtual Machine and we can also open that port on the load balancer:
What did we just do? All connections on port 58654 of our Cloud Service will go through to our Windows Server 2012 R2 Virtual Machine after which Virtual Box forwards the connection to the Virtual Machine. As a result I can directly connect to the virtual machine running in Virtual Box (without having to go through 1000 remote desktop sessions):
Considerations
Even though it’s technically possible, I doubt I’ll be ever doing something like this with a production application. But it might be interesting to check with Microsoft what is allowed in terms of “legacy licensing”. Maybe running an old Desktop OS like Windows XP is even allowed, who knows.
But anyways, there are still lots of applications running on that legacy stuff like Windows Server 2003 (which I assume is OK to run in Windows Azure, even if it’s not supported). I think there might be an opportunity here for Microsoft if they would provide us with a more supported way to move those legacy workloads to Windows Azure.
The only reason why I might want to do something like this today is just for dev/test, like installing a Windows Server 2003 with IE7 or IE8 to do some compatibility tests on our applications. Since we’re not doing this 24/7 this would be the perfect workload to have running only a few hours per week.
Sandrino