POINTERLAB

Développeur Rust Senior - Intégration Qt / Rust (h/f)

Posted 1 day ago

Experience
5+ years
Offer salary
Not specified
Location
Ile De France, France
Contract type
Freelance
Work arrangement
Remote
Starting Date
ASAP
Stack required
Rust
C++
crates.io
Qt
Qml
Qobject
Jira
Gerrit
Git

Company Description

View more

Parce 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

https://www.pointerlab.fr/recrutement