Executors
WBS dispatches Tasks to Executors. An Executor knows how to do particular types of Tasks, and can provide any additional context.
Executors are the small set of built-in operations that can touch the outside world or run programs. They are the only place where a computation can do something non-deterministic (like use the network), and each is designed so that its successful outputs are fully determined by its inputs.
Want Executor
Tasks directly related to planning, building, or manipulating files are executed by the Want Executor.
Here are a few examples:
want.pickextracts a subpath from a WantFS instance and returns a new instance containing just the subpath shifted to the root.want.placeis the opposite of pick.want.buildbuilds a want module provided as a WantFS instance.want.planis the planning portion of the build, separated so that it can be cached separately.
I/O Executor
This executor performs all input and output tasks. If something is incoming or outgoing to/from the build system, then it goes through this executor.
Linux Executor
This executor spawns Linux containers to execute tasks. Think of this as "Linux as a Service".
Wasm Executor
This executor runs WebAssembly programs.
MVM Executor
This executor performs computations defined in the Mycelium format.
Mycelium Procs can be applied to data with mvm.apply.
Mycelium Lazys can be evaluated with mvm.eval.
All of the want files are evaluated using this executor.
Spore Executor
This executor calls into the Spore compiler. It is used to compile want files, module configuration files, and Spore libraries into Mycelium programs, which can be executed by the MVM executor.