The comparison between Sam and vi suggests strongly that, at
least where editors are concerned, attempts to compromise between the
minimalism of ed and the all-singing-all-dancing comprehensiveness of
Emacs don't work very well; vi attempts this, and ends up with neither
virtue. Instead, it falls into an adhocity trap. Wily avoids the
adhocity trap, but cannot match the power of Emacs and must demand a
custom process interface from each of its interactive symbionts in
order to come anywhere close.
Evidently something about editors tends to push them in the
direction of increasing complexity. In the case of
vi, that something is not hard to identify;
it's the desire for convenience. While ed
may be theoretically adequate, very few people (other than perhaps Ken
Thompson himself) would forgo screen-oriented editing to make a
statement about software bloat.
More generally, programs that mediate between the user and the
rest of the universe notoriously attract features. This includes not
just editors but Web browsers, mail and newsgroup readers, and other
communications programs. All tend to evolve in accordance with the
Law of Software Envelopment, aka Zawinski's Law: “Every program
attempts to expand until it can read mail. Those programs which cannot
so expand are replaced by ones which can”.
Jamie Zawinski, inventor of the Law (and one of the principal
authors of the Netscape and Mozilla Web browsers), maintains more
generally that all really useful programs tend to turn into Swiss Army
knives. The commercial success of large, integrated application suites
outside the Unix world tends to confirm this, and directly challenges
the Unix philosophy of minimalism.
To the extent Zawinski's Law is correct, it suggests that some
things want to be small and some want to be large, but the middle
ground is unstable. The superficial problems with
vi can be put down to history, but the
deeper ones trace back to the combination of steady pressure to add
features with refusal to embed the scripting and subprocess-control
features that vi partisans associate with
excessive size. On a different level, accepting that there would
be two modes in the interface (insertion versus character-motion)
opened a can of worms — it became far too easy to add new
commands without thinking about their complexity impact on the
overall design.
The examples of Emacs and
Wily further suggest
why
some things want to be large: so that several
related tasks can share context. Editing and version control (or
editing and mail, editing and symbolic debugging, etc.) are separate
tasks from the point of view of the implementers — but users
would often prefer to have one big environment that lets them point at
pieces of text, rather than spend time and attention ping-ponging
between several programs that each have to have the same filename or
the contents of some cut buffer handed to them.
More generally, let's suppose we view the entire Unix
environment as a single work of design by community. Then the religion
of “small, sharp tools”, the pressure to keep interface
complexity and codebase size down, may lead right to a manularity trap
— the user has to maintain all the shared context himself,
because the tools won't do it for him.
Returning to the specific context of editors, Sam shows us that
vi is the wrong thing. Wily is a valiant
effort to avoid the vastness of Emacs that falls short because it
can't be syntax-aware. But Wily, or some
realization of the Emacs design ideas cleaned up and stripped of
historical baggage, might be the right thing. The value of optional
complexity depends on the objectives you choose, and the ability to
share context among all the text-oriented tools related to a task is
valuable.
[an error occurred while processing this directive]