PCL may be written simply as simple text prepared with any text editor. However, the language comes with a supporting toolset which provides a graphical structure editor for PCL, tools which build a version of a software system from a PCL description and a version management system (the Repository) which provides attributed identification of versions of files.
Family entities are used to model the architecture of a set of systems or components with stable and variable parts. Variability may be represented using conditional expressions controlled by attribute values or through inheritance. Version descriptor entities are used in conjunction with family entities to define the architecture of a unique version of a system. The family entity is essentially a version set and the version descriptor entity defines a version within that set. When a version descriptor is associated with a family, the information in the version descriptor may be used to remove variability from the family description.
Every PCL family may have a number of associated physical objects (files) which themselves may be shared among several family entities. These represent the physical representation of the system as source code, etc. With tool descriptions, they are the main inputs to the system building process.