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