# KMS (hypertext)

KMS, an abbreviation of Knowledge Management System, was a commercial second generation hypermedia system, originally created as a successor for the early hypermedia system ZOG. KMS was developed by Don McCracken and Rob Akscyn of Knowledge Systems, a 1981 spinoff from the Computer Science Department of Carnegie Mellon University.
The purpose of KMS was to let many users collaborate in creating and sharing information within large, shared hypertext, and from the very beginning, the system was designed as a true multi-user system.
As a spatial hypermedia system, KMS was intended to represent all forms of explicit 'knowledge artifacts' such as presentations, documents, databases, and software programs, as well as common forms of electronic communication (electronic mail, community bulletin boards, blogs).
The central element in the KMS data model is that of screen-sized pages (called "frames") interconnected by links. The user had the option (at any time) of switching between a view of a single frame (good for large, landscape-oriented diagrams) or two side-by-side half-screen views (suitable for two portrait-sized pages).
Frames are always fixed-size, meaning scrolling is not needed. The frame model is spatial rather than character based, so that text, graphics and images may always be placed anywhere in the frame, even overlapping one another. Another way to say this is that empty space in the frame actually denotes space, not (as in many text editors) just the absence of content. Frames being fixed in size scrolling as a form of interaction is eliminated (as the designers felt that scrolling is suboptimal) opting instead for larger aggregates such as documents and programs to be structured as hierarchies (or more generally, lattices) of hypermedia nodes. This flexibility makes it possible to create a document, search, run programs from a tree of frames starting at any frame.
In KMS, links are one way and are embedded in frames. They may go from any text item, point, graphical entity, or image in the source frame to any destination frame. In addition to links, frame items can also have actions, allowing the use to activate programs that extend the intrinsic functionality of the system.
A major distinction between KMS and current web practices is the distinction between regular items and "Annotation Items" (text items prefaced by the "@" characters). Annotation items have the connotation of being peripheral or meta-level, relative to the rest of the contents, making it easy (and apparent) as to what was regular content versus just notes to oneself or comments by others (including by programs). Annotation items with links thus have the connotation of being arbitrary cross-references (a la "See Also...") and thus are not seen by users, and more especially agents, as part of the hierarchical structure of the hypertext.
Another major distinction between KMS and current web practices is the elimination of a separate editor mode. Navigation and editing functionality is always directly available and users can edit any frame for which they have permission. Authors can even protect frames from inadvertent editing even by themselves. Older versions of frames are saved in 'comet-like' linked list so one can see the history (and time spent) for any individual frame (and more generally, those in any tree).
Finally, KMS contained a script programming language (akin to JavaScript) which enabled developers and users to extend the system beyond its current functionality. In keeping with the KMS philosophy of 'Everything a frame' (e.g., cursors, fillpatterns, etc., are represented as frames) so programs are also represented as hierarchies of frames; KMS dynamically read and interpreted only those program frames needed at runtime.
KMS was originally written in Pascal and C, roughly 300,000 lines of code in size. A more modern, Java-based follow-on to KMS (called "Expeditee") is being developed at the Computer Science Department of the University of Waikato in New Zealand, by Rob Akscyn, one of the original developers of KMS.