|  |  
       
         
          |  | Implementation 
           |  How does our implementation fit
       the demands
      of the philosophy and motivation? The major elements of the
      implementation
      are:
      
        
          
             * Links
 
 * Versions
 
 * Unbounded information pools
 
 * Support for cooperating users 
          
        
      
      Links
 
 Links, more than any other feature, build and maintain
       the web
      of context.
 
 We decided that the essential features were:
      
        
          
             * The ability to do extremely fine-grained linking
 
 * The ability to do complex linking
 
 * Allowing the frontend to define and interpret the
              meaning of links
 
 * The ability to follow links bidirectionally. The ability
              to enter
              and exit documents quickly when following links.
 
 * The preservation of links across edits. 
          
        
      
      Fine-grained Linking
 
 
 
 In literature, footnotes and quotes may specify a single word.
      Hypertext
      should provide similar or superior fine-grain linking: linking to
      a particular
      word or to a single number. "Chunky" hypertext only
      allows you
      to link to larger collections of data (such as "cards"
      in HyperCard).
      The reader must then try to find the one relevant piece of
      information within
      the "chunk".
 
 Clearly the writer must be able to link to individual bytes. Such
      linking
      should be at the writer's discretion. Rather than forcing linking
      according
      to some predefined hierarchy the writer should decide exactly what
      is included
      as the end of a link.
 
 
 Complex Linking
 
 Letting the writer decide exactly what is included as
       the end
      of a link means providing as much flexibility as possible. The
      ability to
      freely and flexibly construct links means being able to:
      
        
          
             * link within documents.
 
 * link between documents. Example: a scholar writes a new
              interpretation
              of ancient Greek society, with numerous quotations from
              the writings
              of those times. The scholar could draw links from those
              quotes to
              the original texts, allowing the reader to follow the link
              and see
              the quote in situ.
 
 * link to other links. Text itself or whole documents are
              not the
              only things to be linked. Links themselves have
              information content
              on which people might wish to comment.
 
 * group disjoint sets of text, i.e., select a span of
              text, a span
              of links or a span of documents and define them as a
              single unit
              to form one end of a link. (The set of objects that form
              one end
              of a link is known as an "end-set".) On a small
              scale,
              this gives the same capability as when an ellipsis links
              disjoint
              text: "She said...that she would do it." On a
              larger scale,
              there could be a link whose end-set would be the span of
              all the
              documents written by Brian Kernighan. Or, you could
              assemble a link
              that had a set of disjoint spans as an end-set, such as
              everything
              written by Brian Kernighan and everything written by Doug
              Engelbart.
            
          
        
      
      Identifying the Meaning of Links
 
 As the amount of connected material begins to grow, we
       need
      ways to clarify and identify links to avoid being lost in the
      webbed information.
      Where is a link from? Where is the link to? What type of link is
      it: a quotation,
      a refutation, a footnote, a bibliographic reference, a
      bibliographic collection,
      etc.? We gave the frontend the ability to choose whether to answer
      these
      questions and what meaning to give the answers.
 
 Why didn't we define a series of link types ourselves? It would
      make things
      simpler if Udanax itself decided on a fixed set of link types. But
      we also
      realize that we couldn't possibly know or conceive of every kind
      of connection
      people would want to make. We will advocate certain conventions so
      things
      written by one system are readable by another, but we will not
      enforce any
      policies.
 
 
 Bidirectional Links
 
 Links need to be at least bidirectional. In other
       words, when
      a link is created, the reader can go in either direction. Of
      course you'd
      want to be able to go from a document to a critique of that
      document. But
      imagine the person stumbling by chance into an ongoing heated
      technical
      debate. He'd want to follow links backward along the chain of
      creation to
      read source documents or trace the line of debate.
 
 Bidirectional links fulfill the scholar's greatest fantasy: if an
      author
      creates references pointing backward to earlier works, the readers
      of those
      earlier works can follow the reference forward and find the later
      writings.
 
 Udanax links are actually more powerful than bidirectional links.
      This greater
      power is discussed later in this document.
 
 
 Stability Across Changes
 
 Information is dynamic. Documents have to be editable,
       and you
      want the links to survive the editing process still connected to
      their material.
      You do not want the user to be referred back to some previous
      generation
      of document when the link was first made, or referred to whatever
      text happens
      to be at the link's original location in the document.
 
 Maintaining connectivity across edits is a very difficult
      technical problem.
      Its difficulty has led others to resort to "chunky"
      hypertext
      in which all you can do is link to an entire document or to a
      point in a
      hierarchy. This means that links can't represent the real
      semantics of desired
      connections.
 
 In Udanax Green, the links survive editing, rearranging, and
      changing. They
      stay connected to the material they were connected to originally.
      The link
      will show where rearranged material is now appearing in the
      document.
 
 
 Versions
 
 Besides links, there are three
       other key
      features of the Udanax Green implementation: versions, unbounded
      information
      pools, and support for multiple users.
 
 Versioning gives us context on material over time and through
      changes. Even
      relatively stable forms such as books go through drafts, versions,
      editions,
      modifications for publication in different formats. Versions arise
      and are
      maintained when several possible plans or variants of designs are
      created
      to suit different needs or eventualities.
 
 In its most mundane form, version control is a frustrating
      problem: what
      do you name this backup copy? where do you put it? how do you know
      which
      version had the information this way or that way? But often, our
      need for
      versions is acute, as when we desperately wish to be able to go
      back in
      time and restore a document to an earlier state.
 
 Our "version compare" differs from the heuristic-driven
      content
      comparison such as the Unix command "diff". Version
      compare traces
      the lineage of the actual bytes and tells how two versions differ
      according
      to the edits that resulted in two documents.
 
 
 Unbounded Information Pools
 
 Udanax's motivation is to allow users to construct and
       use information
      pools of unlimited size. Much software fails because it doesn't
      scale. Many
      systems that are obviously just too small are still 10 times the
      maximum
      size that the system creator imagined anyone would ever possibly
      want. We
      knew we weren't creative enough to imagine the largest thing
      someone might
      want to do with the Udanax software. So we did a design that would
      keep
      working as things scaled beyond our imaginations.
 
 This decision had interesting implications for edits: what if
      someone wants
      to insert an extra word at the front of a document the size of
      War and
      Peace - how would we handle the overhead of moving everything
      that followed?
      So in our system, unlike in traditional systems, when you edit by
      inserting,
      deleting or rearranging, the rest of the document is left in
      place.
 
 Tumbler addressing is an example of how we have designed Udanax
      Green to
      allow maximal scaling. Each document in the system has a unique
      address.
      If some years from now many Udanax Green systems were to be
      interconnected,
      no confusion would result.
 
 
 Cooperating Users
 
 Existing and planned features are
       designed
      to make Udanax Green good at enhancing the diversity that results
      from "social"
      computing: collaborative editing, electronic mail, and computer
      conferencing.
 
 We support collaboration by forking versions of documents. As in a traditional 
      file system, the frontend opens a document and reserves a consistent view 
      of that document. Traditional systems can't resolve the conflict of two 
      users writing to the same document at the same time. Udanax Green simply 
      creates a version for each writer, and then provides the facilities to resolve 
      any conflicts.
  
       |  |