Skip to content

D6 — Toolchain Rust et crates admises #98

Closed

Description

@hoklims

Question

Toolchain Rust et crates admises

Bloque

R1

Recommandation du plan

Toolchain stable épinglée ; chaque crate autorisée explicitement

C'est un avis, pas une décision. Le responsable tranche dans un commentaire, puis ferme l'issue.


Source : plan de migration TS → Rust, validé par les deux mainteneurs.
Responsable : @SebastienElet. Une seule personne par issue ; l'autre peut relire, sans que ce soit requis.

Activity

  1. added this to the R1 milestone on Oct 26, 2026
  2. SebastienElet commented on Oct 28, 2026

    @SebastienElet
    Collaborator

    Décision validée explicitement par @SebastienElet le 28 octobre 2026.

    Pour le superviseur opt-in R1, je retiens les choix suivants, conformément à l’ADR 0002 accepté.

    Toolchain et mises à jour

    Rust 1.99.1, stable publiée le 15 octobre 2026, sera épinglée exactement dans rust-toolchain.toml, avec Cargo associé, profil minimal, rustfmt et clippy. Le champ rust-version exprime un minimum et ne remplace pas cet épinglage. Annonce Rust, rustup, Cargo.

    Les dépendances directes seront épinglées exactement ; Cargo.lock sera versionné et les builds de livraison utiliseront --locked. Cela fixe la résolution des dépendances, sans promettre des binaires reproductibles octet pour octet. Documentation Cargo.

    Une revue sera faite à chaque nouvelle stable Rust, avec priorité aux correctifs de sécurité. Toute évolution de toolchain, version de crate, graphe transitif ou features passera par une PR explicitement approuvée, après vérification des licences, dépendances, compatibilité et preuves R1 pertinentes. Aucune mise à jour automatique ne sera livrée.

    Liste minimale admise, conditionnée aux plateformes retenues dans D7

    Crate Rôle et licence Dépendances pertinentes Alternative sans cette crate
    libc =0.2.191 Bindings Unix : signaux, attente et appels propres à l’OS. MIT ou Apache-2.0. Aucune dépendance active avec les features ordinaires ; rustc-std-workspace-core optionnelle restera désactivée. Déclarations FFI manuelles et entretien des ABI ; std couvre le lancement, mais pas tous les mécanismes nécessaires.
    windows-sys =0.61.2 APIs Win32 pour lancement, handles et Job Objects. MIT ou Apache-2.0. windows-link ^0.2.1, verrouillée à 0.2.1 ; features limitées aux APIs nécessaires. FFI Win32 manuelle, avec structures et conventions d’appel à maintenir.
    windows-link 0.2.1 Liaison aux fonctions Windows ; transitive uniquement. MIT ou Apache-2.0. Aucune. Déclarations de liaison manuelles ; conserver windows-sys impose cette dépendance.

    Ces admissions n’approuvent aucune plateforme par anticipation. Aucun runtime async, parseur CLI, sérialiseur ou crate de supervision supplémentaire n’est admis pour R1 à ce stade.

    nix ajouterait notamment libc, bitflags, cfg-if et cfg_aliases. process-wrap fournit des groupes/sessions Unix et des Jobs Windows, sans établir la terminaison d’un descendant sorti du groupe Unix. Leur ajout n’est pas justifié actuellement. Dépendances de nix, mécanismes de process-wrap.

    Garanties encore soumises à expérience

    • Windows : piste retenue pour E2 : Job Object sans breakaway, enfant créé suspendu, affecté avant reprise, KILL_ON_JOB_CLOSE et handle du Job non hérité. Vérifier les Jobs imbriqués, les échecs d’affectation et la disparition effective des descendants. Les Jobs couvrent les processus associés ; les créations indirectes via un service ne sont pas automatiquement couvertes. Microsoft, fermeture du Job.
    • Linux : un subreaper récupère les orphelins mais ne les termine pas. Son association à une découverte et un nettoyage bornés doit être éprouvée contre double fork, setsid, forks concurrents et réutilisation des PID. Un cgroup v2 avec cgroup.kill offre un mécanisme collectif, mais exige des droits et un placement avant exécution à établir dans l’environnement retenu. Subreaper, cgroups.
    • macOS : aucun mécanisme suffisamment établi dans cette investigation. Un groupe de processus ne couvre pas un descendant ayant créé une nouvelle session ; Apple marque NOTE_TRACK comme non supporté depuis macOS 10.5. Une énumération périodique des descendants reste une piste avec des courses, pas une garantie. D7 doit tenir compte de cette limite. Source Apple XNU.

    E2 #109 doit produire le témoin rouge sur le chemin actuel puis vert sous superviseur, en vérifiant l’absence effective des descendants après nettoyage. Inclure timeout, annulation, sortie du parent et échec du nettoyage ; aucun échec d’infrastructure ne doit devenir un kill crédité.

    E4 #110 doit vérifier l’installation publiée sur toute la matrice D7, arm64 compris, et le binaire Windows sur les liens créés par WSL. Les goldens CLI/MCP option désactivée et le diagnostic doctor restent des preuves de livraison R1. trusted-local reste explicitement non sandboxé.

    Sources et limites de cette décision

    #98 est une sous-issue de R1 #85, aux côtés de D2 #97, D7 #99, E2 #109 et E4 #110. D2 reste une décision distincte de distribution ; les triplets exacts, l’ABI Linux, les versions minimales des OS et les environnements requis restent à fixer dans D7.

    Le plan de migration lié est resté inaccessible : l’accès direct fournit une enveloppe sans son contenu et le navigateur était indisponible. Aucun choix n’a été déduit de son contenu supposé.

    Analyse menée sur macOS arm64, au SHA 6c140e293affafd6be4f4c7d78d9d1aefbf061fd. Le code actuel utilise un groupe Unix ou taskkill /T ; le test du descendant détaché vérifie le retour dans un délai borné, sans vérifier sa disparition. Aucune expérience E2/E4 ni compilation Rust n’a été exécutée ; pnpm check n’a pas été lancé pour cette préparation sans changement. Aucun fichier, ADR, toolchain ni dépendance n’a été modifié ou ajouté.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:rustRust crates and native binarykind:decisionOpen decision to settle (Dn, DBn)

Projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions