On Tuesday 15 July 2003 10:01 pm, maillist / bestworldweb.homelinux.com wrote:
> Does ruby have active developers or does matz do basically everything? I
> am just wondering.

The ChangeLog shows that 126 developers have contributed to Ruby's source 
since 1997.  Processing the current CVS ChangeLog reveals that Matz far leads 
the pack of developers, but there are easily 20 developers working on the 
source code these days.

Here's a complete summary from the ChangeLog, which counts the number of 
changes for a developer and shows their date range of activity.

[Yukihiro Matsumoto]: 1526 checkins, 1997-08-13 to 2003-07-16
[Nobuyoshi Nakada]: 424 checkins, 1999-04-16 to 2003-07-15
[WATANABE Hirofumi]: 334 checkins, 1997-08-15 to 2003-07-11
[Minero Aoki]: 153 checkins, 1999-05-14 to 2003-07-02
[Akinori MUSHA]: 140 checkins, 2001-01-24 to 2003-04-19
[Tanaka Akira]: 59 checkins, 2000-12-21 to 2003-07-03
[Katsuyuki Komatsu]: 56 checkins, 1999-04-14 to 2000-10-17
[Koji Arai]: 56 checkins, 1998-08-29 to 2003-07-13
[NAKAMURA Usaku]: 54 checkins, 2002-04-01 to 2003-07-12
[Usaku Nakamura]: 49 checkins, 2001-01-14 to 2002-03-29
[K.Kosako]: 36 checkins, 2000-12-19 to 2002-12-25
[EGUCHI Osamu]: 31 checkins, 1997-09-23 to 2000-02-26
[Wakou Aoyama]: 31 checkins, 1999-06-29 to 2002-12-28
[Tadayoshi Funaba]: 30 checkins, 1998-03-03 to 2003-05-19
[Shugo Maeda]: 29 checkins, 1999-02-12 to 2003-06-13
[why the lucky stiff]: 25 checkins, 2003-05-09 to 2003-07-15
[Guy Decoux]: 19 checkins, 2000-10-08 to 2003-06-18
[Takaaki Tateishi]: 18 checkins, 1998-11-29 to 2003-03-24
[WATANABE Tetsuya]: 16 checkins, 1998-05-10 to 2001-11-13
[KONISHI Hiromasa]: 16 checkins, 2002-05-29 to 2002-10-27
[MAEDA shugo]: 15 checkins, 1997-09-21 to 1999-01-18
[Dave Thomas]: 12 checkins, 2000-02-02 to 2003-04-24
[Michal Rokos]: 12 checkins, 2002-01-04 to 2003-01-29
[Takaaki Uematsu]: 12 checkins, 2002-12-14 to 2003-06-21
[Keiju ISHITSUKA]: 10 checkins, 1998-07-01 to 2002-07-09
[Yasuhiro Fukuma]: 8 checkins, 1999-02-05 to 2000-06-16
[akira yamada]: 8 checkins, 1999-12-30 to 2003-02-14
[SHIROYAMA Takayuki]: 7 checkins, 1999-04-14 to 2001-05-03
[Yoshida Masato]: 7 checkins, 1999-01-16 to 1999-06-24
[Masaki Fukushima]: 6 checkins, 1998-11-21 to 2000-05-16
[NAKAMURA Hiroshi]: 5 checkins, 1999-07-15 to 2003-06-19
[Kazuhiro NISHIYAMA]: 5 checkins, 2000-10-16 to 2002-06-17
[Kaneko Naoshi]: 5 checkins, 1998-04-07 to 2001-02-05
[Masahiro Tomita]: 5 checkins, 1999-09-22 to 2002-04-11
[GOTO Kentaro]: 5 checkins, 1999-01-26 to 2000-07-24
[Amos Gouaux]: 4 checkins, 2001-07-30 to 2002-03-01
[Sean Chittenden]: 4 checkins, 2002-05-21 to 2002-07-03
[Tachino Nobuhiro]: 4 checkins, 2000-12-08 to 2002-08-01
[Masahiro Tanaka]: 4 checkins, 2000-11-16 to 2003-05-07
[Motoyuki Kasahara]: 4 checkins, 1998-10-19 to 1998-11-17
[Ryo HAYASAKA]: 4 checkins, 1999-03-16 to 2001-05-11
[Ueno Katsuhiro]: 4 checkins, 2000-12-22 to 2003-04-06
[NAKAMURA, Hiroshi]: 4 checkins, 1999-04-02 to 2003-06-20
[takuma ozawa]: 3 checkins, 2001-12-20 to 2002-06-13
[Hiroshi Igarashi]: 3 checkins, 1998-08-28 to 2000-06-08
[TOYOFUKU Chikanobu]: 3 checkins, 2001-01-29 to 2001-08-14
[GOTOU YUUZOU]: 3 checkins, 2000-02-25 to 2001-04-13
[Kenji Nagasawa]: 3 checkins, 1999-05-30 to 1999-08-20
[Tietew]: 3 checkins, 2001-07-05 to 2002-12-24
[Koji Oda]: 3 checkins, 1999-06-25 to 1999-12-24
[Ville Mattila]: 2 checkins, 2001-11-21 to 2001-11-28
[MoonWolf]: 2 checkins, 2003-02-06 to 2003-05-26
[Inaba Hiroto]: 2 checkins, 1998-10-31 to 1999-06-23
[TAMURA Takashi]: 2 checkins, 2001-11-11 to 2001-11-22
[Triet H. Lai]: 2 checkins, 2001-02-09 to 2001-02-19
[Kazuhiro HIWADA]: 2 checkins, 1999-01-27 to 1999-08-03
[Warren Brown]: 2 checkins, 2003-04-05 to 2003-05-02
[IKARASHI Akira]: 2 checkins, 1999-01-30 to 1999-03-07
[Masaki Suketa]: 2 checkins, 2002-06-01 to 2002-06-03
[Brian F. Feldman]: 2 checkins, 2001-05-18 to 2001-09-01
[Takao KAWAMURA]: 2 checkins, 1998-11-06 to 1999-01-03
[okabe katsuyuki]: 2 checkins, 1999-02-17 to 2002-03-26
[Kazunori NISHI]: 2 checkins, 1998-04-12 to 1999-12-01
[Matt Armstrong]: 2 checkins, 2002-02-11 to 2003-01-20
[Florian Frank]: 2 checkins, 2001-12-05 to 2003-06-23
[Masatoshi SEKI]: 2 checkins, 2003-06-19 to 2003-06-29
[KIMURA Koichi]: 2 checkins, 1998-11-13 to 1999-06-28
[Jun-ichiro itojun Hagino]: 2 checkins, 1999-05-20 to 1999-10-12
[Ryunosuke Ohshima]: 2 checkins, 2000-05-11 to 2000-05-11
[Aleksi Niemela]: 2 checkins, 2000-06-30 to 2000-09-23
[Tetsuya Watanabe]: 1 checkin on 2002-02-17
[Clemens Hintze]: 1 checkin on 2000-03-28
[Shigeo Kobayashi]: 1 checkin on 2000-01-26
[Wayne Scott]: 1 checkin on 2000-09-21
[Hirotaka Ichikawa]: 1 checkin on 1999-02-17
[MOROHOSHI Akihiko]: 1 checkin on 2000-05-05
[Mathieu Bouchard]: 1 checkin on 2003-01-02
[Mitsuhiro Kondo]: 1 checkin on 2001-07-05
[Shin'ya Adzumi]: 1 checkin on 2001-09-05
[TAMITO]: 1 checkin on 1998-10-28
[YOSHIDA Kazuhiro]: 1 checkin on 2002-12-26
[NAGAI Hidetoshi]: 1 checkin on 1998-04-17
[Yoshinori Toki]: 1 checkin on 1999-01-28
[Kazuya 'Sharl' Masuda]: 1 checkin on 1998-04-15
[Ferris McCormick]: 1 checkin on 2001-12-31
[Kuroda Jun]: 1 checkin on 1999-01-18
[Booker C. Bense]: 1 checkin on 2002-07-27
[Kenichi Komiya]: 1 checkin on 2000-09-06
[TAKAHASHI Masayoshi]: 1 checkin on 1998-04-13
[Aristarkh A Zagorodnikov]: 1 checkin on 2002-03-20
[Okada Jun]: 1 checkin on 2001-05-13
[Marc Cartright]: 1 checkin on 2003-06-18
[Akira Endo]: 1 checkin on 1999-05-14
[Katsuyuki Okabe]: 1 checkin on 1997-09-24
[Kazuhiro Yoshida]: 1 checkin on 2001-03-06
[Nakada.Nobuyoshi]: 1 checkin on 2000-03-05
[Pit Capitain]: 1 checkin on 2001-10-15
[IWAMURO Motonori]: 1 checkin on 1999-12-17
[Matthew Dempsky]: 1 checkin on 2003-06-25
[Fukuda Masaki]: 1 checkin on 1998-12-25
[Ariff Abdullah]: 1 checkin on 2003-06-17
[Satoshi Nojo]: 1 checkin on 2000-06-16
[Toshihiko SHIMOKAWA]: 1 checkin on 1998-01-29
[Pascal Rigaux]: 1 checkin on 2001-05-25
[Yasushi Shoji]: 1 checkin on 2001-02-18
[Le Wang]: 1 checkin on 2001-12-24
[Ulf Betlehem]: 1 checkin on 2003-03-22
[Kentaro Inagaki]: 1 checkin on 2000-02-04
[NABEYA Kenichi]: 1 checkin on 2003-02-08
[ABE Shigeru]: 1 checkin on 2002-12-27
[Katsuhiro Ueno]: 1 checkin on 1999-12-05
[Chris Thomas]: 1 checkin on 2002-05-02
[Wolfgang Jahrling]: 1 checkin on 2002-02-18
[Johan Holmberg]: 1 checkin on 2003-05-03
[moumar]: 1 checkin on 2003-01-15
[Noriaki Harada]: 1 checkin on 2000-09-03
[Ed Sinjiashvili]: 1 checkin on 2002-02-19
[Koga Youichirou]: 1 checkin on 2000-06-28
[Mitsuteru S Nakao]: 1 checkin on 2000-11-21
[Kazuhiko Izawa]: 1 checkin on 1999-10-04
[Wes Nakamura]: 1 checkin on 2000-10-17
[Tadahiro Maebashi]: 1 checkin on 1998-04-27
[Uechi Yasumasa]: 1 checkin on 2000-06-22
[TADA Tadashi]: 1 checkin on 2002-12-24
[Tsukada Takuya]: 1 checkin on 1999-08-23
[Jamie Herre]: 1 checkin on 2002-07-06


Below is the script to parse the ChangeLog.

_why

---
require 'parsedate'

class Time                                                                                                                                                                                                      

#
# Parse ChangeLog
#
devs = {}
dev_names = {}
File.open( 'ChangeLog' ).each do |line|
    if line =~ /^(\w{3} \w{3} +\d+ +\d{2}:\d{2}:\d{2} \d{4}) +(.+) +<([^>]+)>/
        dev_name = $2.strip.upcase
        dev_names[dev_name] = $2.strip
        devs[dev_name] ||= []
        devs[dev_name] << Time::mktime( *ParseDate::parsedate( $1 )[ 0, 7 ] )
    end
end

#
# Organize authors and display
#
puts "Total devs: #{ devs.length }"
puts( devs.
      sort do |a,b|
          b[1].length <=> a[1].length
      end.
      collect do |dev,log|
          dev = dev_names[dev]
          if log.length > 1
              log.sort!
              "[#{ dev }]: #{ log.length } checkins, "+
              "#{ log.first.simple_time } to #{ log.last.simple_time }"
          else
              "[#{ dev }]: 1 checkin on #{ log.first.simple_time }"
          end
      end.
      join( "\n" ) )