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
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