Virtual machine support
BOINC supports applications that run in VirtualBox virtual machines. This provides two benefits:
- Project don't need to build app versions for different architectures. They can develop their applications in their environment of choice (say, Debian Linux), and then bundle the resulting executable together with a virtual machine image containing an appropriate runtime environment. The application can then be run on all platforms (Windows, Mac OS X, all versions of Linux) with no additional work on their part.
- Virtual machines provide the strongest available security sandbox; a program running in a virtual machine cannot access or modify the host system. This makes it feasible to deploy untrusted applications.
BOINC's support for VM apps is based on a program called vboxwrapper that interfaces between the BOINC client and the VirtualBox system.
- Commercial operating systems like Windows and Mac OS X have a license with a pay-per-user clause, so in general you they can't use them in the VM image. Similarly, projects can't include pay-per-user software such as Matlab in the VM image.
- !VirtualBox runs only on Intel-compatible processors (this includes AMD). If you want to support other processors (such as ARM, SPARC, etc.), projects need to use non-VM-based app versions.
- Currently !VirtualBox VMs can't run GPU applications. This may change in the future.
32/64 bit issues
A VM image is called 32- or 64-bit depending on the operating system it contains. The BOINC host population includes 32-bit and 64-bit hosts. 64-bit hosts can run 32-bit VMs, but not conversely. Projects can choose to provide 32- or 64-bit VM images, or both.
Possible reasons for using 64-bit VM images:
- The 64-bit version of project applications run significantly faster than the 32-bit version.
- The application uses more than 3 GB of virtual address space.
Note: When a project only provides 32-bit VM images, they must still create separate 32- and 64-bit app versions, using the same VM image but different vboxwrapper executables. (vboxwrapper is a C++ program and has different executables for each platform, include 32- and 64-bit. The 32-bit vboxwrapper will generally not work on a 64-bit machine).