An environment is a set of name-value bindings, maintained for a particular user, that are provided to a process at runtime. This can provide a great deal of flexibility in tailoring the behavior of programs to a particular user's preferences. It can also serve as a simple means of interprocess communication. To be useful, however, the environment must take into account the natural structure of a user's work. Groups of cooperating processes form jobs and should share certain bindings. At the same time, processes in different jobs running on the same machine should share other bindings. A flat name space for bindings does not provide sufficient structure to handle these overlapping sets of shared bindings. The PPM Environment Manager provides an environment with a variety of contexts, allowing bindings to be, for example, machine-specific or application-specific. The environment, however, remains simple to use. The PPM Environment Manager was designed to support multiprocess programs, distributed programs, and programs offloaded in a network of machines. A prototype has been implemented on top of UNIX 4.3BSD.