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.