GNU Utilities Status and Task List

How to contribute

For all utilities except those for which I say "don't bother" below,
a program that runs on 4.2 is satisfactory as a contribution.
Programs written for other Unix versions are probably ok too.  I
expect porting to 4.2, which is what I use for debugging, would not
be too hard.  It is not certain how compatible the GNU kernel and
libraries will be with 4.2, so for now contributors might as well
refrain from worrying about this except for sticking to the highest
level 4.2 interfaces they can use (for example, if you look
at a directory, use readdir).

Contributed code should use dynamic allocation to avoid arbitrary
limits on the length or number of ANY data structure, including
filenames, lines, files, and symbols.  All system calls should be
checked for failure and the system error code should be printed;
failing mallocs should be detected.  When static storage is to
be written in during program execution it is cleaner to initialize
it by explicit code rather than by C initialized declarations.

Please do not read the source of the Unix original you are imitating.

Please supply a man file (or, even better, a texinfo file) with the
utility, since GNU cannot use the Unix manual itself.  Try to write
in a less terse style than the Unix manual and spell out important
conclusions and techniques that the Unix manual would leave to the
reader to deduce.

If the Unix manual mentions deficiencies for the utility you are
imitating, give a thought to removing those deficiencies in your
program.


Most needed utilities

as	-- we need assemblers for Vax and 16000, have one for 68000.
at	-- needed.  most of the work probably in the demon.
awk	-- half written, but original volunteer cannot finish it.
	   Needs a volunteer to finish it.
cb	-- desirable
chmod	-- needed.  chmode program may be good to start with.
colrm	-- desirable --- being written by mly
diction	-- desirable
diff	-- a simple one exists but more features must be added.
diff3	-- needed
eqn	-- needed
explain	-- desirable
findp	-- needed
gprof	-- needed
graph	-- needed
fgrep	-- exists but could use a little bit of work.
indent	-- desirable.  Verber says perhaps he can find one.
join	-- needed; perhaps redesign it
lex	-- written but suspect is incompatible or deficient; needs work
lorder	-- needed
lpr	-- needed (line printer spooler)
mail	-- needed
  We need some sort of mail system for GNU.  It is not clear
  what mail systems are available or whether they are what
  we want.  It is also not clear what network facilities
  GNU will have, or what facilities any available mailers
  expect.
more	-- desirable though I hope eventually will not be needed
	due to ITS-style terminal support; may be available
mt	-- needed
nroff	-- needed
plot	-- needed
prof	-- needed
rs	-- desirable, may be available
sdiff	-- being written
sh	-- needed.  Can start from imitation of csh
spline	-- needed
 I can give you a three-page long Lisp program that you
 can get the algorithm from.  Given that, this is not very hard.
style	-- desirable
tbl	-- needed
tip	-- desirable.  Verber says perhaps he can find one.
troff	-- needed
uucp	-- needed
uusend	-- needed
what	-- needed
whatis	-- needed
whereis	-- needed
which	-- needed

Status of utilities:

 The following groups of utilities are not mentioned below:

  RCS	-- I have this.
  SPMS  -- I have this.
  SCCS	-- I'm told this is not needed since RCS is better
  mail	-- Not clear what to do.
    We need a mail system very much, but it is not clear what
    user interface it should have or what system facilities
    interface will be available to it.  I do not know whether
    a suitable one is available from UCB.
  news	-- Same situation as mailer
  network -- Not clear what protocols to implement.
    But any network you would like to implement would be welcome.

If something is "available" it means it is possible to distribute with
GNU the same program that is used with Unix, so there is no need to
write a replacement.

If something "may be available" it means that there is a possibility
that the existing version can be used but also a possibility that
one must be written.  If you can find out for certain whether
any of these programs is available (by asking the author or
distributor), that is a useful contribution.  Alternatively,
if you are burning to write a replacement for a program even
though the original might be available, that is fine.

If something is "not needed", this does not mean it would be rejected
as a contribution if offered.

adb	-- not needed
addbib	-- desirable
ansitar -- have something called ansitape; does similar things
	but with incompatible interface.
apl	-- have it
apply	-- will be trivial when shell is done
apropos	-- will be trivial when man is done
ar	-- mostly done but needs some work
as	-- we need assemblers for Vax and 16000, have one for 68000.
at	-- needed.  most of the work probably in the demon.
awk	-- half written, but original volunteer cannot finish it.
	   Needs a volunteer to finish it.
basename-- written
bc	-- being written by Burt Vincent
bib	-- have it
cal	-- written
calendar -- written by israel@maryland
	Superior to Unix calendar but incompatible.
cat	-- written
cb	-- desirable
cc	-- written, but it needs a lot of work.
  I have a C compiler which generates Vax or 68000 code.
  The Vax code seems to be better than 4.2's C compiler,
  and the compilation time is a little less.  However,
  this compiler is very large.  This is because it was
  originally (and still is also) a Pastel compiler,
  and Pastel (super-hairy extended Pascal)
  is such a complicated lanuage that its
  compiler must be very big.  To compile just C and
  Pascal, a much smaller and simpler compiler would
  suffice, and it would be nice to cut the size down.
  This would mean giving up the ability to compile
  Pastel code.  That is ono great loss, except for one problem:
  most of the compiler is written in Pastel, and we would
  no longer be able to compile it.  So the compiler must
  be rewritten into C, meaning a lot more work.

  A project to write a new portable optimizing compiler
  is now getting started in LA and DC.
checknr	-- desirable
chfn	-- functionality will probably work differently in GNU
chgrp	-- functionality will probably work differently in GNU
chmod	-- written
chmode	-- variant of chmod; available.
chsh	-- functionality will probably work differently in GNU
clear 	-- don't bother; implementation for GNU will be different
cmp	-- written
col	-- being written
colcrt	-- slightly desirable, may be available
colrm	-- desirable
comm	-- written
compact	-- desirable, though some say compress is better
compress -- have it
courier	-- have it
cp	-- written
cpio	-- perhaps extend tar instead
cpm	-- have it
cpr	-- desirable, may be available
cref	-- desirable
crypt	-- coming from Richard Outerbridge
csh	-- being written by velu@maryland
ctags	-- written
cut	-- written
cxref	-- have it
date	-- don't bother; implementation for GNU will be different
dbx	-- may be available; needs work for bug fixes and important features
dc	-- written
dd	-- written
deroff	-- desirable
df	-- don't bother; implementation for GNU will be different
diction	-- desirable
diff	-- written; may need some features
diff3	-- needed
dsh	-- GNU network facilities not decided yet
du	-- don't bother; implementation for GNU will be different
dvityp	-- probably available
echo	-- written.
ed	-- written by Pasquale Villani.
efl	-- slightly desirable.
emacs	-- written by RMS.
env	-- written
eqn	-- needed
error	-- probably available
	But really it is better to standardize the format
	of error messages from GNU language processors
ex, edit -- slightly desirable
expand	-- written
explain	-- desirable
expr	-- written
eyacc	-- superseded by bison
f77	-- Fortran front end for compiler must be written
false	-- should be integrated with shell
fed	-- not needed in that form
fgrep	-- have it
	Would be nice to implement -w switch
	even though 4.2 fgrep does not have it.
file (determine file type)	-- needed.  Verber has offered to write it.
find	-- have volunteer to write this
findp	-- needed
finger	-- needed.  May be available from ucb but needs work
fmt	-- written, needs comments added.
fold	-- written
fp	-- nice, probably available
fpr	-- needed, probably available
fsplit	-- desirable
ftp	-- GNU network facilities not decided yet
gcore 	-- don't bother; implementation for GNU will be different
gprof	-- needed
graph	-- needed
grep	-- written
groups	-- this misfunctionality will not exist in GNU
head	-- written
hostid 	-- GNU network facilities not decided yet
hostname 	-- GNU network facilities not decided yet
icon	-- have it.
icont	-- have it.
indent	-- desirable.  Verber says perhaps he can find one.
install	-- don't bother; implementation for GNU will be different
invert	-- have it
iostat 	-- don't bother; implementation for GNU will be different
ispell	-- probably available
join	-- needed; perhaps redesign it
jot	-- desirable, may be available
kill 	-- don't bother; implementation for GNU will be different
lam	-- desirable, may be available
last 	-- don't bother; implementation for GNU will be different
lastcomm -- should be integrated into shell
ld	-- written
learn	-- very desirable
leave	-- desirable
lex	-- written but suspect is incompatible or deficient; needs work
	Also have a ratfor version that is being converted to C
	by allegra!psuvax1!burdvax!wpl@mit-eddie
lint	-- not needed, but worth doing if you want.
	A combination of better error detection in the C compiler
	and extensions being made to the C language may make
	lint unnecessary.
lisp	-- available
liszt	-- available
ln	-- written, needs comments added
lock	-- written
look	-- written
lookbib	-- desirable
lorder	-- needed
lpq, lpr, lprm 	-- needed
ls	-- partially written and being worked on
lxref	-- available
m4	-- being written by Daniel Killoran
mail	-- needed
  We need some sort of mail system for GNU.  It is not clear
  what mail systems are available or whether they are what
  we want.  It is also not clear what network facilities
  GNU will have, or what facilities any available mailers
  expect.
make	-- being written by Rich Salz
man	-- superseded by info, which is being written
merge	-- desirable, may be available
mkdep	-- written
mkstr	-- will not be needed in GNU, but still useful in case
	someone is accustomed to using it.
mesg	-- don't bother; implementation for GNU will be different
more	-- desirable though I hope eventually will not be needed
	due to ITS-style terminal support; may be available
msgs	-- desirable
mt	-- needed
mv	-- written, needs comments added
newshell -- improvements desirable in csh
nice	-- don't bother; implementation for GNU will be different
nm	-- written
notes	-- said to be inferior
nroff	-- needed
od	-- written
pagesize -- it must be useful if you say so...
paste	-- written
pc	-- written but needs work (essentially same pgm as cc)
pcp	-- desirable
pdx	-- adapt dbx as necessary so same command works to debug anything
pi	-- desirable, may be available
pix	-- desirable, may be available
plot	-- needed
pmerge	-- desirable, may be available
pmv	-- desirable
pr	-- needed.  Mark Verber has offered to write it.
 A stripped-down version of this can be found in the
 Software Tools tape.  That may or may not give
 a noticeable amount of help.
printenv -- written
prof	-- needed
ps	-- don't bother; implementation for GNU will be different
ptx	-- needed
pwd	-- written.
px	-- desirable, may be available
pxp	-- desirable, may be available
pxref	-- have it
quota	-- this bug will not exist in GNU
ranlib	-- subsumed by GNU version of ar
ratfor	-- probably available
rcs	-- have it
refer	-- desirable
reset	-- will be unnecessary due to better terminal support
rev	-- written
rm, rmdir -- written
roffbib	-- desirable
rs	-- desirable, may be available
sc	-- have it
script	-- written
sdiff	-- being written
sed	-- written
sh	-- needed.  Can start from imitation of csh
size	-- written
sleep	-- written
soelim	-- desirable
sort	-- written
sortbib	-- desirable
spell	-- desirable
spline	-- needed
 I can give you a three-page long Lisp program that you
 can get the algorithm from.  Given that, this is not very hard.
split	-- written
spms	-- have it
strings	-- written
strip	-- written
struct	-- desirable
stty	-- don't bother; implementation for GNU will be different
style	-- desirable
su	-- will not be needed in GNU
sum	-- may be desirable
symorder -- probably not useful
sysline	-- don't bother; implementation for GNU will be different
tabs	-- desirable even though will require adaptation for GNU terminal support
tail	-- written
talk	-- desirable, but probably must wait until IPC facilities decided.
tar	-- needed.  A person has volunteered
tax	-- slightly desirable
what	-- desirable
tbl	-- needed
tc	-- not needed
tee	-- written.  May need some upgrading, I'm not sure.
test	-- should be integrated into shell
tex82	-- available
time	-- desirable
tip	-- desirable.  Verber says perhaps he can find one.
touch	-- written, needs some work
tp	-- may be desirable
tr	-- being written by mly.
trman	-- not needed
troff	-- needed
true	-- should be integrated into shell
tset	-- hope to make this mess unnecessary
tsort	-- written
tty	-- needed, but perhaps implementation for GNU will be different
ul	-- written, but lacks -i switch.  Needs this added.
uniq	-- written
units	-- written
uptime	-- desirable
users	-- don't bother; implementation for GNU will be different
uucp	-- needed
uuencode -- written
uusend	-- needed
vfontinfo -- probably not needed
vgrind	-- desirable
vi	-- desirable.  You can start from sed, and can use
	those parts of the original vi which were written at UCB
	That makes most of it which you don't have to write.
vlp	-- desirable, may be available
vmstat	-- don't bother; implementation for GNU will be different
vpr	-- probably not needed
vtroff	-- probably not needed
vwidth	-- probably not needed
w	-- don't bother; implementation for GNU will be different
wall	-- don't bother; implementation for GNU will be different
wc	-- written
what	-- needed
whatis	-- needed
whereis	-- needed
which	-- needed
who	-- don't bother; implementation for GNU will be different
whoami	-- written
write	-- don't bother; implementation for GNU will be different
xed	-- desirable, after ed is done
xref	-- desirable, may be available
xstr	-- not needed
yacc	-- written
yes	-- written
