HAM, the Hypertext Abstract Machine

In 1987, Brad Campbell and Joseph M. Goodman published HAM [CG88], at the first ACM Conference on Hypertext. (The article was reprinted in CACM in July 1988.) It was a milestone in the development of hypertext as a research field, because it was the first attempt to define a reference model, an abstract model in which actual hypertext systems could be expressed.

Instead of presenting their model as a reference model, Campbell and Goodman presented it as an abstract machine:

"The HAM is a transaction-based server for a hypertext storage system. The server is designed to handle multiple users in a networked environment. The storage system consists of a collection of contexts, nodes, links, and attributes that make up a hypertext graph. The versatility of the HAM can be illustrated by showing how Guide buttons, Intermedia webs, and NoteCard FileBoxes can be implemented using its storage model."

Campbell was one of the developers of a HAM system at Tektronix. The work was inspired by the Neptune system of Delisle and Schwartz [DS86]. Although the HAM system was used by several groups in and outside Tektronix it never became a commercial product. Because the HAM was a very powerful system, describing its properties provides a way to compare features of different hypertext systems.

The definition of the HAM consists of a description of the HAM objects and of the operations that can be applied to them. Since 1987 hypertext systems have been developed that offer richer structures and features than those envisioned by the designers of the HAM. This has led to newer reference models, presented at a workshop of the National Institute of Standards and Technology in 1990, and to the definition of the Tower Model in 1992.

Like most reference models, the HAM does not describe the hypertext system completely. The HAM sits in between the file system and the user interface. Campbell and Goodman envisioned the graphical representation given below:

The figure clearly indicates that the HAM is a lower level machine, tied closely to the storage (file) system, while having a looser connection to the applications and user interfaces. It is also clear that the HAM is only part of this architecture and not the whole system.