# What is Deviant?

Deviant is a chaos engineering toolset for stress-testing cyber-physical systems.

Deviant allows you to perturb your system and characterize system behavior under interesting conditions. Deviant injects stresses or changes called "mutations" into systems and observes the effects using Auxon Modality and optionally Auxon Conform.

Deviant, along with these analysis tools, allows you to both investigate systems as they operate in real time as well as performing continuous system verification on isolated system components, simulated complete systems, or real complete systems.

A useful simplification is to think of Deviant as an incredibly flexible fault injection and analysis tool specializing in distributed, complex cyber-physical systems.

When used with the rest of the Modality suite of tools, it allows for much stronger than normal validation of the bounds of your entire system's operating parameters, faster investigation of issues when invalid or suspect behavior is found, and an easy path for continuous improvement of system specifications.

# Injecting Mutations

Deviant's core function is to inject mutations into your system.

Mutators are hooks into your system that can, when instructed, perturb its operation somehow.

Mutations can be as straightforward as sending a regular command to the system, or as subtle as simulating random hardware failures or physically causing message corruption as bits are fed across the wire.

A mutator mutator implementation can be as simple as an off-the-shelf plugin that interacts with a standard API exposed by your system or as deeply integrated as custom mutator built especially for performing a given mutation. The full range of mutations that are available to use on your system is determined by the mutators that it exposes. Each mutator defines the range of mutation that it has the capability to inject a for a particular kind of mutation, which the system is expected to be able to cope with.

Deviant can suggest possible mutations for you to inject, or you can inject mutations of your own design.

Deviant comes with pre-made mutators for various environments, and users can develop custom mutators with Auxon's Deviant SDK. For more information about developing custom mutators, refer to the following resources:

  • Overall Auxon SDK: https://github.com/auxoncorp/modality-sdk/
  • Example Mutator implementations in Rust: https://github.com/auxoncorp/modality-sdk/tree/main/client-libraries/rust/modality-mutator-server/examples
  • Documentation for Rust libraries used in mutator development:
    • Mutator Protocol: https://docs.rs/modality-mutator-protocol/latest/modality_mutator_protocol/
    • Mutation Plane Client: https://docs.rs/modality-mutation-plane-client/latest/modality_mutation_plane_client/
    • Mutator Server: https://docs.rs/modality-mutator-server/latest/modality_mutator_server/