VMware Fusion 101: Introduction to Tools

I've previously alluded to how difficult it is to figure out what's going on in the guest by examining the instruction stream. Yet Fusion can do all sorts of nifty things such as drag-and-drop, Unity, HGFS shared folders, and so on – there's no way Fusion can do all that on its own. So how do we do it?

Enter VMware Tools. Tools is code that lives in the guest and allows us to peek inside. Instead of Fusion staring at a stream of reads and writes and adds and so on to try to figure out what's going on, Tools can just ask the guest OS. Doing things at the right layer makes things so much simpler!

Tools it a bit more than that, though. One of the benefits of virtualization is portability – you can move a virtual machine between computers (in some cases, even as the virtual machine is still running). But what if the first and second computers have different hardware – how can the virtual machine possibly cope if it starts off on a Mac mini, gets suspended, and resumes on a Mac Pro (or maybe even a computer running Windows or Linux and using VMware Workstation, VMware Player, VMware Server, or so on).

Virtual machines don't see the physical hardware directly (which would cause portability problems). More importantly, nearly all hardware expects to be controlled by exactly one OS – even if the guest could see the physical hardware, it would cause lots of problems. Instead, the guest sees a set of emulated hardware that doesn't depend on the actual hardware; Fusion takes care of translating appropriately.

All hardware, even virtual hardware that doesn't really exist, needs drivers for OSes to know how to talk to them. For some of the virtual hardware (for example sound) we emulate existing physical devices, the guest can use standard drivers provided by the OS or third parties. For other virtual hardware (for example video) we use our own "hardware" that doesn't exist in the physical world. While it obeys a basic set of commands, it needs drivers to get all the features (such as 3D acceleration). These drivers are a part of Tools.

Generally speaking, you want to install Tools in the guest, instructions can be found in Fusion's Help. We have Tools for a wide variety of guest OSes – Windows of course, and Linux, and OS X, and Solaris, and FreeBSD, and even Novell Netware. Not all versions of Tools have the same capabilities (we obviously give priority to more commonly used guests), but all are useful.


4 comments have been added so far

  1. When it comes to virtualizing the hardware with VMWare Fusion, the CPU is not emulated, right? (Assuming the OS uses the same processor instruction sets – processor emulation would be required if you wanted to run Windows on a Power (RISC) processor, or even if you wanted to run a non-Intel version of OS X on Intel/AMD hardware) I understand that it makes sense to virtualize as much of the hardware as possible in order to account for portability, which is a strong point of virtualization in the server space. But is there a reason why the graphics card can’t directly be tapped by the virtual machine, similar to the manner that the processor is?
    As virtualization becomes more prominent on the desktop, it seems that being able to access the graphics card directly would offer a huge boon. The gamers would be happy, as would people attempting to use CUDA or Stream capabilities.
    I’m not a programmer, but I was just wondering about that. Has it been considered? Is it a feasible option?

  2. > the CPU is not emulated, right?
    Correct. As a note, by definition virtualization means the same instruction set must be used on the host and guest (e.g. running x86 on PowerPC or vice versa would be emulation, not virtualization), and by extension, this limits what hosts you can migrate between while still using virtualization.
    > is there a reason why the graphics card can’t directly be tapped by the virtual machine, similar to the manner that the processor is?
    Yes, but the explanation is a bit longer than I want to get into here. It’s a good question, so I’ll answer it in a future post. The short answer is something I mentioned in passing – hardware expects to be controlled by exactly one OS.

  3. Sitting inside a Virtual Machine, can VMWare Tools fetch information (readonly info like number of CPUs, Memory, etc) about the physical host which is hosting this VM?

Leave a Reply

Your email address will not be published.