Contributors

Ispell has a long and convoluted history. I have tried to track down as much as possible about it and condense it below.

THE DEVELOPMENT OF SPELL-CHECKING AND THE FIRST ISPELL

The following background information on spelling checkers in general, and ispell in particular, was provided to me by Les Earnest (les@dec-lite.stanford.edu):

The earliest spelling checker (of sorts) of which I am aware was in a program that attempted to automatically receive human-keyed Morse code, which can be ambiguous because of the variable timing between dots, dashes, intercharacter pauses, and interword pauses. This program didn't use a full dictionary; instead, used a table of digraphs (two-letter sequences) that occur in English and barred improper letter sequences. This program was written by someone at MIT Lincoln Lab around 1959 and, I think, ran on the TX-2 computer there. Unfortunately, I don't remember his name. I might still have the paper he wrote in my files but it would take a major search to find it and I might not succeed.

A program that I wrote in 1961 to read cursive writing contained a real spelling checker, using the 10,000 most common English words. It is reported in: L. Earnest, "Machine Recognition of Cursive Writing," Information Processing 62, (Proc. IFIP Congress 1962, Munich), North-Holland, Amsterdam, 1963. and N. Lindgren, ``Machine Recognition of Human Language, Part III - Cursive Script Recognition'', IEEE Spectrum, May 1965.

I brought that dictionary to Stanford and got a PhD student to write a spelling checker for text in Lisp running on our PDP-6 computer at the Stanford Artificial Intelligence Lab around 1967. Unfortunately, I do not remember which student it was; it could have been Gil Falk. It was a rather simple program (certainly much simpler than the earlier cursive writing program) and I didn't think of it as a significant development at the time.

[Later], I got another PhD student, Ralph Gorin, to do a better and faster spelling checker sometime in the early '70s, still using my old dictionary. Ralph later wrote an article about it in CACM. I believe that he later augmented the dictionary.

[note: Ralph has since informed me that he wrote no such article. The program was called SPELL and was written in 1971. Ralph provided me with a reference to "Computer Programs for Spelling Correction", by James L. Peterson, Springer-Verlag, Berlin, 1980, No. 96 in the series "Lecture Notes in Computer Science." This book states that Ralph's SPELL program, which was the direct ancestor of ispell, was the first computer program written for checking the spelling of text documents. The book is also a good source of references on spelling programs.]

...

[Ispell] was originally written in PDP-10 assembly language and ran under the WAITS operating system, which is similar to TOPS-10 but existed only on SAIL (a dual processor KA10/PDP-6 system). It was and is called SPELL on that machine. It later was modified to run under Tenex and TOPS-20.

[Ralph mentions that SPELL was also ported to MIT's ITS and TOPS-10.]

The Tenex version of ispell was later revised by W. E. Matson (1974), and Bill Ackerman (1978). Bill has provided the following information:

I came across the SPELL program in 1978 on ITS. It was a port from Stanford, and had the names Ralph Gorin (approximately 1971) and Wayne Matson (1974) associated with it. I did 3 things to it:

Rewrote it as a native program for ITS, and, shortly thereafter, TOPS-20. (I never did anything for TOPS-10, and am not aware that it ever ran on TOPS-10, though it may have.)

Replaced the heuristics for suffix removal, which I found unreliable and unsatisfactory, with an algorithm that was driven by specific suffix flags in the dictionary. This way, the dictionary would have complete control over what words were legal, and there would be no spurious hits.

Apparently most importantly, though I had no idea at time, gave it the name "ISPELL", for "ITS version of spell", since I didn't consider myself authorized to throw away an existing program and overwrite it with a new one under the same name.

I have not followed the history of the program since then, and do not know if it still uses the "suffix flags" in its dictionary. But if it does, I introduced them. The Ispell algorithm that uses those flags to make accurate decisions about the legality of words was documented in great detail in James Peterson's Springer-Verlag book. (He spent a semester at MIT while working on the book, and I provided him with a lot of information and documentation at that time.)

Bill Ackerman wba@apollo.hp.com

Michael Adler adds:

I did work on ispell in 1982. Actually, I stole the ispell dictionary and suffix compression algorithm and wrote a spelling checker for CP/M in 8080 assembler that I very creatively called "SPELL." By sorting the dictionary alphabetically and using a difference encoding I managed to pack the entire dictionary that Bill was using in about 56Kb. The CP/M program read a document, sorted all the words alphabetically and then checked them. It then reread the document and compared words as it found them against the in memory, sorted and checked words. SPELL was around in the public domain on CP/M.

I was in high school at the time and talked to Bill only over email. We wound up in the same compiler group at Apollo in the late 80's by coincidence.

DEVELOPMENT OF THE C/UNIX VERSION OF ISPELL

In 1983, Pace Willisson (pace@prep.ai.mit.edu) wrote a C/Unix version from scratch, based on the ispell documentation.

In 1987, Walt Buehring revised and enhanced ispell, and posted it to the Usenet along with a dictionary. In addition, Walt wrote the first version of "ispell.el", the emacs interface.

Geoff Kuenning (geoff@ITcorp.com, that's me, and by the way I pronounce it "Kenning"; the "u" is silent) picked up this version, fixed some bugs, and added further enhancements, all of which made me the de-facto ispell maintainer for the net. I also put quite a bit of work into improving the quality of the dictionaries. In 1987 I began work on the "munchlist" script, which I originally intended to be used to add flags to personal dictionary entries. At the same time I was studying German, and wanted to use ispell to check the papers I was writing for that class. After thinking about it for some time, I realized that the suffix flags could be table-driven, which would both add flexibility and would get rid of certain difficult-to-find bugs. In 1988 I rewrote major portions of the code to do this, resulting in the first multi-lingual version. Ole Bjoern Hessen (obh@ifi.uio.no) in Norway alpha-tested this version and provided several important enhancements.

Bob Devine (vianet!devine) provided two larger dictionaries (which became the basis for english.1 and english.2) to me for inclusion with subsequent releases.

Ashwin Ram (ram@cs.yale.edu) made substantial enhancements to Walt Buehring's emacs interface, and provided them to me for inclusion with an earlier release.

The emacs interface was then completely overhauled by Ken Stevens (stevens@hplabs.hp.com), who also beta-tested the software and without whom this posting would not have been possible. If there's a feature in the emacs interface that you like, you probably have Ken to thank for it. His efforts have been tireless for many years.

Martin Boyer made major contributions to the munchlist script, including producing a version that runs under perl (see languages/Where for instructions on how to get that version). Philippe-Andre Prindeville provided xspell (a Motif-based X interface), and Moritz Willers provided a NeXTStep interface.

DEVELOPMENT AND DEATH OF ISPELL 4.0

Meanwhile, and unbeknownst to me, Pace Willisson was working on his own improvements to ispell. He focused primarily on dictionary size and startup time. His solution was a dictionary compression algorithm that detected and encoded frequent letter pairs. This also reduced the time needed to read it in. Pace also changed some internal data structures to improve startup time. Pace and I eventually discovered each other's efforts, and discussed re-merging our changes, but we decided that there would be too much work involved. This was partly because I was close to a release and didn't want to delay it with an extensive and error-prone merge.

In late 1992 (if my memory serves correctly), Richard Stallman contacted me, asking for permission to distribute ispell as part of the GNU suite. I responded that he was welcome to distribute it, but that I was not willing to place my software under the Gnu Public License. Through a misunderstanding, neither of us considered the possibility of finding a compromise license that both could live with. So Richard started a search for an alternate version, and found Pace working right in his back yard.

I have been told that when FSF first learned of Pace's version, they again considered using International Ispell instead because it was both more popular and more capable, but this idea was rejected due to the license misunderstanding. Instead, FSF enhanced Pace's version somewhat and called it ispell 4.0, apparently in the hopes that by numbering the version higher, it would become the standard.

When ispell 4.0 was released, much confusion ensued. Many ispell users innocently "upgraded" to 4.0 and then screamed when they could not find features to which they had grown accustomed. Europeans in general were angered by the apparent provincialism shown by the "dropping" of international support. I found myself inundated with questions about a version I had never heard of or seen.

One of the earliest and most common suggestions was that FSF should rename their version "gispell". This had a lot of precedent, both in the naming of other FSF utilities and in the then-recent change of the suffix used by gzip from ".z" to ".gz". Unfortunately, the FSF refused to do this. I may have inadvertently contributed to this refusal with a Usenet posting in which I tried to clarify what had happened, pointing out that the FSF version was more recently related to Pace's than my own. This may have been seen as an acknowledgment that FSF should have the rights to the name "ispell," and that I should rename my version.

A flame war arose, and I decided that the only way to solve the problem was to rename my version to eliminate the confusion. However, at about the same time Richard Stallman and I began negotiating via e-mail. We itemized and clarified his objections to my license, and I learned from a third party that FSF is willing to distribute software that falls under the University of California license (also known as the Berkeley license). Richard and I agreed that if I changed my license to be a paraphrase of the UC license, FSF would be willing to distribute my version with no changes. Since then, ispell 4.0 has been dropped by FSF and has pretty well disappeared from the net, leaving 3.1 as the version of choice for nearly everyone.

OTHER CONTRIBUTORS

Many other enhancements and bug fixes were provided by the numerous people listed below. Do not assume, because I omit mention of their specific contributions, that these persons were any less instrumental in creating the version of ispell that you see before you. Every one of them made a significant contribution, and it is only a lack of space that prevents me from detailing these contributions. This version of ispell is truly a cooperative effort, and it would not exist without the help of the generous souls listed above and below.

A full list of contributors, including those mentioned above, follows. (I think I have listed everyone, but if you contributed and aren't listed, let me know and I'll correct it):

Ivar Aavatsmark Per Abrahamsen Robert Abramovitz Bill Ackerman Michael Adler Rohit Aggarwal Jose Joao Almeida Jerry Anders Boris Aronov Yves Arrouye Michael C. B. Ashley Bertil Askelid Eric Backus Isaac Balbin Neal Becker Tony Bennett R. Bernstein Jim Berry Peter A. Bigot E. Jay Berkenbilt Benno Blumenthal Uwe Bonnes Marc Boucher Martin Boyer Ethan Bradford Nicolas Brouard Peter Bruells Ferd Brundick Jack Bryans Walt Buehring Richard Caley John D. Campbell Keith Cantrell John Capo Bill Carpenter Michael W. Chang Wei-Jou Chen Peter Chubb Stewart Clamen Henri Cohen Ken Cox Robert Crowe Damian Cugley Ian Dall Kevin Dalley David Dalton Neal Dalton Hugh Daniel Mark Davies Frederic Devernay Bob Devine Detlev Droege Steve Dum Alexander Durner Jiri Dvorak Les Earnest David Edelsohn Jeff Edmonds Eric Eide Orjan Ekeberg Kevin Ellwood Michael Ernst L. Van Eycken Rik Faith Ralf Fassel George Ferguson Jeff Finger Werner Fink John Fitch Peter Flatau Ralph. E. Gorin Amos A. Gouaux Michael Gschwind Bhusan Gupta Michael A. Guravage Chris Hadley Mark Hanning-Lee John Heidemann Arne Helme Ole Bjoern Hessen Denis Howe Joe Huber Brian Hunt imt3b2!imtsft (true name unknown) Lester Ingber Nick Ing-Simmons Richard L. Jackson, Jr. Michal Jaegermann John Jendro Bob Jewett Trevor Jim Gary Johnson Gjalt de Jong Don Kark Dan Karron Brendan Kehoe Steve Kelem Vivek Khera Axel Kielhorn Masahiro Kitagawa Peter Knaggs Don Knuth Jim Knutson Heinz Knutzen Fred Korz Sebastian Kremer Geoff Kuenning Ralf Lammers Markus Lautenbacher Jack Lawler Cherie N. Lawrence Charles Levert Doug Lind Michael N. Lipp Ernst Lippe Richard Lloyd John Lu Dean Luick Ian MacPhedran Martin Maechler Ross Maloney Albrecht Melan Lee Melvin Evan Marcus Simon Marshall Dave Mason W. E. Matson Meinhard E. Mayer Rob McMahon Bob McQueer Dean Messing Chris Metcalf Hal Miller N.O. Monaghan Chris Moore Bernd Mueller Ulrich Mueller Guido Muesch Peter Mutsaers Erik Toubro Nielsen Gaute Nessan Keith Neufeld Paul Nevai David Neves Mike Ogush Thorstein Ohl Piet van Oostrum Joe Orost Pham Dinh-Tuan Gildas Perrot Francois Pinard Israel Pinkas Paul Placeway Mick Pont Philippe-Andre Prindeville Gary Puckering Philippe Queinnec Ashwin Ram Bill Randle Christopher Rath Joachim Reinert Rob Riepel Marc Ries Loren J. Rittle Germic Robert Philippe Robert Doug Roberts Kevin Rodgers Hagen Ross Arie Rudich Bruno Salvy Rich Salz Julio Sanchez Paul A. Sand Ken Scales Bart Schaefer Greg Schaffer Harald Schlangmann Joachim Schrod Vernon Schryver Martin Schulz Gregory Neil Shapiro Guy Shaw David Shepherd Tom Shott Joel Shprentz Duncan Sinclair Vivek P. Singhal Klaus Singvogel George M. Sipe David M. Smith Perry Smith Luis Soltero David Spuler Richard Stallman Kevin B. Stanton Kjartan Stefansson Ken Stevens Andreas Stolcke Thos Sumner Bob Sutterfield Stefan Taxhet Gruppe Thi Thomas Tornblom Bill Triggs uddeborg@carmen.se Marc Ullman Koaunghi Un Arjan de Vet Andrew Vignaux Christoph Vogelsang Jochen Voss Peter Watkins Gray Watson Patrick Weemeeuw Petri Wessman Michael Wester Peter Whaite Jon L. White Johan Widen Fredrik Wilhelmsen Moritz Willers Pace Willisson Joerg Winckler Bill Wohler Michael J. Wolski James Woods Frank Wuebbeling Avishai Yacobi Ken Yap Benny Yih Jamie Zawinski Christos S. Zoulas