For the utilities included in IEEE Std 1003.1-2001, see the RATIONALE sections on the individual reference pages.

Exclusion of Utilities

The set of utilities contained in IEEE Std 1003.1-2001 is drawn from the base documents, with one addition: the c99 utility. This section contains rationale for some of the deliberations that led to this
set of utilities, and why certain utilities were excluded.

Many utilities were evaluated by the standard developers; more historical utilities were excluded from the base documents than
included. The following list contains many common UNIX system utilities that were not included as mandatory utilities, in the User
Portability Utilities option, in the XSI extension, or in one of the software development groups. It is logistically difficult for
this rationale to distribute correctly the reasons for not including a utility among the various utility options. Therefore, this
section covers the reasons for all utilities not included in IEEE Std 1003.1-2001.

This rationale is limited to a discussion of only those utilities actively or indirectly evaluated by the standard developers of
the base documents, rather than the list of all known UNIX utilities from all its variants.

adb

The intent of the various software development utilities was to assist in the installation (rather than the actual development
and debugging) of applications. This utility is primarily a debugging tool. Furthermore, many useful aspects of adb are very
hardware-specific.

as

Assemblers are hardware-specific and are included implicitly as part of the compilers in IEEE Std 1003.1-2001.

banner

The only known use of this command is as part of the lp printer header pages. It was
decided that the format of the header is implementation-defined, so this utility is superfluous to application portability.

calendar

This reminder service program is not useful to conforming applications.

cancel

The lp (line printer spooling) system specified is the most basic possible and did
not need this level of application control.

chroot

This is primarily of administrative use, requiring superuser privileges.

col

No utilities defined in IEEE Std 1003.1-2001 produce output requiring such a filter. The nroff text formatter
is present on many historical systems and will continue to remain as an extension; col is expected to be shipped by all the
systems that ship nroff.

cpio

This has been replaced by pax, for reasons explained in the rationale for that
utility.

This utility is terminal-oriented and is not useful from shell scripts or typical application programs.

dc

The functionality of this utility can be provided by the bc utility; bc was selected because it was easier to use and had superior functionality. Although the
historical versions of bc are implemented using dc as a base,
IEEE Std 1003.1-2001 prescribes the interface and not the underlying mechanism used to implement it.

dircmp

Although a useful concept, the historical output of this directory comparison program is not suitable for processing in
application programs. Also, the diff-r command gives equivalent
functionality.

dis

Disassemblers are hardware-specific.

emacs

The community of emacs editing enthusiasts was adamant that the full emacs editor not be included in the base
documents because they were concerned that an attempt to standardize this very powerful environment would encourage vendors to ship
versions conforming strictly to the standard, but lacking the extensibility required by the community. The author of the original
emacs program also expressed his desire to omit the program. Furthermore, there were a number of historical UNIX systems
that did not include emacs, or included it without supporting it, but there were very few that did not include and support
vi.

This technology is partially subsumed by c99. It is also hard to specify the degree
of checking for possible error conditions in programs in any compiler, and specifying what lint would do in these cases is
equally difficult.

It is fairly easy to specify what a compiler does. It requires specifying the language, what it does with that language, and
stating that the interpretation of any incorrect program is unspecified. Unfortunately, any description of lint is required
to specify what to do with erroneous programs. Since the number of possible errors and questionable programming practices is
infinite, one cannot require lint to detect all errors of any given class.

Additionally, some vendors complained that since many compilers are distributed in a binary form without a lint facility
(because the ISO C standard does not require one), implementing the standard as a stand-alone product will be much harder.
Rather than being able to build upon a standard compiler component (simply by providing c99 as an interface), source to that compiler would most likely need to be modified to provide
the lint functionality. This was considered a major burden on system providers for a very small gain to developers
(users).

login

This utility is terminal-oriented and is not useful from shell scripts or typical application programs.

lorder

This utility is an aid in creating an implementation-defined detail of object libraries that the standard developers did not
feel required standardization.

lpstat

The lp system specified is the most basic possible and did not need this level of
application control.

mail

This utility was omitted in favor of mailx because there was a considerable
functionality overlap between the two.

mknod

This was omitted in favor of mkfifo, as mknod has too many
implementation-defined functions.

news

This utility is terminal-oriented and is not useful from shell scripts or typical application programs.

This utility was proposed in a historical draft of the base documents but met with too many objections to be included. There
were various reasons:

Changing a password should not be viewed as a command, but as part of the login sequence. Changing a password should only be
done while a trusted path is in effect.

Even though the text in early drafts was intended to allow a variety of implementations to conform, the security policy for one
site may differ from another site running with identical hardware and software. One site might use password authentication while
the other did not. Vendors could not supply a passwd utility that would conform to IEEE Std 1003.1-2001 for all
sites using their system.

This is really a subject for a system administration working group or a security working group.

This duplicated many of the features of the more pager, which was preferred by the
standard developers.

prof

The intent of the various software development utilities was to assist in the installation (rather than the actual development
and debugging) of applications. This utility is primarily a debugging tool.

RCS

RCS was originally considered as part of a version control utilities portion of the scope. However, this aspect was abandoned
by the standard developers. SCCS is now included as an optional part of the XSI extension.

red

Restricted editor. This was not considered by the standard developers because it never provided the level of security
restriction required.

rsh

Restricted shell. This was not considered by the standard developers because it does not provide the level of security
restriction that is implied by historical documentation.

sdb

The intent of the various software development utilities was to assist in the installation (rather than the actual development
and debugging) of applications. This utility is primarily a debugging tool. Furthermore, some useful aspects of sdb are very
hardware-specific.

sdiff

The "side-by-side diff" utility from System V was omitted because it is used
infrequently, and even less so by conforming applications. Despite being in System V, it is not in the SVID or XPG.

shar

Any of the numerous "shell archivers" were excluded because they did not meet the requirement of existing practice.

shl

This utility is terminal-oriented and is not useful from shell scripts or typical application programs. The job control aspects
of the shell command language are generally more useful.

size

The intent of the various software development utilities was to assist in the installation (rather than the actual development
and debugging) of applications. This utility is primarily a debugging tool.

spell

This utility is not useful from shell scripts or typical application programs. The spell utility was considered, but was
omitted because there is no known technology that can be used to make it recognize general language for user-specified input
without providing a complete dictionary along with the input file.

su

This utility is not useful from shell scripts or typical application programs. (There was also sentiment to avoid
security-related utilities.)