
Développeur Rust Senior - Intégration Qt / Rust (h/f)
Posted 1 day ago
Company Description
View moreParce que nous sommes convaincus qu’un modèle alternatif peut apporter améliorer la réputation de l’ESN alors on a choisi cette voie.
Nous pensons que la reconnaissance du travail passe avant tout par une répartition juste des richesses.
↳ Un consultant motivé dans un modèle équitable, c’est plus agréable pour tout le monde… et surtout plus efficace !
Nous sommes convaincus que des consultants épanouis et dont les intérêts sont alignés avec ceux des dirigeants sont plus productifs et engagés.
↳ Un consultant qui travaille avec le sourire, c’est aussi plus rentable qu’un consultant démotivé - et bien moins coûteux sur le long terme.
Nous savons qu'une bonne qualité de vie en entreprise réduit significativement le turnover.
↳ Un faible turnover, c’est moins d’embêtements pour vous... et des économies substantielles !
Job Description
1. Objectif de la mission
Nous recherchons un(e) Senior Rust Developer pour travailler aux côtés d’une équipe interne spécialisée dans Qt Bridge for Rust, sur la conception, l’implémentation et la sécurisation de la bibliothèque QtBridge Rust.
2. À propos du projet
Qt Bridge for Rust permet aux développeurs de créer des interfaces utilisateur Qt Quick / QML avec un backend entièrement développé en Rust, sans avoir à écrire de code C++.
Les types Rust sont exposés au moteur QML via des attribute macros, qui génèrent à la compilation les éléments nécessaires au niveau QMetaObject.
La bibliothèque s’appuie sur CXX et CXX-Qt pour assurer l’interopérabilité entre C++ et Qt.
3. Missions
Le/la développeur(euse) contribuera au développement de code Rust de niveau production et, lorsque nécessaire, de code C++, ainsi qu’aux tests et à la documentation du dépôt QtBridge Rust.
Le backlog est public et peut être consulté avant le début de la mission.
Les priorités au démarrage de la mission concernent principalement :
Le modèle objet et la sécurité mémoire.
Le système de types.
Les macros.
Le travail est attribué ticket par ticket et réorganisé à chaque sprint. Le/la développeur(euse) ne sera pas responsable d’une liste fixe de tâches prédéfinies.
3.1 Hors périmètre
Modifications de Qt lui-même (qtbase, qtdecLarative) - prises en charge par les équipes dédiées, même si le/la développeur(euse) peut être amené(e) à signaler ou proposer certaines modifications.
Gestion produit, responsabilité de la roadmap et gestion des releases.
Support utilisateur final et gestion de la communauté.
Toute activité nécessitant des droits de commit autres que les droits standards de contributeur Gerrit.
4. Compétences requises et souhaitées
L’équipe interne possède déjà une expertise approfondie de la plateforme Qt : système meta-object, fonctionnement interne du moteur C++/QML et génération de code permettant de faire le lien entre ces éléments.
Nous recherchons donc principalement un développeur dont l’expertise est centrée sur Rust : conception d’API idiomatiques, écosystème des crates, macros procédurales et ingénierie de build et de release cross-platform.
Une expertise approfondie de Qt est appréciée, mais ce n’est pas l’objectif principal du poste. La capacité à lire et à comprendre la couche C++ est suffisante.
4.1 Compétences obligatoires
M1 - Rust niveau senior
Expérience en production avec :
L’ownership et le borrowing.
Rc/RefCell/Weak
Unsafe et les règles d’aliasing.
Pin
Les API utilisant des paramètres de lifetime.
M2 - FFI Rust ↔ C++
Expérience en FFI Rust/C++, idéalement avec CXX, ainsi que la capacité à concevoir des wrappers Rust sûrs autour des cycles de vie des objets C++.
M3 - Développement de macros procédurales
Expérience avec :
Syn
quote
proc-macro2
ainsi qu’une bonne maîtrise de la gestion des erreurs de compilation et de la génération de diagnostics clairs.
M4 - Conception et stabilisation d’une API de bibliothèque publique
Maîtrise de :
La conception d’API Rust idiomatiques.
SemVer.
La gestion des breaking changes.
La dépréciation.
M5 - Ingénierie de build Rust cross-platform
Expérience avec :
build.rs
Le linking avec des bibliothèques natives sous Linux.
MSVC.
macOS.
Le maintien d’un workspace fonctionnel sur les trois plateformes.
M6 - Tests et qualité
Tests pour chaque modification.
Code conforme à cargo fmt
Aucune nouvelle alerte Clippy.
Aucun nouvel unsafe sans justification documentée de sécurité.
Documentation rustdoc pour toutes les API publiques.
M7 - Threat modeling et revue de sécurité
Expérience en analyse des menaces et en revue de sécurité d’une bibliothèque système, notamment :
La production d’une analyse structurée des menaces.
L’analyse des risques liés à la sécurité mémoire.
L’analyse des risques liés aux frontières de confiance sur une surface FFI Rust/C++.
M8 - Connaissance de Qt 6
Connaissance pratique de :
QObject
Properties.
Signals/slots.
QVariant/QMetaType
La gestion de propriété des objets QML.
C++17, avec une capacité suffisante pour lire et modifier la couche C++ du bridge.
M9 - Gerrit
Être à l’aise avec les revues de code de type Gerrit, ainsi qu’avec une culture de développement basée sur des commits de petite taille et des revues de code fréquentes.
M10 - Anglais professionnel
Maîtrise professionnelle de l’anglais, aussi bien à l’écrit qu’à l’oral.
4.2 Compétences souhaitées
Contributions antérieures à Qt, CXX-Qt, qmetaobject-rs ou à des projets de bindings similaires.
Expérience en développement d’applications QML / Qt Quick.
Expérience dans la publication et la maintenance de crates sur crates.io.
Expérience avec :
rcc
Expérience en Rust asynchrone (Tokio) intégré à une boucle événementielle native.
D6
Posséder un Qt Account et avoir signé le Qt Contributor Licence Agreement.
5. Mode de travail
Revue de code
Tout le code passe par Gerrit, sur la branche dev du projet qt/qtbridge-rust, avec Task-number : ou Fixes : dans le footer du commit et une approbation d’un mainteneur Qt.
Les Pull Requests GitHub ne sont pas acceptées.
Le développeur doit disposer d’un Qt Account et accepter le Qt Contributor Licence Agreement avant sa première contribution.
Développement public
Le dépôt est public : tout le code contribué devient publiquement visible.
La roadmap et les versions Qt non publiées sont considérées comme du code pré-release confidentiel.
Planification et communication
Utilisation de Jira pour le suivi des tâches, qui doit être régulièrement mis à jour par le développeur.
Le développeur doit également créer des tickets lorsqu’il identifie des défauts.
Réunions hebdomadaires sur Teams.
Statut écrit quotidien.
Communication via le chat interne et les e-mails.
Participation au forum public et au Discord.
CI
Les modifications sont contrôlées par la Coin CI sur toutes les plateformes supportées.
Le prestataire est responsable de maintenir la CI au vert sur ses propres modifications, y compris en cas de problèmes spécifiques à une plateforme.
6. Exigences pour la candidature
La candidature doit contenir :
1. Profil du développeur proposé
CV correspondant aux critères M1 à M10.
Disponibilité garantie en % FTE.
Préavis.
Date de disponibilité la plus proche.
Fuseau horaire de travail.
Absences prévues durant les six premiers mois.
2. Preuves de compétences en Rust
Fournir des liens vers du code Rust public développé par le candidat :
Crates.
Dépôts Git.
Contributions / patches fusionnés.
Une expérience impliquant notamment :
unsafe
FFI.
Macros procédurales.
Interopérabilité C++.
sera particulièrement pertinente.
Lorsque les travaux ne sont pas publics, le candidat devra décrire des expériences comparables.
3. Tarification
Taux journalier en EUR hors TVA.
4. Références
Deux clients pour lesquels le candidat a réalisé des travaux comparables dans le domaine des systèmes ou des bibliothèques, avec leur autorisation pour être contactés.
Les devis doivent rester valables pendant au moins 60 jours.
Les questions doivent être envoyées par écrit en indiquant la référence RFQ-QTBRIDGES-RUST-2026-01, avant la date limite prévue. Les réponses présentant un intérêt général seront communiquées à tous les soumissionnaires.
6.1 Évaluation technique
Les candidats présélectionnés seront invités à un entretien technique d’environ 90 minutes portant sur :
Les connaissances en Rust.
Les sujets techniques généraux.
Éventuellement, certaines questions relatives à Qt Bridges.
8. Conditions générales
Cette demande de devis (RFQ) ne constitue pas une offre et n’engage pas le client à attribuer un contrat ni à rembourser les frais liés à la préparation d’une candidature ou d’un devis.
Tous les livrables, notamment le code, la documentation et les notes de conception, sont remis au client avec le droit d’être publiés sous la double licence du projet.
Le prestataire garantit que les contributions sont originales ou correctement licenciées.
Toute crate tierce introduite doit être compatible avec les licences autorisées, notamment MIT / Apache-2.0 ou équivalent, et doit être déclarée.
Toute nouvelle dépendance tierce nécessite une approbation préalable.
Les informations concernant les versions Qt non publiées, les roadmaps et le code pré-release sont confidentielles et couvertes par un NDA.
Durée : 6 mois à temps plein, avec possibilité de prolongation de 6 mois
Démarrage : dès que possible
