Being able to run virtual machines on our local computers, whether for testing or development is very convenient and almost natural. Hyper-V is part of Windows and is an obvious choice for many. The main advantage is that it’s free. And that’s about it.
This post is based on recent Twitter conversations where few people asked what everyone is using for local development. I am not benefiting in any way from this post. VMware did not pay me to write this, I am just sharing my experience as some may find it useful when making a decision.
At the time of writing (June 2020) I am using VMware Workstation Pro 15.5
This is not a VMware vs Hyper-V debate. I am writing specifically about my own requirement and experience for a local development environment. Running applications in production is a different game and is out of scope for this discussion.
Clones are the real deal-breaker for me.
As a developer, I want things to happen quickly and be repeatable. If I need a new instance of a SQL Server to test a specific build I would simply clone the specific VMs and play with it. Once I’m done the clone goes away and the parent VM stays untouched. Cloning is almost instant.
If I want to test specific configurations that I have not got yet, I will simply clone the existing VM and modify/update/patch or whatever needs doing to meet the criteria. I may also want multiple parallel configurations running over a longer period of time so a simple snapshot approach would be much more convoluted if possible at all.
I have “master” VMs that only contain the Windows Server. They are my templates but not actual VMware Templates. More on that later:
I clone the Windows Server into a new VM and install the desired SQL Server (This part happens automatically but more on this in another post):
These will be my next level down “application templates”. If there’s a big Windows update, instead of patching/updating each SQL Server VM, it ‘s easier for me to trash it, patch the Windows Server template and re-provision SQL Server.
Creating new SQL Server from the Windows Server template takes about 2 minutes altogether and it does not happen very often. The next part happens more often.
Now the interesting bit. For each specific development task, I would clone the specific SQL Server into new VMs for development and testing. It’s a clone of a clone, of a clone but short-lived so does not get messy. These are “linked clones”, instant and with zero footprints:
Clones are the exact copy of the parent VM so they will have the same hostname and
@@SERVERNAME but it can be easily handled via a simple PowerShell script on startup.
If you are a Hyper-V user, think about if you could run a new VM from a snapshot of the existing VM. This is what cloning is.
Similar to clones but with the added benefit of not using the extra disk. Linked Clones are like database snapshots in SQL Server, they do not use any space unless modifications are made and are instant. In a similar way, linked clones will not use any additional space unless modifications are made.
This is a critical feature and it means I can have hundreds of different virtual machines cloned with different configuration and only using few megabytes.
Templates allow quick provisioning of a VM without having to install the OS and the related software and patches from scratch every time we need a new VM.
To create a template, you create a new VM, install the OS, updates and patches and all the software you want and then “Sysprep” it. When you then clone the template to provision a new VM, the OS will start at the OOBE (Out Of Box Experience) screen. I don’t use templates as Syspreping is too much hassle for my needs.
Another benefit of templates in VMware world is that they can be shared by multiple users. If you have a team of developers they would be able to clone from pre-existing templates prepared for them.
Advanced Network Configuration
Custom DHCP Options
Another deal-breaker. As far as I am ware, Hyper-V does not allow to configure the internal V-Net DHCP. Sometimes, we want to have a test VM running for a few days or even a few weeks on the same IP. With Hyper-V, every time a VM starts it gets a new IP. This can be customised in VMware workstation, as well as custom DHCP ranges defined and the lease time.
Network Address Translation (NAT)
For a long time, NAT was not available in Hyper-V on Windows 10. This made connectivity a little nightmare. I believe this has changed recently so probably not a valid reason anymore. However, VMware also offers port forwarding which makes connecting to VMs from another machine very easy.
Integration with Desktop
Another useful, although not a deal-breaker for me, is the integration with the host’s desktop. We can run the VM typically in a window, full screen, or the Unity Mode. Unity mode blends the VM and the host into one desktop. For example, we could run a Linux VM in Unity mode and be able to access VIM from Windows. Not that anyone would do it, but we could.
Surprisingly, the free VirtualBox can do most if not all of it for free so please check it out before you spend money on VMware. I am not a big fan of the VirtualBox interface but it’s a personal preference.
Although VMware Workstation is not a free product, I think it’s worth the investment especially that the price is relatively low. I had been using Hyper-V for my local development for a number of years and it was much harder for me to apply the same workflow as in VMware Workstation.
The real advantage of OOBE templates is the Windows Identity, it’s all over the place the OS so not easy to change once Windows is installed. It’s critical for the Licensing to work correctly so make sure you have the appropriate license in place to cover your clones if you are not doing OOBE templates. You will be probably looking at MSDN or VL licenses that allow multiple activations. Better pick this up with your local MS expert to not violate your local laws.
Fell free to comment to share your opinion or if you agree or disagree with the above.