Module sources consist of two main parts:

  1. RPM package sources

  2. module definition file

Both of these are stored in Fedora dist-git. Dist-git is organized into repositories, each having multiple branches.

When creating a new module, follow the process for adding new modules to Fedora.

Stream branching

Modularity introduced Stream Branching (formerly Arbitrary Branching) that is used for both module definitions and RPM packages that are part of modules.

Modules

Module definitions are stored in the /modules namespace and only consist of a modulemd file that defines the module itself.

Each module has a repository with branches corresponding to different streams. The repository and branch naming map to the module ID:

  • Repository name → module name

  • Branch name → stream name

  • Commit timestamp → module version

Packages

RPM Packages are stored in the /rpms namespace, and are also organized into stream branches. However, only the repository name map to the name of the package:

  • Repository name → package name

  • Branch name doesn’t map to anything, but is used as a reference in the module definition.