more
, less
, and a story of typical Unix fossilization
It all started on Twitter:
@palecur: I know enough about Unix to get along but you will never convince me of a meaningful difference between 'less' and 'more'
@thatcks: In the genius Unix tradition, the answer is that less is more.
(Sadly, this is true at about 3 to 4 levels. It's a long story.)
In the beginning, by which we mean V7, Unix didn't have a pager at
all. That was okay; Unix wasn't very visual in those days, partly
because it was still sort of the era of the hard copy terminal.
Then along came Berkeley and BSD. People at Berkeley were into CRT
terminals, and so BSD Unix gave us things like vi
and the first
pager program, more
(which showed up quite early, in 3BSD,
although this isn't as early as vi
, which appears in 2BSD).
Calling a pager more
is a little bit odd but it's a Unix type of
name and from the beginning more
prompted you with '--More--
'
at the bottom of the screen.
All of the Unix vendors that based their work on BSD Unix (like Sun
and DEC) naturally shipped versions of more
along with the rest
of the BSD programs, and so more
spread around the BSD side of
things. However, more
was by no means the best pager ever; as you
might expect, it was actually a bit primitive and lacking in features.
So fairly early on Mark Nudelman wrote a pager with somewhat more
features
and it wound up being called less
as somewhat of a joke. When
less
was distributed via Usenet's net.sources
in 1985 it became
immediately popular, as everyone could see that it was clearly nicer
than more
, and pretty soon it was reasonably ubiquitous on Unix
machines (or at least ones that had some degree of access to stuff
from Usenet).
In 4.3 BSD, more
itself picked up the 'page backwards' feature
that had motived Mark Nudelman to write less
, cf the 4.3BSD
manpage,
but this wasn't the only attraction of less
. And this is where we get
into Unix fossilization.
In a sane world, Unix vendors would have either replaced their
version of more
with the clearly superior less
or at least
updated their version of more
to the 4.3 BSD version. Maybe
less
wouldn't have replaced more
immediately, but certainly
over say the next five years, when it kept on being better and
most people kept preferring it when they had a choice. This
would have been Unix evolving to pick a better alternative.
In this world, basically neither happened. Unix fossilized around
more
; no one was willing to outright replace more
and even
updating it to the 4.3 BSD version was a slow thing (which of
course drove more and more people to less
). Eventually the
Single Unix Specification came along and standardized more
with
more features than it originally had but still with a subset of
less
's features (which had kept growing).
This entire history has led to a series of vaguely absurd outcomes
on various modern Unixes. On Solaris derivatives more
is of course
the traditional version with source code that can probably trace
itself all the way back to 3BSD, carefully updated to SUS compliance.
Solaris would never dream of changing what more
is, not even if
the replacement is better. Why, it might disturb someone.
(I am not a fan of Solaris's long standing refusal to touch anything. Well, Solaris before Oracle took it over. I haven't looked at Solaris 11, just at Solaris 10 and derivatives like Illumos.)
Oddly, FreeBSD has done the most sensible thing; they've outright
replaced more
with less
. There is a
/usr/bin/more
but it's the same binary as less
and as you can
see the more
manpage is just the less
manpage. OpenBSD has
done the same thing but has a specific manpage for more
instead of just
giving you the less
manpage.
On Linux, more
is part of the util-linux
package but its
manpage outright
tells you to use less
instead:
more is a filter for paging through text one screenful at a time. This version is especially primitive. Users should realize that less(1) provides more(1) emulation plus extensive enhancements.
Given the comments in the manpage, it appears that this version of
more
is directly derived from the source code of one of the BSD
versions. It might even have less changes from the original than
the Solaris version.
So, now you can see why I say that less
is more, or more
, or
both, at several levels. less
is certainly more than more
, and
sometimes less
literally is more
(or rather more
is less
,
to put it the right way around).
|
|