1 | Ispell has a long and convoluted history. I have tried to track down |
---|
2 | as much as possible about it and condense it below. |
---|
3 | |
---|
4 | THE DEVELOPMENT OF SPELL-CHECKING AND THE FIRST ISPELL |
---|
5 | |
---|
6 | The following background information on spelling checkers in general, |
---|
7 | and ispell in particular, was provided to me by Les Earnest |
---|
8 | (les@dec-lite.stanford.edu): |
---|
9 | |
---|
10 | > The earliest spelling checker (of sorts) of which I am aware was in a |
---|
11 | > program that attempted to automatically receive human-keyed Morse |
---|
12 | > code, which can be ambiguous because of the variable timing between |
---|
13 | > dots, dashes, intercharacter pauses, and interword pauses. This |
---|
14 | > program didn't use a full dictionary; instead, used a table of |
---|
15 | > digraphs (two-letter sequences) that occur in English and barred |
---|
16 | > improper letter sequences. This program was written by someone at MIT |
---|
17 | > Lincoln Lab around 1959 and, I think, ran on the TX-2 computer there. |
---|
18 | > Unfortunately, I don't remember his name. I might still have the |
---|
19 | > paper he wrote in my files but it would take a major search to find it |
---|
20 | > and I might not succeed. |
---|
21 | > |
---|
22 | > A program that I wrote in 1961 to read cursive writing contained a |
---|
23 | > real spelling checker, using the 10,000 most common English words. |
---|
24 | > It is reported in: |
---|
25 | > L. Earnest, "Machine Recognition of Cursive Writing," Information |
---|
26 | > Processing 62, (Proc. IFIP Congress 1962, Munich), North-Holland, |
---|
27 | > Amsterdam, 1963. |
---|
28 | > and |
---|
29 | > N. Lindgren, ``Machine Recognition of Human Language, Part III - |
---|
30 | > Cursive Script Recognition'', IEEE Spectrum, May 1965. |
---|
31 | > |
---|
32 | > I brought that dictionary to Stanford and got a PhD student to write |
---|
33 | > a spelling checker for text in Lisp running on our PDP-6 computer at |
---|
34 | > the Stanford Artificial Intelligence Lab around 1967. |
---|
35 | > Unfortunately, I do not remember which student it was; it could have |
---|
36 | > been Gil Falk. It was a rather simple program (certainly much |
---|
37 | > simpler than the earlier cursive writing program) and I didn't think |
---|
38 | > of it as a significant development at the time. |
---|
39 | > |
---|
40 | > [Later], I got another PhD student, Ralph Gorin, to do a better and |
---|
41 | > faster spelling checker sometime in the early '70s, still using my |
---|
42 | > old dictionary. Ralph later wrote an article about it in CACM. I |
---|
43 | > believe that he later augmented the dictionary. |
---|
44 | |
---|
45 | [note: Ralph has since informed me that he wrote no such article. The |
---|
46 | program was called SPELL and was written in 1971. Ralph provided me |
---|
47 | with a reference to "Computer Programs for Spelling Correction", by |
---|
48 | James L. Peterson, Springer-Verlag, Berlin, 1980, No. 96 in the series |
---|
49 | "Lecture Notes in Computer Science." This book states that Ralph's |
---|
50 | SPELL program, which was the direct ancestor of ispell, was the first |
---|
51 | computer program written for checking the spelling of text documents. |
---|
52 | The book is also a good source of references on spelling programs.] |
---|
53 | |
---|
54 | > ... |
---|
55 | > |
---|
56 | > [Ispell] was originally written in PDP-10 assembly language and ran |
---|
57 | > under the WAITS operating system, which is similar to TOPS-10 but existed |
---|
58 | > only on SAIL (a dual processor KA10/PDP-6 system). It was and is called |
---|
59 | > SPELL on that machine. It later was modified to run under Tenex and |
---|
60 | > TOPS-20. |
---|
61 | |
---|
62 | [Ralph mentions that SPELL was also ported to MIT's ITS and TOPS-10.] |
---|
63 | |
---|
64 | The Tenex version of ispell was later revised by W. E. Matson (1974), |
---|
65 | and Bill Ackerman (1978). Bill has provided the following information: |
---|
66 | |
---|
67 | > I came across the SPELL program in 1978 on ITS. It was a port from |
---|
68 | > Stanford, and had the names Ralph Gorin (approximately 1971) and |
---|
69 | > Wayne Matson (1974) associated with it. I did 3 things to it: |
---|
70 | > |
---|
71 | > Rewrote it as a native program for ITS, and, shortly thereafter, |
---|
72 | > TOPS-20. (I never did anything for TOPS-10, and am not aware |
---|
73 | > that it ever ran on TOPS-10, though it may have.) |
---|
74 | > |
---|
75 | > Replaced the heuristics for suffix removal, which I found unreliable |
---|
76 | > and unsatisfactory, with an algorithm that was driven by specific |
---|
77 | > suffix flags in the dictionary. This way, the dictionary would have |
---|
78 | > complete control over what words were legal, and there would be no |
---|
79 | > spurious hits. |
---|
80 | > |
---|
81 | > Apparently most importantly, though I had no idea at time, gave it |
---|
82 | > the name "ISPELL", for "ITS version of spell", since I didn't |
---|
83 | > consider myself authorized to throw away an existing program |
---|
84 | > and overwrite it with a new one under the same name. |
---|
85 | > |
---|
86 | > I have not followed the history of the program since then, and do not know |
---|
87 | > if it still uses the "suffix flags" in its dictionary. But if it does, |
---|
88 | > I introduced them. The Ispell algorithm that uses those flags to make |
---|
89 | > accurate decisions about the legality of words was documented in great |
---|
90 | > detail in James Peterson's Springer-Verlag book. (He spent a semester |
---|
91 | > at MIT while working on the book, and I provided him with a lot of |
---|
92 | > information and documentation at that time.) |
---|
93 | > |
---|
94 | > Bill Ackerman |
---|
95 | > wba@apollo.hp.com |
---|
96 | |
---|
97 | Michael Adler adds: |
---|
98 | |
---|
99 | > I did work on ispell in 1982. Actually, I stole the ispell |
---|
100 | > dictionary and suffix compression algorithm and wrote a spelling |
---|
101 | > checker for CP/M in 8080 assembler that I very creatively called "SPELL." |
---|
102 | > By sorting the dictionary alphabetically and using a difference encoding |
---|
103 | > I managed to pack the entire dictionary that Bill was using in about |
---|
104 | > 56Kb. The CP/M program read a document, sorted all the words alphabetically |
---|
105 | > and then checked them. It then reread the document and compared words as |
---|
106 | > it found them against the in memory, sorted and checked words. SPELL was |
---|
107 | > around in the public domain on CP/M. |
---|
108 | > |
---|
109 | > I was in high school at the time and talked to Bill only over email. |
---|
110 | > We wound up in the same compiler group at Apollo in the late 80's by |
---|
111 | > coincidence. |
---|
112 | |
---|
113 | DEVELOPMENT OF THE C/UNIX VERSION OF ISPELL |
---|
114 | |
---|
115 | In 1983, Pace Willisson (pace@prep.ai.mit.edu) wrote a C/Unix version |
---|
116 | from scratch, based on the ispell documentation. |
---|
117 | |
---|
118 | In 1987, Walt Buehring revised and enhanced ispell, and posted it to the |
---|
119 | Usenet along with a dictionary. In addition, Walt wrote the first version |
---|
120 | of "ispell.el", the emacs interface. |
---|
121 | |
---|
122 | Geoff Kuenning (geoff@ITcorp.com, that's me, and by the way I |
---|
123 | pronounce it "Kenning"; the "u" is silent) picked up this version, |
---|
124 | fixed some bugs, and added further enhancements, all of which made me |
---|
125 | the de-facto ispell maintainer for the net. I also put quite a bit of |
---|
126 | work into improving the quality of the dictionaries. In 1987 I began |
---|
127 | work on the "munchlist" script, which I originally intended to be used |
---|
128 | to add flags to personal dictionary entries. At the same time I was |
---|
129 | studying German, and wanted to use ispell to check the papers I was |
---|
130 | writing for that class. After thinking about it for some time, I |
---|
131 | realized that the suffix flags could be table-driven, which would both |
---|
132 | add flexibility and would get rid of certain difficult-to-find bugs. |
---|
133 | In 1988 I rewrote major portions of the code to do this, resulting in |
---|
134 | the first multi-lingual version. Ole Bjoern Hessen (obh@ifi.uio.no) |
---|
135 | in Norway alpha-tested this version and provided several important |
---|
136 | enhancements. |
---|
137 | |
---|
138 | Bob Devine (vianet!devine) provided two larger dictionaries (which |
---|
139 | became the basis for english.1 and english.2) to me for inclusion |
---|
140 | with subsequent releases. |
---|
141 | |
---|
142 | Ashwin Ram (ram@cs.yale.edu) made substantial enhancements to Walt |
---|
143 | Buehring's emacs interface, and provided them to me for inclusion |
---|
144 | with an earlier release. |
---|
145 | |
---|
146 | The emacs interface was then completely overhauled by Ken Stevens |
---|
147 | (stevens@hplabs.hp.com), who also beta-tested the software and |
---|
148 | without whom this posting would not have been possible. If there's a |
---|
149 | feature in the emacs interface that you like, you probably have Ken to |
---|
150 | thank for it. His efforts have been tireless for many years. |
---|
151 | |
---|
152 | Martin Boyer made major contributions to the munchlist script, |
---|
153 | including producing a version that runs under perl (see |
---|
154 | languages/Where for instructions on how to get that version). |
---|
155 | Philippe-Andre Prindeville provided xspell (a Motif-based X |
---|
156 | interface), and Moritz Willers provided a NeXTStep interface. |
---|
157 | |
---|
158 | DEVELOPMENT AND DEATH OF ISPELL 4.0 |
---|
159 | |
---|
160 | Meanwhile, and unbeknownst to me, Pace Willisson was working on his |
---|
161 | own improvements to ispell. He focused primarily on dictionary size |
---|
162 | and startup time. His solution was a dictionary compression algorithm |
---|
163 | that detected and encoded frequent letter pairs. This also reduced |
---|
164 | the time needed to read it in. Pace also changed some internal data |
---|
165 | structures to improve startup time. Pace and I eventually discovered |
---|
166 | each other's efforts, and discussed re-merging our changes, but we |
---|
167 | decided that there would be too much work involved. This was partly |
---|
168 | because I was close to a release and didn't want to delay it with an |
---|
169 | extensive and error-prone merge. |
---|
170 | |
---|
171 | In late 1992 (if my memory serves correctly), Richard Stallman |
---|
172 | contacted me, asking for permission to distribute ispell as part of |
---|
173 | the GNU suite. I responded that he was welcome to distribute it, but |
---|
174 | that I was not willing to place my software under the Gnu Public |
---|
175 | License. Through a misunderstanding, neither of us considered the |
---|
176 | possibility of finding a compromise license that both could live with. |
---|
177 | So Richard started a search for an alternate version, and found Pace |
---|
178 | working right in his back yard. |
---|
179 | |
---|
180 | I have been told that when FSF first learned of Pace's version, they |
---|
181 | again considered using International Ispell instead because it was |
---|
182 | both more popular and more capable, but this idea was rejected due to |
---|
183 | the license misunderstanding. Instead, FSF enhanced Pace's version |
---|
184 | somewhat and called it ispell 4.0, apparently in the hopes that by |
---|
185 | numbering the version higher, it would become the standard. |
---|
186 | |
---|
187 | When ispell 4.0 was released, much confusion ensued. Many ispell |
---|
188 | users innocently "upgraded" to 4.0 and then screamed when they could |
---|
189 | not find features to which they had grown accustomed. Europeans in |
---|
190 | general were angered by the apparent provincialism shown by the |
---|
191 | "dropping" of international support. I found myself inundated with |
---|
192 | questions about a version I had never heard of or seen. |
---|
193 | |
---|
194 | One of the earliest and most common suggestions was that FSF should |
---|
195 | rename their version "gispell". This had a lot of precedent, both in |
---|
196 | the naming of other FSF utilities and in the then-recent change of the |
---|
197 | suffix used by gzip from ".z" to ".gz". Unfortunately, the FSF |
---|
198 | refused to do this. I may have inadvertently contributed to this |
---|
199 | refusal with a Usenet posting in which I tried to clarify what had |
---|
200 | happened, pointing out that the FSF version was more recently related |
---|
201 | to Pace's than my own. This may have been seen as an acknowledgment |
---|
202 | that FSF should have the rights to the name "ispell," and that I |
---|
203 | should rename my version. |
---|
204 | |
---|
205 | A flame war arose, and I decided that the only way to solve the |
---|
206 | problem was to rename my version to eliminate the confusion. However, |
---|
207 | at about the same time Richard Stallman and I began negotiating via |
---|
208 | e-mail. We itemized and clarified his objections to my license, and I |
---|
209 | learned from a third party that FSF is willing to distribute software |
---|
210 | that falls under the University of California license (also known as |
---|
211 | the Berkeley license). Richard and I agreed that if I changed my |
---|
212 | license to be a paraphrase of the UC license, FSF would be willing to |
---|
213 | distribute my version with no changes. Since then, ispell 4.0 has |
---|
214 | been dropped by FSF and has pretty well disappeared from the net, |
---|
215 | leaving 3.1 as the version of choice for nearly everyone. |
---|
216 | |
---|
217 | OTHER CONTRIBUTORS |
---|
218 | |
---|
219 | Many other enhancements and bug fixes were provided by the numerous |
---|
220 | people listed below. Do not assume, because I omit mention of their |
---|
221 | specific contributions, that these persons were any less instrumental |
---|
222 | in creating the version of ispell that you see before you. Every one |
---|
223 | of them made a significant contribution, and it is only a lack of |
---|
224 | space that prevents me from detailing these contributions. This |
---|
225 | version of ispell is truly a cooperative effort, and it would not |
---|
226 | exist without the help of the generous souls listed above and below. |
---|
227 | |
---|
228 | A full list of contributors, including those mentioned above, follows. (I |
---|
229 | think I have listed everyone, but if you contributed and aren't listed, |
---|
230 | let me know and I'll correct it): |
---|
231 | |
---|
232 | Ivar Aavatsmark |
---|
233 | Per Abrahamsen |
---|
234 | Robert Abramovitz |
---|
235 | Bill Ackerman |
---|
236 | Michael Adler |
---|
237 | Rohit Aggarwal |
---|
238 | Jose Joao Almeida |
---|
239 | Jerry Anders |
---|
240 | Boris Aronov |
---|
241 | Yves Arrouye |
---|
242 | Jamshid Afshar |
---|
243 | Michael C. B. Ashley |
---|
244 | Bertil Askelid |
---|
245 | Eric Backus |
---|
246 | Isaac Balbin |
---|
247 | Neal Becker |
---|
248 | Tony Bennett |
---|
249 | R. Bernstein |
---|
250 | Jim Berry |
---|
251 | Peter A. Bigot |
---|
252 | E. Jay Berkenbilt |
---|
253 | Benno Blumenthal |
---|
254 | Uwe Bonnes |
---|
255 | Marc Boucher |
---|
256 | Martin Boyer |
---|
257 | Ethan Bradford |
---|
258 | David Brooks |
---|
259 | Nicolas Brouard |
---|
260 | Peter Bruells |
---|
261 | Ferd Brundick |
---|
262 | Jack Bryans |
---|
263 | Walt Buehring |
---|
264 | Richard Caley |
---|
265 | John D. Campbell |
---|
266 | Keith Cantrell |
---|
267 | John Capo |
---|
268 | Bill Carpenter |
---|
269 | Jesus Carretero |
---|
270 | Michael W. Chang |
---|
271 | Steven Chaplin |
---|
272 | Wei-Jou Chen |
---|
273 | Peter Chubb |
---|
274 | Stewart Clamen |
---|
275 | Henri Cohen |
---|
276 | Ken Cox |
---|
277 | Robert Crowe |
---|
278 | Damian Cugley |
---|
279 | Ian Dall |
---|
280 | Kevin Dalley |
---|
281 | David Dalton |
---|
282 | Neal Dalton |
---|
283 | Hugh Daniel |
---|
284 | Mark Davies |
---|
285 | Frederic Devernay |
---|
286 | Bob Devine |
---|
287 | Paul Dickson |
---|
288 | Casper H.S. Dik |
---|
289 | Detlev Droege |
---|
290 | Steve Dum |
---|
291 | Alexander Durner |
---|
292 | Jiri Dvorak |
---|
293 | Les Earnest |
---|
294 | John Eaton |
---|
295 | David Edelsohn |
---|
296 | Jeff Edmonds |
---|
297 | Eric Eide |
---|
298 | Orjan Ekeberg |
---|
299 | Kevin Ellwood |
---|
300 | Michael Ernst |
---|
301 | L. Van Eycken |
---|
302 | Rik Faith |
---|
303 | Ralf Fassel |
---|
304 | George Ferguson |
---|
305 | Jeff Finger |
---|
306 | Werner Fink |
---|
307 | John Fitch |
---|
308 | Peter Flatau |
---|
309 | Jeffrey Friedl |
---|
310 | Georg Gieseke |
---|
311 | Ralph. E. Gorin |
---|
312 | Amos A. Gouaux |
---|
313 | Andy Gruss |
---|
314 | Michael Gschwind |
---|
315 | Ron Guilmette |
---|
316 | Bhusan Gupta |
---|
317 | Michael A. Guravage |
---|
318 | Chris Hadley |
---|
319 | Mark Hanning-Lee |
---|
320 | John Heidemann |
---|
321 | Arne Helme |
---|
322 | Ole Bjoern Hessen |
---|
323 | Karl Heuer |
---|
324 | Juergen A. Holm |
---|
325 | Denis Howe |
---|
326 | Joe Huber |
---|
327 | Brian Hunt |
---|
328 | imt3b2!imtsft (true name unknown) |
---|
329 | Lester Ingber |
---|
330 | Nick Ing-Simmons |
---|
331 | Richard L. Jackson, Jr. |
---|
332 | Michal Jaegermann |
---|
333 | John Jendro |
---|
334 | Bob Jewett |
---|
335 | Trevor Jim |
---|
336 | Gary Johnson |
---|
337 | Gjalt de Jong |
---|
338 | Don Kark |
---|
339 | Dan Karron |
---|
340 | Brendan Kehoe |
---|
341 | Steve Kelem |
---|
342 | Vivek Khera |
---|
343 | Axel Kielhorn |
---|
344 | Masahiro Kitagawa |
---|
345 | Peter Knaggs |
---|
346 | Don Knuth |
---|
347 | Jim Knutson |
---|
348 | Heinz Knutzen |
---|
349 | Fred Korz |
---|
350 | Sebastian Kremer |
---|
351 | Geoff Kuenning |
---|
352 | Ralf Lammers |
---|
353 | Markus Lautenbacher |
---|
354 | Jack Lawler |
---|
355 | Cherie N. Lawrence |
---|
356 | Charles Levert |
---|
357 | Doug Lind |
---|
358 | Torbjoern Lindgren |
---|
359 | Michael N. Lipp |
---|
360 | Ernst Lippe |
---|
361 | Richard Lloyd |
---|
362 | John Lu |
---|
363 | Dean Luick |
---|
364 | Erik Luijten |
---|
365 | Ian MacPhedran |
---|
366 | Martin Maechler |
---|
367 | Ross Maloney |
---|
368 | Albrecht Melan |
---|
369 | Lee Melvin |
---|
370 | Evan Marcus |
---|
371 | Simon Marshall |
---|
372 | Dave Mason |
---|
373 | W. E. Matson |
---|
374 | Meinhard E. Mayer |
---|
375 | Rob McMahon |
---|
376 | Bob McQueer |
---|
377 | Dean Messing |
---|
378 | Chris Metcalf |
---|
379 | Jim Meyering |
---|
380 | Hal Miller |
---|
381 | N.O. Monaghan |
---|
382 | Chris Moore |
---|
383 | Bernd Mueller |
---|
384 | Ulrich Mueller |
---|
385 | Guido Muesch |
---|
386 | John Murdie |
---|
387 | Peter Mutsaers |
---|
388 | Erik Toubro Nielsen |
---|
389 | Gaute Nessan |
---|
390 | Keith Neufeld |
---|
391 | Paul Nevai |
---|
392 | David Neves |
---|
393 | Mike Ogush |
---|
394 | Thorstein Ohl |
---|
395 | Piet van Oostrum |
---|
396 | Joe Orost |
---|
397 | Pham Dinh-Tuan |
---|
398 | Gildas Perrot |
---|
399 | Francois Pinard |
---|
400 | Israel Pinkas |
---|
401 | Paul Placeway |
---|
402 | Mick Pont |
---|
403 | Jim Prescott |
---|
404 | Philippe-Andre Prindeville |
---|
405 | Gary Puckering |
---|
406 | Philippe Queinnec |
---|
407 | Ashwin Ram |
---|
408 | Bill Randle |
---|
409 | Christopher Rath |
---|
410 | Joachim Reinert |
---|
411 | Rob Riepel |
---|
412 | Marc Ries |
---|
413 | Loren J. Rittle |
---|
414 | Germic Robert |
---|
415 | Philippe Robert |
---|
416 | Doug Roberts |
---|
417 | Kevin Rodgers |
---|
418 | Santiago Rodriguez |
---|
419 | Hagen Ross |
---|
420 | Jonathan Ross |
---|
421 | Arie Rudich |
---|
422 | Jonathan Ryshpan |
---|
423 | Bruno Salvy |
---|
424 | Rich Salz |
---|
425 | Julio Sanchez |
---|
426 | Paul A. Sand |
---|
427 | Ken Scales |
---|
428 | Bart Schaefer |
---|
429 | Greg Schaffer |
---|
430 | Harald Schlangmann |
---|
431 | Joachim Schrod |
---|
432 | Vernon Schryver |
---|
433 | Martin Schulz |
---|
434 | Gregory Neil Shapiro |
---|
435 | Guy Shaw |
---|
436 | David Shepherd |
---|
437 | Tom Shott |
---|
438 | Joel Shprentz |
---|
439 | Duncan Sinclair |
---|
440 | Vivek P. Singhal |
---|
441 | Klaus Singvogel |
---|
442 | George M. Sipe |
---|
443 | David M. Smith |
---|
444 | Perry Smith |
---|
445 | Luis Soltero |
---|
446 | David Spuler |
---|
447 | Richard Stallman |
---|
448 | Kevin B. Stanton |
---|
449 | Kjartan Stefansson |
---|
450 | Ken Stevens |
---|
451 | Andreas Stolcke |
---|
452 | Thos Sumner |
---|
453 | Bob Sutterfield |
---|
454 | Stefan Taxhet |
---|
455 | Gruppe Thi |
---|
456 | Julian Thompson |
---|
457 | Thomas Tornblom |
---|
458 | Michael Toy |
---|
459 | Bill Triggs |
---|
460 | Goeran (G\366ran) Uddeborg |
---|
461 | Marc Ullman |
---|
462 | Koaunghi Un |
---|
463 | Arjan de Vet |
---|
464 | Andrew Vignaux |
---|
465 | Christoph Vogelsang |
---|
466 | Jochen Voss |
---|
467 | David Waitzman |
---|
468 | Peter Watkins |
---|
469 | Gray Watson |
---|
470 | Patrick Weemeeuw |
---|
471 | Edward Welbourne |
---|
472 | Petri Wessman |
---|
473 | Michael Wester |
---|
474 | Peter Whaite |
---|
475 | Jon L. White |
---|
476 | Johan Widen |
---|
477 | Fredrik Wilhelmsen |
---|
478 | Moritz Willers |
---|
479 | Pace Willisson |
---|
480 | Joerg Winckler |
---|
481 | Bill Wohler |
---|
482 | Michael J. Wolski |
---|
483 | James Woods |
---|
484 | Frank Wuebbeling |
---|
485 | Avishai Yacobi |
---|
486 | Ken Yap |
---|
487 | Benny Yih |
---|
488 | Peter Young |
---|
489 | Jamie Zawinski |
---|
490 | Christos S. Zoulas |
---|