1. Contributing to Rubinius

The Rubinius project welcomes your contributions. There are many things to do
to help out. Most importantly, you should do something that interests you.
That is the best way to have enthusiasm and energy for your work.

If you have questions about Rubinius, the best way to get answers is to chat
with us in the #rubinius IRC channel on irc.freenode.net.

Below are several ideas for things to do on Rubinius.


2. Run Your Code

Your code it often more vicious than the specs. Run your pet project under
rubinius and report issues. See doc/howto/write_a_ticket.html.


3. Ask For Help

Anything that we can do to help, we will. Make sure to do your own research
too, if possible. Rubinius attempts to be a project that you can easily study,
learn from, and hopefully extend.

We will certainly accept and appreciate simple bug reports, but we can give
priority to tickets that include simple steps to reproduce the issue. Even
better are tickets that include RubySpecs that demonstrate the bug and a patch
that fixes it.


3. Write Specs

  1. Run 'bin/mspec tag --list incomplete' to show specs that have been tagged
     as incomplete. These specs may simply need review, or there could be
     specs missing for a particular class.
  2. Find unspecified behaviors. See doc/howto/write_a_ruby_spec.txt


4. Fix Failing Specs

  1. Run 'bin/mspec tag --list fails' to show specs tagged as failing
  2. Pick a spec that looks interesting and see if you can write a patch that
     will make it pass.


5. Write Docs

Study how Rubinius works and write highlevel documentation that will help
others learn about the implementation details. See documents under doc/vm for
examples.


6. Cleanup Code

Search for tags like TODO, HACK, FIXME in the code and submit patches to fix
them. Here's a command to search the code:

  'grep -re "@todo\|TODO\|HACK\|FIXME" .'

Review doc/style_guide.txt for coding guidelines.


7. Triage Tickets

  * Revive or close old tickets.
  * Build minimal test cases that reproduce the bugs. Then see if there are
    already RubySpecs for the issue. If not, consider writing some.
