Back to Eric's Home Page Up to Site Map $Date: 1999/09/14 02:19:41 $

Eric Raymond's open-source collection

I'm one of the few full-time open-source hackers. I was one of the original GNU contributors back in 1982-83, and I've been at it ever since. I'm not one of these who thinks commercial software is morally wrong, I just like the open-source way better -- it's more fun and produces better tools.

This directory contains sources for standalone open-source packages I have either originated or now maintain. I used to call it my `free software' collection. I don't anymore, for good reasons I have explained elsewhere.

All of this stuff is Unix sources unless explicitly noted otherwise. Binary RPMs are i386 with glibc6 unless otherwise specified.

If you get good use out of my software, and you need high-quality Linux hardware, see the good folks at VA Linux Systems, and tell them Eric sent you. They occasionally throw resources at me that help my projects, and are generally active in supporting open-source development and the Linux community.

Communications and Internet

fetchmail (home page)

This is a full-featured, robust and very configurable POP2/POP3/APOP/IMAP mail forwarder. It's designed to pick up mail from a mail server host and deliver it just as though it had arrived on your client machine via SMTP. You can download sources or RPMs here, or browse the FAQ.

imgsizer-1.6 (source) (RPM) (UPDATED)

This is a nifty little HTML authoring tool that will generate correct Netscape-style WIDTH and HEIGHT parameters for each of your IMG tags on an HTML page. This will allow the text portions of the page to load much faster. Requires that you have either identify(1) or a recent file(1) and rdjpegcom(1) installed. The RPM is architecture-independent.

keeper-1.53 (source)

The archiver's assistant, an interactive Perl program for maintaining large source archives accessible via FTP and WWW. The "new look" web pages at Metalab were all generated using keeper. Keeper enormously speeds up the tasks of processing new files out of the incoming directory, moving files around within the archive, and rearranging archive categories.

sitemap-1.10 (source) (RPM) (UPDATED)

A little Perl script that makes a site map (HTML index page) from all HTML pages with META DESCRIPTION tags below the current directory. To see what the output looks like, browse my site map. The RPM is architecture-independent.

harvester-1.5 (source) (RPM)

A Python script that allows you to monitor remote web pages and FTP directories, watching for new packages and downloading them when needed. Designed to be run from cron, so you can have your updates automatically downloaded in the wee hours of the morning. The RPM is architecture-independent. Note: harvester used to be called rpmwatcher, but I changed the name because I intend to teach it how to handle Debian packages and tarballs. If you have a ~/.rpmwatcher, just move it to ~/.harvester and all will be well.


Implementing compilers for languages no one else is insane enough to touch with a ten-foot pole is a hobby of mine. Here are some of the sickest jokes in the history of language design --- one intentional, the others unintentional. Both include documentation and chrestomathies of code in their source languages.

intercal (home page)

The most perverse language of all time. I didn't design INTERCAL, nor did I write the classic and hilarious manual included here, but I revived the language with this compiler, which also features the first implementation of COME FROM with malice aforethought. It works by generating and then compiling C. Requires lex or flex and either bison or yacc.

pilot-1.8 (source)

This weekend hack is a modern implementation of IEEE 1154-1991, the standard for the PILOT language. The design of PILOT is horrifyingly bad, and the PILOT standard hardly an exemplar of good practice, but this implementation was fun and includes some tricks that may be of interest to serious compiler writers. Most notably, it is both an interpreter for PILOT and a PILOT compiler. Requires lex and yacc.

cupl-1.2 (source)

Another hideous old design, CUPL -- Cornell University Programming Language. It looks something like a really archaic BASIC with linear-algebra builtins. I reverse-engineered this interpreter from the manual, written in 1966; the language-description parts of the manual are included in the docs. In 1.1 I added support for CUPL's immediate ancestor language, CORC. If you want to know what programming was like before interactive time-sharing, build this and find out. Requires either lex or flex, and bison or yacc.

If this sort of thing interests you, I keep other intriguingly horrible languages at the Retrocomputing Museum.

Programming Tools

ascii-2.6 (source) (RPM) (SRPM) (UPDATED)

My utility for displaying alternate names and notations of a given ASCII character, sort of an interactive reference chart. Also handy as a quick base converter for byte values.

cstrings-2.0 (source)

My handy little tool for internationalization. Extracts string constants from C sources and generates in constant names, prepending an appropriate set of #defines to the C source. Good support for incrementally trying out conversions until you get what you want.

hex-1.2 (source)

Everybody's favorite stupid utility, a hex dumper. This one mimics CP/M's and MS/DOS's dump format, either options to do lots of other semi-interesting things. Unusual of its kind in that it handles EBCDIC (I needed this capability once for reasons I've mercifully forgotten). Now with internationalization.

sccs2rcs-1.1 (source)

A conversion script that takes SCCS version histories and maps them into RCS histories (change comments included). Requires the sccs(1) utility supported under BSD and SVr4, also csh. I didn't write this, but I fixed some portability bugs in it and added a useful option.

sed-1.3 (source)

This is the fast, small sed originally distributed in the GNU toolkit and still distributed with Minix. The GNU people ditched it when they built their own sed around an enhanced regexp package -- but it's still better for some uses (in particular, faster and less memory-intensive).

semex-1.1 (source)

Once upon a time, I decided I needed to understand the System V semaphore features. I wrote this exerciser to help me. Use it to learn, or as a semaphore access method for shellscripts.

showkey-1.1 (source)

All this program does is read keystrokes and spit them back at you in a simple, printable form. This is one of these silly little utilities that you never think you'll need until some unexpected situation pops up and you have to have it. Then you get to be mugged by the details of tty-interface code, yippee. Never again! Runs under SV, Linux.

yacchack-1.1 (source)

My package for YACC parser encapsulation. Permits multiple YACC parsers in a single program.

Device Drivers

speaker-1.4 (source)

My speaker device driver for 386/486 boxes --- permits you to play tunes on a PC-clone console speaker under UNIX. An older version was included with the NetHack distribution. This one has (untested) portability patches contributed by people who ported 1.3 to 386bsd and Linux.

Games I've Written

galaxis-1.1 (source)

My clone of Christian Franz's nifty little Macintosh game. Find the lifeboats adrift in interstellar space. Now with mouse support if you're using ncurses under xterm.

wumpus-1.4 (source)

A piece of retrocomputing archeology --- my exact clone of the classic Hunt The Wumpus game, exactly as it first appeared in 1972. Also includes an original but strangely similar game, superhack.

Games I've Hacked On

I often hack on existing games to improve them. Here's a selection of my favorites, customized in various ways.

xlife-5.0 (source)

A full-featured X laboratory for the game of Life. This version has many features added since 3.0. Not least of these is my support for up to 8-state automata with arbitrary, editable transition tables and color used to display the states. Includes extensive pattern libraries for both Life and the Codd 8-state automaton.

bs-2.2 (source) (RPM) (SRPM)

My rewrite, with vastly improved screen interface, of Bruce Holloway's Battleships game. Not a very interesting game at that, the optimal strategy is too obvious --- I just couldn't stand to leave the interface as mal-designed as it was.

blue-2.4 (source) (RPM) (SRPM) (UPDATED)

My rewrite for ncurses of Tim Lister's enjoyable little Blue Moon solitaire. Has much better screen support. If you have a sufficiently recent version of ncurses on an Intel box, it will even display the IBM card-suit glyphs.

empire-1.1 (source)

This is Chuck Simmons's C translations of VMS FORTRAN Empire, a solitaire version. Nobody seems to be maintaining it any more. I've colorized it and updated it for ANSI/POSIX C. This version works with Linux ncurses.

greed-3.2 (source)

I added color support and some polish to Matt Day's game. He dropped out of sight, so I maintain it.

tetrix-2.0 (source)

This game was originally Quentin Neill's UNIX port of an Amiga tetris. I colorized it and cleaned up some portability problems. This version works with Linux ncurses.


deal-2.0 (source)

A little program that computes tables of non-replacement probabilities (as in, card draws from a Magic: The Gathering deck). The mathematical guts are from Jeremy York's `cardprobs', but this has a vastly improved interface and (gasp!) documentation. Version 2.0 adds more capabilities.

nolan-1.1 (source)

I designed and wrote this. It's not a game, exactly. More like a consciousness-raising exercise --- or, if you like, an insidious and vile piece of partisan political propaganda :-).

vh-1.8 (source)

The volks-hypertext browser for the Jargon File, written by Ray Gardner and myself. Install this with the File for easy on-line browsing of your authoritative guide to Internet and USENET jargon. Also useful for hypertextifying other lexicons and documents. You can also browse the Jargon File via World-Wide-Web.

xve-1.2 (source)

X Video Explorer, help for people trying to configure video timings for XFree86. You'll need the Hitchhiker's Guide To X386 Video Timing to use this. It's pretty obsolete; use kvideogen instead.

keybind-1.3 (source)

I wrote this to rebind console keyboard mappings under SVr3.2; it's similar to Linux loadkeys. It's probably obsolete now, but there is some lex trickery in it that may make it of some interest to people building things like loadkeys or modmap.

letterize-1.0 (source)

This program helps you find letter mnemonics for phone numbers by filtering them for pronounceability. Typically, it gives you only the best few hundred of nineteen-thousand-odd possibilities.

mstrans-1.0 (source)

A tool for cleaning up files transferred from MS-DOS; it can strip CRs, remove trailing ^Z characters, etc. With an option, it will put in CRs for files that need to go in the other direction. It can also strip meta bits, in case your file was a WordStar document. Finally, it can do appropriate filename mapping.

pmtools (source)

A set of modem-management tools, written in Expect, for the Livingston Portmaster terminal server. What these help you do is gang-program the modems, or gang-dump their register settings for comparison. One of them, pmpersist, can be used while your PM is active; it keeps looping through your list of modems re-programming idle ones until all have been touched. These tools can handle multiple modem types.

Other peoples' software

I have a lot of stuff in Emacs, including the VC mode that front-ends for RCS/SCCS/CVS and the Grand Unified Debugger mode that lets you drive GNU gdb and other symbolic debuggers from within Emacs. According to RMS's credit list, I appear to have more Emacs Lisp code in the standard Emacs distribution than anyone else but him.

I have contributed substantial code and documentation to the standard environment of the Python language. The post-1.5.1 versions of the standard,,, and modules have my work in them. I wrote and outright. I have also contributed to the Python Image Library.

I've contributed to GNOME. The NETLoad applet code was mine; I also taught gnome-card how to do categories, and added the Super-Safe option to gnobots and gnobotsII.

Packages I No Longer Maintain

If you're looking for GIFLIB, it's now maintained by Toshio Kuratomi.

Back to Eric's Home Page Up to Site Map $Date: 1999/09/14 02:19:41 $

Eric S. Raymond <>