1. Manifest

The following are interesting directories in the Rubinius source tree along
with a brief description of the contents of each.

*   benchmark/

    All benchmarks live here. The yarv/ subdirectory is an import of the
    benchmarks in the MRI 1.9 source. The rubinius/ subdirectory is not in any
    way Rubinius-only, all those benchmarks were just written as part of this
    project.

*   bin/

    The bin/rbx file is a link to vm/vm. Various utility programs like
    bin/mspec are also here. When installing gems in the development
    directory, gem bin files are placed here. For example, after running
    `bin/rbx gem install rake`, you can run `bin/rbx -S rake` to run rake with
    Rubinius.

*   doc/

    Documentation for Rubinius. More general documentation is in the top level
    directory. More detailed documentation for the Rubinius virtual machine is
    in the vm/ subdirectory.

*   gems/

    This is into which gems are installed in the development directory. If
    Rubinius is installed, gems are installed into a different directory.

*   kernel/

    The Ruby core library. Classes such as Array, Hash, String, Range, etc.
    The directory is divided into several subdirectories to accommodate
    bootstrapping the VM and Ruby runtime environment. See the details below.

*   kernel/bootstrap/

    Minimal set of incomplete core classes that is used to load up the rest of
    the system. Any code that is required to load the common/ subdirectory.

*   kernel/common/

    The next directory loaded after bootstrap/ while loading the Ruby runtime
    environment. Mostly complete implementation of the core classes. Builds on
    and/or overrides bootstrap/.

*   kernel/platform/

    Platform-dependent code wrappers that can then be used in other kernel
    code, particularly functionality that is provided through the Rubinius
    Foreign Function Interface (FFI).

*   kernel/delta/

    Some methods have proto-implementations to enable loading kernel/common.
    Redefine these methods in kernel/delta to provide the complete
    implementation. Also the place to put any code that needs to run after
    kernel/common has completed loading.

*   lib/

    All Ruby standard libraries that are verified to work as well as any
    Rubinius-specific standard libraries. Of special interest here are three
    subdirectories:

*   lib/bin/

    Some utility programs such as lib/bin/compile.rb which is used to compile
    files during the build process.

*   lib/compiler/

    This is the compiler (implemented completely in Ruby.)

*   lib/ext/

    C extensions that use Capi (Ruby C-API).

*   mspec/

    An import of the MSpec framework for running the RubySpecs.

*   rakelib/

    Contains all supporting rake files implementing the Rubinius build system.

*   runtime/

    Contains pre-compiled (i.e. built by running `rake build`) core library
    files. There are subdirectories paralleling the subdirectories of kernel/.
    In each subdirectory, a `.load_order.txt` file list the order in which the
    VM loads the .rbc files.

*   spec/

    Spec files for Rubinius and import of a stable version of the RubySpecs
    for the CI process. Except for spec/ruby/, the specs in the subdirectories
    are Rubinius-specific.

*   spec/ruby

    Imported copy of RubySpecs that has been tagged for the CI process.

*   vm/

    All of the C++ code that implements the VM as well as the VM-based support
    for basic Ruby classes.

*   vm/builtin/

    C++ classes that implement the VM-dependent parts of Ruby classes such as
    Array, String, Regexp, etc.

*   vm/external_libs/

    Libraries required by Rubinius, bundled for convenience.
