# Getting Involved

If you want to help make JRuby a better piece of software there are many ways you can help. This document is divided into three areas:

1. Ruby coders
2. Java coders
3. Documenters

Most people interested in JRuby qualify for all three areas. Please consider each area as they are all important to the success of the project.

## Ruby Coders

As a Ruby coder you can help JRuby by finding areas where JRuby is not behaving properly. This generally involves trying to use JRuby in place of Ruby and seeing if your software runs. When you find something which is behaving incorrectly (or not at all), then you should:

1. Reduce the problem as small as you can. Hopefully it ends up being a couple of line test case
2. See if you can find a bug report on jruby's sourceforge site

- If so, then you can comment on the bug if you think you have something to add which may be helpful in correcting/diagnosing the problem. Especially, if you have a better test case.
- It not, then you should send an email to jruby-devel with the test case, and if helpful, what module you noticed the problem in.

3. A Java developer will triage the problem and either

- Fix the problem
- Ask you to add a bug report
- May add the bug report themselves (they may have some insight that makes this a better choice)

## Java Coders

As a Java code you contribute by fixing problems or missing functionality in the JRuby implementation of Ruby. Additionally, you can contribute time to improving the java integration or embedding features of JRuby.

The first thing you should do is create a working sandbox and make sure you can compile and run JRuby. See {getting a working sandbox} for more information on this.

The next thing you should do is figure out what you want to work on. Largely, most frequent contributors generally contribute to itch their own scratch. This means they want some ruby software to run and they have found problems that are impairing their progress. What if you don't have any current itches? We have plenty of tasks you can work on:

1. Any open bug on the sourceforge site is fair game
2. Any TODO/Fixme in the source may be fair game. If the TODO is an obvious error in Ruby behavior then you can just fix it. If it is a refactoring TODO which was written by someone who would like a section rewritten, then you should send a message to jruby-devel and inquire about the item.
3. Any missing native library in Ruby which JRuby does not have yet (e.g. zlib, socket, digest, etc...). We are trying to write all these libraries in Ruby using Java integration. You can look at digest.rb in our source distribution for an example of how this can work.
4. Try making a script to exercise a standard library in Ruby with JRuby. For example, require matrix.rb and do some matrix operations and see if Ruby and JRuby match.
5. Try running against unit tests in Ruby source tests directory against JRuby.
6. Look for missing methods in JRuby's implementation of core libraries. In some cases we have TODO's indicating these and in others we don't. The Pickaxe book is useful in this case.
7. Find something undesirable/missing about JRuby's java integration features and propose something.
8. You can always ask the jruby-devel mailing list. You may or may not get an answer depending on the winds direction.

When you do find something to work on, follow the following process:

1. Make sure no one is already working on your new found task. To do this:

- Look for bug report on JRuby's sourceforge bug list
- Send a message to jruby-devel saying what you are working on. Someone may have input that can help you out. Having a reduced test-case when possible is always desired to limit the scope of discussion.

2. Become a code monkey and fix the problem (or add the feature)
3. Add test case(s) in the tests directory to exercise the problem
4. Make sure you did not create any regressions

- via built-in unit tests
- via rubicon test suite

5. Generate a patch from the root of the project tree
6. Submit the patch to jruby-devel
7. pat your self on the back and find another thing to work on

After a trial period where we get used to your contributions, personality, and general commitment (read this as you did not submit two patches and then quit the project), we will make you a full contributor.

## Documenters

JRubys documentation is sorely lacking. Almost any idea for better documentation would be helpful. Ideas for documentation include:

1. Introductory documents on topics like:

- Embedding JRuby into a Java application
- Example using JRuby's Java integration features

2. Better core API documentation:

- java integration features (low-level and high-level docs)
- BSF documentation

3. Example code with commentary