État au 30 octobre 2026. Ce dossier décrit blob.in 0.1.0, la projection publique au commit 4278b06. Les liens soulignés mènent aux fichiers de ce commit, figés.

Dossier · La surface native

blob.in — une surface qui n'invente aucun pixel

La surface ne calcule aucune géométrie : chaque pixel de la vue vient d'une image reçue du moteur, par un contrat strict. Quand quelque chose échoue, elle le montre ; elle ne le remplace jamais.

0.1.0 Licence MIT moteur non publié

Sur cette page
  1. En une image
  2. Ce que fait la surface
  3. Le contrat
  4. Les pannes
  5. Ce qui est prouvé
  6. Historique
  7. Ce que ce n'est pas
  8. Selon qui vous êtes
  9. Pour aller plus loin
0pixel de la vue calculé par la surface : tout vient du moteur
19pannes provoquées par un serveur de test, chacune montrée, jamais masquée
3moteurs de calcul : processeur, CUDA, Vulkan, sans repli silencieux
225tests qui passent dans la version publique, compilée seule

En une image

L'analogie

Pensez à un projectionniste. Il projette la bobine qu'on lui confie, sans la retoucher. Si une image arrive brûlée, il la montre brûlée, et il le note au registre ; il ne la remplace pas par une image de son cru pour que la salle ne voie rien.

blob.in est ce projectionniste. Un moteur calcule des formes ; la surface les affiche à l'écran, vérifie chaque image qu'elle reçoit, et dit tout haut ce qui ne va pas.

Ce que fait la surface

blob.in est une application de bureau native, écrite en Rust, pour Wayland (Hyprland). Elle montre des formes douces : des cercles qui s'unissent, se soustraient, fusionnent en arrondi. Le moteur les décrit par un champ de distance signée — pour chaque point, la distance au bord de la forme — et en tire une image.

La fenêtre propose six « labs » (primitives, opérations booléennes, union lisse, champ, normales, matière), quatre façons de voir le même calcul (la distance, les normales, la couverture, un éclairage) et le choix du moteur de calcul : processeur, CUDA ou Vulkan. On déplace un cercle à la souris, on change son rayon à la molette, on ajoute ou retire une forme.

La fenêtre blob.in : à gauche, cinq cercles fusionnés en une forme douce, éclairée ; à droite, le panneau de contrôle, avec le badge « RUNTIME blob.in (Render Bridge) » et le moteur CUDA sélectionné.
Une vraie image du moteur. Capture de l'essai de bout en bout du 10 octobre 2026 : fenêtre Hyprland de 1 000 × 800, moteur CUDA, qualification CUDA05F_GATE_PASS affichée telle quelle en haut à gauche. Le mode « Éclairé » est un ombrage calculé à partir des normales, en 2D : ce n'est pas un rendu 3D. Source : run.json.

Le panneau Diagnostics affiche les données réelles de la session et de l'image à l'écran : le moteur demandé et le moteur effectif, la qualification recopiée mot pour mot, les dimensions, l'aller-retour mesuré. Aucune métrique n'est inventée : un champ qui n'a pas été mesuré n'est pas affiché.

Le contrat BLOB-FRAME-v1

Le moteur et la surface sont deux programmes. Ils se parlent par un socket Unix local ; chaque image voyage dans une zone de mémoire partagée (un memfd) que le moteur scelle avant de la confier : une fois scellée, personne ne peut plus la modifier.

Avant d'afficher, la surface vérifie : la taille demandée, l'écart exact entre deux lignes de pixels, le format, l'empreinte de la géométrie, la révision de la scène, le numéro de la demande, et que le moteur effectif est bien celui qui a été demandé. Si un seul point manque, l'image est refusée, et la raison est affichée.

À retenir

« Aucun repli : un échec du backend demandé est affiché, jamais remplacé », dit l'interface elle-même. Si l'on demande CUDA et que la carte refuse, la surface ne bascule pas en douce sur le processeur : elle le dit. Voir crates/blob-frame.

Dix-neuf pannes, provoquées exprès

Pour vérifier qu'elle refuse ce qu'elle doit refuser, la surface a son propre serveur de test, isolé, qui peut provoquer dix-neuf pannes à la demande. Une bannière « SERVEUR DE TEST » reste affichée tant qu'il est branché : ses mires ne sont jamais présentées comme des images du moteur.

FamillePannes provoquées
Le moteur se taiterreur de rendu, délai dépassé, connexion fermée, aucune réponse
L'image ment sur elle-mêmemauvaise taille, image tronquée, mémoire non scellée, lignes rembourrées, format inattendu, empreinte malformée
Le moteur tricheun autre moteur que celui demandé (le repli silencieux), mauvaise révision, réponse à une autre demande
Le message est hors contratchamp inconnu, deux zones de mémoire jointes, aucune jointe, message trop grand, message illisible, mauvaise version du protocole

Source : blob-frame-testserver.

Ce qui est prouvé, et dans quel cadre

La version publique a été compilée seule, à partir de son seul contenu : 225 tests passent. Deux sont mis de côté par défaut, parce qu'ils relisent des images du moteur gardées hors du dépôt.

Les essais de bout en bout ouvrent une vraie fenêtre sous Hyprland, la redimensionnent à quatre tailles, et capturent à chaque fois le seul rectangle de la fenêtre. Ils ont tourné avec les trois moteurs. Un exercice scripté enchaîne quatorze gestes — déplacer un cercle, changer un rayon, changer d'opération, de vue, de moteur — et vérifie à chaque pas que l'image suit.

La fenêtre blob.in après un geste scripté : la forme fusionnée a grossi d'un côté, le panneau montre le lab « Smooth » et le moteur CUDA.
Le geste, puis l'image qui suit. Étape 02 de l'exercice scripté : le rayon du cercle n° 2 est multiplié par 1,25 ; la surface demande une nouvelle image, le moteur la calcule, et la vérification confirme qu'elle correspond au geste. Source : run.json.

Les mêmes essais mesurent l'aller-retour entre un geste et l'image affichée : de 14 à 35 ms sur processeur, de 289 à 379 ms en Vulkan, de 470 à 670 ms en CUDA. La vitesse n'est pas l'objet de cette surface, et aucune cadence n'est revendiquée.

Depuis, le dépôt a commencé à dessiner sa propre interface sans bibliothèque toute faite : contrôles, tracés, courbes de Bézier, polygones à trous, gestes. Chaque étape porte un rapport et un verdict borné (« scoped pass »), qualifiée sans écran ou dans un compositeur isolé.

Historique

DateCe qui se passe
10 octobre 2026Le contrat BLOB-FRAME-v1 côté client et le serveur de test arrivent ; le même jour, les premiers essais de bout en bout avec le vrai moteur, sur les trois moteurs de calcul (30 commits).
12 octobreLa plus grosse journée (39 commits) : l'interface native commence — contrôles, tracés, remplissages — et les gestes sont qualifiés dans un compositeur isolé.
13–14 octobreDéfilement et survol, verrou d'axe pour les glissements, curseur de liste.
30 octobrePremière version publique, 0.1.0, sous licence MIT : un seul commit, découpé depuis le dépôt privé par un outil, compilé et testé seul avant d'être poussé.

Ce que ce n'est pas

Les limites, sans détour
  • Pas le moteur. Le moteur qui calcule les formes n'est pas encore publié ; sans lui, la version publique tourne avec le serveur de test et ses mires.
  • Pas rapide, pas encore. Aucune cadence de 60 images par seconde n'est qualifiée ; les allers-retours mesurés vont jusqu'à 670 ms.
  • Pas un rendu 3D. L'éclairage est un ombrage 2D calculé à partir des normales.
  • Pas encore essayé au vrai pointeur. Les gestes sont qualifiés sans écran et dans un compositeur isolé ; l'essai avec une vraie souris dans la session reste ouvert.

Ce que ça change, selon qui vous êtes

Développeur

Un exemple complet de frontière entre deux processus : mémoire partagée scellée, contrat vérifié champ par champ, et un serveur de pannes pour le prouver.

Responsable qualité

Chaque refus a son test, chaque capture son empreinte, et la surface ne présente jamais une image de test comme une vraie.

Décideur

Un logiciel qui dit quand il échoue plutôt que de faire semblant : la condition pour qu'on puisse lui confier une machine.

Pour aller plus loin