vim: shiftwidth=3

Rosetta Operating System: Protocols
===================================

1 Introduction
--------------

   Due to its nature as a message-passing operating system, a standard
   "langauge" is needed in order to allow different components of the system
   to communicate with each other. This document describes the communication
   layer built on top of kernel IPC primitives to facilitate the fast transfer
   of structured data between components.


2 Design Goals
--------------

   The key consideration for Protocols is low-overhead and speed. All system
   functionality is accessed via sending messages, so any speed or memory costs
   incurred will affect the performance of the entire system.

   In addition, Protocols should be language-agnostic. Two components written
   in two different programming languages should be able to communicate as long
   as they both understand the same protocol.


3 Overview
----------

   Protocols is a very thin layer overtop of Mango ports. It provides a
   declarative language for describing message layouts in a language-agnostic
   format, and a tool for generating concrete implementations of protocols in
   various programming languages.

   Protocols makes heavy use of Mango's I/O vectors facility to avoid performing
   any dynamic memory allocation or unnecessary copying of data. As often as
   possible, any parameters you pass to a protocol function will be copied
   directly into the address space of the recipient. This makes Protocols
   essentially free to use.

