################################################
Integrating Software/Hardware Products with Flux
################################################
This is a landing page for vendors tasked with integrating their products
with the Flux Framework.
Overview of Flux
================
Flux is a workload manager built from a distributed message broker that can be
launched standalone, under another resource manager, or recursively within
itself. For a general orientation, start with the :doc:`flux-core
documentation <../index>`, which introduces the framework and links to guides
for starting an instance and interacting with it.
Because a single-user Flux instance starts anywhere without special privilege,
Flux fits naturally into converged and cloud environments as well as
traditional HPC clusters, and it composes with Kubernetes in both directions.
The `Flux Operator `_ runs Flux
inside a Kubernetes cluster, while `flux-usernetes
`_ runs user-space
Kubernetes as a job under Flux. Other framework projects extend Flux for these
settings; the :doc:`flux-core documentation <../index>` lists the key ones.
Comparison with Slurm
=====================
Flux covers much of the same ground as Slurm and can also run alongside it.
:doc:`admin_slurm` compares the two and outlines a migration path, while
:ref:`start_slurm` shows how to run Flux as a step manager inside a Slurm
allocation.
Contacting Flux Developers
==========================
The Flux development team tries to be responsive to queries on github, which
is the preferred means of contact. Feel free to open an issue or discussion
in `flux-core ` to get questions
answered or vet ideas.
Background for Flux plugin developers
=====================================
Most product integrations take the form of components that hook into Flux at
well-defined points. :ref:`background_components` shows where these fit in the
architecture.
New services can be added as broker modules, which run as threads inside the
broker and are loaded with :man1:`flux-module`; these are traditionally
written in C, but Flux also supports
:ref:`Python broker modules `, which run as separate
processes and are thus safer. These may may be the quickest path for vendor
prototyping.
Two other common plugin extension points are the job manager, documented
in :man7:`flux-jobtap-plugins`, and the job shell, documented in
:man7:`flux-shell-plugins`. :doc:`internals` collects further developer
resources.
Integrations that touch Flux wire protocols, data formats, or the job schema
should consult the :doc:`Flux RFC specifications `, which are the
authoritative references for these interfaces.
Licensing and development practices
===================================
Flux-core is free software licensed under LGPL-3.0, and the wider framework is
developed in the open on `GitHub `_ under
the Collective Code Construction Contract described in :doc:`RFC 1
`. Vendors are encouraged to follow the same model for their
integrations.
Where licensing permits, hosting an integration as a repository under the
`flux-framework `_ organization has real
advantages: it keeps the code visible to the Flux maintainers, who can flag
uses of unstable interfaces before they break; it invites review and
contributions from the broader community; and it ensures the work outlives any
single procurement. Open development also lets vendor and laboratory engineers
co-develop and test against real systems, as was done for the flux-coral2
project described below.
Even when a full open-source model is not possible, the practices RFC 1
codifies (small reviewed pull requests, public issue tracking, and continuous
integration) apply equally well to a vendor's own repositories.
AI coding assistants
====================
The Flux project encourages the use of AI coding assistants for integration
work. They can accelerate learning an unfamiliar codebase and drafting
plugins and broker modules. However, :doc:`RFC 1 ` is explicit
that a human Contributor takes full responsibility for every patch including
correctness, quality, and license compliance, regardless of whether an
assistant was used. In practice this means being prepared to understand and
defend in review anything an assistant proposes; unreviewed generated code is
not acceptable simply because a tool produced it.
Two conventions follow from this:
- An assistant SHOULD NOT be credited as an author or co-author (for example
with a ``Co-authored-by`` trailer), because authorship implies a
responsibility only a human can hold.
- Where an assistant was used, the commit message SHOULD record it with an
``Assisted-by:`` trailer of the form ``Assisted-by: NAME:MODEL_VERSION``,
for example ``Assisted-by: Claude:claude-opus-4.8``.
Example integration
===================
`flux-coral2 `_ is a repository
co-developed with HPE and LLNL to support the El Capitan system procurement,
and serves as a working example of integrating vendor hardware and software
with Flux.