Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ADR-012 — Stratégie de versionnement et stabilité ABI

Statut : Accepté — document fondateur. Édition directe autorisée en phase de design pré-ouverture publique ; immuable après ouverture publique (toute évolution via RFC, ADR-015). Catégorie : Gouvernance technique (versionnement, stabilité ABI).

Contexte

Air promet une ABI stable sur dix ans. Une telle garantie ne peut pas s’appliquer indistinctement à tout le code : elle figerait l’exploration et interdirait la moindre refonte interne.

Il faut donc dire la garantie s’applique, et comment une API passe de l’expérimental au contractuel.

Décision

Trois zones de stabilité différenciées :

  1. air-stable — APIs C-ABI publiques (couches 1, 2, partie consommable de 3 et 4). Stabilité ABI garantie sur 10 ans (5 ans release + 5 ans support étendu). Mécanisme : versioned symbols GNU/Linux. Deprecation : 5 ans minimum entre annonce et retrait. Modèle : glibc.

  2. air-internal — APIs Rust entre crates Air. Stabilité source SemVer dans un release majeur. Pas de stabilité ABI. Refactorisation libre entre majeurs.

  3. air-experimental — APIs nouvelles en évaluation. Aucune stabilité. Préfixées explicitement. Promotion à air-stable après un release majeur d’usage et RetEx.

Cas spéciaux : AirCom (schémas Cap’n Proto avec règles d’évolution strictes), entitlements (noms jamais renommés ni retirés), format .airapp (manifest-version lu depuis v1).

Période 0.x exploratoire de 12-24 mois après phase 4 (air-base 1.0) avant fixation air-stable définitive. Modèle inspiré de Rust.

Outils mainteneurs : air-abi-check, air-symver, air-deprecation-tracker à intégrer dès la phase 0.

Conséquences

Versionnement majeur.mineur.patch. Majeur tous les 5-10 ans. Mineurs ajoutent des APIs sans casse. Patches : bug fixes.

Support en parallèle : releases majeurs N et N-1 supportés simultanément. Cohabitation Side-by-Side sur une même machine (chemins versionnés, dispatch au runtime selon air-runtime demandé par l’app).

Alternatives rejetées

Aucune alternative n’a été consignée lors de l’instruction.


Licence du document : MPL 2.0