PiPS Overview

Updated: April 19, 2023

The Platform-independent Publish Subscribe (PiPS) framework allows applications to exchange information using publish-subscribe communication. The PiPS framework hides the details of the underlying services used for interprocess communication (IPC), by providing a common interface for sending and receiving data.

This design lets applications be independent of any specific publish-subscribe service (or version of it). For example, if a prototype system is developed using a free, open-source service but the production system uses a safety certifiable version of it, application writers don't have to adapt their code at all unless it contains specific references to a publish-subscribe service. Instead, they must only change their PiPS configuration. The design also means applications can easily interact with multiple different services transparently and concurrently. This may be useful in systems composed of several black-box sensors that transmit their data on different publish-subscribe buses.

Differences between PiPS and PPS

There's no connection between the PiPS and PPS services. PiPS isn't a direct replacement for PPS but instead an alternative infrastructure for publish-subscribe communication. One key difference is that PiPS enables IPC between applications on different machines; PPS offers IPC only within a machine. Also, PiPS has no server process; the framework is implemented as a collection of services that each application loads into its process space. Conversely, PPS depends on a service that must be running for applications to use it.

The communication model is also quite different. Whereas PPS lets applications use POSIX calls to read data from and write data to objects, PiPS supports publications, which allow applications to receive data updates (subscribe) and/or broadcast updates (publish), and topics, which represent individual data types. More details on the PiPS communication model are given in Key concepts.

Finally, PiPS avoids many known limitations of PPS. For example, this latter service is single-threaded and susceptible to priority inversion. However, PiPS doesn't offer information persistence—it's up to your applications to write their data to persistence storage if need be.