An interesting issue popped up: how can a program or script in a VM determine the type and version of the hypervisor it is running on ? This is important if you want to install version-specific software, like the VMware Tools ("enlightened hardware drivers", as MS would say).
Knowing that you're running in a virtual machine is pretty easy: you can look at the hardware, on VMware you'll see "00:0f.0 VGA compatible controller: VMware Inc Abstract SVGA II Adapter" which makes it pretty clear, and lspci -v says "Subsystem: VMware Inc" for every PCI device. Easy as 1 2 3.
But which version of VMware ESX is it ? Not that easy, it seems. But we (hi Dag !) found a unique signature for each ESX version: looking at dmidecode, the output in the "BIOS Information" section lists a Release Date and an Address field. These seem to be unique for each ESX version. The mapping we could build was:
ESX 2.5 - BIOS Release Date: 04/21/2004 - Address 0xE8480 - Size 97152 bytes
ESX 3.0 - BIOS Release Date: 04/17/2006 - Address 0xE7C70 - Size 99216 bytes
ESX 3.5 - BIOS Release Date: 01/30/2008 - Address 0xE7910 - Size 100080 bytes
ESX 4(?) - BIOS Release Date: 08/15/2008 - Address 0xEA6C0 - Size 88384 bytes
Tested versions: ESX 2.5.2, 3.0.2, and 3.5u2. We received an anonymous tip about ESX 4 beta results. Thanks !
VMware Workstation 4.5 reports the same as ESX 2.5. VMware Server 1.0 reports the same as ESX 3.0. Workstation 6.5 reports the same as ESX 4(?). Workstation 6.0 and Server 2.0.0 report
WS 6.0 - BIOS Release Date: 12/06/2006 - Address 0xE78A0 - Size 100192 bytes
SRV 2.0.0 - BIOS Release Date: 7/29/2008 - Address 0xEA6C0
but we didn't find an ESX version that reported the same values. Refer to the VMware "mobility guide" document for other possible relationships between different VMware products.
P.S. 26/11 thanks to Michael for sending us information on VMware Server 2.0.0 ! Same address as WS 6.5 and ESX4(?), but different release date.