[MUD-Dev] Mozilla: unity of interface

J C Lawrence claw at under.engr.sgi.com
Tue Jun 16 14:28:57 CEST 1998


Consider the following in terms of MUD client interface _and_ MUD user
interface (currently the MUD command line, potentially something
differently structured):

URL:http://www.mozilla.org/unity-of-interface.html

               unity of interface 
                by Jamie Zawinski 
                   18-May-98 

If one must pick one thing as being the core concept and greatest
strength of the ``web browser'' as we know it today, it is this:

         The same interface for the same task,
         regardless of how the service is
         implemented on the other end. 

Short of being cross-platform (which deserves a document of its own)
Mozilla's greatest strength is that it manages to provide a unified
interface to a number of useful services and protocols.

It is more interesting to support a concept than to support a
particular implementation of it. 

     For example, document retrieval works the same way
     regardless of the underlying protocols used, be they HTTP,
     FTP, Gopher... The important detail is the act of clicking on a
     link, and getting a document back. All else is implementation
     detail, and of no interest to the end user. 

     Likewise, the Mozilla mail reader behaves the same way
     regardless of where the messages are stored (on the local disk,
     or on an IMAP server.) And the user interfaces for the
     Mozilla mail reader and news reader are very similar because
     they are very similar tasks: management and retrieval of
     messages. They differ in certain specifics, but the concepts are
     largely the same, and therefore, the interfaces are largely the
     same. 

     As support for new protocols is added to Mozilla in the
     future, such support should follow this same model: when
     there are two protocols that do similar things, Mozilla should
     support a common interface for each. 

How do you write software that supports a general concept? 

     First by cataloging the various features of the specific
     protocols that exist, and deciding what the most important
     overlapping concepts are. Then, you try and build an interface
     that does all the important stuff the same way, and (hopefully)
     allows the protocol-specific features to show through when
     they are available. 

     FTP, HTTP, and Gopher have disjoint sets of features, but
     Mozilla supports each of these protocols. It doesn't support
     them all fully; there are a number of commands that a
     command-line ftp client supports that aren't accessible from
     Mozilla; but the basics are there. And 99.5% of the time, it's
     good enough. 

     Mail and News are another example of the same thing; there
     are some very mail-specific concepts, like deletion; some
     very news-specific concepts cancelling; and some concepts
     that are pretty-much the same if you look at them right, like
     the various reply options, and subscription, and kill files /
     filters. 

     Note that the important detail here is not reuse of code, but
     rather, reuse of interface: there's a good chance that there
     won't be much code sharing between the implementation of
     various protocols (HTTP and FTP share very little code, for
     example, since their on-the-wire protocols are radically
     different) but that doesn't mean that, in so far as they have
     conceptual similarities, they shouldn't present themselves to
     the user in a similar way. 

     Some people argue that when you try and make one program
     that does many things, you often end up with a program that
     doesn't do any of them perfectly. 

     I reject that argument, because the goal is to let the user
     accomplish what they want to accomplish: not to produce the
     perfect implementation of a particular protocol. The latter
     may be a means to the former end, but that's all. 

     And, I believe that a program that does many things to the
     70th percentile beats hands down a program that does one
     thing perfectly; and also beats hands down a suite of programs
     that all do one thing perfectly, but that each do so with totally
     different interfaces that must be learned afresh for each task. 

A specific example: chat. 

     For the sake of argument, I propose that Mozilla should
     include a ``chat'' client. And, following the thesis presented
     above, that Mozilla should support various chat protocols in
     an abstract way. 

     It seems clear that chat systems like IRC and ICQ (and the
     AOL chat rooms, and, to some extent, certain MUDs/MOOs)
     are similar enough that one could come up with an interface to
     each of them that makes sense for each: they all incorporate
     line-at-a-time communication among (potentially) large
     numbers of people. They each have concepts of ``rooms'' and
     ``private messages'' and so forth. 

     However, let's also consider a harder example: could we come
     up with an interface that worked for both IRC/AOL-style
     chat systems, and also for a more different system, the Unix
     ``talk'' protocol? 

     Let's imagine that we have a UI with the general form of: a
     big text area in which the various typed comments of the
     participants appear; a text-entry area at the bottom; and a
     toolbar. Let's imagine that some of the commands available
     are concepts that are not available on all chat systems, like
     ``change channel'' or ``change handle'' or ``upload GIF.''
     Well, if the current protocol doesn't support it, the command
     would be disabled. (Or perhaps the set of commands on the
     toolbar would be slightly different, depending on the protocol
     being used.) 

     Current implentations of the Unix ``talk'' protocol are
     unbuffered, one-character-at-a-time systems in which the
     participants can see each other typing, including deletions, as
     they happen. 

     I think that most other chat systems are line-at-a-time, or
     otherwise pre-editable. Assuming that this is the case, this
     would suggest that that the right thing to do, in the ``talk''
     implementation, is to make it do pre-editing as well: that is,
     when using the Mozilla chat client to speak the ``talk''
     protocol, characters would not be sent until the user hit return;
     and likewise, the text from the person on the other end would
     be presented one line at a time (or when the other person
     stopped typing for a second or two, or something along those
     lines.) 

     This would mean that if one person was using the Mozilla
     chat client, and another person was using the classic Unix
     ``talk'' command, they would have rather different UI
     experiences than they would have if they were both using the
     same client. However, that is no different than the case of two
     people exchanging email using radically different mail
     readers: they each have their preferred interfaces, but
     communicate via common protocols. 

Conclusion: tools versus protocols. 

     The important thing to keep in mind when trying stuff like
     this is that at some level, ``chat'' is a concept, like ``document
     retrieval'' or ``message handling,'' and what you're trying to
     do is build a useful tool on top of those protocols that can
     interoperate with other tools that also happen to speak those
     protocols. 

     You are not necessarily trying to clone the user interface of
     those other, pre-existing tools. 

--
J C Lawrence                               Internet: claw at null.net
(Contractor)                               Internet: coder at ibm.net
---------(*)                     Internet: claw at under.engr.sgi.com
...Honourary Member of Clan McFud -- Teamer's Avenging Monolith...




More information about the mud-dev-archive mailing list