= Source code organization = == include/ == == kBuild/ == `kBuild/` contains our custom-made, sophisticated, cross-platform build system based on GNU make. For details, please refer to the [wiki:"kBuild"] page. == 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 and therefore statically compile these into the !VirtualBox binary. The various licenses under which these libraries were shipped are all documented in the appendices of the [wiki:"Downloads" user manual]. * `src/recompiler/` contains a recompiler (emulator) for a few situations within !VirtualBox. Essentially, all guest code runs natively on the hardware. The recompiler, however, steps in as a fallback when * guest code disables interrupts and !VirtualBox cannot determine when they will be switched back on; * for single instruction execution on faults; * for real-mode code (e.g. BIOS, DOS, operating system startup). * `src/VBox/` contains the bulk of the !VirtualBox code, again sorted into subdirectories. This has: * `src/VBox/BFEGUI/`: The "Basic Front End GUI", a very limited UI that communicates with the VMM directly, without using COM. * `src/VBox/Debugger/`: A 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/`: An (incomplete) guest debugger that is still evolving. * `src/VBox/FBGUI/`: The "Framebuffer GUI", a GUI that sits directly on the Linux framebuffer. * `src/VBox/GuestTools/`: 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 [wiki:"Downloads" user manual]. * `src/VBox/GUI/`: The Qt GUI as shown on the [wiki:"Screenshots"] page. * `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 [wiki:"COM-XPCOM interoperability"]) which lies on top of the VMM code (see below). This is shared by the various components of !VirtualBox. Among other things, VBoxManage is also here unter `src/VBox/Main/tools`. * `src/VBox/Network/`: 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/Runtime/`: The [wiki:"IPRT" Innotek Portable Runtime]. * `src/VBox/SDLGUI/`: An alternative frontend based on [http://www.libsdl.org/index.php SDL], which runs virtual machines in full-screen mode only. This is useful for business use as well as testing during development. The VMs then have to be controlled with VBoxManage. * `src/VBox/Support/`: * `src/VBox/USB/`: * `src/VBox/VMM/`: The Virut == 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: * `x86.linux` contains: * `bin/as86` and `bin/bcc` are some old compilers that we require for some real-mode code in !VirtualBox. This is from the [http://homepage.ntlworld.com/robert.debath/ Linux 8086 development environment project.] * `bin/iasl` is the Intel ACPI DSL compiler, available with source from [http://www.intel.com/technology/iapc/acpi/downloads.htm here]. * `bin/xd` is a tiny tool to convert a binary file into a C array. This is from [http://www.fourmilab.ch/xd/ here] and public domain. * `makeself` contains some shell scripts to create our self-extracting Linux installer. * `yasm/` contains [http://www.tortall.net/projects/yasm/ YASM], a rewrite of the venerable NASM assembler, a project released under the BSD license. * `x86.win32` contains: ''(fill this in when it's up-to-date)''