Platine
Mis à jour le Le dépôt Le journal de travail La documentation
Annonce : un Eee PC 701 blanc affiche le bureau de Platine. « Petit. Mais tout un Macintosh. »

Le Macintosh classique, reconstruit.

Platine refait Mac OS 9.2.1 en C, sur NetBSD. Ce n’est pas un thème ni un émulateur : c’est un système complet, avec son propre serveur graphique, son modèle d’objets et sa discipline de mémoire. Il tourne dès aujourd’hui sur un Eee PC 701 de 2007, sans Xorg.

Ce qui est nouveau Le serveur natif Le bureau en images

Zéro Xorg

La session DRM/KMS est désormais celle du 701 par défaut.

En savoir plus

Tout est objet

Sons, dépôts et glissers passent par le POM, pour tous les programmes.

En savoir plus

64 Mo, le contrat

Un budget public, mesuré poste par poste, avec ses écarts.

En savoir plus

StuffIt Expander™

Devient DropStuff™ quand on glisse dessus ce qu’il saurait compresser.

En savoir plus

Dernières nouvelles

Cette semaine sur le banc d’essai.

  • Ctrl + Alt + Suppr et l’arrêt, sans XorgNouveau !

    Ctrl + Alt + Suppr ouvre le sélecteur Forcer à quitter sur le programme visé, derrière un rideau tramé qui éteint l’écran à moitié et épargne la barre des menus. Spécial ▸ Éteindre et le bouton d’alimentation demandent maintenant à chaque programme de quitter, puis éteignent la machine. Les fenêtres au second plan estompent enfin leurs contrôles, et le serveur utilise le curseur matériel de la carte graphique. Vérifié sur le 701, par captures.

  • Alertes, fenêtres et SimpleText, comme sous Mac OS 9

    Les alertes de tous les programmes perdent leur barre de titre : un contour en relief et une ombre d’un pixel, relevés au pixel sur Mac OS 9. Chaque fenêtre rouvre là où on l’a laissée, pour tous les programmes : StuffIt Expander™ revient à sa place. L’éditeur de texte reprend son nom d’origine, SimpleText. Et les dépôts suivent le Macintosh : plus de retour animé après un dépôt accepté, et un lâcher sur la fenêtre d’un autre programme est refusé.

  • Le tampon partagé, enfin partout

    NetBSD refusait de projeter un tampon dont la taille ne tombe pas sur une page : le Bureau et la plupart des fenêtres retombaient sur l’ancien envoi en bandes. Corrigé, avec un plantage du Finder au glisser qu’il cachait. Une phase du clignotement d’une icône coûte maintenant 2 ms au lieu de 20.

  • Le comportement devient global

    Un son, un effet ou un dépôt ne s’écrit plus dans un seul programme. Le moteur d’objets rend lui-même le son de chaque action (pom_agir), et un geste qui porte sur plusieurs objets n’en joue qu’un seul. Le déplacement d’une fenêtre est déclaré dans le type platine:fenetre : toutes les fenêtres, de tous les programmes, sonnent désormais comme sous Mac OS 9.

  • Glisser-déposer par le POM, base de bureau

    C’est le modèle d’objets qui décide ce que ferait un dépôt. Une icône ne s’allume que si le lâcher a un sens ; un programme ne reçoit que les documents qu’il déclare savoir ouvrir. Une base de bureau, comme le Desktop DB d’Apple, recense les programmes installés et sert à la fois au glisser et à l’ouverture des documents.

  • StuffIt Expander™ et le dialogue de progression

    Expander reprend son nom de marque, son « À propos » et sa lampe d’Aladdin animée. Il devient DropStuff™ quand on glisse dessus ce qu’il compresserait. Son dialogue de progression, relu dans les ressources d’origine, rejoint la Toolbox pour tous les programmes ; Annuler arrête vraiment le travail. Le curseur d’attente couvre maintenant tout l’écran.

  • Redessins instantanés

    Un programme envoie ses pixels par un tampon partagé : un redessin de 480×320 passe de 108 à 12 ms sur le 701. Au-dessus de 256 Mo de RAM, le serveur garde aussi le dernier contenu de chaque fenêtre et le restaure à l’instant où elle se découvre, même si son programme est occupé.

  • La Control Strip pilote des objets

    Volume, luminosité et Wi-Fi deviennent des objets du POM. La Strip affiche leur valeur à l’écran quand elle change et agit par leurs actions déclarées. Le menu AirPort lit l’état réel de la radio et sait réveiller le pilote.

  • DRM/KMS par défaut sur le 701

    Le serveur tient l’écran en 32 bits par DRM/KMS, sous le compte de l’utilisateur. Un petit courtier, limité à deux appels, lui confie l’écran ; le framebuffer wsfb reste disponible en secours.

  • On arrête la version X11

    Plus de travail sur la session X11 : elle reste en place, gelée, mais tout l’effort va au serveur natif et au modèle d’objets.

État des lieux — 12 novembre 2026

Un bureau qui tourne. Un contrat qui reste à tenir.

Sur le 701, Platine démarre sans Xorg. Le serveur platined tient l’écran, le clavier et le pavé tactile ; le Finder, la Control Strip, la Calculette, SimpleText et les autres programmes hors OpenGL s’ouvrent dessus. Les programmes ne savent rien de l’affichage : ils parlent à la Toolbox, et c’est elle qui parle au serveur.

L’ancienne session X11 a rendu son service : elle a servi de filet et de banc de mesure pendant la construction. Depuis le 9 novembre, elle est gelée. On ne la corrige plus, on ne la supprime pas non plus.

Deux chantiers restent ouverts, et le site les affiche tels quels. Les binaires natifs sont encore liés aux bibliothèques X11, même s’ils ne s’en servent plus à l’écran ; il faut un build sans X. Et la mémoire consommée dépasse encore le budget du profil 64 Mo.

Le serveur platined

Dessiné comme en 1999. Construit comme en 2026.

Mac OS 9 dessinait tout lui-même et ne faisait rien quand rien ne se passait. Platine garde cette règle. Un programme n’envoie pas une image : il envoie des ordres — rectangles, cadres, motifs, texte, contrôles d’apparence — et le serveur les exécute dans une seule image de l’écran, rognée à la partie visible de chaque fenêtre. Au repos, aucune minuterie ne tourne.

Sur une petite machine, aucune fenêtre n’a de mémoire propre : quand une zone se découvre, son programme la redessine, comme sous le Window Manager d’origine. À partir de 256 Mo de RAM, le serveur garde en plus le dernier contenu de chaque fenêtre et la restaure sans attendre. Ce supplément ne coûte qu’environ 1,5 Mio sur le 701.

Les gestes qui font le Macintosh appartiennent au serveur, pas aux programmes : le fil de fer du déplacement, le zoom entre une icône et sa fenêtre, le pouf de la Corbeille, les fenêtres rangées en onglets au bas de l’écran. Chaque effet déclenche son son au bon moment, et le lien entre l’action, l’effet et le son est écrit dans le modèle d’objets.

Le noyau confie l’écran à platined par DRM/KMS : deux tampons, une bascule calée sur le balayage, et seules les zones modifiées sont recopiées. Le serveur tourne sous le compte de l’utilisateur. Seul un courtier de quelques lignes reste privilégié, et il ne sait faire que deux choses : prendre l’écran et le rendre.

Comment Platine fonctionne sur le 701

Architecture réelle de la session native sur l’Eee PC 701. En bas, le noyau NetBSD 11. À gauche, la chaîne de démarrage : getty en connexion automatique sur ttyE0, login et le profil, le script platine-session-native, qui lance le courtier root platine-drm-session ; celui-ci lance platined et lui confie l’écran. Au centre, platined, sous le compte de l’utilisateur, parle au noyau par DRM/KMS et wscons. En haut, les programmes (Finder, Control Strip, applications, Forcer à quitter et alertes) passent par la Toolbox et libpom, et parlent à platined par la socket locale platine-affichage ; libpom lit et écrit le magasin POM, platine-boucle joue les sons. À droite, powerd (root) reçoit couvercle et bouton d’alimentation et prévient platined ; platined demande l’arrêt à platine-privilege. En pointillés, platine-dm, prévu, remplacera getty et login. Programmes · compte de l’utilisateur Finder bureau, dossiers Control Strip réglages par objets Applications Calculette, Expander… Forcer à quitter alertes, à la demande Toolbox · libptk contrôles Platinum, ordres de dessin libpom types, actions, effets, sons, dépôts platine-boucle sons de l’Apparence → audio(4) Magasin POM (fichier) ~/Library/Platine/POM · journal CRC32 platine-dm prévu : connexion façon Multiple Users ; remplacera getty et login platine-drm-session root · courtier setuid, deux gestes : prendre l’écran et le rendre platine-session-native sh · lance le serveur, la Strip et le Finder ; repli wsfb, puis X login · .profile compte de l’utilisateur getty ttyE0, connexion automatique platined compte de l’utilisateur · une seule image de l’écran fenêtres, cadres, barre des menus, effets, onglets présentation DRM, curseur, rideau à 50 % clavier et pavé tactile par wscons Ctrl + Alt + Suppr, arrêt de la session platine-privilege root · arrêt, redémarrage ; un seul script autorisé powerd root · couvercle, bouton → platine-ecran, alertes Noyau NetBSD 11 · PLATINE64-3D i915drmkms (DRM/KMS, plan curseur) · wscons : wskbd, wsmouse · audio(4) · ACPI · poll(2), sockets locales init lance arrêt écran socket locale platine-affichage KMS : image, curseur wscons : clavier, pavé ACPI
Un seul serveur possède l’écran et les entrées ; tout le reste est un client, le Finder compris, et la barre des menus est dessinée par le serveur. Trois petits programmes seulement gardent des droits de root, chacun pour un seul geste. Relevé sur le 701 le 12 novembre 2026.
serveurrootbibliothèqueprévu ou fichier

Platinum, au pixel près

Chaque mesure vient de la machine d’origine : barre des menus de 20 pixels, barre de titre rayée de 21, grille du bureau de 128×64, biseau d’un pixel de lumière pour deux d’ombre. Les contrôles sont calculés à partir de ces constantes par un seul moteur, partagé par la Toolbox et le serveur, puis comparés au pixel aux captures d’une machine virtuelle sous Mac OS 9.

#ddddddmenus #cccccctitres #333399sélection #777777ombre

Du démarrage au bureau

Aujourd’hui, le 701 démarre sur la console et lance la session native depuis le profil de l’utilisateur. La suite prévue : un écran de connexion façon Multiple Users, un compte dédié pour le serveur, et une chaîne qui ne repasse jamais par le mode texte, jusqu’au « Vous pouvez éteindre votre ordinateur ». Une précaution demeure : sur ce 915GM, arrêter Xorg à chaud bloque le noyau, donc on change de session par un redémarrage.

Le POM — Platine Object Model

On ne lance pas un programme. On ouvre un objet.

Sur un Macintosh, on commence par un document, puis on choisit ce qu’on en fait. Platine va jusqu’au bout de cette idée. Chaque objet reçoit une identité de 128 bits qui le suit quand on le renomme, le déplace ou le met à la Corbeille, même si on le range d’un mv dans un terminal. Une copie, elle, est un nouvel objet, comme sous Mac OS 9. Un fichier remplacé au même endroit ne vole pas l’identité de l’ancien.

Ce qu’un objet sait faire est écrit dans son type, un simple fichier texte avec héritage : ses propriétés, ses actions, ses règles de dépôt, ses effets et ses sons. Le menu Fichier, le menu contextuel et le glisser-déposer appellent les mêmes actions. Pour ajouter une imprimante de bureau, on écrit un type ; on ne touche pas au Finder.

Cette semaine, la règle s’est étendue à tout le comportement de l’interface. Les sons des actions, le déplacement des fenêtres, la mise en évidence d’une cible pendant un glisser et la décision du dépôt passent par le POM, plus par le code d’un programme. Tous les programmes en héritent. Même la Control Strip ne lance plus de commandes : elle agit sur les objets reglage:volume ou reglage:wifi.

Le moteur, libpom, est écrit et testé : un journal en ajout seul protégé par CRC32, des actions héritées, des événements entre processus. Il sait aussi enfermer tout un magasin d’objets dans un seul fichier, qu’on copie comme un document. C’est sur ce fichier que reposent les Piles.

Les Piles — l’esprit d’HyperCard

Une pile est un magasin d’objets dans un fichier : cartes, fonds, boutons, champs, et les relations qui les ordonnent. Copier le fichier emporte la pile et son historique. Le lecteur tourne au banc : Découverte.pile s’ouvre d’un double-clic, se parcourt carte à carte, et chaque bouton joue l’effet et le son que son type déclare. Le format d’Apple ne sera jamais lu, et une pile venue d’ailleurs n’exécute rien sans votre accord. Les scripts viendront avec Lua.

L’Éditeur de ressources — l’esprit de ResEdit

Platine n’a pas de fork de ressources : ce que ResEdit ouvrait existe ici en couches lisibles — identité, types, icônes, sons, chaînes, octets bruts. L’Éditeur les montrera dans la fenêtre d’origine et passera par quatre temps : ouvrir en lecture, modifier une copie, vérifier dans un aperçu, poser. Chaque changement s’annule grâce au journal du POM. Le projet est spécifié ; rien n’est encore codé.

La discipline de mémoire

64 Mo. La machine la plus modeste fixe la règle.

Le but est simple à énoncer : sur une machine de 64 Mo, faire tenir le bureau, trois fenêtres du Finder, la Calculette, SimpleText et les Pense-bêtes sans qu’une seule page parte en mémoire d’échange. Le critère est écrit ; il n’est pas encore atteint.

Les premières mesures sont encourageantes : le noyau réduit PLATINE64 laisse 27,4 Mio libres à la console dans une VM de 64 Mo, et la session native tourne sur le 701 sans échange. Mais chaque programme dépasse encore sa part : le serveur pèse deux à trois fois son budget, et le Finder plus encore.

Les choix qui doivent combler l’écart sont arrêtés : aucune mémoire par fenêtre dans ce profil, des polices bitmap partagées par le cache du noyau, des icônes compactes, cinq processus permanents, pixman et zlib comme seules bibliothèques du cœur, et un build enfin débarrassé de X11.

Sur la machine

Des captures, pas des maquettes.

Toutes les captures ont été prises sur le 701, à sa définition de 800×480. Elles viennent de la session X11 ; la session native affiche le même bureau avec ses propres pixels. Les annonces, elles, sont des illustrations du portable autour de ces captures. Cliquez pour agrandir.

Le bureau de Platine sur l’Eee PC 701.
Le bureau
Le dossier Applications du Finder.
Le dossier Applications
La Démo Toolbox et ses contrôles Platinum.
Démo Toolbox
Un document SimpleText ouvert sur le bureau.
SimpleText
StuffIt Expander en action.
StuffIt Expander™
L’Installateur de Platine.
L’Installateur
Annonce : un Eee PC 701 noir sur fond noir affiche la Démo Toolbox.
Annonce : cinq Eee PC 701 de couleurs différentes affichent Platine.

La route

Des étapes bornées, avec leurs critères.

ÉtapeContenuÉtat
P0 Lever les inconnues. Une douzaine de programmes jetables ont éprouvé chaque hypothèse sur la machine : framebuffer, IPC, DRM, EGL, polices, mémoire. Faite
P1 Une Toolbox pour deux mondes. Les programmes ne voient plus X11 : rendu en mémoire par pixman, polices compactes, couche de plate-forme neutre. Faite
P2 Le serveur platined. 59 tranches : DRM/KMS par défaut, fenêtres, effets, onglets, menus, Control Strip, tampon partagé, mémoire de fenêtre. Reste le build sans X11. En cours
P3 Session et Finder natifs. Le Finder et la Strip tournent et s’arrêtent proprement si le serveur disparaît. Restent le processus Système séparé et la parité fine des menus. En cours
P4 Connexion et arrêt, le MVP. platine-dm : connexion façon Multiple Users, PAM, utmpx. Critère : démarrage, bureau, arrêt, sans Xorg, dans 64 Mo et sans échange. À venir
P5 Le modèle objet partout. libpom en service ; comportement global, glisser et base de bureau faits. Viennent le presse-papiers par le POM, les alias par identité, pomd. En cours
P5c Piles, scripts, Éditeur de ressources. Les Piles lisent leurs cartes ; Lua 5.4.9 est retenu pour les scripts ; l’Éditeur de ressources est spécifié. En cours
P5b La 3D pour les jeux. Plein écran exclusif et GL natif, confinés aux jeux. La théière de référence tourne à 60 images/s en GLX ; il faut la retrouver sans X. À venir
P6 Accueillir les programmes X11. Un pont pour mplayer ou xterm, avec presse-papiers et cadres intégrés. Un invité, jamais une fondation. À venir
P7 Parité et finitions. Animations restantes, ascenseurs de la Toolbox, Markdown dans SimpleText, Sherlock, impression, multi-écran. Continu