I have been meaning to blog about this for a long time now, and since I seem to be writing a number of insufferably long blog posts lately, I figured there was no better time than the present.
Most of you know me as someone who has been working on Microsoft virtualization software for as long as there has been Microsoft virtualization software – but how did I end up in this role?
My virtualization journey starts in Australia in early 2001…
At that point in time I was living with my 3 month pregnant wife in a small house on the north skirts of Brisbane. I was working for the University of Queensland as a database developer / systems administrator / desktop support for one of the divisions there. In my spare time I played around with many various operating systems. Understanding low level operating system functions and how different architectural approaches can be taken to solve some of the fundamental problems and challenges of computing has always been a deep area of personal passion.
The only problem was that: living in Australia at that point in time, with the sort of job that I had, did not afford me with much money to spend on computers. As a result the vast majority of my computers were put together from the left over parts of old broken computers that had been given to me / I had bought for a song. I personally enjoyed the challenge of resurrecting this old hardware (and hardware hacking / modification is still a passion of mind today). But the downside was that a lot of my hardware had a tendency to break (especially in the middle of a hot Australian summer).
My main computer was a Pentium II 400 MHz system with 256 MB of ram (it also had a Voodoo II card!). I had this system configured to multi-boot 5 operating systems:
- Windows 98 — for games
- Windows NT 4.0 — for work
- OS/2 Warp 4 — because I love OS/2 (I am a reformed OS/2 zealot)
- RedHat 7.2 — because Linux was on the brink of conquering the desktop computer world *cough*
- BeOS 5.0 — because everyone loves BeOS. Right?
Now – let me be clear on this – multi-boot sucks! Let me take a moment to enumerate the reasons why it sucks:
- It is so fragile. Have you every setup a system with five operating systems installed? (And no – 5 instances of Windows does not count). The number of ways that you can accidentally break things is astounding.
- Sharing data is truly painful. On this system I actually had a FAT16 partition configured just for the purposes of moving files around, but the problems with that were that you had to think to move the file before you rebooted, and you would lose any meta-data in the process.
- It seems that no matter which operating system you are booted into, you really want to be running an application that you can only run under one of the other systems. I ended up moving to using Java based versions of key applications just so they would always be available.
- The system would slowly fall apart. Namely, at a time when I was just too busy to fix it – one of the operating systems would stop working for some unknown reason – so I would just stop booting into it. After a short period of time I would only have one or two functioning operating systems out of the whole set – and I would have to level and rebuild the whole box (refer to point one – on a multi-boot system you often have to be careful about the order of operating system installation – which means you cannot just reinstall the broken operating system).
- Whichever boot manager you use – it would inevitably boot into the wrong operating system if you went to get a coffee while you were waiting for the system to reboot.
This combination of shoddy hardware and the multi-boot system from hell resulted in my wife often observing that I spent more time fixing and setting up my computers than I did actually using them, and frankly I was getting sick and tired of it.
The turning point
I longed to throw out all my broken hardware, and just buy one really nice computer that was stable (and fast) but I could not figure out how to do this and still satisfy my desire to play with various operating systems.
I had looked into the various virtualization / emulation software of the day. I did not like VMware Workstation 2.0 (I will leave that discussion for another day :-), and all other software was too slow. I had used Connectix Virtual PC for Macintosh, and knew that it could run all of the operating systems that I wanted to run – but it was way too slow when I had tried it on the old decrepit Macs that I had (my best Mac was Performa 6320 – remember, most of my hardware was second hand).
I could only think of two alternatives:
- Buy a big kick-ass AMD Athalon system, and set it up to be the craziest multi-boot system you had ever seen. The problem with this was – multi-boot sucks (refer to earlier in this post).
- Buy one of those new iMacs and run Connectix Virtual PC. The problem with this was that I was not convinced that, even on a new Mac, Virtual PC would have the performance that I wanted.
I spent ages deliberating over this. I even debated heading down to the local Apple supplier with an arm full of software to see if they would let me sit out the back for a day and try out Connectix Virtual PC on an iMac to see if it could meet my needs.
Then it happened.
One day as I was debating these two options – I went by the Connectix website (one more time) to look over their documentation and see if I could glean any relevant performance information out of it – and there it was: The announcement of the availability of the beta of Connectix Virtual PC for Windows.
I was stunned. My heart beat rapidly in my chest, my throat went dry, I felt light headed, and I walked outside my house and let out a cry of exultation. Sadly, I did not just make any of that up. That is literally how I responded. I am that much of a nerd.
I then ran back inside the house and signed up for the beta. As soon as I had downloaded the bits, I went over to the newly opened web forums and signed up there as well. I was user #62.
Ben the beta tester
I went to town, and was not disappointed. Sure, it was beta software. It was slow and buggy. It crashed a lot. But I was able to get so much to run on it. Many operating systems required a lot of coaxing, but I persevered. Each time that I figured out how to work around a bug, I would go back and dig into it to see if I could figure out as much as possible about the bug to report to Connectix. I would then go and post the details on the forums.
While this was going on, I also tried hard to help out other users on the forums.
By the end of the first two weeks, I had made slightly over 170 posts on the Connectix forums. It was then that I received an email from Eric Traut, the then Software Vice President of Connectix, asking me if I would like to participate in a private beta program (I was later to find out that I was the first person to receive this privilege). My response to this was to kindly inform my wife that I would not be getting much sleep for the next couple of months.
I had a great time testing Virtual PC and helping out other users on the forums. Tracking down bugs in Virtual PC proved to be a fantastic use of my broad operating system knowledge – and I was getting to do what I loved.
Some highlights of the beta program for me were:
- When I successfully did a manual P2V of my old faithful OS/2 development system. Believe or not, I still have that virtual machine with me – and I have it running happily on Windows Virtual PC (I have migrated through every version of Virtual PC there has ever been).
- When I managed to setup (and screenshot) three virtual machines: an OS/2 virtual machine, a Windows NT 4.0 virtual machine, and a RedHat 7.2 each running my preferred development environment – IBM VisualAge for SmallTalk – and each pointing to a common network based code repository. Allowing me to make a change in one environment and immediately test it on the other two.
- Loading a copy of the 5GB SQL database from work into a Windows NT virtual machine on a removable disk – allowing me to easily take it home and work from home when needed.
- Helping someone from Japan install get “VineOS” to run under Virtual PC (VineOS was a Japanese version of Linux, and I cannot read a single word of Japanese, but I was able to figure out enough to be able to solve their problem without actually reading the text).
But, all good things must come to an end – right?
The beta was coming to an end, and I was starting to burn out from the amount of time I had spent on it (while continuing to do my day job). I also needed to be spending more time with my then pregnant wife. So I sent an email to some of the people who I had chatted with at Connectix and informed them that I had had a great time, but when the beta was over I would be out of there. I also attached a copy of my resume and stated that if they were interested in hiring me, I would be there in a heartbeat (I had cleared this with my wife ahead of time).
I honestly did not have high hopes that anything would come of it.
They hired me as a tester 🙂
Ben the Connectix Tester
My wife and I arrived in America 6 weeks before my son was due to be born (he ended up arriving 11 days early). We had ~$6,000 US to our names, a couple of suitcases and half a shipping container of stuff that would arrive in a month or two. We had never been to America before, and we knew no one in America.
We often look back at that moment and ask “What on earth were we thinking!?!?”
In fact I have a very clear memory of the trip to America. We left Australia with a one way ticket to America about 6 weeks after the fateful events of 9/11. We had sold or given away everything that we could not afford to ship to America.
I can remember standing in the airport in Australia and telling my father that I felt uncomfortable – because I had no keys. I had no keys, because I did not own anything in the world that actually needed a key to open it.
I started working at Connectix two days after I arrived in America, as a tester. I reported to the Connectix test manager – Jeff Woolsey (Ah ha! bet you did not see that one coming!) I had never worked as a tester before, but I was determined to do a good job.
I set myself a personal goal of filing 7 bugs a day.
I met this goal for about 3 months.
And then Connectix changed my position to that of an “Application Engineer”.
Ben the Connectix Application Engineer
This role was a combination of pre-sales technical support / top tier enterprise support / documentation / program management. Put simply – it was: “do whatever it takes to help us to make Virtual PC for Windows a success in the enterprise”.
The problem that Connectix had was that they were used to making Virtual PC for Mac for home users. Individual users who tended to want to run commercial applications on the prevalent version of Windows for the day. Connectix had very little idea about what to do when an enterprise wanted to know how to use Virtual PC to run software that had been developed in-house on an arcane operating system, and deploy and manage it on hundreds of desktops.
For me there was a defining moment that was responsible for my move from tester to Application Engineer (I do not know if this really was the defining moment – but it sticks out in my mind):
One night when I was ready to head home, I stopped by the office of the Chief Scientist (and company co-owner) John Garber to chat with him about random things. He bought me into his office and showed me what he was working on. There was a potential customer who wanted to use Virtual PC for an old DOS application they had. The problem was that the application was not working properly under Virtual PC.
This application connected to a server component that ran on a Novell NetWare server. It started correctly, but would fail soon there after complaining about not having enough connections. John had been debugging the issue for days, but could find no fault in Virtual PC.
After talking to John I walked back to my apartment. All the while this problem was eating away at me. When I got home, I started browsing the web for details of the DOS NetWare client. I eventually hit on the issue that was bugging me. I quickly called John up at the office (he was still there) and over the phone I stepped him through an alternative configuration to try for the NetWare client. 10 minutes later the software was running perfectly.
When we contacted the customer and informed them that it had been a configuration issue all along – they were mortified. It turned out that this was an issue they knew about, but they had not realized that the configuration data for the work around to this issue resided in the network adapter driver configuration file. When they had changed the network drivers in order to work under Virtual PC – they had forgotten about the need to copy across the changes to the driver configuration files.
I had a great time working as an Application Engineer, and worked with a great team of people. Some of the activities that I was engaged with at this time were:
- Onsite proof of concepts: adrenaline fueled, sleep deprived weeks where I would spend the whole week trying to P2V, debug and performance tune a potential customers environment.
- Technical customer meetings: where the sales team would bring me along to talk to CIOs, CTOs and other technical decision makers to answer their technical questions about Virtual PC.
- Handling “technical blockers”: we kept a list of all technical issues that were identified as blocking potential site license sales. It was my job to either identify workarounds, or to work with the development team to ensure that these issues were fixed in the next release of Virtual PC.
- Writing white papers: recurring technical blockers or top support call generators, that had known workarounds, had whitepapers written for them.
I also spent a lot of time meeting with potential business partners like Microsoft, Novell and Dell.
Coming to Microsoft
The acquisition of Connectix by Microsoft was announced internally one month prior to the actual acquisition in March of 2003. During this time I was offered a position as a program manager (to be honest I had no idea what this really meant).
To start with there were three program managers on the team. Mike Neil was the group program manager – and Jeff Woolsey and I reported to him.
Early on, Mike called Jeff and I into his office and asked us which products we wanted to head up. Almost simultaneously Jeff said “Virtual Server” and I said “Virtual PC”, and thus it was settled.
Ben, Virtual PC 2004 Program Manager
I arrived at Microsoft with little idea of what it meant to be a program manager, what it meant to ship software at Microsoft, and a 3 month deadline to ship Virtual PC 2004.
We did not make the deadline (but we did do it in 5 months, which is pretty darned impressive).
It was an amazing experience. I learnt a lot about Microsoft as a company, as well as meeting some great people at Microsoft. When we started on Virtual PC 2004 our team was about 80% Connectix and 20% Microsoft. Where we benefited most was through being exposed to Microsoft’s approach and rigor around testing and security.
I can still remember standing up in front of the team when we shipped our beta release of Virtual PC 2004 and saying “This beta is higher quality than anything Connectix shipped as RTM!”
After shipping Virtual PC 2004 (and taking some time off) I helped Jeff with the shipping of Virtual Server 2005. Just as we released the first version of Virtual Server 2005, I started this blog (in October of 2004).
For the last four and a half years I have been working solely on Hyper-V. Today I am a lead program manager (or a program manager manager) and my team handles most of the user-mode components that have to do with Hyper-V.
Every now and then someone at Microsoft will ask me if I ever think about retiring the “Virtual PC Guy” handle. My answer is always “No”, for a couple of reasons:
- Everyone knows me as Virtual PC Guy
- I still have a very deep passion for desktop virtualization
- I maintain close contact with the Virtual PC team
- I use Virtual PC on a daily basis
- I hope to get to return to the world of desktop virtualization at some point in the future
Well, that is all I have to say today. I hope you have enjoyed reading this post as much as I have enjoyed writing it 🙂