VirtualBox

Source code organization

You can browse the source code online here.

include/

kBuild/

kBuild/ contains the relevant kBuild distro, please refer to the kBuild page for details.

out/

out/ is the output directory. Into here, the build system puts all output code, sorted by platform and release/debug version.

src/

src/ is, naturally, by far the biggest and most complicated subtree. For the following, a basic understanding of the VirtualBox architecture is helpful. Here you find, by subdirectory:

  • src/libs/ contains various libraries in specific versions that we depend on. We can't very well ask our customers to descend into dependency hell; we therefore statically compile these into the VirtualBox binaries. The various licenses under which these libraries were shipped are all documented in the appendices of the user manual.
  • src/VBox/ contains the bulk of the VirtualBox code, again sorted into subdirectories. This has:
    • src/VBox/Frontends/: the various user interfaces are all found below this directory:
      • src/VBox/Frontends/VBoxFB/: The "Framebuffer GUI", a GUI that sits directly on the Linux framebuffer. Not currently maintained.
      • src/VBox/Frontends/VBoxSDL/: An alternative frontend based on SDL. This is useful for business use as well as testing during development. The VMs then have to be controlled with VBoxManage.
      • src/VBox/Frontends/VirtualBox/: The Qt GUI as shown on the Screenshots page.
      • src/VBox/Frontends/VBoxManage/: The !VBoxManage textual interface that exposes the API in Main to the command line.
    • src/VBox/Debugger/: An (incomplete) guest debugger that is still evolving.
    • src/VBox/Devices/: Code for the various guest devices that the VMM virtualizes, such as the audio, network, and graphics card, as well as the virtual hard disk and USB controller.
    • src/VBox/Disassembler/: The VirtualBox Disassembler (part of the VM core), which analyzes guest code on commission of various other VirtualBox components (mostly from the VMM, below).
    • src/VBox/Additions/: The "Guest Additions" for Windows and Linux (and possibly more in the future); this is code that must be installed within a guest to optimize its performance and usability. The build system compiles this code into an ISO file that can be mounted as a VM's virtual CD-ROM drive, as described in the user manual.
    • src/VBox/HostServices/:
    • src/VBox/Installer/: The code for the Linux and Windows installes, in their respective subdirectories. For Linux, we use some shell scripts glued together with a tarball, for Windows, we build a .MSI package.
    • src/VBox/Main/: The COM/XPCOM backend (see COM-XPCOM interoperability) which lies on top of the VMM code (see below). This is shared by the various components of VirtualBox.
    • src/VBox/HostDrivers/: Below this directory, you find the following device drivers (or kernel modules respectively) that run on the host system:
      • src/VBox/HostDrivers/VBoxTAP/: This contains a TAP driver for Windows (not needed with Linux since the Linux kernel has one). (This is a host driver and therefore does not belong under Devices/ above.)
      • src/VBox/HostDrivers/Support/: The main VirtualBox host driver that allows the VMM to gain control over your system. A real trojan horse, but a friendly one.
    • src/VBox/Runtime/: The VirtualBox Portable Runtime.
    • src/VBox/VMM/: The Virtual Machine Monitor, part of the VM core.

tools/

Into tools/, we have put some tools that we don't want to rely on on the host platform, mostly because some versions of these tools are known to be buggy and we want to make sure that a specific version is used.

The tools are sorted into subdirectories for the various platforms:

  • darwin.amd64 and darwin.x86 contain:
    • bin/iasl is the ACPI DSL compiler, available with source from here.
    • bin/yasm is YASM, a rewrite of the venerable NASM assembler, a project released under the BSD license.
  • linux.amd64 and linux.x86 contain:
    • bin/yasm is YASM, a rewrite of the venerable NASM assembler, a project released under the BSD license.
  • solaris.amd64 and solaris.x86 contain:
    • bin/iasl is the ACPI DSL compiler, available with source from here.
    • bin/yasm is YASM, a rewrite of the venerable NASM assembler, a project released under the BSD license.
  • win.amd64 and win.x86 contain:
    • bin/doxygen.exe, bin/doxyindexer.exe, bin/doxysearch.cgi,exe, bin/libclang.dll are the Doxygen tools, useful for development and documentation extraction from source code, available with source code from here.
    • bin/iasl.exe is the ACPI DSL compiler, available with source from here.
    • bin/msvcrt.dll is the Microsoft Visual C Runtime, needed by many executables and libraries.
    • bin/xsltproc.exe, bin/libxslt.dll, bin/libexslt.dll, bin/libxml2.dll, bin/iconv.dll, bin/zlib1.dll are the XSLT processing tool and library from here (plus some required libraries which are included in the Windows binaries here).
    • bin/yasm.exe is YASM, a rewrite of the venerable NASM assembler, a project released under the BSD license.
Last modified 4 years ago Last modified on Jul 2, 2020 6:51:07 PM
Note: See TracWiki for help on using the wiki.

© 2023 Oracle
ContactPrivacy policyTerms of Use