Développement Rust et conseil, pour arrêter les erreurs de mémoire avant la mise en service.

Un composant plante sans qu'on sache pourquoi, la facture de serveurs grimpe, et quelqu'un dans votre équipe répète qu'il faudrait passer à Rust : il a peut-être raison, et nous pouvons le vérifier avec vous. Selon la réponse, nous écrivons le service, nous migrons vos composants un par un, ou nous vous conseillons de garder ce que vous avez.

Pourquoi une erreur de mémoire est si dure à attraper, et ce que Rust y change

Un programme emprunte sans arrêt des morceaux de mémoire puis les rend, un peu comme un casier de consigne dans une gare. Imaginez que vous rendiez le casier en gardant un double de la clé. Un autre voyageur s'y installe, et plus tard, sans le savoir, vous ouvrez et vous touchez à ses affaires. Rien ne se passe au moment de la faute. Le programme tombe bien après, ailleurs, souvent sous la charge, et la panne a le mauvais goût de disparaître dès qu'on l'observe de près. En C ou en C++, ces erreurs sont une cause classique de plantages et de failles de sécurité.

Le compilateur Rust, l'outil qui transforme le code en programme, tient le registre des casiers. Pour chaque morceau de mémoire, il sait qui le détient et qui l'emprunte, et si les comptes ne tombent pas juste, il refuse de fabriquer le programme. La plupart de ces erreurs s'arrêtent donc sur le bureau du développeur, avec un message qui dit où regarder, au lieu de ressurgir en production. C'est ce que nous aimons dans ce langage. Le reste en découle : personne ne fait le ménage dans la mémoire pendant que le programme tourne, donc les temps de réponse sont plus réguliers, et un service Rust se contente souvent de peu de mémoire et de processeur, ce qui peut alléger la facture de serveurs.

Ce registre a un prix. Rust s'apprend lentement, les développeurs sont moins nombreux sur le marché, une première version prend souvent plus de temps à écrire. Et il ne voit pas les erreurs de logique : une facture mal calculée se compile très bien. Pour une application de gestion à faible trafic, ou si votre équipe est à l'aise avec une technologie qui fait déjà le travail, nous vous dirons de la garder.

Nous sommes venus à Rust par le C++, écrit notamment chez KDE, et nous en avons gardé l'exigence. Rust est aujourd'hui notre premier choix pour les nouveaux backends, la partie invisible d'une application, et pour l'infrastructure. Connaître les deux aide à migrer du code C++ sans en perdre le comportement, et votre résultat passera toujours avant notre langage préféré.

Fig. 07Pourquoi Rust pour l'infrastructure
123RSGCC++
  • Sûreté mémoire : oui
  • Sans pause de GC : oui
  • Latence prévisible : oui

Rust vérifie la sûreté mémoire à la compilation et libère la mémoire sans ramasse-miettes : le tracé de latence reste plat, sans pause d'arrêt du monde.

Enregistreur de latence illustratif : les tracés montrent une forme typique, pas une mesure. Codetics conçoit en Rust les services d'infrastructure qui doivent rester sûrs et réguliers sous charge.

Du service complet au regard extérieur sur votre code

Tout dépend de ce que vous avez déjà et de ce que votre équipe veut garder en main.

Services et API

Une API est la porte par laquelle deux logiciels échangent des données. Nous écrivons ces services avec Axum ou Actix, de la conception à la mise en service. Les tests, les journaux et les mesures en font partie dès le début, car on ne répare bien que ce qu'on peut observer.

  • Nouveaux services backend et API
  • Traitements en arrière-plan et files de messages
  • Connexion à vos bases de données et à vos logiciels existants
  • Tests, journaux et mesures livrés avec le code

Migration progressive

La tentation, c'est de tout réécrire d'un coup, et nous essaierons de vous en dissuader : pendant des mois, vous entretenez deux systèmes et rien de nouveau n'arrive à vos clients. Nous remplaçons plutôt un composant C++, Java ou Node à la fois, là où le gain le justifie, et l'ancien et le nouveau cohabitent le temps de comparer.

  • Choix des composants où le gain est réel
  • Remplacement d'un composant à la fois, sans bascule générale
  • Comparaison de l'ancien et du nouveau sur le même trafic
  • Un plan de retour en arrière pour chaque étape

Outils d'infrastructure et performance

Les petits programmes qui font tourner vos systèmes, et les chiffres qui disent où partent le temps et l'argent. Nous mesurons avant d'optimiser, parce que le morceau lent n'est souvent pas celui que tout le monde soupçonne.

  • Outils en ligne de commande et agents installés sur vos serveurs
  • Mesure avant et après : temps de réponse, mémoire, processeur
  • Recherche des vrais goulets d'étranglement
  • Rapport écrit de ce qui a été mesuré et de ce qui a changé

Revue de code, conseil et embarqué

Un regard extérieur pour une équipe qui écrit déjà du Rust, ou un avis argumenté avant de s'y lancer. Rust peut aussi servir dans l'embarqué, le logiciel logé dans un appareil, si la cible matérielle s'y prête. Nous commençons par le vérifier.

  • Revue de code Rust, avec des remarques classées par importance
  • Avis sur le choix de Rust pour votre cas
  • Conseil d'architecture pour un service Rust
  • Étude de Rust sur une cible embarquée, quand c'est pertinent

Quand la question de Rust mérite d'être posée

Des situations données en exemple. Elles ne décrivent pas des projets passés.

  • Un service coûte trop cher à faire tourner

    Un composant très sollicité occupe à lui seul beaucoup de serveurs. Avant d'écrire une ligne, nous le mesurons et nous estimons ce qu'une version Rust pourrait économiser. Parfois, corriger une requête lente suffit, et c'est tant mieux pour vous.

  • Du C++ qui plante sans prévenir

    Des plantages impossibles à reproduire, des alertes de sécurité, des correctifs qui déplacent le problème : ce sont souvent les signes d'une erreur de mémoire. Réécrire ce composant en Rust en écarte une partie dès la compilation, et le reste du C++ peut rester où il est.

  • Un nouvel outil d'infrastructure

    Il vous faut un programme léger, livré en un seul fichier, qui tourne sur vos serveurs pendant des mois sans demander une surveillance constante. C'est le genre de travail où Rust est à son aise.

  • Une équipe qui se met à Rust

    Vos développeurs se battent avec le compilateur. C'est normal au début, et cela passe. Un avis extérieur avant que le code ne s'accumule peut éviter de figer de mauvaises habitudes, et une journée de conseil peut suffire.

Rust et ses voisins

Rust travaille rarement seul. Il rejoint presque toujours un système qui existe déjà, et il doit s'y entendre avec les autres.

  • Rust

    Le langage des nouveaux services, des outils d'infrastructure et des composants migrés.

  • Axum

    Un cadre de développement, c'est-à-dire une base toute prête pour écrire des services web et des API en Rust.

  • Actix

    Un autre cadre répandu pour les services web en Rust, retenu selon le projet ou le code déjà en place.

  • C++

    Une source de migration possible. Rust et C++ peuvent s'appeler l'un l'autre, ce qui permet d'avancer par petits morceaux dans un même programme.

  • Java

    Une source de migration pour un service précis. Le reste du système Java continue de tourner et dialogue avec le nouveau composant par une API, souvent sans aucune raison d'y toucher.

  • Node

    Node.js exécute du JavaScript côté serveur. Une source de migration pour un service trop gourmand, le reste de l'application pouvant rester en Node.

D'abord la question, ensuite le code

  1. 01

    Vous nous dites ce qui vous amène à Rust

    Ce qui coûte, ce qui plante ou ce que vous voulez construire, et ce que votre équipe maîtrise aujourd'hui. C'est souvent cette dernière réponse qui pèse le plus.

  2. 02

    Nous vérifions si Rust se justifie

    Si oui, le devis liste les composants visés, les mesures prévues et le prix. Sinon, nous vous disons ce qui suffirait, et vous gardez votre budget.

  3. 03

    Nous migrons un composant à la fois

    Chacun est vérifié et mesuré avec vous avant de passer au suivant. Vous décidez sur des chiffres, à chaque étape.

  4. 04

    Votre équipe reprend la main

    Elle reçoit le code, sa documentation et de quoi le faire évoluer, y compris si elle n'écrivait pas de Rust au départ. Un code que personne chez vous ne peut relire ne vous rendrait pas service.

Une journée pour décider, ou un projet si c'est déjà tranché

Journée de conseil senior

900 €

Sept heures de travail d'un ingénieur senior sur un sujet convenu : décider si Rust se justifie, relire du code, préparer une migration. TVA non applicable, art. 293 B du CGI.

Voir la journée de conseil

Projet Rust

Sur devis

Un service à écrire ou des composants à migrer, avec un périmètre clair et un devis détaillé avant de commencer.

Envoyer un brief Rust

Questions fréquentes

Un projet Rust se chiffre sur devis, parce que le prix dépend de la taille du composant, de ses liens avec le reste du système, des tests déjà en place et du niveau de votre équipe en Rust. Les tests comptent plus qu'on ne le croit : sans eux, impossible de vérifier que le nouveau composant se comporte comme l'ancien. Pour commencer petit, la journée de conseil à 900 € permet de décider si Rust se justifie et de cadrer le travail. TVA non applicable, art. 293 B du CGI.

Cela dépend du composant et de l'état du code, et nous n'annonçons pas de durée avant de les avoir vus. L'avantage d'avancer composant par composant, c'est que chaque étape a son propre calendrier prévisionnel dans le devis, et qu'elle est prévue pour que votre système continue de tourner si vous décidez de vous arrêter là.

Oui, et nous aimons autant que vos développeurs comprennent ce que nous faisons. Nous pouvons intervenir dans votre dépôt de code avec les accès que vous nous donnez, relire leurs contributions et leur expliquer nos choix. C'est une prestation au périmètre défini, à la journée ou sur devis, et non une mise à disposition de personnel.

Seulement pour les appels, fixés à l'avance. La revue de code et la migration se prêtent bien à l'écrit, et une décision écrite se relit encore six mois plus tard : propositions de modification du code, décisions et points d'avancement passent par vos outils si vous le souhaitez. Codetics travaille à distance par défaut.

Le code écrit spécifiquement pour vous devient le vôtre une fois le prix intégralement payé, par une cession exclusive des droits patrimoniaux, pour les besoins de votre activité. Nos composants préexistants restent à Codetics, avec une licence gratuite pour les utiliser avec vos livrables. Les bibliothèques libres de l'écosystème Rust gardent leurs propres licences. Le détail figure dans nos CGV et le devis.
Projet logiciel

Rust est-il le bon choix pour votre système ?

Dites-nous ce qui vous fait y penser : un coût, un plantage, un nouveau service. Vous aurez une réponse franche, y compris si la bonne réponse est de ne rien changer.

  1. 01Vous décrivez le besoin
  2. 02Nous clarifions le périmètre
  3. 03Vous recevez un devis détaillé
Discuter d'un projet