GNU Task List
*************

This file is updated automatically from `tasks.texi', which was last
updated on 04 July 1997.

About the GNU Task List
***********************

If you did not obtain this file directly from the GNU project and
recently, please check for a newer version.  You can ftp the task list
from any GNU FTP host in directory `/pub/gnu/tasks/'.  The task list is
available there in several different formats: `tasks.text',
`tasks.texi', `tasks.info', and `tasks.dvi'.  The GNU HURD task list is
also there in file `tasks.hurd'.  The task list is also available on
the GNU World Wide Web server:
`http://www.gnu.ai.mit.edu/prep/tasks_toc.html'.

If you start working steadily on a project, please let `gnu@prep' know.
We might have information that could help you; we'd also like to send
you the GNU coding standards.

Because of the natural tendency for most volunteers to write programming
tools or programming languages, we have a comparative shortage of
applications useful for non-programmer users.  Therefore, we ask you to
consider writing such a program.

Typically, a new program that does a completely new job advances the
GNU project, and the free software community, more than an improvement
to an existing program.

Typically, new features or new programs advance the free software
community more, in the long run, than porting existing programs.  One
reason is that portable new features and programs benefit people on many
platforms, not just one.  At the same time, there tend to be many
volunteers for porting--so your help will be more valuable in other
areas, where volunteers are more scarce.

Typically, it is more useful to extend a program in functionality than
to improve performance.  Users who use the new functionality will
appreciate it very much, if they use it; but even when they benefit from
a performance improvement, they may not consider it very important.

Highest Priority
****************

This task list mentions a large number of tasks that would be more or
less useful.  With luck, at least one of them will inspire you to start
writing.  It's better for you to work on any task that inspires you than
not write free software at all.

But if you would like to work on what we need most, here is a list of
high priority projects.

   * If you are good at writing documentation, please do.

   * If you are very good at C programming and interested in kernels,
     you can help develop the GNU HURD, the kernel for the GNU system.
     Please have a look at
     `http://www.gnu.ai.mit.edu/software/hurd/hurd.html', and then get
     a copy of the latest HURD task list from:

        * `http://www.gnu.ai.mit.edu/prep/tasks.hurd.html', via the
          World Wide Web.

        * `ftp://prep.ai.mit.edu/pub/gnu/tasks/tasks.hurd', via
          anonymous FTP.

        * <gnu@prep.ai.mit.edu> via e-mail.

   * If you are a Scheme fan, you can help develop Guile.  Please have
     a look at the URL
     `http://www.gnu.ai.mit.edu:/software/guile/guile.html' and then
     contact <guile@gnu.ai.mit.edu>.

   * Help develop the GNU web browser, E-scape.

   * Help develop Windows NT emulation for GNU systems--for example,
     WINE.

   * Implement the Kermit data transfer protocol.  (See below.)

   * Develop a free compatible replacement for Qt, a graphics toolkit
     library.

   * Develop a substitute, which runs on GNU systems, for some very
     popular or very important application that many non-programmers
     use on Windows, and which has no comparable free equivalent now.

Documentation
*************

We very urgently need documentation for some parts of the system that
already exist or will exist very soon:

   * A C reference manual.  (RMS made a try at one, which you could
     start with).

   * A manual for Ghostscript.

   * A manual for TCSH.

   * A manual for PIC (the graphics formatting language).

   * A manual for Oleo.

   * A book on how GCC works and why various machine descriptions are
     written as they are.

   * A manual for programming X-window applications.

   * Manuals for various X window managers.

   * Reference cards for those manuals that don't have them: C
     Compiler, Make, Texinfo, Termcap, and maybe the C Library.

   * Many utilities need documentation, including `grep' and others.

Unix-Related Projects
*********************

   * An improved version of the POSIX utility `pax'.  There is one on
     Usenet, but it is said to be poorly written.  Talk with
     `thomas@gnu.ai.mit.edu' about this project.

   * A `grap' preprocessor program for `troff'.

   * Various other libraries.

   * An emulation of SCCS that works using RCS.

   * Less urgent: `diction', `explain', and `style', or something to do
     the same kind of job.  Compatibility with Unix is not especially
     important for these programs.

Kernel-Related Projects
***********************

   * An over-the-ethernet debugger stub that will allow the kernel to be
     debugged from GDB running on another machine.

     This stub needs its own self-contained implementation of all
     protocols to be used, since the GNU system will use user processes
     to implement all but the lowest levels, and the stub won't be able
     to use those processes.  If a simple self-contained implementation
     of IP and TCP is impractical, it might be necessary to design a
     new, simple protocol based directly on ethernet.  It's not crucial
     to support high speed or communicating across gateways.

     It might be possible to use the Mach ethernet driver code, but it
     would need some changes.

   * A shared memory X11 server to run under MACH is very desirable.
     The machine specific parts should be kept well separated.

   * An implementation of CIFS, the "Common Internet File System," for
     the HURD.  This protocol is an offshoot of SMB.

Extensions to Existing GNU Software
***********************************

   * Enhance GCC.  See files `PROJECTS' and `PROBLEMS' in the GCC
     distribution.

   * Interface GDB to Guile, so that users can write debugging commands
     in Scheme.  This would also make it possible to write, in Scheme, a
     graphical interface that uses Tk and is tightly integrated into
     GDB.

   * Rewrite GNU `sed' completely, to make it cleaner.

   * Rewrite Automake and Deja-GNU in Scheme, so they can run in Guile.
     Right now they are written in Perl and TCL, respectively.  There
     are also other programs, not terribly long, which we would also
     like to have rewritten in Scheme.

   * Finish the partially-implemented C interpreter project.

   * Help with the development of GNUStep, a GNU implementation of the
     OpenStep specification.

   * Add features to GNU Make to record the precise rule with which
     each file was last recompiled; then recompile any file if its rule
     in the makefile has changed.

   * Add a few features to GNU `diff', such as handling large input
     files without reading entire files into core.

   * An `nroff' macro package to simplify `texi2roff'.

   * A queueing system for the mailer Smail that groups pending work by
     destination rather than by original message.  This makes it
     possible to schedule retries coherently for each destination.
     Talk to `tron@veritas.com' about this.

     Smail also needs a new chief maintainer.

   * Enhanced cross-reference browsing tools.  (We now have something at
     about the level of `cxref'.)  We also could use something like
     `ctrace'.  (Some people are now working on this project.)

X Windows Projects
******************

   * An emulator for Macintosh graphics calls on top of X Windows.

   * A music playing and editing system.

   * High-quality music compression software.  (Talk with
     phr@netcom.com for relevant suggestions.)

   * A program to play sound distributed in "Real Audio" format.

   * A program to generate "Real Audio" format from audio input.

   * A program to edit dance notation (such as labanotation) and display
     dancers moving on the screen.

   * Port the Vibrant toolkit to work on X without using Motif.

   * A program to display and edit Hypercard stacks.

   * A paint program, supporting both bitmap-oriented operations and
     component-oriented operations.  `xpaint' exists, but isn't very
     usable.

   * A vector-based drawing program in the spirit of Adobe Illustrator
     and Corel Draw.

   * An interactive 3D modeling utility with rendering/raytracing
     capabilities.

   * A program for graphic morphing of scanned photographs.

Other Projects
**************

If you think of others that should be added, please send them to
`gnu@prep.ai.mit.edu'.

   * A free program for public-key encryption.

     This program should use the Diffie-Helman algorithm for public key
     encryption, not the RSA algorithm, because the Diffie-Helman
     patent in the US will expire in 1997.  It should use triple-DES,
     not IDEA, for block encryption, because IDEA is patented in many
     countries and the patents will not expire soon.

     In other respects, it should be like PGP.  If the new version of
     PGP no longer uses RSA and IDEA, compatibility with it may be
     feasible.

     There is a suggestion that the Blowfish algorithm might be a good
     choice for the non-public-key block encryption.  I'm not an
     encryption expert so I don't have an opinion about that.

     This program needs to be written by someone who is not a US
     citizen, outside the US, to avoid problems with US export control
     law.

     Many people believe that PGP is free software, but that is not
     actually true.  The distribution terms do not allow everyone to
     use and redistribute it.  We used to think that these restrictions
     had been imposed by the patent holders for the RSA and IDEA
     algorithms, and that PGP could be free software if these
     algorithms were replaced by alternatives.  But we have since
     learned that the owners of PGP are themselves unwilling to make it
     free software.  Writing a new program is the only way to get free
     software for this job.

   * A free secure telnet program more or less like ssh/sshd.  Since
     this requires a public key encryption algorithm, it is closely
     related to the preceding item.

     This program should follow the draft standard for ssh.  As always,
     it cannot implement the RSA algorithm, but must instead support the
     alternatives that will be patent-free in late 1997.  It cannot
     support IDEA, but can use triple-DES and/or Blowfish or other
     non-patented alternatives.

   * Free software for doing secure commercial transactions on the web.
     This too needs public key encryption.

   * A free program that can transfer files on a serial line using the
     same protocol that Kermit uses.

   * An imitation of Page Maker or Ventura Publisher.

   * An imitation of `dbase2' or `dbase3' (How dbased!)

   * A bulletin board system.  There are a few free ones, but they
     don't have all the features that people want in such systems.  It
     would make sense to start with an existing one and add the other
     features.

   * A general ledger program, including support for accounts payable,
     account receivables, payroll, inventory control, order processing,
     etc.

   * A teleconferencing program which does the job of CU-SeeMe (which
     is, alas, not free software).

   * A program to typeset C code for printing.  For ideas on what to
     do, see the book,

          Human Factors and Typography for More Readable Programs,
          Ronald M. Baecker and Aaron Marcus,
          Addison-Wesley, ISBN 0-201-10745-7

     (I don't quite agree with a few of the details they propose.)

   * A program to convert Microsoft Word documents to text/enriched,
     TeX, LaTeX, Texinfo, or some other format that free software can
     edit.

   * A free replacement for the semi-free Qt library.

   * Speech-generation programs (there is a program from Brown U that
     you could improve).

   * Speech-recognition programs (single-speaker, disconnected speech
     is sufficient).

   * More scientific mathematical subroutines.  (A clone of SPSS is
     being written already.)

   * Statistical tools.

   * A scientific data collection and processing tool, perhaps
     something like Scientific Workbench and/or Khoros,

   * Software to replace card catalogues in libraries.

   * Grammar and style checking programs.

   * An implementation of the S language (an interpreted language used
     for statistics).

   * A translator from Scheme to C.

   * A fast emulator for the i386 which works by translating machine
     instructions into the machine language of the host machine.
     (Support for emulation of other machines would enhance the program
     but might make it much more difficult.)

   * Optical character recognition programs; especially if suitable for
     scanning documents with multiple fonts and capturing font info as
     well as character codes.  Work is being done on this, but more
     help is needed.

   * A program to scan a line drawing and convert it to Postscript.

   * A program to recognize handwriting.

   * A pen based interface.

   * CAD software, such as a vague imitation of Autocad.

Compilers for Other Batch Languages
***********************************

Volunteers are needed to write parsers/front ends for languages such as
Algol 60, Algol 68, PL/I, Cobol, Fortran 90, Eiffel, or whatever, to be
used with the code generation phases of the GNU C compiler.

You can get the status of the Fortran front end with this command:

     finger -l fortran@gnu.ai.mit.edu

Games and Recreations
*********************

Video-oriented games that work with the X window system.

   * A Doom-compatible display game engine, for running the many free
     levels people have written for Doom.

   * Empire (there is a free version but it needs upgrading)

   * An "empire builder" system that makes it easy to write various
     kinds of simulation games.

   * Improve GnuGo, which is not yet very sophisticated.

   * Imitations of popular video games:

        - Space war, Asteroids, Pong, Columns.

        - Defending cities from missiles.

        - Plane shoots at lots of other planes, tanks, etc.

        - Wizard fights fanciful monster.

        - A golf game.

        - Program a robot by sticking building blocks together, then
          watch it explore a world.

        - Biomorph evolution (as in Scientific American and `The Blind
          Watchmaker').

        - A program to display effects of moving at relativistic speeds.

   * Intriguing screen-saver programs to make interesting pictures.
     Other such programs that are simply entertaining to watch.  For
     example, an aquarium.

We do not need `rogue', as we have `hack'.