Status of the GNU project, last updated 6 May 1991
by Richard M. Stallman

* GNU Emacs.

GNU Emacs 18.57 is the current version.  In addition to fixing several
bugs, this version has a considerable amount of rewriting just to
avoid even the slightest similarity to Gosling Emacs.  The undo
facility was completely rewritten and now holds unlimited data
temporarily, and a user-specified amount for the long term.

Berkeley is distributing GNU Emacs with the 4.3 distribution, and
numerous companies distribute it also.

Emacs 18 maintenance continues for simple bug fixes.  Version 19
approaches release, counting among its new features before and after
change hooks, source-level debugging of Emacs Lisp programs, X
selection processing, including CLIPBOARD selections, scrollbars,
support for European character sets, floating point numbers,
per-buffer mouse commands, interfacing with the X resource manager,
mouse-tracking, lisp-level binding of function keys, and multiple X
windows (`screens' to emacs).

Thanks go the Alan Carroll and the people who worked on Epoch for
generating initial feedback to a multi-windowed emacs.  Emacs 19
supports two styles of multiple windows, one with a separate screen
for the minibuffer, and another with a minibuffer attached to each
screen.

A couple of other features of Version 19 are buffer allocation, which
uses a new mechanism capable of returning storage to the system when a
buffer is killed, and a new input system--all input now arrives in the
form of Lisp objects.

Other features under consideration for later releases of Version 19
include:

** Associating property lists with regions of text in a buffer.
** Multiple font, color, and pixmaps defined by those properties.
** Different visibility conditions for the regions, and for various
   windows showing one buffer.
** Hooks to be run if point or mouse moves outside a certain range.
** Incrementally saving undo history in a file, so that recover-file
   also reinstalls buffer's undo history.
** Static menu bars, and better pop-up menus.

* Some parts of BSD are becoming free.

After years of urging from us and others, the people who maintain
Berkeley Unix have decided to release various parts of it (those which
don't contain AT&T code) separately as free software.  This includes
substantial programs which we hope to use in GNU, such as TCP/IP
support and perhaps in the future the C-shell.

These parts of BSD are now on our compiler tape.

* Berkeley and GNU project cooperating.

The upcoming 4.4BSD release will contain the C compiler suite from the
GNU project instead of those from Unix.  The reason for using GCC is that
GCC is a superior compiler, supports ANSI C, and, of course, is freely
available.

4.4BSD may contain the GAWK and BASH as well.

* Improved GAWK available.

David Trueman has written the new Systen V extensions to GAWK and the
results are now available on the compiler tape.  Meanwhile, a manual
for GAWK is now in print.

Eventually, GAWK will need small but incompatible changes to satisfy
the POSIX specification now being considered.

* Shells.

Brian Fox has completed the Bourne Again shell (BASH), an imitation of
the Korn shell.  It now has job control and both Emacs-style and
csh-style command history.

There is a good chance that the csh from BSD will be declared free
software by Berkeley, so we won't need to write that.  In any case,
BASH rather than csh will be the default shell in the GNU system.

* Kernel.

We have decided to use the MACH message-passing kernel being developed
at CMU.  The latest version of MACH is separated into a Unix emulator
and a microkernel; the latter contains no AT&T code, and that is what
we are using.

Earlier, nonfree version of Mach were covered by export restrictions,
but there are no restrictions now.

Mike Bushnell is now writing a free Unix emulation system to run on top
of Mach.  It is far from finished.

* Debugger.

Version 3 of the GNU source-level C debugger, GDB, is now released.
Version 4 is being tested and should be released sometime soon.

GDB version 3 runs on BSD 4.2 and 4.3 and on system V.  Machines
supported include the Vax, and 68000 series, the 80386, the 32000, the
sparc, and others.

There is a facility for debugging across a serial line, together with
a stub that can be included in a stand alone program to communicate
across the line with gdb.  This is designed for kernel debugging.
Work is being done on debugging across the ethernet.

GDB version 3 can read symbol tables incrementally; this results in
much faster startup and much less memory use.  It also has C++ support
and Emacs-style command editing with identifier completion.

New features in version 4 include watchpoints, support for C++
exception handling, cross-debugging (debugging one machine from a
dissimilar machine), easier porting to different binary file formats,
and more ways of communicating with the program being debugged (such
as TCP/IP).  Future versions may include programming commands (loops,
conditionals, and functions with arguments).

Work has been done on support for debugging parallel programs.  We
hope to get this and merge it eventually.

A C interpreter facility is being developed.

* C compiler.

The GNU C compiler (GCC) version 1.40 is now released.  It supports
ANSI standard C.  A review comparing an early version of GCC with two
commercial C compilers appeared in the March, 1988 issue of Unix
Review magazine.  Even at that time, it got high marks for
reliability.

The compiler performs automatic register allocation, common
subexpression elimination, invariant code motion from loops, induction
variable optimizations, constant propagation and copy propagation,
delaying popping of function call arguments, tail recursion
elimination, plus many local optimizations that are automatically
deduced from the machine description.

CPUs supported include the 680x0, Vax, 32x32, 80386, Sparc (Sun 4),
SPUR, Convex, MIPS, Tahoe, Pyramid and Alliant.

While version 1 is being maintained solely to fix bugs, new work is
being done in version 2.  It now has instruction scheduling, loop
unrolling, a certain amount of CSE between basic blocks, and a new
feature for classifying instructions.  Function-wide CSE is being
worked on.

Version 2 can generate code for the IBM PC/RT, the IBM RS/6000, the
Motorola 88000, the AMD 29000 and the TRON.  Ports for the IBM 370,
the HP Spectrum, the Intel 960, the Acorn, and the NCUBE are on their
way.  More general calling conventions are supported, so on the Sparc,
GCC can now use the standard conventions for structure arguments and
values.  Not all of the existing version 1 machine descriptions have
been updated yet; some do not work, and others need work to take full
advantage of instruction scheduling and delay slots.

Version 2 of the compiler supports three languages: C, C++ and
Objective C; the name of the source file selects the language.  (The
front end support for Objective C was donated by NeXT.)  The runtime
support needed to run Objective C programs is being written by Cygnus
Support.  A front end for Fortran is now being integrated, but this
will take some time to be available.  C has been extended to support
nested functions, nonlocal gotos, and taking the address of a label.

Front ends for Modula 3, Pascal and (slowly) Ada are being developed
by volunteers.  There are mumblings about various other languages.  So
far, no one has volunteered to write COBOL.

* GNU C for VMS.

Fed up with the deficiencies of the VMS C compiler, David Kashtan
from SRI decided to spend a couple of weeks and make GNU C run on
VMS.  After making considerable changes to satisfy the VMS C compiler,
he got it running and was able to take most of the changes out.
The VMS support code is now part of the regular compiler distribution.

The ordinary VMS C compiler (even if you have it) has bugs and
therefore cannot compile GNU C: you need an executable of GNU C.  We
offer mag tapes containing VMS binaries of GNU C (as well as sources)
so you can get started.

Other GNU programs currently working on VMS include GNU Emacs and Bison.

Please don't ask us to devote effort to additional VMS support,
because it is peripheral to the GNU project.  We merge in and support
VMS ports that users do, because it is hard to refuse to pass on work
that other people have done.  But even when the changes are clean,
this drains considerable effort from our real goal, which is to
produce a complete integrated system.  (When they aren't clean, we
summon up the courage to ignore them.)  Merging VMS GNU Emacs and
reorganizing the changes to ease future maintenance consumed several
weeks even though the "real work" was done by others.  I hope we have
learned not to let this happen again.

* Put an end to your COFF.

It is now possible to run the entire suite of GNU software tools
on system V, replacing COFF entirely.

First you install the GNU compiler, assembler, linker and other
utilities.  Then you use the program Robotussin--COFF medicine for
your computer-- to convert the system libraries from COFF format
to GNU (i.e. BSD) format.

When you compile programs, you will get ordinary GNU/BSD object files.
Linking these with the GNU linker will produce GNU/BSD executables
with a small amount of COFF header material to encapsulate them so
that the kernel can run them.  The other GNU utilities such as `size',
`nm' and `strip' know how to operate on these encapsulated files.

We can't afford to take the time to implement or even maintain actual
COFF support in these utilities.  Completing the GNU system is more
important to us.

* Compiler-related programs.

** C++.

Michael Tiemann of Cygnus Support (formerly of Stanford University and
MCC) has written a C++ compiler as an extension of GNU C.  This was
the first compiler to compile C++ directly instead of preprocessing it
into C.

A review comparing G++ with two commercial C++ compilers appeared in
the November, 1988 issue of Unix Review magazine.  The high marks
convinced us it was time to start beta testing, so C++ is included
on the compiler tape.

In version 1, C++ support consists of changes to be installed in the
sources of GCC.  These are distributed as patches.

In version 2 of the C compiler, C++ support has been fully merged: a
single make can build and install both the C compiler and the C++
compiler.

Tiemann has added exception handling to G++ version 2; this work has
been an important influence on the proposed ANSI C++ exception
handling specification.  Now work is being done to add support for
parameterized types.

GDB version 3 includes support for debugging C++ code.

** Assembler.

We have a partially-portable one pass assembler that is almost twice
as fast as the Unix assembler.  It now works for Vaxes, 680x0, 32x32
80386 and Sparc.  Porting it to other machines should not be hard.

** Object file utilities.

The GNU replacements for `ld', `nm', `size', `gprof', `strip', etc.
are distributed on the compiler tape.

The GNU linker `ld' runs significantly faster than the BSD version.
Our `ld' is the only one which will give you source-line numbered
error messages for multiply-defined symbols and undefined references.

We also have a dynamic linker, `dld', written by W. Wilson Ho.

** GNU Make extended.

GNU Make version 3.59 is now current.  Version 3 is being maintained
only for bug fixes, but some new features will be added when version 4
is available.

Here is how a GNU Makefile can say that the file `foo' is linked
from the object files of all C source files in the current directory:

   objects:=$(subst .c,.o,$(wildcard *.c))
   foo: $(objects)
           $(CC) -o foo $(objects) $(LDFLAGS)

GNU Make also supports parallel command execution for the sake of
machines with multiple processors.

** C library.

Roland McGrath is finishing up the C library, which should now be
being tested by a few users.  This library supports both BSD Unix and
System V, and on either system can offer either the features of POSIX
or the features of that system.

Mike Haertel has written an improved Malloc.

Kathy Hargreaves has written support for the POSIX regular expression
features, aside from those that depend on the locale.

GDBM, the GNU replacement for DBM, can access records considerably
faster than NDBM, and does not use hard-to-copy sparse files.  A GDBM
database is just one file.

** C++ library.

Doug Lea is maintaining libg++, a library for C++.

** New library license.

We recently published a new alternative Library General Public License
to cover certain GNU libraries.  This license permits linking the
libraries into proprietary executables on certain conditions.

The new library license actually represents a strategic retreat.  We
would prefer to insist as much as possible that software based on GNU
software must itself be free.  However, in the case of libraries, we
found that insisting they be used only in free software tended to
discourage use of the libraries, rather than encourage free
applications.

So, while we hope the new library license will help promote the
development of free libraries, we have to be unhappy that it was
necessary.

Version 2 of the ordinary General Public License was released along
with the Library license.  The changes are mostly clarifications, but
there are new provisions to deal with the effect of software patents.
These provisions make it possible to limit the distribution of a
particular program to countries where no patents apply.

** Profiling.

The GNU version of gprof, also called gprof, was written by Jay
Fenlason.  It is now stable.

Jim Wilson at Cygnus Support has developed additional profiling tools
that depend on new features to appear in GCC version 2.

** indent

We now have a version of indent which supports the GNU indentation
conventions for C code.  It is more robust and also has handy options
for the most common style combinations.

Doug Hadley, a volunteer, is now writing a program to examine a C
source file and determine the indentation parameters that it uses.

* Smalltalk.

GNU Smalltalk, written by volunteer Steve Byrne, was released in 1990.
It supports the language, but no graphics as yet.

* Ghostscript version 2.2 released.

Peter Deutsch, the primary author and maintainer of Ghostscript, has
released a new version of that program, together with FSF staff members
Kathryn Hargreaves and Karl Berry.  Karl and Kathy are also working on
producing free fonts.

Highlights of this release (including those of version 2.1.1, which
was on the January GNU distribution tape) include:

- Major speed improvements, especially for the X driver, compared with
  version 2.0.

- Support for all of the PostScript extended color operators, including
  colorimage.

- Much more accurate graphics algorithms.

- "Band list" technology that allows Ghostscript to drive high-resolution
  printers regardless of how much memory is available on the machine.

- `save' and `restore', which were the one major element of the
  PostScript language not implemented in previous releases.

Right now, Ghostscript will accept commands in PostScript and execute
them by drawing on an X window or writing a file that can be
transferred directly to a printer.  Several other GNU volunteers are
working on previewers for multi-page files; we expect one to be
available soon.

Ghostscript also includes a C-callable graphics library (for client
programs that don't want to deal with the PostScript language), and
also supports IBM PCs and compatibles with EGA or VGA graphics (but
don't ask the FSF staff any questions about this; we don't use PCs
and don't have time to learn anything about them).

* Finger.

We have a daemon-based finger program written by Brian Fox.  The
daemon polls all the machines at your site, and can tell you where any
person is logged in.

* Send.

The `send' program for sending immediate messages to other users on
the same machine or other machines is waiting for us to have a mailer,
so that the code to receive sends can be installed in the program to
receive mail.

* tar.

GNU tar is now available.  Jay Fenlason extended John Gilmore's
initial version so that it is suitable for file system backup and can
support multiple volume archives.  It even knows how to squeeze the
zeros out of sparse files.  We use it for all our backups.

tar comes with shell scripts that make it easy to do file system
backup.  All you do is fill in a few parameters such as the names of
the file systems to dump and the name of the tape device.

* grep, diff, sort and fgrep.

Mike Haertel really likes making programs absolutely as fast as can
be.  The egrep he wrote remains unsurpassed; he has also written a
fast fgrep.  He has also written the fastest known diff, and a very
fast sort.

* groff, the replacement for troff.

Groff is now being distributed.  Groff is GNU troff and associated
programs: at the moment it includes troff, pic, eqn, tbl, a driver for
PostScript devices, a driver producing TeX .dvi format, a driver for
typewriter-like devices, a X11 previewer (based on the X.V11R4
xditview), -man macros, -ms macros, -me macros (based on the original
Berkeley version).  Groff is written in C++.

Groff has many features not found in most versions of troff including:
long names for strings, macros, diversions, number registers,
environments, fonts; no fixed, arbitrary limits; high-quality
mathematical typesetting (using algorithms derived from TeX's); much
better error handling; pairwise kerning; high-quality hyphenation
(using TeX's hyphenation algorithm); TeX support in pic.

Work is underway on the -mm macros and refer.  Possible projects to
improve groff include: the grap preprocessor (quite a lot of code
could be borrowed from pic); the pm page-makeup postprocessor and
associated -mpm macro package.  More work is needed on the
documentation: the current documentation assumes that the user already
has documentation for the Unix versions of the programs.

* GNU mailer.

Development of Smail is stopping.  The program has the features we
want except for the queueing system, which we hoped would be replaced
by one that would group messages by destination.  Now perhaps the
queueing system from Zmailer can be adapted, or perhaps a new one has
to be written.

* Window system.

We are using the X window system written at MIT.  This system has been
available free.  Its continued availability is now threatened by two
software patents: the patent covering use of exclusive or to write on
the screen, and the AT&T patent on backing store.

These patents may make it impossible to have any usable free window
system, thus showing how important it is to eliminate software patents
if the GNU project is to have any chance of continuing.

* File utilities.

In 1990 we released the simple utilities for managing files: ls, mv,
cp, and so on.

* Parsing utilities.

We are distributing Bison, a replacement for YACC with various
improvements.  For example, it can generate reentrant parsers suitable
for recursive use.

We are also distributing `flex', a fast replacement for lex which
generates an open-coded routine rather than a table-driven one.

* Long-named options

We have started adding long-named options to many of our utilities.
For example, instead of remembering whether to use -v or -V, you can
use +verbose in all programs.  Eventually we hope to provide
completion in the shell for long option names.

* Documentation system.

We now have a truly compatible pair of programs which can convert a
manual in Texinfo format into either a printed book or an Info file.
You can read an Info file with three different programs: one runs in
Emacs, one uses ordinary terminals, and one displays through X
Windows.

Documentation is still needed for much of the GNU system.

* Emacs Lisp Manual

The long-awaited reference manual for Emacs Lisp was released in
March 1990.  A new edition was released with Emacs 18.56.

An early draft was circulated a couple of years ago, and copies may
still be present in anonymous ftp directories.  If so, we urge you to
replace them with the current version, which is far better.

* Termcap Manual.

We publish the first thorough manual for Termcap, subtitled "Twice as
much as you ever wanted to know about Termcap".

* Bison Manual.

A Bison manual is now included in the Bison distribution as Texinfo
source code.  It is both a tutorial and a reference manual, and you
can learn to use Bison with it even if you have never used a parser
generator before.

* New Texinfo Manual.

A greatly revised tutorial Texinfo manual is now in publication.

* People are giving us machines.

This year, Hewlett Packard provided six additional machines--two 486
machines and four Series 800 RISC machines.  The Open Software
Foundation provided a machine that we are using for development of the
Unix emulator on top of Mach.  IBM provided an RS/6000 which we are
using to distribute tapes specifically for that machine.

We have also received machines from Sony, Intel, NeXT, Thinking
Machines, the MACH project, and Bell Labs.

* Tech writers.

Our staff technical writers include Sandra Loosemore, Raul Acevedo and
Robert J. Chassell, are working on C library documentation, Emacs 19
documentation, and a primer for Emacs Lisp.  Volunteer Julie Sussman
is finishing up the BASH manual.

* Free Software Foundation.

The foundation exists for two purposes: to accept gifts to support GNU
development, and to carry out distribution.  We are tax exempt;
you can deduct donations to us on your tax return.

Our address is

    Free Software Foundation
    675 Mass Ave
    Cambridge, MA  02139

and our phone number is (617) 876-3296.

* Service directory.

The foundation maintains a Service Directory; a list of people who
offer service to individual users of GNU Emacs and, eventually, all
parts of the GNU system.  Service can be answering questions for new
users, customizing programs, porting to new systems, or anything else.

* Possible target machines.

GNU will require a cpu that uses 32-bit addresses and integers and
addresses to the 8-bit byte.  Virtual memory will probably be required
if we use the MACH kernel.  We aren't going to make any effort to
produce a system that would run without virtual memory.

GNU Emacs and GNU C require more than a meg of addressable memory in
the system, although a meg of physical memory may be enough if there
is virtual memory.  2 meg would make a noticeable improvement in
performance.  Many source files need more than 1 meg of virtual memory
to compile.

A hard disk will be essential; at least 30 or 40 meg will be needed to
hold a minimal system.  Plus more space for the user's files, of
course.  So you would need 80meg at the very least for a personal GNU
system, and that would be fairly cramped.  The /usr partition on one
machine here is 55 meg.  This should give you an idea of how big the
software in a GNU-like system is likely to be.

This is not to say that it will be impossible to adapt some or all of
GNU for other kinds of machines; but it may be difficult, and it isn't
part of our job to try to reduce that difficulty.

We don't keep track of specific models of microcomputer.

* Porting.

It is too early to inquire about porting GNU (except GNU Emacs and GNU C).
First, we have to finish it.
