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.