e3

Important

This documentation is being migrated from European Spallation Source internal gitlab, some internal references are still present. Please contact us if any questions arise.

Welcome to the documentation for e3 - a toolkit designed to simplify EPICS development and deployment at the European Spallation Source.

What is e3?

e3 is a design concept and toolkit that:

  • Enables dynamic loading of EPICS modules at runtime without IOC build steps

  • Wraps upstream modules with site-specific modifications while avoiding forks

  • Resolves dependency graphs automatically via conda package management

  • Provides isolated environments to run multiple IOCs with different module sets on the same host

For example, when you install the stream module, conda automatically resolves and installs all its dependencies (such as asyn and base) in a virtual environment. You can then switch between different versions of any module simply by changing a single line in your IOC configuration, and you can simultaneously run IOCs that require different versions of e.g. EPICS base.

Prerequisites

e3 assumes familiarity with several key technologies. Before getting started, you should be comfortable with:

Tip

If you’re new to any of these technologies, we recommend reviewing the linked documentation before proceeding with e3.

Background

e3 evolved from earlier EPICS environments at ESS and draws inspiration from PSI’s EPICS environment. At its core, it uses the require module (originally developed at PSI) combined with conda package management to handle dependencies and site-specific modifications.

The toolkit handles complex dependency chains, compiles shared libraries, and manages installations - with much of the heavy lifting done by conda.

Note

e3 focuses on EPICS environments and module management. IOC management tools (systemd, procServ, conserver) and client applications (CS-Studio, DisplayBuilder, ChannelFinder) are separate systems.