The open source Bochs, VMware Workstation by VMware, Inc. and VirtualPC from Connectix are applications that virtualize or emulate the x86 hardware, allowing you to run multiple operating systems on top of a “host” operating system that these three applications run upon. This means that you will be able to run Linux or FreeBSD or other supported “guest” OSes under Windows, Linux (or Macintosh), inside a window or fullscreen. But which one delivers the best performance for the money? And what about the free Bochs?
Runtime Vs Emulation
First off, we need to clear out an issue that many people are confused about or just do not fully understand. VMware Workstation & VirtualPC are not emulators as Bochs is. They deliver the same output, but the way they work is different.
Bochs emulates the x86 hardware and some of its peripherals, which makes it able to be easily portable among a number of platforms & architectures. Its emulation is also the reason that it is many times slower than both VirtualPC and VMware Workstation.
Technically speaking, VirtualPC is somewhere in the middle of VMware Workstation and Bochs. Some large parts of VirtualPC 4.03 for x86 are emulated, while other parts are virtualized. VirtualPC 5 under Macintosh is quite different from its x86 counterpart, as it is 100% emulator, as with Bochs.
VMware Workstation only emulates certain I/O functions and the rest is all executed through its x86 runtime engine. What that means is that when the guest OS is requesting a certain instruction or action to be executed, instead of trying to re-invent the wheel and emulate them, VMware Workstation will try to “pass” the request to your actual hardware and ask it to execute it instead. For example, the VMware Workstation display driver or the 24-bit VESA on VMware Workstation will “pass through” its execution requirements to your real graphics card, instead of trying to emulate.
VMware Workstation buys speed with its runtime engine, while Bochs and VirtualPC buys portability. It is a trade-off game.
So who should use VMware Workstation and VirtualPC and most importantly, who really needs them? Many people were not happy with the price bumping VMware Workstation introduced last year for version 3.0. However, these users do not understand that these two applications (especially VMware Workstation) are not intended for end-users who most of the time are trying to kill time installing operating systems or simply acting geekish (as in my case ;).
VMware Workstation is targetting the enterprise and large software houses. For example, Microsoft or Red Hat could be big customers for VMware Workstation because they are able to test and develop their operating systems with it. This comes in handy, especially if you need to test internationalization of the product. Instead of spending hours installing 50 OSes where their only difference is the language, a virtual machine can greatly help and accelerate development or testing.
VirtualPC is closer to the end-user. The bumped up UI, the fewer debugging or advanced options, and the shorter guest OS support list, plus the whole direction of the company reveals that they equally care for the end-user and the larger corporations.
VMware Workstation can run on Windows 2000/XP and on Linux. VirtualPC runs on Windows 9x/ME and with different binaries also runs under NT/2k/XP, OS/2 and MacOS 9/X. Bochs runs under many additional platforms, including *BSD and BeOS.
When it comes to the “guest” OSes list, VMware Workstation wins hands down, by providing support for more Linux and FreeBSD versions. However, VirtualPC has another (geek) feature: It plays nicer with non-supported operating systems. For example, OpenSTEP runs (slowly, but runs), BeOS runs (as long you initialize its VESA while in fullscreen with VPC). Bochs only supports some specific versions of operating systems, and it is very unstable when it runs in VESA or VGA mode.
The Bochs package is only 2 MB, while both VirtualPC and VMware Workstation’s packages are a bit less than 20 MB. The commercial packages come in an easy to use installation wizard, while Bochs is distributed in a .zip file, and requires manual, painful tweaking of the configuration file before use. Bochs is not for everyone, as users must know a bit about their hardware.
VPC and VMware Workstation will also install network drivers on your host OS, in order to allow the guest OSes to access networks and/or the Internet. I had trouble with VMware Workstation because the AMD networking card it emulated did not work on Red Hat out of the box. I had to get down dirty with the command line and bring the device “up” manually (the GUI Gnome networking tools did not work either). VirtualPC worked fine in this regard with Red Hat Linux 7.2 as the guest OS.
I did not like the way VirtualPC handles the CD-ROM and the floppy. You need to constantly, manually handle these peripherals by “grabbing” and “releasing” them. For example, I inserted the first installation CD and went for dinner. When I came back and inserted the second CD as per instruction of the Red Hat’s Anaconda installation, the virtual machine could not “see” the CD. A new user would be extremely confused why the CD is not visible under the virtual machine, while the previous CD was. The trick is to grab again the CD-Rom (or floppy) device from the VPC menu and then Virtual PC would publish the device insider the virtual machine. The problem is that it is a bad interface and it is extra work for the user, especially if you have to deal with lots of floppy disks or CDs. VMware Workstation will constantly use and publish the floppy/CD as long you have requested to do so in the Guest OS settings window but also provides the option to release them on request.
My PC is a dual Celeron FPGA 533 MHz (no SSE support). I would normally rephrase the previous sentence as “My PC is a lowly dual Celeron…”, but I won’t. According to this very recent poll, my PC’s speed is among the majority of the PCs today. So, I do expect a certain performance level to be delivered.
Bochs is the worse of the three speed-wise, but on the other hand, you probably won’t be using it to run graphical OSes. Bochs is a developer’s tool through and through. So as long it gives you back the debug information you need, Bochs is as good as it can be.
The real battle on performance for modern and widely used operating systems is between VirtualPC and VMware Workstation.
On my tests, VMware Workstation won every test, except the text mode rendering speed and the installation speed on RH 7.2. For example, it took 3.5 hours to install 1800 MB from the two Red Hat CDs, while it took about 2.5 hours on VirtualPC. I believe the reason for this lag from VMware Workstation was the fact that it was running at VGA mode during the installation, while VirtualPC was running either in VESA or with its S3 Trio64 chipset it emulates (possibly VESA though). As for the text mode speed, VMware Workstation need to get their act together, because doing an “ls -l” on the / directory, I could see it making waves updating the screen. VirtualPC was very smooth in this regard when it comes to text mode rendering.
The roles were completely reversed when I launched the now installed Red Hat and later when launched X11:
It takes 228 seconds(!) to get Red Hat to the login text mode prompt with Virtual PC. It takes “only” 94 seconds with VMware Workstation’s identical Red Hat.
VirtualPC under X11 is plainly unusable – I was not able to run KDE at a bearable speed. For example, I had to wait 30-40 seconds to launch Konqueror, 4-5 seconds to view a menu and was getting a frozen cursor when something was really CPU intensive. VirtualPC seems to require more CPU resources than VMware Workstation, so if you leave the virtual environment for a while, you will notice that the host OS also feels pretty sluggish.
With VMware Workstation, KDE and Gnome is very useable indeed. I could run it with very acceptable speeds even at fullscreen or window at 1280×1024. With VirtualPC anything above 800×600 comes to a crawl, while Connectix “dares” to ask on their system requirements 266 MHz CPU with a 500 MHz CPU as recommended. I got a dual 533, and it is just not tolerable. I even tried VirtualPC at the dual 450 PIII under Win98 with 512 MB of RAM, with OpenSTEP as the guest OS, but it was equally slow.
The only problem I had with VMware Workstation in graphics mode was that sometimes the mouse cursor disappeared. It did not happen because of a certain CPU load, it was pretty random, therefore I think that I hit a bug and not just a known limitation.
The reason of VirtualPC’s slowness may be the fact that they are emulating the S3 Trio graphics card, while VMware Workstation “passes through” the actions needed, via their special virtual graphics driver that is serving a graphics chipset that does not exist in real life.
What is nice with the VirtualPC Virge emulation though is that by emulating and supporting a standard card that exists, they have better chances to support other operating systems (unsupported by both VMware Workstation and VPC), like BeOS, QNX, OS/2 etc. Indeed, my tests showed that BeOS was behaving better with VPC than VMware Workstation (under VMware Workstation I noticed 24bit VESA problems, IDE problems while there are known wrong timings). However, other tests showing that SkyOS was extremely slow on VPC, while it was usable on VMWare Workstation. AtheOS (after some tweaking) was successfully loaded on VMWare Workstation as well.
Under MacOSX, on a similar machine to my 533 Celerons, a G4 Cube 450 MHz with 448 MB of SDRAM, Virtual PC delivers a better performance than under its PC counterpart version. However, I hear that a lot of code is different under the Mac and PC versions, so probably comparison wouldn’t be too fair.
Also, under MacOSX, VirtualPC supports sound emulation, while under PC, I did not have sound with either VPC or VMware Workstation. Emulating a sound card is tricky business anyway because of the timing issues involved.
On the stability issue, I had VirtualPC already crashing 3-4 times the last few weeks, but I still have to see a VMware Workstation crash. As for Bochs, crashes are a daily treat (either due to an error in Bochs itself or a misconfiguration on my part).
In my view, when doing application development, VMware Workstation or VPC is the choice. But when doing low level system software development (like say, writing an OS or maybe a compiler), Bochs is what you need. You need to know the exact timings or state of the emulated hardware after you executed your source code via Bochs, not the passed-through result of your real hardware. This is why many hobby OS developers prefer Bochs over VPC/VMware. The problem is, Bochs is still very buggy and slow, and Pentium support is problematic. It requires recompilation for P5 support, plus it does not emulate Pentium efficiently – and it can’t emulate anything more than Pentium anyway. However, it can do 2 and 4-way SMP emulation, which is a great feature when in OS development.
As for Connectix’s VirtualPC, it is possibly acceptable only when running text mode OSes. But I would not recommend it for use with demanding graphic/modern OSes, no matter if you are running on a faster machine than the one I have. The Macintosh version is not too bad at all, in fact it is acceptable on newer G4 machines. But the PC version needs lots of optimization.
If I had to pick a winner, it would definitely be VMware Workstation. There is still plenty of room for improvement on VMware Workstation, mostly in the PC compliance area (for example, supporting IDE and VESA better). This would enable VMware to boot successfully a lot of other niche OSes. But even as it stands today, VMware Workstation is the best option for most users and professionals out there.
VMware Workstation: 8.5 / 10
Virtual PC: 7 / 10
Bochs: 6 / 10
Dual Celeron 2×533 MHz
Abit BP6 motherboard, BX chipset, latest BIOS
3Dfx Voodoo5 64 MB AGP
256 MB SDRAM main memory
IBM 80 GB 120GXP drive on standard IDE ATA-33
Matshita 4x DVD-ROM
SBLive! OEM PCI Rev. 4
3Com 3c509-TX PCI network card
Host Operating System
Windows XP PRO
Guest Operating Systems
Red Hat Linux 7.2 (was given 128 MB of RAM and 3 GB of virtual partition space)