# RSE Subsystems

Subsystems provide a layer of abstraction on the set of services provided at lower layers. Subsystems make remote resources individually visible to their clients and expose the relationships among these resources - such as the parent-child relationship between directories and files on a remote file system.

There should typically be only one subsystem implementation for each type of remote resource. Minor differences between remote systems or the protocols required to access them should be provided by different implementations of an underlying service. For example, RSE provides a single exemplary file subsystem, but that file subsystem uses different file services to use different remote file access protocols. The duty of tieing a subsystem to its underlying service goes to the subsystem configuration.

A subsystem configuration creates subsystems of the kind it understands and, in addition, create them with the appropriate underlying service if there is one. These configuration classes are registered with RSE using the `org.eclipse.rse.core.subsystemConfigurations` extension point.

RSE supplies ready-made subsystems for files, command execution, and processes.