Sapphire is a general-purpose distributed programming platform that greatly simplifies the design and implementation of applications spanning mobile devices and clouds. Sapphire removes much of the complexity of managing a wide-area, multi-platform environment, yet still provides developers with the fine-grained control needed to meet critical application needs.

A key concept of Sapphire’s design is the separation of application logic from deployment logic. That is, deploy- ment code is factored out of application code, allowing the programmer to focus on the application logic. At the same time, the programmer has full control over deployment decisions and the flexibility to customize them.

Sapphire’s architecture facilitates this separation with a highly extensible distributed kernel/runtime system. At the bottom layer, Sapphire’s Deployment Kernel (DK) integrates heterogeneous mobile devices and cloud servers through a set of common low-level mechanisms, including best-efforts RPC communication, failure detection, and location finding.

Between the kernel and the application is a deployment layer: a collection of pluggable Deployment Manager (DM) modules that extend the kernel to support application-specific deployment needs, such as replication and caching. DMs are written in a generic, application-transparent way, using interposition to intercept important application events, such as RPC calls. The DK provides a simple yet powerful distributed execution environment and API for DMs that makes them extremely easy to write and extend. Conceptually, Sapphire’s DK/DM architecture creates a seamless distributed runtime system that is customized specifically for each application’s requirements.