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.
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 plusDerniè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 typeplatine: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
wsfbreste 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
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.
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.
La route
Des étapes bornées, avec leurs critères.
| Étape | Contenu | É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 |