# 12.6. OpenPMIx terminology

OpenPMIx is a medium-sized project containing a number of different sub-systems and a relatively big code base. Let’s first cover some fundamental terminology in order to make the rest of the discussion easier.

First, note that you will see `OpenPMIx` frequently referred to as just `PMIx`. While there is a separate PMIx Standard, there are (as of this writing) no alternative implementations of that Standard. In fact, the Standard post-dates the library by several years, and often lags behind the library in terms of new definitions. Thus, it is customary to refer to the library as just `PMIx` and drop the longer name - at least, until some other implementation arises (which many consider unlikely).

## 12.6.1. Modular Component Architecture (MCA)

See this section for a discussion of the Modular Component Architecture (MCA). Seriously. Go read it now. From reading that section, you should understand the following terms before continuing reading these docs:

- Framework

- Component

- Module

- Parameters (variables)

Frameworks, components, and modules can be dynamic or static. That is, they can be available as plugins or they may be compiled statically into libraries (e.g., `libpmix`).

In PMIx, `configure` defaults to:

- Building `libpmix` as a dynamic library

- Linking all components directly into the `libpmix` libraries (vs. compiling them as independent DSOs)

These defaults can be modified by command line arguments to configure.

## 12.6.2. Required 3rd party libraries

Note that PMIx uses two third-party libraries for core functionality:

- Libevent or Libev

- Hardware Locality (“hwloc”)

These are discussed in detail in the required support libraries section.