CommitterHowto » History » Version 42

« Previous - Version 42/49 (diff) - Next » - Current version
Yuki Sonoda, 06/01/2013 04:13 PM

= Committer How to

== How to become a committer
* Send good patches to ruby-core list. Send patches, send patches and send patches. Someday the core team will say "OK, commit it by yourself" and you will be granted commit right.
* Port Ruby to a non-POSIX platform. The core team will grant you to the permission so that you can maintain Ruby for that platform.
* Write a great library. If the core team wanted to add the library to Ruby's standard library, you will be granted the right so that you can maintain it.
* This way is very hard because RubyGems made it easy for users to installing a new library.
* Citing from (()):

  • ((|Jim Zemlin|)): Any final advice for an organization or an individual that wants to get involved in working on the Linux front?

  • ((|Linus Torvalds|)): I get the question of “Where should I start?” fairly often and my advice is just don’t even ask that question. It’s more like if you’re not interested enough in one particular area that you already know what you want to try to do, don’t do it. Just let it go and then when you hit something where you say, “I could do this better” and you actually feel motivated enough that you go from saying that to doing that, you will have answered that question yourself.

== What to do for registering you as a committer
Get the approval of matz about getting a commit right.

After the approval, Send a mail with the following information to . [], []
* Your PGP public key.
* Account name you want to use. This is for
* Subversion
* ((|your-account|))
* Your SSH2 public key.
* Where to forward your mail from ((|your-account|))

You must sign that mail with PGP. []

== What is necessary
* Development environment for your platform
* Another ruby - 1.9 series of ruby needs a ruby binary to bootstrap itself. (BASERUBY)
* BASERUBY can be Ruby 1.8
* subversion
* SSH client
* GnuPG
* IRC client
* autoconf (2.60 or later)
* bison
* (gperf)
* (git)

=== How to use GPG
How to generate your PGP keys
* ((URL:

How to sign a mail with PGP
* (()) for Thunderbird
* (()) for Apple

=== How to generate your SSH keys
You might already have your keys when you have OpenSSH. See (((%~/.ssh/id_rsa%)) or ((%~/.ssh/id_dsa%)). You can use them if you have.

Otherwise generate one with ssh-keygen(1).
$ ssh-keygen -b 2048 -f ruby_key
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in ruby_key.
Your public key has been saved in
The key fingerprint is:

Then you will have your private key ((%ruby_key%)) and public key (( Keep your private key secret. Pass the public key to the cvs-admin.

=== IRC
IRC clients
* (()) - for win, mac
* XChat (X), XChat-gnome (Gnome)
* riece (Emacs)

IRC proxy bot
* (())
* (())

== What to do after you become a committer
* Always build Ruby outside of (({$(srcdir)}))
* e.g. Suppose that there are source codes in ((%/path/to/somewhere/src%)) and building at ((%/path/to/somewhere/obj%)). Then, at ((%obj%)), do ((%../src/configure%))
* Always build Ruby inside of (({$(srcdir)})) too, using ((%./configure%)).
* Subscribe to ruby-core and ruby-cvs.
* subscribe to ruby-dev if you read Japanese.
* Sign up to the redmine.
* Sign up with your mail address that you use for sending to ruby-core.
* Tell the mail address to another committer and ask him/her to add you as a member of ruby-core group. (HowToManage).
* Keep contact to #ruby-core@freenode.
* #ruby-ja@ircnet or #ruby-ja@freenode too if you read Japanese.
* Sign up to (()).
* Ask how to sign up to another committer at an IRC channel.
* Get your GPG key signed.
* Let other committer sign your key.
* Print your GPG fingerprints on your business card.
* If you have github account, add your-svn-account@b2dd03c8-39d4-4d8f-98ff-823fe69b080e to your email addresses. Then you will see your icon in and so on.
* Add your entry to ((URL: and send a pull request.

== What to do when you commit
=== Consensus
* Never add a new feature or change a spec without discussion on the mailing list nor maintainer's permission.
* Especially on interpreter, VM, GC or such core of core, get matz's approval.
* Feel free to commit trivial changes, e.g. typo fix.
* Gradually learn what needs discussion and what you can commit without discussion. You will do a mistake and the maintainer will complain against it, but don't worry too much.
* Never commit without compiling ruby. Compiling miniruby is not sufficient.
(1) Do ((%make test%)) too. (better than just building)
(2) Do ((%make test-all%)) too. (better than just test)
(3) Do ((%make test-rubyspec%)) too. (better than just test-all)

=== Contact to a maintainer
* Some libraries are maintained on their own repository. On those libs the ones in the ruby's repository are just copy.
* Send a mail to the maintainer after commit.
* Send a patch to ruby-core and the maintainer instead of committing it directly if possible.

  • minitest
  • rdoc
  • rubygems
  • rake
  • soap (1.8)
  • wsdl (1.8)

=== Subversion
* Configuration for subversion
* Configuration for ssh
* Learn how to use ssh-agent. Don't repeat yourself.
* Read ssh_config(5).
* Branching
* /trunk is for development.
* Each branch for stable versions. (e.g. ruby_1_8, ruby_1_8_7)
* Never commit two or more changesets as one commit.
* Commit log
* Write exactly what you have written in ((%ChangeLog%)), with the addition of the original revision number in case of a backport.
(Without header, no tabs)
Example is like following:
* filename.c (rb_xxx_yyy): short description of this commit.
Fixes [bug:#XXXX] [ruby-core:XXXX].
(rb_zzz_aaa): yet another part.

 * filename.h (MACRO_NAME): value changed.
  • Write as (({fix GH-XXXX})) to refer tickets in Github. Do not write as (({[Github fixes #XXXX]})), it means redmine's ticket.
  • Fold by 80 columns (copy from ((%ChangeLog%)) without tabs)
  • You can command the Redmine in a commit message.
  • make change will write change.log which you can fill in and copy to ChangeLog.
    • svn mail
  • MailingList

=== ChangeLog

Thu Jan 1 00:00:00 2004 Your Name

* filename (function): short description of this commit.
  This should include your intention of this change.
  [bug:#number] [mailinglist:number]

* filename2 (function2): additional description for this file/function.
  • Timestamps must be in JST (+09:00), in the style as above.
  • Two whitespaces between the timestamp and your name. Two whitespaces between your name and your mail address.
  • One blank line between the timestamp and the description.
  • Indent the description with TAB. 2nd line should begin with TAB+2SP.
  • Write a entry (*) for each change.
  • Refer to redmine issue or discussion on the mailing list.
  • One blank line between entries.
  • Do as other committers do.
  • What to write and what need not: []
    • No need for an entry on fixing typo.
    • Referring a contributor/reporter.
    • Respect contributors []
    • Write one when you are not sure if you should write or not.

==== Template
Thu Jan 1 03:03:03 2004 Your Name

* filename.c (rb_xxx_yyy): short description of this commit.
  Fixes [ruby-dev:XXXX].
  (rb_zzz_aaa): yet another part.

* filename.h (MACRO_NAME): value changed.

Thu Jan 1 02:02:02 2004 Your Name

* filename.rb (XXXX#yyyy): short description of this commit.
  Patch by Foo Bar <foo-bar AT>.

Thu Jan 1 01:01:01 2004 Your Name

* filename.c (rb_aaa_bbb): short description of this commit.
  See [ruby-core:XXX].
  Reported by Baz Qux <baz-qux AT>.

=== RDoc
Writing RDocs is preferred

  • (()) (Japanese) by arton
  • (())

=== Reference manual
* (()) (Japanese, frozen)
* (()) (Japanese, under development)

=== svn:ignore

== How to backport

  • checkout the branch
  • use tool/merger.rb.

== How to announce
How to announce from

=== Subversion is automatically synchronized with

Send an email to cvs-admin AT for administration request.

=== FTP
Upload to with SCP.

=== WWW
* Ask the www team on (()).
* Send an email to for administration request.

=== Redmine
* You can edit any wiki page. (login required)
* Feature request or bug report on (())
* Send an email to for administration request.

=== Servers
* lithium, carbon, boron
* Status
* svn (for development. members only)
* Anonymous svn:
* issue tracking system:
* WWW:,
* FTP:
* Anonymous CVS:
* mailing lists
* WWW:
* (())

== Misc
* Tools for compilation
* autoconf (2.60 or later)
* bison
* (gperf)
* (ruby) (building the 1.9 needs ruby)
* Test cases
* Adding test cases (bootstraptest / test)
* Testing test cases
* make test
* make test-all
* "make check" executes both test and test-all.
* Integration with (())
* make update-rubyspec for retrieving specs.
* git required
* make test-rubyspec for checking
* diff format
* unified diff (-u)
* -p
* (())
* ML : ruby-dev, ruby-list, ruby-core, ruby-talk
* commit mail (ruby-cvs)
* IRC channel
* IRCnet: #ruby:*.jp (Japanese)
* freenode: #ruby-core (English)
* (())

  • .document
  • NEWS
    • Add an entry when you add a feature or change a spec.

== See also
* DeveloperHowTo
* Maintainers