Aleph kernel

Aleph is a discontinued operating system kernel developed at the University of Rochester as part of their Rochester's Intelligent Gateway (RIG) project in 1975. Aleph was an early step on the road to the creation of the first practical microkernel operating system, Mach.

Aleph used inter-process communications to move data between programs and the kernel, so applications could transparently access resources on any machine on the local area network (which at the time was a 3-Mbit/s experimental Xerox Ethernet). The project eventually petered out after several years due to rapid changes in the computer hardware market, but the ideas led to the creation of Accent at Carnegie Mellon University, leading in turn to Mach.

Applications written for the RIG system communicated via ports. Ports were essentially message queues that were maintained by the Aleph kernel, identified by a machine unique (as opposed to globally unique) ID consisting of a process id, port id pair. Processes were automatically assigned a process number, or pid, on startup, and could then ask the kernel to open ports. Processes could open several ports and then "read" them, automatically blocking and allowing other programs to run until data arrived. Processes could also "shadow" another, receiving a copy of every message sent to the one it was shadowing. Similarly, programs could "interpose" on another, receiving messages and essentially cutting the original message out of the conversation.

RIG was implemented on a number of Data General Eclipse minicomputers. The ports were implemented using memory buffers, limited to 2 kB in size. This produced significant overhead when copying large amounts of data. Another problem, realized only in retrospect, was that the use of global ID's allowed malicious software to "guess" at ports and thereby gain access to resources they should not have had. And since those IDs were based on the program ID, the port IDs changed if the program was restarted, making it difficult to write servers with clients that could rely on a specific port number for service.