news2mail.com

HomeComp › Lang

comp.lang.ruby

The Ruby programming language.

comp.lang.ruby was the English-speaking front door of Ruby in the years when the language was crossing over from Japan — the mailing list and the newsgroup were gatewayed, so Matz and the core developers answered here directly.

The archive spans the pre-Rails era: idiom debates, early gems, and the evangelising blog posts of 2001-era converts — one of which, on a Tripod blog, still links this page.

Long-form reference · 7,587 words · about a 33-minute read

A newsgroup that arrived after its community

The most interesting fact about comp.lang.ruby is its date. The ballot that created it closed on 20 April 2000; the control message that told the world’s news servers to add the group went out on 3 May 2000. That is four and a half years after Ruby’s first public release, about two years after the language acquired an English-language home page, and a year and a half after English-speaking users had already organised themselves on a mailing list. The newsgroup did not create this community. It was added to one that already existed somewhere else, at a moment when the part of Usenet it joined was beginning to empty out.

The proposal’s own paperwork says so in numbers. The Request for Discussion of 16 February 2000 reported “over 1000 members of 4 Japanese Ruby mailing lists (general, developers, math, extension writers), with a peak volume topping 100 messages per day”, against “only one English Ruby mailing list with about 125 members, with a recent volume of 5-10 messages per day”. Six weeks later the Call for Votes revised the English figure upward to about 175 members and a volume “often exceeding 10 messages per day and growing”. Those two lines contain the whole subject of this page: a language whose centre of gravity was Japanese-language electronic mail, and an English-speaking wing an eighth its size on the February count and a sixth on the March one, growing quickly, and looking for an address of its own.

What follows is the record of that address: the documents that created it, the machinery that connected it to the mailing list it mirrored, the language it was created to discuss, and the kinds of traffic it carried until the web took them elsewhere. The mechanics of Big-8 group creation in general, and the history of the hierarchy this group sits in, belong to the comp.* hierarchy page and are not repeated here.

The paperwork

The administrative record for comp.lang.ruby survives intact in the Internet Systems Consortium’s mirror of news.announce.newgroups, which is not true of every group in this directory. The file holds four documents: the Request for Discussion of 16 February 2000, the first Call for Votes of 30 March 2000, a second Call for Votes of 10 April 2000, and the result of 28 April 2000. A separate control-message archive holds the newgroup messages themselves.

The proponent was Conrad Schneiker, and he had taken the job at the designer’s own suggestion. The group’s FAQ, which Schneiker wrote and later handed on, records the fact in a single unemphatic line: “I (Conrad Schneiker) founded comp.lang.ruby at his suggestion.” He cross-posted the RFD to news.announce.newgroups and news.groups, as the guidelines required, and then to three neighbouring rooms whose readers he plainly hoped to recruit: comp.lang.java.programmer, comp.lang.perl.misc and comp.lang.python. It was also sent to the English-language Ruby mailing list. The vote itself was run by a neutral third party, Dave Cornejo, on behalf of the Usenet Volunteer Votetakers.

It nearly did not reach a ballot at all. On 6 March 2000, three weeks into the discussion period and writing in comp.lang.misc with a copy to the Ruby list, Schneiker put the question to his own supporters: “At the end of this week we will need to decide whether I should withdraw the RFD or whether I should send off the paperwork” that would lead to a Call for Votes. His arithmetic was blunt. “We need around 120 yes votes from prospective users of comp.lang.ruby to succeed, and just to be on the safe side, we should probably aim for 200. If we don’t get enough yes votes, we have to wait another 6 months to resubmit the RFD.” They proceeded, and they got 200 exactly.

The charter is short, and worth having verbatim because it is the only formal statement of what the group was for:

The comp.lang.ruby newsgroup is devoted to discussions of the Ruby programming language and related issues. Examples of relevant postings include, but are not be limited to, the following subjects: Bug reports; Announcements of software written with Ruby; Examples of Ruby code; Suggestions for Ruby developers; Requests for help from new Ruby programmers. The newsgroup is not moderated. Binaries are prohibited (except the small PGP type). Advertising is prohibited (except for announcements of new Ruby-related products).

One small textual detail is visible only if the documents are read side by side. The RFD proposed the one-line newsgroups description “The Ruby programming language.” By the time the proponent submitted his questionnaire to the votetakers in mid-March this had been sharpened to “The Ruby dynamic OO programming language.”, and it is the second wording that went into the Call for Votes and the control message, and that still stands, unaltered, in the master newsgroups file the ISC publishes today. The directory page above preserves the earlier line, which makes this page a small accidental fossil of the proposal’s first draft.

Voting closed at 23:59:59 UTC on 20 April 2000. The result, posted eight days later under the headline RESULT: comp.lang.ruby passes 200:16, recorded 200 YES votes and 16 NO votes — 216 valid ballots in all — together with 5 abstentions and 2 ballots rejected for containing no vote statement. The votetaker restated the threshold in the same posting: yes votes had to be at least two-thirds of all valid votes, and there had to be at least one hundred more yes votes than no votes. Both conditions were met comfortably on the first attempt.

After the mandatory five-day period for challenges, the group was created. The newgroup control message is dated 3 May 2000, PGP-signed, and issued by David C Lawrence as moderator of news.announce.newgroups. Its body is admirably terse: “comp.lang.ruby is an unmoderated newsgroup which passed its vote for creation by 200:16 as reported in news.announce.newgroups on 28 Apr 2000.” The message was re-sent on 3 and 4 May, again on 10 May and once more on 3 June 2000 — routine repetition, aimed at servers that had missed the first copy.

That repetition was not ceremonial, and the difference between creating a group and having one is the subject of the next fortnight of the mailing list’s archive. Several readers found that their providers simply had not added it. One was offered fj.comp.lang.ruby, the older Japanese group, as a substitute, and replied — his own account, posted to the list — “that no, that was not it, and oh-by-the-way deja.com has the news group as does the rest of the civilized world. Then I forwarded them a copy of the control message.” Others wrote to their providers’ support addresses to ask for it by name. On 27 May 2000 one of them reported back, in six words: “Just found comp.lang.ruby on SuperNews this morning.” A Usenet newsgroup was not a place that existed once the paperwork cleared; it was a line in several thousand independently administered configuration files, and it arrived in each of them separately.

The objection, which was demographic rather than taxonomic

The ISC archive preserves the formal documents but not the news.groups discussion they provoked, so the argument itself cannot be read there. It can, however, be read at one remove. On 14 March 2000 the proponent posted the Proponent Questionnaire he had just submitted to the votetakers to the Ruby mailing list, and that document opens with his own summary of how the discussion period had gone:

The consensus seemed to be that the newsgroup name and charter were OK. The main concern was whether the level of interest was sufficiently great to justify a new newsgroup at this time. The comp.lang.ruby supporters provided recent traffic information about the various Ruby mail lists. There was discussion among the apparent news.group regulars about how much anticipated traffic was appropriate to justify a very technical (the comp.lang.ruby case) versus a more general and non-technical newsgroup. It was suggested that we use comp.lang.misc to demonstrate the level of interest, and resubmit the RFD at a later time. We began using comp.lang.misc, although a couple of the comp.lang.misc regulars have quite understandably expressed their displeasure with comp.lang.misc being used in this manner.

That is a precise and rather unusual objection. The name was not in dispute: comp.lang.ruby is exactly the form the hierarchy’s conventions dictate, and Ruby is not a product with an owner, so the long-running argument about whether a commercial product deserves a group of its own — the argument documented on the comp.os.msdos.4dos page — never arose. What the regulars questioned was demand. A language almost unknown outside Japan, with 175 English-speaking correspondents, was being asked to justify a permanent entry in a namespace that every news administrator on earth would have to carry.

The remedy suggested was to prove the demand elsewhere first, and the proponents took it: through early 2000 Ruby discussion in English migrated into comp.lang.misc, the catch-all room for languages without homes, to the visible irritation of that group’s regulars. Postings from that spring carry a header line of their own, “((comp.lang.misc + cc: ruby-talk ML))”, marking a conversation being conducted in a borrowed room. The Call for Votes duly acquired a paragraph the RFD had not contained, explaining that “in 2000, most Ruby discussion has occurred in comp.lang.misc” and that this was “not ideal”. The same rationale noted that much of 1999’s newsgroup discussion of Ruby had happened in comp.lang.python, which was “not optimal” for obvious reasons. The 216 ballots that followed settled the question of demand more emphatically than the objectors had probably expected; the group’s own FAQ later recorded, drily, that “contrary to lots of skepticism, it was approved on the first attempt”.

The gateway, exactly

A mailing list gatewayed to a newsgroup is a different institution from a newsgroup, and comp.lang.ruby was gatewayed for almost the whole of its useful life. The arrangement is worth setting out precisely, because the community’s own account of it is internally inconsistent and has been repeated in that form ever since.

The intention was in the paperwork before it was in the world. The Proponent Questionnaire of 14 March 2000, six weeks before the vote closed, contains a section headed GATEWAYS naming the list the group would be joined to and the address to send to it. On 5 May 2000, two days after the control message, the proponent posted to both the newsgroup and the list to say that the group existed and that “there will be some sort of gateway linking comp.lang.ruby and the ruby-talk mail list, so that people can use whichever method they prefer”. A fortnight later there was. On 19 May 2000 Norio Suzuki announced a working relay: “The messages posted to NetNews are resended to mailing list ruby-talk and the messages in mailing list are posted to NetNews system.” Readers could therefore, in his words, follow whichever medium they preferred rather than watching both. The relay was itself written in Ruby, and he published the scripts.

It was also, like most volunteer infrastructure of the period, a single machine with a single person behind it. The archive carries repeated notices of gateway trouble from September 2000 onward — the first of them explaining that the relay had stopped because a hard disk had failed and a replacement had to be bought — and one announcement, on 17 November 2000, that the relay would stop for a weekend because its operator expected a power-line failure and preferred to shut everything down rather than risk his disks; messages sent meanwhile would be relayed when the system came back. He had also put the relay’s log file on the web so that posters could check whether their message had made the crossing. Very little about that arrangement was visible to a reader on either side, which is rather the point.

By the middle of 2001 it had stopped for good, and the archive records the failure from the outside in. A thread forwarded to the list on 11 June 2001 collects the complaints of people who could not tell whether the problem was theirs: “There have been almost no posts in several days. It seems like the connection to the ruby-talk mailing list has been severed”; “It’s a pain having to follow a newsgroup and a mailing list separately. It also makes the newsgroup look very inactive to casual passers-by.” The proponent, checking the same day, found that a message of his own had failed to cross in the other direction either, “so maybe mirroring is both directions is now broken”, and asked, reasonably, whether the home page and the FAQ ought to list a contact name for exactly this situation.

Six days later there was a replacement. On 17 June 2001 Dave Thomas posted it, and his description is worth quoting because it is the best single sentence anyone wrote about the machinery of this group: “Well, as it looked like the original mail/news gateway was not going to be revived, I’ve gone ahead and implemented something here that I think should work.” He was unsure which headers ought to be carried across in each direction, unsure what to do about cross-posted articles, and pleased to report that “the whole thing is less than 100 lines of Ruby”. He ran it thereafter, and the group’s FAQ eventually had to add a paragraph asking readers not to report spam to his internet provider merely because the spam arrived from his server.

A bespectacled man in a striped shirt speaking with his hands raised, in front of a blue projection screen showing a bulleted slide.
Dave Thomas, who posted the replacement mail-to-news gateway on 17 June 2001 and ran it thereafter, and who with Andrew Hunt wrote the first English-language Ruby book. Photographed speaking at the Pragmatic Rails Studio in Pasadena, California, on 27 January 2006. James Davidson · CC BY 2.0 · via Wikimedia Commons.

The group’s own FAQ, revised in April 2005, tells the story differently and contradicts itself in the process. In one section it describes the list and the newsgroup as having “been mirrored to each other since mid-2000”; in another it states that “the mailing list is older. When the newsgroup was created, they diverged. In mid-2001, Dave Thomas created a two-way gateway that would ‘mirror’ the newsgroup to the list and vice versa. (This was accomplished in 200 lines of Ruby code.)” The archive supports the first version and not the second: a two-way relay was announced and working on 19 May 2000, sixteen days after the newgroup message, and the traffic either side of it shows the mirror running. The 200-line figure is not what the author of the second gateway said at the time, and no divergence of a year is visible anywhere in the record. The dull reconstruction is the right one: two gateways, the first from 19 May 2000 and increasingly unreliable, the second from 17 June 2001 and durable, with an outage of days or weeks between them.

The consequence for anyone reading the group today is practical. Because the mirror was two-way, most of what was posted to the newsgroup also entered the mailing list’s archive, and vice versa — but not all of it, and not from the beginning. The FAQ is candid that the mirror “is not perfect; because of variability in the news feed, sometimes messages are dropped or duplicated”, and that articles posted before the gateway existed appear only on the newsgroup side. Reading comp.lang.ruby therefore means reading a mailing-list archive with known holes in it, and knowing which holes; the surviving Usenet-side archive is patchy in the way all Usenet archives are.

Where the Ruby community actually was

Set against the mailing lists, the newsgroup was never the main room. Ruby’s list infrastructure was Japanese first and stayed structurally bilingual for years. The Japanese-language ruby-list dates from the 0.95 release of December 1995 and was the first mailing list the language had; ruby-dev carried Japanese-language development traffic. The English-language ruby-talk is conventionally dated to 1999, though its surviving archive begins earlier, in December 1998, and begins at message number 113, so some of its opening months are missing from it as well. Alongside ruby-talk, ruby-core carried English-language implementation discussion, and ruby-doc and ruby-cvs completed the set. comp.lang.ruby hung off ruby-talk alone. A reader in the newsgroup was therefore very close to the language’s designer, who read and answered there, and simultaneously one remove from a large volume of conversation still taking place in another language.

The crossover came fast. The proposal of February 2000 counted the Japanese lists at more than a thousand members and the single English list at 125; by early 2002 ruby-talk was carrying more messages than the older ruby-list. The four years in which the news2mail gateway ran, 2000 to 2004, are almost exactly the years across which that balance tipped.

Around the lists sat the rest of the community’s furniture, most of it web-based and most of it now gone: the Ruby Application Archive, launched by Matsumoto in 1998 alongside the first English home page; the RubyGarden wiki, which is where the community kept its own glossary; ruby-doc.org; an IRC channel; and, from the mid-2000s, ruby-forum.com, a web front end onto ruby-talk. That last one matters more than it looks. By the time the surviving ruby-talk archive stops, in August 2013, most of the messages in its final month were sent from the web forum’s address and carry its footer, “Posted via http://www.ruby-forum.com/”. The same conversation was still running; it had simply changed the door it came in through, and the door it had come in through in 2001 was by then unused.

The language, for a reader who has never used it

Ruby was designed by Yukihiro Matsumoto, universally called Matz, a Japanese programmer born on 14 April 1965 who graduated in information science from the University of Tsukuba. Its design goals are unusually well documented, because he wrote them down himself, in English, on the mailing list the newsgroup would later mirror. Asked on 3 June 1999 for the language’s history, he replied the next day:

Well, Ruby was born in Feb. 23 1993. At that day, I was talking with my colleague about the possibility of object-oriented scripting language. I knew Perl (Perl4, not Perl5), but I didn’t like it really, because it had smell of toy language (it still has). The object-oriented scripting language seemed very promising. I knew Python then. But I didn’t like it, because I didn’t think it was a true object-oriented language. OO features are appeared to be add-on to the language. I, as a language mania and OO fan for 15 years, really really wanted a genuine object-oriented, easy-to-use object-oriented scripting language. I looked for, but couldn’t find one. So, I decided to make it.

Black-and-white close-up portrait of a smiling bespectacled man with dark hair, a moustache and a short beard.
Yukihiro Matsumoto, who designed Ruby and posted the account of its origins quoted here to the ruby-talk mailing list in June 1999. The photograph was taken on 27 April 2018, long after the newsgroup's active period; no free-licensed photograph of him from the years this page covers has been found. Christopher Adams · CC BY 2.0 · via Wikimedia Commons.

The same posting sets out the early release lineage in the designer’s own hand: Ruby 0.95 posted to the Japanese domestic newsgroups in December 1995 — 21 December, by the usual reckoning — then 1.0 in December 1996, 1.1 in August 1997, and 1.2 as the stable line with 1.3 as the development line in December 1998, with 1.4 expected within the month. He noted in passing that ruby-list had by then accumulated 14,789 messages. It is a useful corrective to the standard account of Ruby as a language of the 2000s: by the time an English-speaking Usenet reader first heard of it, it was six years old and had a large, articulate, entirely Japanese-language user community.

The version history the newsgroup actually lived through is short. The 1.6 series carried the group’s first two years; 1.6.7 is dated 1 March 2002. Ruby 1.8.0 was released on 4 August 2003, and then stayed put for a decade: 1.8 was the stable base for the rest of the newsgroup’s active period and for years afterwards, with 1.8.7 arriving on 31 May 2008 and the line finally retired in June 2013. Code posted to comp.lang.ruby in its busiest years is 1.6 or 1.8 code, written before the 1.9 line existed. Ruby 1.8 was also the version that was written down as a formal standard, accepted as a Japanese Industrial Standard (JIS X 3017) in 2011 and as an international standard, ISO/IEC 30170, in 2012.

The 1.9 line, which broke compatibility in ways that obliged many third-party libraries to be rewritten, ran 1.9.0 on 25 December 2007, 1.9.1 on 30 January 2009, 1.9.2 on 18 August 2010 and 1.9.3 on 31 October 2011; with 1.9.3 the language changed its licensing from the Ruby licence plus the GPL to the Ruby licence plus the two-clause BSD licence. From 1.9 the official interpreter was the bytecode virtual machine YARV, superseding the slower interpreter that had been at the heart of Matz’s Ruby Interpreter since the beginning.

After that the newsgroup’s era was long over, but the lineage is worth completing for a reader trying to place old postings. Ruby 2.0.0 was released on 24 February 2013, aiming at near-total compatibility with 1.9.3; from 2.1.0, released on 25 December 2013, the project adopted a versioning policy close to semantic versioning and the habit of shipping a new minor version every Christmas Day. Ruby 3.0.0 followed on 25 December 2020, under the name Ruby 3x3 and with a just-in-time compiler, a fibre scheduler and the experimental Ractor concurrency primitive; 3.1, 3.2, 3.3 and 3.4 arrived on the same date in 2021, 2022, 2023 and 2024, and version 4.0 on 25 December 2025, the number bumped past 3.5 to mark the language’s thirtieth birthday.

What made it distinctive, and the argument about surprise

What converts wrote home about, and argued about in the group, is easy to summarise. Everything in Ruby is an object, including integers, Booleans and nil; every function is a method called on some object. It has single inheritance with dynamic dispatch, and modules imported as mixins in place of multiple inheritance. It is dynamically and strongly typed, with duck typing. It has lexical closures, iterators and a block syntax that lets a caller pass a chunk of code into a method as a matter of course — the feature most often named by people explaining why they had switched. It has literal notation for arrays, hashes, regular expressions and symbols; garbage collection; exception handling; operator overloading; introspection and metaprogramming deep enough that changing a class at runtime is ordinary rather than exotic; and a native extension interface in C. The syntax is broadly Perl-like without Perl’s obligatory sigils, and, unlike Python, indentation carries no meaning.

The community’s recurring design argument was over the “principle of least surprise”, abbreviated POLS in the group and known elsewhere as the law of least astonishment, which had attached itself to Ruby as a slogan and was regularly deployed by anyone whose expectations a language feature had disappointed. The group’s FAQ took a firm line on the practice, observing that the term “certainly did not originate in the Ruby community, but it has been frequently used there — even overused or abused at times”, that every language or software system seeks at some level to adhere to it, and that “it is inappropriate to invoke POLS as a ‘magic word’ when one’s individual expectations are not met”. Make suggestions if you wish, the entry ended, but think twice before mentioning POLS.

The designer’s own answer to the argument was given in the newsgroup. In a discussion on comp.lang.ruby in May 2005, Matsumoto distanced the language from the principle as usually stated, on the ground that any design choice will surprise somebody; what he applied, he said, was a personal and consistent standard of surprise, so that a reader who had learned Ruby well would find few surprises left. Elsewhere he put the underlying goal more plainly still, saying that his primary aim had been to make a language he himself enjoyed using, and that systems design ought to be organised around human rather than machine convenience. That the clarification was made here, rather than in a manual or a keynote, is a fair measure of what the group was for.

What the room carried

No honest account of an unarchived-by-itself newsgroup can list its threads, and none is attempted here. But the kinds of traffic are documented twice over — once in the charter, which enumerates bug reports, announcements of software written in Ruby, code examples, suggestions to the developers and requests for help from beginners, and again in the posting guidelines the group maintained for itself.

Those guidelines are the more revealing document, because a group’s house rules describe the traffic it actually got. They open by asking posters to be “friendly, considerate, tactful, and tasteful” on the explicit ground that the room had to stay hospitable to “the growing ranks of newbies, very young people, and their teachers, as well as cater to fire breathing wizards” — a sentence that tells you both that beginners were arriving in numbers and that the group had decided in advance how to receive them. The same ethos was later compressed into the initialism MINASWAN, “Matz is nice and so we are nice”, which had a page of its own on the community wiki and which by the middle of the decade was being used in the archive as shorthand needing no gloss: a weekly news digest of autumn 2005 drops it into a sentence with only a wiki link attached, and by May 2007 someone can post that he had the letters AAMNNSW on a Scrabble rack and knew at once what he wanted to play.

The remaining rules are a portrait of technical traffic. Quote before you reply, and quote selectively. Post plain text, not HTML or word-processor formats. Put code in the body of the message rather than in attachments. And, when reporting a problem, give the output of ruby -v, the name and version of the compiler used to build Ruby, the operating system and release from uname -a, the exact error text and a small example that reproduces it — because, in the guidelines’ phrase, “this isn’t the psychic friends newsgroup”. A checklist like that is written by people who have spent a great deal of time triaging build failures on unfamiliar Unixes, which is exactly what a young interpreter distributed as source demanded, and it points at the two least glamorous and most constant categories of traffic in the group: portability reports, and problems in the C extension interface, where user code met the interpreter’s own internals and the answer usually depended on which version of which compiler had produced what.

Convention had also produced its own subject-line vocabulary: ANN: for announcements, BUG: for bug reports, OT: for anything off-topic. Beyond that the group ran the usual business of a language room — release announcements, notices of new libraries, requests for review of somebody’s first extension, bug reports with patches attached in a project that did not yet have an issue tracker, and the long-running idiom argument about how a thing should properly be done in Ruby rather than translated out of Perl or Python. The comparison question that recurred most, and that the proposal documents had themselves raised, was whether Ruby was best understood as a better Perl or as a practical Smalltalk; its designer had effectively answered it in advance by borrowing from both, along with Lisp, Eiffel and Ada.

One artefact of the mirror deserves a note, because it puzzles readers of the archive. Every message on the mailing list historically carried a serial number in its subject line, in the form of a bracketed count — the FAQ calls them the six-digit message numbers, though the early ones ran to five — which made citation trivial and threading awkward. Matsumoto removed them, the FAQ records, after the matter was put to a vote in early 2002; the news header still referred to the number afterwards, and on the mailing list it moved to an X-Mail-Count header. Postings before and after that change look quite different, and the difference is not a change of subject.

Packaging, and where the code lived

For most of the newsgroup’s life Ruby had no package manager, and the question “where do I get it” was answered with a URL and a tarball. The institution that filled the gap was the Ruby Application Archive, which Matsumoto launched in 1998 alongside the first English-language home page: a finished library went into the RAA, and a posting to the group or the list was how people learned it was there. The RAA was kept running until 2013, when its function passed to RubyGems.

Project hosting arrived next. RubyForge was started in 2003 by Ruby Central to give open-source Ruby projects a home of their own; in February 2014 it hosted 9,603 projects and had 103,899 registered users. Its closure was announced on 10 November 2013, with the site to be unavailable from 15 May 2014, which is why archived postings that point at a RubyForge address no longer resolve — one of the ordinary ways an old newsgroup thread stops being usable long before it stops being readable.

RubyGems, the packaging system that outlasted both, was begun in November 2003 and released to the public on 14 March 2004. It was the work of Chad Fowler, Jim Weirich, David Alan Black, Paul Brannan and Richard Kilmer, and it was not part of Ruby itself at the time: gems were bundled with the standard distribution only from Ruby 1.9. Through the newsgroup’s last active years, therefore, a gem was one distribution option among several rather than the way things were done, and a reader working through old threads will find all three eras represented — tarball, RubyForge project, gem — sometimes in the same discussion. The default public repository moved from gems.rubyforge.org to rubygems.org in 2010, by which time the room these arrangements had been announced in was quiet.

The documentation problem

The structural difficulty facing an English-speaking Ruby user in 2000 was not that the language was undocumented. It was that the documentation was in Japanese. Matsumoto and Keiju Ishitsuka published the first book on Ruby in Japan in October 1999, and something like twenty further Japanese titles followed in the early 2000s. The English shelf, by comparison, was nearly bare, and part of what the group did was translation in the loose sense: restating in English things already settled elsewhere, for readers with no way of going to check.

The book that changed this was Programming Ruby by Dave Thomas and Andrew Hunt, known throughout the community as the Pickaxe for the tool on its cover. It was the first English-language book on the language, published by Addison-Wesley — the group’s own FAQ and the standard account of Ruby’s history date the first edition to 2000, though the book’s own reference article gives 2001 — and its first edition was released free online under the Open Publication License, which mattered a great deal to readers who could not easily buy an imported technical book. A second edition covering Ruby 1.8 followed in 2004. That its author was also the man running the mail-to-news gateway, and the author of RDoc, the documentation generator that ships with Ruby and drives its command-line ri tool, gives some sense of how small the English-speaking end of this community was in the years the newsgroup mattered.

The rest of the English shelf assembled itself over about eighteen months, and the group’s FAQ listed it: Ruby in a Nutshell, written by Matsumoto himself for O’Reilly, in November 2001; The Ruby Way by Hal Fulton in December 2001; the Ruby Developer’s Guide in February 2002; Teach Yourself Ruby in 21 Days in March 2002; Making Use of Ruby the same year. German readers were served in parallel, including a translation of the Pickaxe. The FAQ’s maintainer eventually froze the list with a remark that reads oddly now and did not then: “I don’t want to maintain this forever. We all hope the number of Ruby books increases, of course.”

The group also maintained its own FAQ, which is the single best surviving description of what comp.lang.ruby thought it was. It was written first by the group’s proponent, then maintained by Hal Fulton — the author of The Ruby Way — posted to the group and the list monthly, mirrored on the web, and translated into German by Josef Schugt. It carefully distinguished itself from the Ruby language FAQ, which lived elsewhere, and it included a section headed “Tell me about the prolific Matz poster”, whose entire content was an explanation that the man answering all those questions had written the language, was very busy, and should be treated accordingly.

Conferences, and the community's own writing

While the newsgroup and its list were still the main written channel between English-speaking Rubyists, the same people had already begun meeting in person. The first international Ruby conference was held in the autumn of 2001, three years before Rails; two of its organisers, David Alan Black and Chad Fowler, concluded shortly afterwards that a permanent organisation was needed to run it, and with Richard Kilmer and others founded the non-profit Ruby Central to do so. Ruby Central’s first project was RubyConf 2002, and an annual RubyConf has been held since. It produced the first official Rails conference, RailsConf, in Chicago in June 2006, and the first official European Rails conference in September 2006. In Japan, RubyKaigi was first held in 2006; in Europe, the EuRuKo series ran alongside. Ruby Central also began a regional conference grant programme in 2006, which is a small but telling detail: by then the problem was no longer finding enough Rubyists to fill a room.

View from the back of a full auditorium, the audience applauding with raised hands, facing a stage and a large projection screen bearing two large Japanese characters.
The closing session of RubyKaigi 2011, the Japanese Ruby conference first held in 2006, photographed on 18 July 2011. The screen reads 閉幕 — 'closing' — above the conference logo. machu. · CC BY-SA 2.0 · via Wikimedia Commons.

The community also wrote about itself. From the mid-2000s the Ruby Weekly News summarised each week’s traffic on ruby-talk — and therefore on the newsgroup — and posted the summary back to the list; the encyclopaedia’s account of Matsumoto’s position on the principle of least surprise is footnoted, to this day, to the issue of 29 May 2005, a weekly digest of a comp.lang.ruby discussion. A weekly editorial summary of a mailing list is a durable and rather old-fashioned genre, and it is one of the reasons the period is as legible as it is.

One thing the community made in those years travelled a very long way beyond it, and it was not a manual. Why’s (poignant) Guide to Ruby, written and drawn by the programmer who signed himself why the lucky stiff, was on the web by early 2004, free to read and licensed under Creative Commons Attribution-ShareAlike. It taught the language in the company of cartoon foxes and a large black cat, with digressions, running jokes and a recurring motif involving chunky bacon, several of which became community property. Its reputation escaped the language entirely: chapter three was reprinted the following year in The Best Software Writing I, an anthology selected and introduced by Joel Spolsky. It is listed in the group’s own FAQ, with commendable economy, as “a Ruby tutorial on acid, featuring cartoon foxes”.

Hand-drawn three-panel cartoon strip in which two foxes joke that Ruby is easy to read, ask whether this is some kind of infomercial, and conclude that their careers are over.
A three-panel strip of the cartoon foxes drawn by why the lucky stiff for Why's (poignant) Guide to Ruby, the free online tutorial that reached the web in 2004. The file was uploaded to Wikimedia Commons in April 2007 under the guide's own Creative Commons licence. why the lucky stiff · CC BY-SA 2.5 · via Wikimedia Commons.

Rails, and the end of the single room

What ended the arrangement was success, and the date is easy to fix. Ruby on Rails, extracted by David Heinemeier Hansson from a project-management application, was released as open source in July 2004 and reached version 1.0 on 13 December 2005. Interest in Ruby surged in tandem with it; when Apple announced in August 2006 that Rails would ship with Mac OS X 10.5, the language had comprehensively arrived. Newcomers came in at a scale no single general-purpose newsgroup was built for, and they came in through the web rather than through a newsreader.

The venues that took the traffic were framework mailing lists, web forums, weblogs, question-and-answer sites and, in time, code-hosting services. Many new and existing Ruby libraries now live on GitHub; RubyGems long ago passed a hundred thousand published packages. The newsgroup thinned while the gatewayed list continued, and the list itself increasingly filled with messages posted through a web forum. The surviving ruby-talk archive stops in August 2013.

The comparison that makes the point cleanly sits one shelf along in the same hierarchy. comp.lang.ruby was created in 2000 by a public ballot in which 216 people voted. comp.lang.go, the group for the next widely adopted new language to acquire a comp.lang.* address, was created without one: a Last Call for Comments issued on 25 September 2023 opened a five-day comment period, after which the Usenet Big-8 Management Board voted to create the group — two in favour, none opposed, one member not voting — and the newgroup control message went out on 9 October 2023. Both groups stand in the ISC master files today; only one of them was ever elected.

A forged rmgroup, and two strays

The control-message archive for this group contains three items that were not part of the plan, and together they are a compact illustration of how Usenet’s trust arrangements worked in practice.

Two are harmless. On 20 October 2000 a news server at the University of Rochester emitted a newgroup control message for comp.lang.ruby carrying the distribution “collabra-internal”; on 16 May 2001 a server at the Woods Hole Oceanographic Institution did exactly the same. Both were plainly internal housekeeping messages from institutional groupware servers that escaped onto the public network, and both were caught by the ISC’s control archive on the way past. Neither had any effect.

The third is a forgery. On 4 November 2001 an unsigned control message asked the network to remove the group: cmsg rmgroup comp.lang.ruby, cross-posted to comp.lang.ruby and to three groups that do not exist, over the name of a well-known newsreader author, with a body reading “please remove the bogus newsgroup comp.lang.ruby” and a signature block of nonsense. Nothing happened, for a structural reason. The standard control.ctl configuration that news servers ship with drops every newgroup and rmgroup message for comp.* by default and honours only those PGP-signed by the Big-8 group administrator. The forged message lacked such a signature; the genuine creation messages of May 2000 carried one. comp.lang.ruby remains in the ISC master newsgroups file today, still described as “The Ruby dynamic OO programming language.” and still flagged as an ordinary unmoderated group open for posting, one of 87 surviving comp.lang.* groups in a comp.* namespace of 677.

Why this address is still cited

What a comp.lang.* group did that nothing after it has reproduced is easy to state and hard to rebuild. It was a single room. Release announcements, beginners’ questions, patches, portability failures and design arguments all arrived in the same place, in one thread order, and everyone who cared read the same copy. There was no invitation and no login, and the designer, the implementers and somebody in their first week of the language were subscribed to an identical stream. The group’s posting guidelines, with their instruction to make subject lines informative “so that people who should be interested will read your post and so that people who wouldn’t be interested can easily avoid it”, are the etiquette of exactly that arrangement: a shared, ordered, unfiltered transcript in which the only editorial mechanism available was the courtesy of the people writing.

It was also citable, and this is the durable part. Every article carried a Message-ID and passed into archives that other people kept, so a message could be quoted, dated and pointed at years later. That is why accounts of Ruby’s early history are still footnoted to individual list and newsgroup postings; why the designer’s own statement of what he was trying to build can be read in the exact words he used on 4 June 1999; why the gateway’s author’s estimate of his own code — less than a hundred lines of Ruby — is recoverable at all; and why an encyclopaedia article on the language cites a discussion held in this newsgroup in May 2005 for its subject’s position on a point of design philosophy. The venues that took over after 2005 were better at most of the individual jobs and worse at that one: the record scattered across services with different lifespans, and the single ordered public transcript did not survive the move.

The directory this page belongs to is a snapshot of one mail-to-news gateway’s view of Usenet between 2000 and 2004 — which happens to be precisely the window in which comp.lang.ruby was worth reading. A reader who wants to know what Usenet itself was will find that explained elsewhere on this site; what this page is for is the four or five years in which an English-language language community existed at one address, with the language’s designer in the room, before it became large enough to need many.

What the record does not show

A good deal about this group is simply unrecoverable, and it is worth being explicit about which parts.

  • There are no readership figures. Nothing in the surviving record gives the number of people who read comp.lang.ruby, on Usenet or through the mirror, at any date. The only membership numbers that exist are the mailing-list counts quoted in the proposal documents of February and March 2000, and those describe the lists, not the newsgroup.
  • There is no message count for the newsgroup as such. Because of the mirror, the newsgroup’s traffic and the list’s traffic are not separable in the surviving archive, and the archive itself is known to have dropped and duplicated messages.
  • The news.groups discussion of February and March 2000 is not in the ISC archive. What the objectors actually said, and how many of them there were, survives only in the proponent’s own summary quoted above — a fair-minded summary, on its face, but a summary by an interested party.
  • The exact length of the gap between the two gateways is not documented. The first relay is on the record failing intermittently from September 2000; the mirror is on the record broken in both directions on 11 June 2001, six days before the replacement was announced. How much of the intervening period it had been down cannot be recovered from what survives, and neither can the fate of the first gateway’s log pages.
  • The date ruby-talk began is not firmly fixed. The standard account gives 1999; the surviving archive’s earliest month is December 1998 and its earliest surviving message is numbered 113, so an unknown number of earlier messages are missing from it.
  • Articles posted to the newsgroup before the gateway existed exist only on the newsgroup side of the mirror, and Usenet archives of that period are patchy for reasons that have nothing to do with this group.
  • The group has no recorded end. Unmoderated newsgroups do not close; they go quiet. No rmgroup was ever issued for comp.lang.ruby except the forged one, and the group is still carried.

Where this article gives a date, a number or a quotation, it comes from a document that can be checked: the RFD, the two calls for votes and the result in the ISC archive; the PGP-signed control messages; the ISC master active and newsgroups files; the surviving ruby-talk archive; the group’s own FAQ as posted to that list; and the release history published by the language’s maintainers. Where the sources disagree — as they do about the year the Pickaxe first appeared, and about the year ruby-talk started — the disagreement is stated rather than resolved by preference.

Scope and limits

This page covers one newsgroup. The design and governance of the comp.* hierarchy, the mechanics of Big-8 group creation and removal in general, and the hierarchy’s later contraction belong to the hierarchy page; the recurring argument about whether named products deserve their own groups is documented on another page of this directory, cited above, and is not retold here. Ruby as a language, and its designer, have far fuller treatments elsewhere; the material here is limited to what is needed to read the group’s traffic and to what the group’s own documents actually say.

No thread titles, posters, quotations or message counts have been invented. The postings quoted above were read in the surviving mailing-list archive; the administrative documents were read in the ISC mirror. Where the record is silent, this page says so.

Reading comp.lang.ruby today

  • Historical archive: Google Groups — comp.lang.ruby (coverage varies by group and era).
  • Open in a newsreader: news:comp.lang.ruby — the original site offered exactly this link, and it still works if your system has a newsreader registered for the news: scheme.
  • Live access: point an NNTP newsreader at a modern server — see accessing Usenet today.
  • The original news2mail e-mail subscription service ended in the mid-2000s and no longer operates.