Versions
Ce qui a changé, et pourquoi. Une entrée par version, tirée du journal des modifications.
Les versions suivent le versionnage sémantique. Avant 1.0.0, une version mineure peut rompre une API — le journal le signale quand c'est le cas.
0.3.0
La machine locale tourne désormais sur un interpréteur Rust, et l'agent ne parle plus en clair. Le cœur rv32ima existe en double — Swift et Rust — et un test différentiel démarre le même noyau à travers les deux, en comparant les instructions retirées et les octets de console à chaque point de contrôle : c'est ce qui fait de la préférence pour le plus rapide une mesure et non un goût.
- Le cœur Rust est le défaut et ce que l'application embarque : environ 8 % plus rapide sur un démarrage complet. WISQ_SWIFT_CORE=1 rend le cœur Swift ; une bibliothèque absente arrête la construction avec la commande à lancer, pour que l'interprète expédié ne dépende jamais de ce que la machine de build avait sous la main.
- Ce test différentiel a trouvé un vrai défaut le jour où il a été écrit : le bus Rust répondait aux lectures CLINT mtime avec un instantané pris avant que le pas n'avance l'horloge, donc l'invité lisait une horloge en retard sur sa propre machine — de toute une période d'inactivité après un réveil de WFI.
- Le cœur est prouvé là où il tourne : un XCFramework avec les tranches appareil, simulateur et macOS, et un vrai noyau Linux démarré à travers l'ABI C dans un iPhone simulé, à chaque commit.
- L'agent parle TLS. Un certificat auto-signé au premier lancement, son empreinte SHA-256 portée par le lien d'appairage wisq://, épinglée par l'application — aucune autorité à opérer. Une empreinte malformée est une erreur, jamais un repli silencieux vers HTTP en clair.
- La console locale est un vrai terminal : adressage curseur, effacements, région de défilement, écran alterné, retour à la ligne différé. Les éditeurs, les pagers et top se comportent enfin au lieu de baver.
- Le site est bilingue de bout en bout, avec un contrôle de thème clair/sombre/système et une page vie privée vérifiable plutôt que déclarative.
0.2.0
La machine locale est environ trois fois plus rapide : de 55 à 163 millions d'instructions invitées par seconde, un démarrage jusqu'à l'invite de connexion passé de 0,81 s à 0,27 s, pour les mêmes 44,6 millions d'instructions. La sémantique n'a pas bougé — seulement son coût.
- Le fichier de registres a quitté le tableau Swift, que l'optimiseur rechargeait après chaque appel opaque. 2,7× à lui seul.
- Les immédiats sont étendus en signe par un décalage arithmétique plutôt qu'un test-et-OR, ce qui retire un branchement des chemins qui font 85 % d'un démarrage.
- La RAM invitée est mappée au lieu d'être allouée puis effacée : la construction passe de 33–194 ms à moins de 0,1 ms, et l'application n'engage plus 64 Mo avant que l'invité n'ait touché une page.
- Le fil d'émulation déclare sa qualité de service, pour que l'ordonnanceur cesse de poser un interpréteur sur un cœur d'efficience.
- La console est devenue incrémentale. L'ancienne re-dérivait le texte visible à chaque arrivée — quadratique dans la sortie, 36,7 s de traitement pour 2 000 lignes contre 0,22 s aujourd'hui.
0.1.1
Un correctif pour un défaut trouvé en téléchargeant la release et en la lançant : l'agent Linux était lié dynamiquement, réclamait donc libswiftCore.so sur la machine cible et mourait à sa première ligne partout où aucune toolchain Swift n'avait jamais été installée.
- Le binaire Linux est lié statiquement et vérifié sous environnement vide dans le job de release lui-même : une régression fait échouer la release, pas l'utilisateur.
- L'installeur lance le binaire téléchargé avant de l'installer et retombe sur une construction depuis les sources s'il ne démarre pas.
0.1.0
La première version : le client VNC, la machine RISC-V locale, l'agent hôte et les fondations du projet.
- Un client RFB 3.8 écrit à la main — poignée de main, authentification DES, Raw, CopyRect, RRE, Hextile, zlib, ZRLE et Tight avec JPEG, sur des flux zlib qui vivent le temps de la session.
- Mises à jour continues, curseur serveur dessiné localement, redimensionnement, presse-papiers, et une reconnexion qui ne réessaie jamais après un échec d'authentification.
- Une machine rv32ima interprétée qui amène un vrai noyau Linux 6.1 nommu jusqu'à un shell.
- L'agent hôte, le démarrage-avant-connexion, les liens d'appairage wisq:// et la découverte Bonjour.
- Un journal des modifications, un workflow de release, et une CI qui démarre un vrai noyau comme test.