| 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 |
| Jamshid Afshar |
| 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 |
| David Brooks |
| Nicolas Brouard |
| Peter Bruells |
| Ferd Brundick |
| Jack Bryans |
| Walt Buehring |
| Richard Caley |
| John D. Campbell |
| Keith Cantrell |
| John Capo |
| Bill Carpenter |
| Jesus Carretero |
| Michael W. Chang |
| Steven Chaplin |
| 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 |
| Paul Dickson |
| Casper H.S. Dik |
| Detlev Droege |
| Steve Dum |
| Alexander Durner |
| Jiri Dvorak |
| Les Earnest |
| John Eaton |
| 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 |
| Jeffrey Friedl |
| Georg Gieseke |
| Ralph. E. Gorin |
| Amos A. Gouaux |
| Andy Gruss |
| Michael Gschwind |
| Ron Guilmette |
| Bhusan Gupta |
| Michael A. Guravage |
| Chris Hadley |
| Mark Hanning-Lee |
| John Heidemann |
| Arne Helme |
| Ole Bjoern Hessen |
| Karl Heuer |
| Juergen A. Holm |
| 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 |
| Torbjoern Lindgren |
| Michael N. Lipp |
| Ernst Lippe |
| Richard Lloyd |
| John Lu |
| Dean Luick |
| Erik Luijten |
| 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 |
| Jim Meyering |
| Hal Miller |
| N.O. Monaghan |
| Chris Moore |
| Bernd Mueller |
| Ulrich Mueller |
| Guido Muesch |
| John Murdie |
| 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 |
| Jim Prescott |
| 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 |
| Santiago Rodriguez |
| Hagen Ross |
| Jonathan Ross |
| Arie Rudich |
| Jonathan Ryshpan |
| 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 |
| Julian Thompson |
| Thomas Tornblom |
| Michael Toy |
| Bill Triggs |
| Goeran (G\366ran) Uddeborg |
| Marc Ullman |
| Koaunghi Un |
| Arjan de Vet |
| Andrew Vignaux |
| Christoph Vogelsang |
| Jochen Voss |
| David Waitzman |
| Peter Watkins |
| Gray Watson |
| Patrick Weemeeuw |
| Edward Welbourne |
| 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 |
| Peter Young |
| Jamie Zawinski |
| Christos S. Zoulas |