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