Skip to content


bpm, as the README outlines, is a stepping stone to isolate collocated BOSH jobs from one another. Ideally, this project should not exist and instead we should use an existing container scheduler. However, we have a huge number of existing BOSH releases which would benefit from this isolation. bpm provides a straightforward but opinionated runtime for existing BOSH jobs.

This document, along with the others in the same directory, is the de-facto source of documentation for bpm. This file in particular introduces some of the nouns and semantics used by bpm.



Jobs in bpm are semantically identical to those in BOSH. A job is an independently schedule-able server or collection of servers which provide some kind of service. Jobs can be collocated with other jobs, but should not require this. They should be able to speak over the network to wherever the other job is located. However, a minority jobs are designed to be deployed as a sidecar to other jobs, so this definition isn't perfect.

bpm isolates collocated jobs from one another. Namespaces are applied to the host filesystem and process tables such that jobs are not aware of each other. Performance isolation can be enabled on jobs to prevent them starving their neighbors of shared physical resources.

Notably, the network is not namespaced due to complexities it would introduce around service discovery. For example, if a process ends up listening on a different port externally than in its namespace then how does it know what to advertise to its service discovery registry? This pattern of allowing traffic over localhost also allows for the use of the popular sidecar proxy pattern i.e. Envoy, linkerd, Istio.


Jobs can be made up of multiple processes, though most jobs will only have a single process. Processes are isolated from one another and can have independent performance restrictions imposed upon them but processes do share portions of the filesystem. Processes are always collocated on the same machine as each other.

Due to how common the case of a single process per job is you can generally omit the process argument from many of the bpm commands. In this case the job name is reused as the process name.