Fix bugs with inappropriate mixing of Lisp_Object with int.
[emacs.git] / etc / tasks.texi
blobccecbf9d749e6c69e651caba9eefebded896ba7c
1 \input texinfo @c -*-texinfo-*-
2 @c %**start of header
3 @setfilename tasks.info
4 @settitle GNU Task List
5 @c UPDATE THIS DATE WHENEVER YOU MAKE CHANGES!
6 @set lastupdate 04 July 1997
7 @c %**end of header
9 @setchapternewpage off
11 @titlepage
12 @title GNU Task List
13 @author Free Software Foundation
14 @author last updated @value{lastupdate}
15 @end titlepage
17 @ifinfo
18 @node Top, Intro, (dir), (dir)
19 @top GNU Task List
21 This file is updated automatically from @file{tasks.texi}, which was
22 last updated on @value{lastupdate}.
23 @end ifinfo
25 @menu
26 * Intro::
27 * Highest Priority::
28 * Documentation::
29 * Unix-Related Projects::
30 * Kernel Projects::
31 * Extensions::
32 * X Windows Projects::
33 * Other Projects::
34 * Compilers::
35 * Games and Recreations::
36 @end menu
38 @node Intro
39 @chapter About the GNU Task List
41 If you did not obtain this file directly from the GNU project and
42 recently, please check for a newer version.  You can ftp the task list
43 from any GNU FTP host in directory @file{/pub/gnu/tasks/}.  The task
44 list is available there in several different formats: @file{tasks.text},
45 @file{tasks.texi}, @file{tasks.info}, and @file{tasks.dvi}.  The GNU
46 HURD task list is also there in file @file{tasks.hurd}.
47 @c to fix an overfill, join the paragraphs -len
48 The task list is also available on the GNU World Wide Web server:
49 @url{http://www.gnu.ai.mit.edu/prep/tasks_toc.html}.
51 If you start working steadily on a project, please let @code{gnu@@prep}
52 know.  We might have information that could help you; we'd also like to
53 send you the GNU coding standards.
55 Because of the natural tendency for most volunteers to write programming
56 tools or programming languages, we have a comparative shortage of
57 applications useful for non-programmer users.  Therefore, we ask you to
58 consider writing such a program.
60 Typically, a new program that does a completely new job advances
61 the GNU project, and the free software community, more than an
62 improvement to an existing program.
64 Typically, new features or new programs advance the free software
65 community more, in the long run, than porting existing programs.  One
66 reason is that portable new features and programs benefit people on many
67 platforms, not just one.  At the same time, there tend to be many
68 volunteers for porting---so your help will be more valuable in other
69 areas, where volunteers are more scarce.
71 Typically, it is more useful to extend a program in functionality than
72 to improve performance.  Users who use the new functionality will
73 appreciate it very much, if they use it; but even when they benefit from
74 a performance improvement, they may not consider it very important.
76 @node Highest Priority
77 @chapter Highest Priority
79 This task list mentions a large number of tasks that would be more or
80 less useful.  With luck, at least one of them will inspire you to start
81 writing.  It's better for you to work on any task that inspires you than
82 not write free software at all.
84 But if you would like to work on what we need most, here is a list of
85 high priority projects.
87 @itemize @bullet
88 @item
89 If you are good at writing documentation, please do.
91 @item
92 If you are very good at C programming and interested in kernels, you can
93 help develop the GNU HURD, the kernel for the GNU system.  Please have a
94 look at @url{http://www.gnu.ai.mit.edu/software/hurd/hurd.html}, and
95 then get a copy of the latest HURD task list from:
97 @itemize @bullet
99 @item
100 @url{http://www.gnu.ai.mit.edu/prep/tasks.hurd.html}, via the World Wide
101 Web.
103 @item
104 @url{ftp://prep.ai.mit.edu/pub/gnu/tasks/tasks.hurd}, via anonymous FTP.
106 @item
107 @email{gnu@@prep.ai.mit.edu} via e-mail.
109 @end itemize
111 @item
112 If you are a Scheme fan, you can help develop Guile.  Please have a look
113 at the URL @url{http://www.gnu.ai.mit.edu:/software/guile/guile.html}
114 and then contact @email{guile@@gnu.ai.mit.edu}.
116 @item
117 Help develop the GNU web browser, E-scape.
119 @item
120 Help develop Windows NT emulation for GNU systems---for example, WINE.
122 @item
123 Implement the Kermit data transfer protocol.  (See below.)
125 @item
126 Develop a free compatible replacement for Qt, a graphics toolkit
127 library.
129 @item
130 Develop a substitute, which runs on GNU systems, for some very popular
131 or very important application that many non-programmers use on Windows,
132 and which has no comparable free equivalent now.
133 @end itemize
135 @node Documentation
136 @chapter Documentation
138 We very urgently need documentation for some parts of the system
139 that already exist or will exist very soon:
141 @itemize @bullet
142 @item
143 A C reference manual.  (RMS made a try at one, which you could start
144 with).
146 @item
147 A manual for Ghostscript.
149 @item
150 A manual for TCSH.
152 @item
153 A manual for PIC (the graphics formatting language).
155 @item
156 A manual for Oleo.
158 @item
159 A book on how GCC works and why various machine descriptions
160 are written as they are.
162 @item
163 A manual for programming X-window applications.
165 @item
166 Manuals for various X window managers.
168 @item
169 Reference cards for those manuals that don't have them: C
170 Compiler, Make, Texinfo, Termcap, and maybe the C Library.
172 @item
173 Many utilities need documentation, including @code{grep} and others.
174 @end itemize
176 @node Unix-Related Projects
177 @chapter Unix-Related Projects
179 @itemize @bullet
180 @item
181 An improved version of the POSIX utility @code{pax}.  There is one on
182 Usenet, but it is said to be poorly written.  Talk with
183 @code{thomas@@gnu.ai.mit.edu} about this project.
185 @ignore
186 @item
187 Modify the GNU @code{dc} program to use the math routines of GNU
188 @code{bc}.
189 @end ignore
191 @item
192 A @code{grap} preprocessor program for @code{troff}.
194 @item
195 Various other libraries.
197 @item
198 An emulation of SCCS that works using RCS.
200 @item
201 Less urgent: @code{diction}, @code{explain}, and @code{style}, or
202 something to do the same kind of job.  Compatibility with Unix is not
203 especially important for these programs.
204 @end itemize
206 @node Kernel Projects
207 @chapter Kernel-Related Projects
209 @itemize @bullet
210 @item
211 An over-the-ethernet debugger stub that will allow the kernel to be
212 debugged from GDB running on another machine.
214 This stub needs its own self-contained implementation of all protocols
215 to be used, since the GNU system will use user processes to implement
216 all but the lowest levels, and the stub won't be able to use those
217 processes.  If a simple self-contained implementation of IP and TCP is
218 impractical, it might be necessary to design a new, simple protocol
219 based directly on ethernet.  It's not crucial to support high speed or
220 communicating across gateways.
222 It might be possible to use the Mach ethernet driver code, but it would
223 need some changes.
225 @item
226 A shared memory X11 server to run under MACH is very desirable.  The
227 machine specific parts should be kept well separated.
229 @item
230 An implementation of CIFS, the ``Common Internet File System,'' for the
231 HURD.  This protocol is an offshoot of SMB.
232 @end itemize
234 @node Extensions
235 @chapter Extensions to Existing GNU Software
237 @itemize @bullet
238 @item
239 Enhance GCC.  See files @file{PROJECTS} and @file{PROBLEMS} in the GCC
240 distribution.
242 @item
243 Interface GDB to Guile, so that users can write debugging commands in
244 Scheme.  This would also make it possible to write, in Scheme, a
245 graphical interface that uses Tk and is tightly integrated into GDB.
247 @item
248 Rewrite GNU @code{sed} completely, to make it cleaner.
250 @item
251 Rewrite Automake and Deja-GNU in Scheme, so they can run in Guile.
252 Right now they are written in Perl and TCL, respectively.  There are
253 also other programs, not terribly long, which we would also like
254 to have rewritten in Scheme.
256 @item
257 Finish the partially-implemented C interpreter project.
259 @item
260 Help with the development of GNUStep, a GNU implementation of the
261 OpenStep specification.
263 @item
264 Add features to GNU Make to record the precise rule with which each file
265 was last recompiled; then recompile any file if its rule in the makefile
266 has changed.
268 @item
269 Add a few features to GNU @code{diff}, such as handling large input
270 files without reading entire files into core.
272 @item
273 An @code{nroff} macro package to simplify @code{texi2roff}.
275 @item
276 A queueing system for the mailer Smail that groups pending work by
277 destination rather than by original message.  This makes it possible
278 to schedule retries coherently for each destination.  Talk to
279 @code{tron@@veritas.com} about this.
281 Smail also needs a new chief maintainer.
283 @item
284 Enhanced cross-reference browsing tools.  (We now have something at
285 about the level of @code{cxref}.)  We also could use something like
286 @code{ctrace}.  (Some people are now working on this project.)
287 @end itemize
289 @node X Windows Projects
290 @chapter X Windows Projects
292 @itemize @bullet
293 @item
294 An emulator for Macintosh graphics calls on top of X Windows.
296 @item
297 A music playing and editing system.
299 @item
300 High-quality music compression software.
301 (Talk with phr@@netcom.com for relevant suggestions.)
303 @item
304 A program to play sound distributed in ``Real Audio'' format.
306 @item
307 A program to generate ``Real Audio'' format from audio input.
309 @item
310 A program to edit dance notation (such as labanotation) and display
311 dancers moving on the screen.
313 @item
314 Port the Vibrant toolkit to work on X without using Motif.
316 @item
317 A program to display and edit Hypercard stacks.
319 @item
320 A paint program, supporting both bitmap-oriented operations and
321 component-oriented operations.  @code{xpaint} exists, but isn't very
322 usable.
324 @item
325 A vector-based drawing program in the spirit of Adobe Illustrator
326 and Corel Draw.
328 @item
329 An interactive 3D modeling utility with rendering/raytracing capabilities.
331 @item
332 A program for graphic morphing of scanned photographs.
333 @end itemize
335 @node Other Projects
336 @chapter Other Projects
338 If you think of others that should be added, please
339 send them to @code{gnu@@prep.ai.mit.edu}.
341 @itemize @bullet
342 @item
343 A free program for public-key encryption.
345 This program should use the Diffie-Helman algorithm for public key
346 encryption, not the RSA algorithm, because the Diffie-Helman patent in
347 the US will expire in 1997.  It should use triple-DES, not IDEA, for
348 block encryption, because IDEA is patented in many countries and the
349 patents will not expire soon.
351 In other respects, it should be like PGP.  If the new version of PGP
352 no longer uses RSA and IDEA, compatibility with it may be feasible.
354 There is a suggestion that the Blowfish algorithm might be a good choice
355 for the non-public-key block encryption.  I'm not an encryption expert
356 so I don't have an opinion about that.
358 This program needs to be written by someone who is not a US citizen,
359 outside the US, to avoid problems with US export control law.
361 Many people believe that PGP is free software, but that is not actually
362 true.  The distribution terms do not allow everyone to use and
363 redistribute it.  We used to think that these restrictions had been
364 imposed by the patent holders for the RSA and IDEA algorithms, and that
365 PGP could be free software if these algorithms were replaced by
366 alternatives.  But we have since learned that the owners of PGP are
367 themselves unwilling to make it free software.  Writing a new program is
368 the only way to get free software for this job.
370 @item
371 A free secure telnet program more or less like ssh/sshd.  Since this
372 requires a public key encryption algorithm, it is closely related to the
373 preceding item.
375 This program should follow the draft standard for ssh.  As always, it
376 cannot implement the RSA algorithm, but must instead support the
377 alternatives that will be patent-free in late 1997.  It cannot support
378 IDEA, but can use triple-DES and/or Blowfish or other non-patented
379 alternatives.
381 @item
382 Free software for doing secure commercial transactions on the web.
383 This too needs public key encryption.
385 @item
386 A free program that can transfer files on a serial line
387 using the same protocol that Kermit uses.
389 @item
390 An imitation of Page Maker or Ventura Publisher.
392 @item
393 An imitation of @code{dbase2} or @code{dbase3} (How dbased!)
395 @item
396 A bulletin board system.  There are a few free ones, but they don't have
397 all the features that people want in such systems.  It would make sense
398 to start with an existing one and add the other features.
400 @item
401 A general ledger program, including support for accounts payable, 
402 account receivables, payroll, inventory control, order processing, etc.
404 @item
405 A teleconferencing program which does the job of CU-SeeMe (which is,
406 alas, not free software).
408 @item
409 A program to typeset C code for printing.
410 For ideas on what to do, see the book,
412 @display
413 Human Factors and Typography for More Readable Programs,
414 Ronald M. Baecker and Aaron Marcus,
415 Addison-Wesley, ISBN 0-201-10745-7
416 @end display
418 (I don't quite agree with a few of the details they propose.)
420 @item
421 A program to convert Microsoft Word documents to text/enriched, TeX,
422 LaTeX, Texinfo, or some other format that free software can edit.
424 @item
425 A free replacement for the semi-free Qt library.
427 @item
428 Speech-generation programs (there is a program from Brown U that you
429 could improve).
431 @item
432 Speech-recognition programs (single-speaker, disconnected speech is sufficient).
434 @item
435 More scientific mathematical subroutines.
436 (A clone of SPSS is being written already.)
438 @item
439 Statistical tools.
441 @item
442 A scientific data collection and processing tool,
443 perhaps something like Scientific Workbench and/or Khoros,
445 @item
446 Software to replace card catalogues in libraries.
448 @item
449 Grammar and style checking programs.
451 @item
452 An implementation of the S language (an interpreted language used for
453 statistics).
455 @item
456 A translator from Scheme to C.
458 @item
459 A fast emulator for the i386 which works by translating
460 machine instructions into the machine language of the host machine.
461 (Support for emulation of other machines would enhance the program
462 but might make it much more difficult.)
464 @item
465 Optical character recognition programs; especially if suitable for
466 scanning documents with multiple fonts and capturing font info as well
467 as character codes.  Work is being done on this, but more help is needed.
469 @item
470 A program to scan a line drawing and convert it to Postscript.
472 @item
473 A program to recognize handwriting.
475 @item
476 A pen based interface.
478 @item
479 CAD software, such as a vague imitation of Autocad.
480 @end itemize
482 @node Compilers
483 @chapter Compilers for Other Batch Languages
485 Volunteers are needed to write parsers/front ends for languages such as
486 Algol 60, Algol 68, PL/I, Cobol, Fortran 90, Eiffel, or whatever, to be
487 used with the code generation phases of the GNU C compiler.
489 @c Fortran status is here so gnu@prep and the volunteer coordinators
490 @c don't have to answer the question -len
491 You can get the status of the Fortran front end with this command:
493 @example
494 finger -l fortran@@gnu.ai.mit.edu
495 @end example
497 @node Games and Recreations
498 @chapter Games and Recreations
500 Video-oriented games that work with the X window system.
502 @itemize @bullet
503 @item
504 A Doom-compatible display game engine, for running the many free
505 levels people have written for Doom.
507 @item
508 Empire (there is a free version but it needs upgrading)
510 @item
511 An ``empire builder'' system that makes it easy to write various kinds of
512 simulation games.
514 @item
515 Improve GnuGo, which is not yet very sophisticated.
517 @item
518 Imitations of popular video games:
520 @itemize -
521 @item
522 Space war, Asteroids, Pong, Columns.
523 @item
524 Defending cities from missiles.
525 @item
526 Plane shoots at lots of other planes, tanks, etc.
527 @item
528 Wizard fights fanciful monster.
529 @item
530 A golf game.
531 @item
532 Program a robot by sticking building blocks together,
533 then watch it explore a world.
534 @item
535 Biomorph evolution (as in Scientific American and @cite{The Blind
536 Watchmaker}).
537 @item
538 A program to display effects of moving at relativistic speeds.
539 @end itemize
541 @item
542 Intriguing screen-saver programs to make interesting pictures.
543 Other such programs that are simply entertaining to watch.
544 For example, an aquarium.
545 @end itemize
547 We do not need @code{rogue}, as we have @code{hack}.
549 @contents
551 @bye