is a project with the goal to preserve Motion Twin's games and player communities.
# Starting TMIET
Eternaltwin is a large project with more than fifty volunteers working in dozens of teams having already published multiple games
through more than 500.000 lines of code!
As with any large project, it may be hard to keep track of what is going on. This Month In Eternaltwin
(TMIET) is new series of articles to bring you news about the project every month.
This first article will focus on the main website itself, but we would like to start bringing news about the games. We would like these articles to be a community effort. You can submit content on this issue for the next edition
, both contributor and regular player are invited to share content.
# Moving to Rust
The very first line of Eternaltwin was written on March 30th 2020. The code was initially based on a previous project: Eternalfest
. Using an older codebase allowed us to start more quickly, but it alo meant that we were inherit the technical issues. This project used a Node.js server and the TypeScript server. It tended to slow down over time due to memory leaks, eventually becoming unresponsive. It's also hard to provide helpful errors due to TypeScript weak system to track possible errors.
The big theme in 2021 was to solve these issues by cleaning up all the code. More specifically, we slowly rewrote the server components using the language Rust. Rust is a modern high-performance language with some of most advanced tooling available today. As of today, this long rewrite is almost complete. Only the "forum" component still uses the old TypeScript code, all the other components have been rewritten and new components are directly written in Rust: user management, authentication, archives, scrapers, linked accounts, etc.
The new components were migrated progressively: we enabled them one by one over the year. Overall this rewrite is a success: there was no outage caused by the rewrite and the stability of the server increased. With the rewrite almost complete, the next steps will be to provide more helpful error messages and simplify user management: registration, authentication and account linking.
If you want to help to complete the transition or improve user management, please contact `Demurgos` on Discord: any help is welcome.
# Making it official
The official status of the project is currently fuzzy. We are a group of the internet. This kind of informal status was fine at the beginning when we where just starting. We had more pressing issues and did not know each other very well.
But things have changed. As mentioned above, Eternaltwin is now a large project. We also received way more donations than expected
, and we feel that more oversight over funds is warranted. It would be better if we had a more official status. This idea was regularly discussed on the Discord server, but it was hard to find time for it. Now is the time.
We decided to register Eternaltwin as a French association. We reached out to major contributors and are currently discussing the details of how the association will be structured. The current draft would be to have a direction (founder, treasurer, and secretary) and a working group with the project leaders. The decisions would have to be decided by the direction and representatives of the members. We will keep you updated as things progress.
# On the project name
Is it Eternal Twin, Eternal-twin, Eternal-Twin, Eternaltwin or EternalTwin?
It's a small issue, but still: it's bad that it's unclear what is the real name of the project. It's also worse now that we want to register as an official association.
To settle it once and for all: the official name is "Eternaltwin", without any space or dash.
Because of the initial confusion, there are multiple places where the project name is spelled differently. We are trying to fix all the spelling to "Eternaltwin": let us know if you spot a wrong spelling.
When an identifier is required for the project, prefer the following identifiers:
We will gradually update our domain name, Gitlab group and software packages to reflect this policy; but we have to make sure we avoid any breakage.