Notes for Lmod Principals:

Module Naming

FullName -> shortname/version ^^^^^^^^^^^^^^^^^^^^^^^^^^^t

One Name Rule

It is really the one shortname (or sn) rule. A user can only load one module named “gcc”

ModuleTable

The current state of modules is stored in a Lua table (The key-value pairs are stored in a table. In this case it is called the ModuleTable. This internal table is written out into the environment and converted into base64 encoding and stored in blocks of 256 characters.

Load means load

When a user requests a module to be loaded, it is loaded even if it is already loaded. If a user requests “module load foo” and foo is already loaded, then “foo” is unload and reloaded.

Modules loading other module should use depends_on()

Unloading a module can never fail

Even if unloading a module has an error in it, it is unloaded. The error is treated as a warning.

Base64 encoding is used a great deal

Encoding text strings can be converted to base64 encoding. This means that all spaces and quotes are hidden from shell interpretation.

The ModuleTable is encoded as: _ModuleTable001_ and _ModuleTable_Sz_

Other environment variables used by Lmod internally all start with __LMOD_

Lmod communicates with users via a group of env. vars

Thing like LMOD_CMD and LMOD_DIR etc.