Skip to content
This repository was archived by the owner on Oct 10, 2025. It is now read-only.

Commit 84204ce

Browse files
committed
docs: update research and project dictionary
1 parent 518ccf5 commit 84204ce

File tree

3 files changed

+246
-0
lines changed

3 files changed

+246
-0
lines changed
File renamed without changes.
Lines changed: 243 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,243 @@
1+
# Language Selection for Automation Tooling
2+
3+
## Key Requirements
4+
5+
The primary requirements for the selected language are:
6+
7+
1. **Cross-Platform Compatibility**: Must run seamlessly on Linux, macOS, and
8+
Windows.
9+
2. **Performance**: Should be fast enough for tasks like file I/O, data
10+
processing, and network requests.
11+
3. **Ecosystem and Libraries**: A rich ecosystem with libraries for common
12+
automation tasks is crucial.
13+
4. **Ease of Use and Learning Curve**: Should be accessible to a wide range of
14+
contributors.
15+
5. **Tooling and IDE Support**: Excellent tooling and IDE support are essential
16+
for developer productivity.
17+
6. **Developer Experience**: The language should be productive and easy for
18+
contributors to learn and use, enabling rapid development and maintenance.
19+
7. **Public Codebase Availability**: The volume of publicly available code is a
20+
key factor for AI-assisted development. A larger and more diverse codebase
21+
allows for better training of AI models, leading to more accurate and
22+
relevant code generation, faster prototyping, and more effective
23+
problem-solving.
24+
8. **Community and Contributor Pool**: A large, active community and a readily
25+
available pool of potential contributors are vital for the long-term health
26+
and sustainability of the project. This ensures better support, more
27+
third-party libraries, and a higher likelihood of attracting developers.
28+
29+
## Language Candidates
30+
31+
The following languages have been identified as strong candidates:
32+
33+
1. **Python**: A high-level, dynamically-typed language renowned for its
34+
simplicity, readability, and extensive ecosystem in the automation and
35+
DevOps space.
36+
2. **Go (Golang)**: A statically-typed, compiled language developed by Google,
37+
designed for building simple, reliable, and efficient software. It is the
38+
de-facto language of the cloud-native ecosystem (Kubernetes, Docker,
39+
Prometheus, OpenTofu).
40+
3. **Rust**: A statically-typed, compiled language focused on performance,
41+
safety, and concurrency. While the Torrust project itself uses Rust, its
42+
suitability for high-level orchestration scripts needs to be evaluated.
43+
4. **Perl**: A high-level, general-purpose, interpreted, dynamic programming
44+
language. It has a long history of being used for system administration
45+
and automation tasks.
46+
5. **Shell Scripting (Baseline)**: The current approach. It serves as a
47+
baseline for comparison.
48+
49+
## Comparison
50+
51+
### Evaluation Criteria
52+
53+
| Criterion | Python | Go | Rust | Perl | Shell Script |
54+
| :--------------------------------- | :--------------------- | :--------------------- | :------------------- | :----------------- | :----------------------------- |
55+
| **Ease of Testing** | ⭐⭐⭐⭐⭐ (Excellent) | ⭐⭐⭐⭐ (Very Good) | ⭐⭐⭐ (Good) | ⭐⭐⭐ (Good) | ⭐ (Poor) |
56+
| **Ecosystem & Libraries** | ⭐⭐⭐⭐⭐ (Excellent) | ⭐⭐⭐⭐ (Very Good) | ⭐⭐⭐ (Good) | ⭐⭐ (Fair) | ⭐⭐ (Fair) |
57+
| **Plugin Architecture** | ⭐⭐⭐⭐ (Very Good) | ⭐⭐⭐⭐ (Very Good) | ⭐⭐⭐⭐ (Very Good) | ⭐⭐⭐ (Good) | ⭐ (Poor) |
58+
| **Standard Library** | ⭐⭐⭐⭐⭐ (Excellent) | ⭐⭐⭐⭐ (Very Good) | ⭐⭐⭐ (Good) | ⭐⭐ (Fair) | ⭐⭐ (Fair) |
59+
| **Infrastructure Adoption** | ⭐⭐⭐⭐ (Very Good) | ⭐⭐⭐⭐⭐ (Excellent) | ⭐⭐⭐ (Growing) | ⭐⭐⭐ (Growing) | ⭐⭐⭐⭐ (Widespread) |
60+
| **Developer Experience** | ⭐⭐⭐⭐⭐ (Excellent) | ⭐⭐⭐⭐ (Very Good) | ⭐⭐ (Steep Curve) | ⭐⭐ (Steep Curve) | ⭐⭐⭐ (Good for simple tasks) |
61+
| **Public Codebase Availability** | ⭐⭐⭐⭐⭐ (Excellent) | ⭐⭐⭐⭐ (Very Good) | ⭐⭐⭐ (Good) | ⭐⭐⭐ (Good) | ⭐⭐ (Fair) |
62+
| **Community and Contributor Pool** | ⭐⭐⭐⭐⭐ (Excellent) | ⭐⭐⭐⭐ (Very Good) | ⭐⭐⭐⭐ (Very Good) | ⭐⭐ (Fair) | ⭐⭐⭐⭐⭐ (Ubiquitous) |
63+
| **Overall Suitability** | **Excellent** | **Excellent** | **Good** | **Fair** | **Poor** |
64+
65+
---
66+
67+
## Detailed Analysis
68+
69+
### 1. Python
70+
71+
- **Testing**: Excellent. The `pytest` framework is incredibly powerful and
72+
flexible, making it easy to write clean, maintainable tests. The
73+
`unittest` module is built-in. Mocking and patching are straightforward.
74+
- **Libraries**: Unmatched ecosystem for automation.
75+
- **Cloud SDKs**: Mature and well-supported libraries for all major cloud
76+
providers (AWS Boto3, Azure, GCP).
77+
- **OpenTofu**: The `python-terraform` library provides a wrapper, but
78+
it's not as integrated as the Go provider SDK.
79+
- **Parsing**: Native `json`, and robust libraries like `PyYAML` and
80+
`toml`.
81+
- **Extensibility**: Very good. Python's dynamic nature and support for entry
82+
points make plugin systems relatively easy to implement.
83+
- **Adoption**: Widely used. Ansible, a major configuration management tool,
84+
is built in Python. Many cloud provider SDKs have first-class Python
85+
support.
86+
- **Developer Experience**: Excellent. The syntax is clean and readable,
87+
leading to high productivity. It's a great language for scripting and
88+
building high-level logic.
89+
- **Public Codebase Availability**: Excellent. Python is one of the most popular
90+
languages on GitHub, with a vast and diverse range of projects. This
91+
provides an enormous dataset for training AI models, leading to excellent
92+
AI-assisted development.
93+
- **Community and Contributor Pool**: Excellent. Python has a massive, active, and welcoming
94+
community. This makes it easy to find help, libraries, and potential
95+
contributors.
96+
- **Downsides**: It's dynamically typed, which can lead to runtime errors.
97+
Performance is lower than compiled languages, but this is rarely a
98+
bottleneck for orchestration scripts.
99+
100+
### 2. Go (Golang)
101+
102+
- **Score**: ⭐⭐⭐⭐ (Very Good)
103+
- **Testing**: Very Good. Testing is a first-class citizen, built into the
104+
toolchain. It's simple to write unit tests, benchmarks, and examples.
105+
Table-driven tests are a common and effective pattern.
106+
- **Libraries**: Very Good.
107+
- **Cloud SDKs**: Official and well-maintained SDKs for all major cloud
108+
providers.
109+
- **OpenTofu**: **Excellent support**. Go is the native language of
110+
Terraform, OpenTofu, Packer, and most HashiCorp tools. The official
111+
provider development kits are in Go.
112+
- **Parsing**: Excellent support for JSON, YAML, and TOML.
113+
- **Extensibility**: Very good. Interfaces and packages provide a solid
114+
foundation for building extensible systems.
115+
- **Adoption**: **The standard for cloud-native tools**. Docker, Kubernetes,
116+
Prometheus, and Terraform are all written in Go. This is its biggest
117+
strength.
118+
- **Developer Experience**: Very good. The language is simple, compilation is
119+
fast, and it produces a single, statically-linked binary, which simplifies
120+
deployment immensely.
121+
- **Public Codebase Availability**: Very Good. Go is prevalent in the cloud-native space,
122+
with many high-profile open-source projects (Docker, Kubernetes, etc.)
123+
providing a rich source of high-quality code for AI training.
124+
- **Community and Contributor Pool**: Very Good. Go has a strong and growing community,
125+
particularly in the infrastructure and backend development space.
126+
- **Downsides**: Error handling can be verbose (`if err != nil`). The lack of
127+
generics in older versions was a pain point, but this has been addressed.
128+
129+
### 3. Rust
130+
131+
- **Score**: ⭐⭐⭐ (Good)
132+
- **Testing**: Good. The testing framework is built-in and supports unit and
133+
integration tests. However, it's generally more verbose than Python's or
134+
Go's.
135+
- **Libraries**: Good, but less mature for high-level orchestration compared
136+
to Python and Go.
137+
- **Templates**: `Tera` (a Jinja2-like engine) and `Handlebars` are
138+
available.
139+
- **OpenTofu**: No mature libraries. Interacting with OpenTofu would
140+
likely require wrapping the CLI.
141+
- **Extensibility**: Excellent. Traits and enums make for a very powerful and
142+
safe plugin system.
143+
- **Adoption**: Growing, but not a mainstream choice for DevOps tooling yet.
144+
The learning curve is steep.
145+
- **Developer Experience**: Good, but can be challenging. The borrow checker,
146+
while providing safety, adds complexity that may not be necessary for
147+
orchestration scripts.
148+
- **Public Codebase Availability**: Good. The amount of public Rust code is growing
149+
rapidly, especially in systems programming, web assembly, and CLI tools.
150+
The quality is generally high.
151+
- **Community and Contributor Pool**: Very Good. Rust has a passionate, helpful, and rapidly
152+
growing community.
153+
- **Downsides**: Steep learning curve. The focus on safety and performance is
154+
often overkill for high-level automation scripts.
155+
156+
### 4. Perl
157+
158+
- **Score**: ⭐⭐ (Fair)
159+
- **Suitability**: Perl is a powerful and mature language, often praised for its
160+
text-processing capabilities. It was a de-facto standard for system
161+
administration and web development (CGI scripts) for many years. However, its
162+
popularity has declined, and it's often considered a legacy language.
163+
- **Ecosystem**: The Comprehensive Perl Archive Network (CPAN) is vast but can
164+
be difficult to navigate. Many libraries are old and may not be actively
165+
maintained.
166+
- **Extensibility**: Good. Perl's module system is powerful, but the syntax
167+
can be dense and difficult to read, making it less approachable for new
168+
contributors.
169+
- **Adoption**: Low for new projects. It's still used in many legacy
170+
systems, but it's rarely chosen for new toolchains.
171+
- **Developer Experience**: Fair. Perl's "There's more than one way to do
172+
it" (TMTOWTDI) philosophy can lead to code that is difficult to read and
173+
maintain. The syntax is often criticized for being "write-only."
174+
- **Public Codebase Availability**: Good. The Comprehensive Perl Archive Network (CPAN)
175+
is one of the oldest and largest code repositories. However, much of the
176+
code is legacy, which might be less relevant for modern AI training.
177+
- **Community and Contributor Pool**: Fair. While the core community is dedicated, it is much
178+
smaller and less active in new projects compared to Python, Go, or Rust.
179+
- **Downsides**: The syntax is complex and often considered "ugly." The
180+
community is smaller and less active than for other languages. Finding
181+
developers with Perl experience can be difficult.
182+
183+
### 5. Shell Scripting (Baseline)
184+
185+
- **Score**: ⭐ (Poor)
186+
- **Testing**: Poor. Testing shell scripts is notoriously difficult. Tools
187+
like `shellcheck` help, but robust testing requires significant effort.
188+
- **Libraries**: N/A. Relies on system binaries (`curl`, `jq`, `sed`, `awk`).
189+
- **Extensibility**: Poor. Extending shell scripts is manual and error-prone.
190+
- **Adoption**: Ubiquitous, but not ideal for complex logic.
191+
- **Developer Experience**: Poor for anything beyond simple scripts. Lack of
192+
modern language features makes it hard to maintain.
193+
- **Public Codebase**: Good. Countless shell scripts are available online, but
194+
they often lack standardization, documentation, and quality control, making
195+
reuse difficult.
196+
- **Community and Contributor Pool**: Excellent. The user base is massive, but it is not a
197+
formal community. Finding skilled contributors for a structured project can
198+
be challenging.
199+
- **Downsides**: Error handling is fragile, and it's easy to write
200+
unmaintainable code. Not suitable for building a robust, extensible
201+
toolchain.
202+
203+
## Decision
204+
205+
**Go** is the recommended language for the new Torrust Tracker automation
206+
toolchain.
207+
208+
## Rationale
209+
210+
While Python is an extremely strong contender and would also be a valid choice,
211+
**Go's unparalleled alignment with the modern cloud-native and Infrastructure
212+
as Code ecosystem makes it the superior choice for this specific project.**
213+
214+
1. **Native IaC Ecosystem**: Terraform, OpenTofu, Packer, and nearly all major
215+
cloud-native tools are written in Go. By using Go, we are aligning with the
216+
language of the tools we are automating. This provides access to the best
217+
SDKs, libraries, and community expertise. We can directly use the same
218+
libraries that OpenTofu providers use.
219+
2. **Single Binary Deployment**: Go compiles to a single, statically-linked
220+
binary with no external dependencies. This dramatically simplifies the
221+
deployment and distribution of our new installer. We can ship a single file
222+
that runs on any target system, without worrying about Python versions,
223+
virtual environments, or dependency conflicts.
224+
3. **Performance and Concurrency**: While performance is not the primary
225+
concern, Go's efficiency and built-in support for concurrency are
226+
significant advantages. This will be beneficial for running tasks in
227+
parallel, such as provisioning multiple resources or checking multiple
228+
endpoints simultaneously.
229+
4. **Static Typing and Simplicity**: Go's static typing catches many errors at
230+
compile time, a significant improvement over shell scripts and Python. Its
231+
simplicity and small number of language features make it easy to learn and
232+
maintain, which is crucial for an open-source project with many
233+
contributors.
234+
5. **Strong Standard Library**: Go's standard library is excellent for
235+
building command-line tools and network services, covering most of our needs
236+
without requiring numerous third-party dependencies.
237+
238+
While Rust is the language of the main Torrust project, it is not the best fit
239+
for this high-level orchestration tool. The complexity and development
240+
overhead of Rust are not justified for a tool that primarily glues together
241+
other processes and APIs. Using Go for tooling and Rust for the core tracker
242+
application is a common and effective polyglot strategy, playing to the
243+
strengths of each language.

project-words.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Ashburn
55
Automatable
66
autoport
77
bantime
8+
Boto
89
buildx
910
cdmon
1011
cdrom
@@ -16,6 +17,7 @@ codel
1617
commoninit
1718
conntrack
1819
containerd
20+
CPAN
1921
CPUS
2022
crontabs
2123
dialout
@@ -136,6 +138,7 @@ tfstate
136138
tfvars
137139
tlsalpn
138140
tlsv
141+
TMTOWTDI
139142
tulpn
140143
UEFI
141144
usermod

0 commit comments

Comments
 (0)