VirtualBox comes with comprehensive support for third-party developers. This Software Development Kit (SDK) contains all the documentation and interface files that are needed to write code that interacts with VirtualBox.
VirtualBox is cleanly separated into several layers, which can be visualized like in the picture below:
The orange area represents code that runs in kernel mode, the blue area represents userspace code. At the bottom of the stack resides the hypervisor – the core of the virtualization engine, controlling execution of the virtual machines and making sure they do not conflict with each other or whatever the host computer is doing otherwise. On top of the hypervisor, additional internal modules provide extra functionality. For example, the RDP server, which can deliver the graphical output of a VM remotely to an RDP client, is a separate module that is only loosely tacked into the virtual graphics device. Live Migration and Resource Monitor are additional modules currently in the process of being added to VirtualBox. What is primarily of interest for purposes of the SDK is the API layer block that sits on top of all the previously mentioned blocks. This API, which we call the “Main API”, exposes the entire feature set of the virtualization engine below. It is completely documented in this SDK Reference – see chapter 5, Classes (interfaces), page 52 and chapter 6, Enumerations (enums), page 333 – and available to anyone who wishes to control VirtualBox programmatically. We chose the name “Main API” to differentiate it from other programming interfaces of VirtualBox that may be publicly accessible. With the Main API, you can create, configure, start, stop and delete virtual machines, retrieve performance statistics about running VMs, configure the VirtualBox installation in general, and 21 1 Introduction more. In fact, internally, the front-end programs VirtualBox and VBoxManage use nothing but this API as well – there are no hidden backdoors into the virtualization engine for our own frontends. This ensures the entire Main API is both well-documented and well-tested. (The same applies to VBoxHeadless, which is not shown in the image.)