ADR004: Use Rust as programming language for the agent

  • Status: accepted

  • Deciders:

    • Florian Waibel

    • Lars Francke

    • Lukas Menzel

    • Bernd Fondermann

    • Oliver Hessel

    • Sönke Liebau

  • Date: 02.10.2020

Context and Problem Statement

Which programming language should be used in the implementation of the agent that will manage tool installations on servers?

Decision Drivers

  • The ability to deploy the agent as one binary with no external dependencies

  • Availability of well supported libraries for necessary operations

    • File IO

    • Network IO

    • systemd

  • IDE support

  • Debugging options

Considered Options

  • Java

  • Go

  • Rust

Decision Outcome

Chosen option: "Rust", because it came out best (see below)].

Positive Consequences

Rust is a Programming language * focused on safety and * provides memory safety without a garbage collector.

Negative Consequences

Rust is a Programming language * with a steep learning curve.

Pros and Cons of the Options

Java

  • Good, because easy to find developers

  • Good, because team is very familiar with it

  • Bad, because it needs a jvm as dependency and is not deployable as single binary

    • GraalVM has many drawbacks and licensing doubts as it is an Oracle product

Go

  • Good, because it compiles to a single binary on many platforms

  • Good, because Kubernetes also uses it

  • Good, because there is proper IDE support with debugging

  • Bad, because a new language to learn for many team members

  • Bad, because missing generics may be an issue and create less than readable code

  • Bad, because it is still a garbage collected language

Rust

  • Good, because it compiles to a single binary on many platforms

  • Good, because no garbage collection

  • Good, because it enforces a high level of security

  • Bad, because a new language to learn for many team members

  • Bad, because potentially very touch to find developers - arguably not a real drawback as people will need to be willing to learn something new anyway