GNU software

The Free Software Foundation puts together a complete, integrated software system named “GNU” that will be upwardly compatible with UNIX. Most parts of this system are already in place and the FSF distributes them freely.

GNU helps us (SEP) to distribute our reproducible research. To communicate our research in computational aspects of seismic data processing, we write reproducible research documents. Such a reproducible research document enables a reader to remove and recompute the document's results on her own UNIX workstation.

A reproducible document relies on a set of computer tools and utilities. Many of them are available on standard UNIX workstation. But if a tool is missing, or if we need a special version of a tool, we use the corresponding GNU program to fill the gap. In other words, GNU enables us to freely distribute a miniature copy of the SEP research laboratory, the SEP environment.

The SEP environment requires all GNU programs listed in the section “Essential at SEP.” If you want to install the SEP environment on your system, but your workstation lacks any of these GNU tools, you need to download and install them.

In general, should you encounter installation problems with SEP software on your system, you may be able to work around it by installing the GNU version of whatever is giving you a problem. Since SEP software is suppose to install in a GNU environment, you should be able to complete your installation.

Currently, we distribute the SEP research and environment on CD-ROMs, but in the future we hope that we can use the Web.


We usually ftp the GNU packages we need from one of GNU's main FTP hosts:


Below I describe most of the GNU software available at SEP. To be able to install the SEP environment you need the GNU tools listed in the first category, Essential at SEP. The second category contains a list of tools that we find important. A third category states programs we consider helpful. A final category lists a few programs that we find interesting enough to play around with them.

For each program I characterize each package (based on the GNU bulletin of June 1995) and briefly state how it relates to the SEP environment.

Essential at SEP

  • GNU make
    Our SEPlib installation and the reproducible document rules expect GNU make. Currently, SEP distributes an enhanced GNU make (tar.gz) version (3.74) that is not yet available on the official sites. This enhanced version is needed to implement reproducible document rules.
    In general, GNU make (McGrath), like most the utilities released by the Free Software Foundation, is an emulation of the standard version but rewritten totally from the ground up, along with some common extensions. GNU make's major extensions are:
    • Conditional evaluation of rules and macros, similar to conditional compilation to C preprocessor.
    • Parallel execution.
    • Functions for manipulating strings and macros, e.g. “${dir $(OBJS)}” evaluates to the directory portions of the filenames in “$(OBJS)”.
    • A sophisticated viewpath “VPATH” feature, letting you tie particular directories to particular sets of files.
    • A broader form of pattern-matching in filenames (Former cake users may not find it broad enough though).
    • Supplying the missing link in backward chaining.
    • Some built-in default rules for some standard tools and languages, such as RCS and C.
  • gzip
    SEP uses gzip to compress many of the software that it distributes over the Web.
    GNU's compression program, gzip, offers users a choice between fast or compact compression. It uses an unpatented algorithm which generally produces better results than the standard UNIX compression program. Nevertheless, it also expands LZW-compressed files and files compressed with System V's pack program.
  • gawk
    SEP includes gawk in its SEPlib distribution to be independent from platform specific awk versions.
    Gawk, GNU's version of the UNIX pattern scanning and processing language, is upwardly compatible with the latest POSIX specification of awk.

Important at SEP

  • ghostscript and ghostview
    SEP uses the Ghostview and Ghostscript combination to view its postscript files and to display its postscript figures when viewing its latex documents with xtex. I wish ghostview would enable us to issue system calls by pressing ghostview buttons similar to buttons of the dvi viewer xtex.
    The GNU release of Ghostscript is an interpreter for the Postscript graphics language. Ghostscript executes commands in the Postscript language by writing directly to a printer, drawing on an X window, writing of a file for later printing (or a bitmap file that you can manipulate with other graphics programs). Additionally, Ghostscript includes a C-callable graphics library for client programs that do not want to deal with the Postscript language. It also supports PC's with EGA, VGA, or SuperVGA graphics.
    Tim Theisen's ( Ghostview is a previewer for multi-page files with an X user interface. Ghostview and Ghostscript work together to display Postscript.
  • g77
    The GNU Fortran front end (Craig Burley) is stable, but work is needed to bring its overall packaging, feature set, and performance up to the levels the Fortran community expects. Tasks to be done includes writing documentation, improving diagnostics, speeding up compilation, implementing “integer*2, integer*8”, and similar features. To contact the developer or get the current status of g77 write or finger “”.
    Since some UNIX workstations do not include Fortran compilers, SEP tries to ensure that g77 compiles its Fortran code.
  • gcc
    SEP used the GNU C compiler extensively for its C++ work.
    The GNU C compiler (Richard Stallman) supports C, C++, and Objective-C. GCC (the C compiler) supports full ANSI C, traditional C, and GNU C extensions. G++ is kept compatible with the evolving draft ANSI standard.

Helpful at SEP

  • perl
    SEP has many powerful scripts written in Perl (especially for testing and its reproducible documents).
    Perl (Larry Wall) is a scripting language that combines the features and capabilities of sed, awk, sh, and C, as well as interfaces to UNIX system calls and many C library routines. It is a powerful but difficult to tame.
    I am still looking for a introductory book of the quality of Kernighan's awk book. Currently, I suggest you read the first 3 chapters of O'Reilly's “Perl” by Larry Wall and Randal Schwartz, which makes overall a good reference book.
  • RCS
    SEP uses RCS to internally manage its seismic processing package, SEPlib, its make rules, and its script library.
    The Revision Control System facilitates easy version control and management of software projects.
    I sometimes wonder if we should not use CVS rather than RCS for SEPlib. RCS is based on single directories (and therefore perfect for managing the make rules or script directories), while CVS has a notion of directory trees. Promax is using CVS.
  • emacs
    At SEP about half of the researchers use the emacs editor. I like emacs because of its email and news extensions (I have not tried its web extension), its handling of files edited by two users simultaneously, its colorful editing modes (e.g. for C programs), its GNU documentation (info) mode, its ftp support, and quite a few other things. However, emacs is slow to startup (but I start it only once in the morning) and the X Window emacs version needs about 2 M-Bytes of memory (but I usually have sufficient memory available).
    Emacs (Richard Stallman, Karl Heuer) is an extensible, customizable real-time display editor and computing environment. It offers Lisp for writing extensions and provides an interface to the X Window System. It also runs on MS-DOS and Windows NT. It can emulate vi (which nevertheless does not prevent an vi versus Emacs feud).
  • gdb
    The GNU Debugger is a source level debugger for C, C++, and Fortran. It works with executables of many different compilers. However, C++ debugging will have some limitations if you do not use GCC. Emacs comes with a GDB mode.
  • bash
    GNU's shell (Bourne Again Shell) is compatible with the UNIX sh (POSIX specifications) and offers many extensions found in csh and ksh. BASH has csh's command history, command-line editing (with emacs and vi modes).
    Currently, SEP's setup is still csh based, but I hope that will change one day, since the Bourne shell family seems to be more portable and is the basis of System V. The future SEPlib setup would be fully sh or bash compatible.
  • ispell
    Ispell is an interactive spell checker that suggests “near-misses” to replaces unrecognized words. System, user-maintained, or file specific dictionaries for multiple languages can be used. I use its emacs interface but a stand-alone interface is available. I have not yet installed the German dictionary.
  • less
    less does the job of more, but better: for example you can page backwards.
  • texinfo
    Texinfo is a set of utilities (“ makeinfo, info, texi2dvi” etc.) which generate both printed manuals and online hypertext documentation (called “info”). I use emacs for reading “info” documentation but at SEP we also have installed a stand-alone an X Window based reader “xinfo”.
  • binutils, fileutils, textutils
    GNU offers a platform independent alternative of most standard UNIX commands and utilities. These utilities seem to be of high quality (as demonstrated by Barton Miller's article).
    The binutils includes: “ar, gas, gprof, ld, nm, ranlib, size, strip” and more.
    The fileutils programs work on files: “chgrp, chmod, chown, cp, dd, df, du, install, ln, ls, mv, rm, rmdir, sync, touch” and more.
    The textutils programs manipulate textual data: “cat, cksum, cut, expand, head, join, sort, split, taill, tr, uniq, wc” and more.

Maybe at SEP

  • gnuplot and GNU Graphics
    Gnuplot is an interactive program for plotting mathematical expressions and data. It plots curves and surfaces. GNU Graphics (Rich Murphey: produces x-y plots from ASCII or binary data. It outputs in Postscript, Tektronix 4010 compatible, and UNIX device-independent “plot” formats.
    SEP has its own fantastic graphics package, Vplot, that we freely distribute. I wish we could distribute Vplot through GNU: we would benefit from GNU user expertise for the future maintenance and development of Vplot and simultaneously we would help users that need a good, free graphics solution.
  • octave jacal
    Octave is a high-level language similar to Matlab, primarily intended for numerical computations. Octave does arithmetic for real and complex scalars and matrices, solves sets of nonlinear algebraic equations, integrates systems of ordinary differential and differential-algebraic equations, and integrates functions over finite and infinite intervals.
    Jacal (Aubrey Jaffer) is a symbolic mathematics system for the manipulation and simplification of equations, single and multiple-valued algebraic expressions made up of numbers, variables, and radicals, differential operators, and algebraic as well as holonomic functions. Vectors, matrices, and tensors of these objects are supported.
    I would like to combine Jacal, Octave, and gnuplot to a freely distributable system that is similar to Mathematica. Currently, several other researcher at SEP and I are using Mathematica.
  • genscript
    Genscript is a drop-in replacement for the enscript program. Genscript converts ASCII files to Postscript and stores generated output to a file or sends it directly to the printer.

GNU documentation

GNU's documentation is TeX based and can be printed out or viewed online. The hyper-linked online version is accessible through emacs or the stand-alone executables “info” or “xinfo”. (I wish GNU would create web pages as documentation.) Additionally, most (all?) GNU programs print a short self documentation when invoked with a “–help” flag. Only a few GNU programs come additionally with standard UNIX man pages.


Since GNU software is by definition platform independent, it adheres to POSIX and ANSI standards (GNU programs often, however, offer a wide range of enhancements beyond the basic standards and the user needs to set flags such as “-ansi -Wall” to force the GNU tools such as gcc to strict adherence of these standards). Compiling or interpreting software using GNU tools (such as gcc, g77, gawk, etc) can help to discover potential portability problems.

A freely distributed and very portable UNIX environment, such as GNU, could tremendously improve software portability and hardware compatibility. Future programmers concerned about portability could test their software for a GNU system that can run on many platforms. Hardware manufacturers could ensure that the GNU system is ported to their platform and could thereby gain a rich set of applications that run on their machine. You can gain a glimpse into such a world by taking a peek into the Linux world for PCs. The GNU community is working hard on the release of Hurd, its collection of server processes that run on top of a Mach kernel. It will be interesting to see if GNU's Hurd system is going to be usable before powerful Linux PCs successfully compete in all parts of the UNIX world. On the other hand, maybe Java will solve the entire portability problem. Exciting times …

Future SEP programmers may want to read GNU's document on programming standards for projects submitted to GNU. The standards outline a set of rules to ensure consistent, well documented, robust and portable code.


The sophistication and ease of GNU's software distribution is admirable. Anyone distributing software that requires installation should consider GNU's configure (autoconfig) technique. (I wish all of SEPlib had such an installation mechanism.) The official installation document is in a package's README file. You can, however, expect to install most GNU software packages with a few basic steps:

  • Type configure in the top directory. The configure script will check your system and create a custom made makefile. You may want to specify the location where to install the software by calling configure with a “PREFIX” flag, such as: configure –PREFIX=/usr/local/GNU to install the software in /usr/local/GNU rather than the default /usr/local.
  • Type gmake |& tee log.make to compile and link the software.
  • Type gmake install to install the software.
  • Type gmake test |& tee log.test to run some simple self-tests. Not all software packages yet include this feature though.


Trent's GNU page: a wealth of information.
Delorie offers another unofficial GNU page. It includes online documentation for the various packages.

sep/software/gnu.txt · Last modified: 2015/05/27 02:06 (external edit)
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0