Verbinal est depuis un moment un compagnon natif du portail scientifique CANFAR et du Centre canadien de données astronomiques (CADC) sur macOS, iOS, Windows et Android. L’application Linux est le membre de la famille qui n’a jamais eu sa propre page ici — ce qui devient voyant, car elle n’est plus le modeste gestionnaire de sessions de ses débuts.
Elle est écrite en Rust, avec une interface GTK 4 et libadwaita, une exécution Tokio reliée à la boucle principale GLib, et aucun Electron à l’horizon. Ce n’est pas un portage vêtu des habits d’une autre plate-forme : elle a l’allure et le comportement d’une application GNOME parce qu’elle en est une. Elle s’installe depuis un .deb, elle est libre sous la licence publique générale GNU Affero v3.0, et son interface est offerte en anglais et en français.
La version 1.3.3 l’a amenée à parité avec la génération Flux de travail et Assistant IA de l’application Windows. Les quatre versions depuis — de la 1.3.4 à la 1.3.7, toutes en trois jours — ont été quelque chose de moins reluisant et de plus utile : six séances d’assurance qualité à piloter l’application contre le service en direct, et les correctifs qui en sont sortis. Les deux moitiés de cette histoire sont ci-dessous.
Un protocole que vous cochez. Un agent qui peut l’exécuter, et qui doit demander avant de casser quoi que ce soit. Un cube que vous tournez en 3D. Une seule fenêtre GTK, et vos données n’en sortent jamais.
Ce qu’est Verbinal pour Linux
Si c’est nouveau pour vous : Verbinal pour Linux est un client de bureau pour CANFAR et le CADC qui demande GTK 4.12+, libadwaita 1.4+ et un fournisseur du service de secrets (Secret Service) — trousseau GNOME, KDE Wallet ou équivalent — où votre jeton du CADC réside plutôt que dans un fichier de configuration. Installez le .deb depuis les versions GitHub avec sudo dpkg -i verbinal_*_amd64.deb, ou compilez depuis les sources avec cargo build --release.
L’application est un ensemble de modules, chacun une tuile sur l’écran de bienvenue : Portail pour les sessions et le calcul par lots, Rechercher pour l’archive du CADC, Recherche pour ce que vous avez téléchargé, Stockage pour VOSpace, une Visionneuse FITS 2D, une Visionneuse de cubes 3D, un Calepin natif, les Flux de travail, et l’Assistant IA et le Guide IA optionnels. Portail, Stockage et le calcul demandent un compte CADC gratuit ; Rechercher et les deux visionneuses fonctionnent sans connexion, de sorte que vous pouvez récupérer un fichier public et l’inspecter avant même d’ouvrir une session. Il n’y a aucune télémétrie nulle part dans l’application.
Portail : sessions, tâches par lots, et ce qu’il y a dans un conteneur
Le Portail est la salle de contrôle de CANFAR. Lancez et gérez des sessions Skaha interactives — Calepin, Bureau, CARTA, Firefly, Contributed — depuis un formulaire Standard, un formulaire Avancé qui accepte une image de registre personnalisée avec ses identifiants, ou un onglet Headless pour le travail qui n’a pas besoin d’écran. Tout autour se trouvent les chiffres autour desquels on planifie : votre quota VOSpace, une liste de Lancements récents pour relancer en un clic, et un panneau de Charge de la plate-forme avec la disponibilité en direct du CPU et de la RAM de la grappe.
Les tâches par lots headless s’exécutent avec des répliques qui en sont vraiment : un lancement par réplique, chacune nommée job-N et informée de son rang par REPLICA_ID et REPLICA_COUNT. Comme CANFAR récupère les tâches terminées en quelques secondes, Verbinal retient les cinquante dernières avec la raison de chaque échec — saisie depuis les journaux et les événements de la tâche pendant qu’elle existe encore, puisque ceux-ci meurent avec elle.
Le catalogue du bas est plus intéressant qu’il n’en a l’air. La Découverte d’images répond à une question à laquelle on répondrait autrement en lançant une session pour y fouiller : laquelle de ces 359 images de conteneur porte le paquet dont j’ai besoin ? Elle inspecte les images avec une petite sonde headless, publie le manifeste dans votre propre VOSpace pour qu’une deuxième machine ou une réinstallation ne coûte aucune tâche, et vous laisse filtrer le catalogue par famille de système, version et paquets contenus.
Trouvez-le, gardez-le, rangez-le : Rechercher, Recherche, Stockage
La plupart des projets commencent à l’archive, et Rechercher interroge le CADC directement par TAP — CFHT, JCMT, DAO, Gemini, HST, JWST, MOST et plus encore. Faites une recherche conique par coordonnée ou par nom de cible résolu, ou écrivez vous-même de l’ADQL dans l’onglet éditeur. Affinez les résultats avec des filtres de colonnes en direct qui comprennent les expressions booléennes — !tess & !apass veut dire ce à quoi vous vous attendez — prévisualisez une ligne sans quitter la grille, enregistrez les requêtes que vous relancerez, faites une recherche conique dans les catalogues VizieR en parallèle, et exportez en CSV ou en TSV.
Ce que vous conservez aboutit dans Recherche, une bibliothèque locale organisée par observation, avec des aperçus, des notes par observation et un dossier de recherche exportable. Le dossier peut désormais emporter les fichiers de données eux-mêmes, transmis en flux par un rédacteur compatible ZIP64 pour qu’un cube de plusieurs gigaoctets passe sans peine, et il inclut les champs de citation — identifiant de proposition, chercheur principal, titre, date de diffusion — que son propre fichier README vous dit de citer.
Stockage est un navigateur VOSpace/ARC complet — téléverser, télécharger, organiser, partager un dossier avec un groupe ou le rendre public, le tout avec le suivi du quota. Les transferts se font en flux, avec une barre de progression et un bouton d’annulation ; un téléchargement atterrit en .tmp et n’est renommé qu’une fois complet, de sorte qu’un transfert raté ne laisse jamais un fichier FITS tronqué qui a l’air entier.
Flux de travail : des protocoles de recherche que vous cochez
Une bonne part de l’astronomie est de la procédure — la suite ordonnée d’étapes qui transforme une question en mesure — et cette procédure vit d’ordinaire dans la tête de quelqu’un, dans un wiki de laboratoire ou dans un README périmé. Les Flux de travail en font un objet de premier ordre : un protocole écrit comme une simple liste de contrôle en markdown, rendu en fiches d’étapes numérotées que vous cochez au fur et à mesure, la coche étant réécrite en préservant les octets pour que le fichier reste le vôtre.
execute_adql_query, download_observation, run_cell — et mène au module qui fait le travail.Ce qui en fait plus qu’une liste de tâches, c’est que les étapes sont reliées à l’application. Chaque fiche nomme l’action concrète qu’elle représente et mène directement au module qui l’exécute, si bien que télécharger les quatre époques se trouve à un clic de les télécharger pour de bon dans Recherche. Verbinal livre sept modèles intégrés, pensés d’abord pour le Canada — reconnaissance d’imagerie d’archive sur CFHT MegaCam, spectroscopie stellaire sur DAO Plaskett et CFHT ESPaDOnS, retraitement par lots en tâches headless, constructeur d’échantillon par recoupement VizieR, diligence raisonnable pour une demande de temps d’observation, cinématique de cubes spectraux, et photométrie de séries temporelles d’étoiles variables — et vous pouvez écrire les vôtres en markdown avec un éditeur à aperçu en direct. Gardez un flux localement, ou publiez-le à votre équipe par VOSpace. Et parce qu’un protocole est aussi un plan qu’un agent peut exécuter, chaque flux a un bouton Copier l’invite.
Un assistant IA qui peut piloter l’application — et qui doit demander
Verbinal pour Linux peut s’apparier à votre propre Claude Desktop, Claude Code, ou à n’importe quel client MCP. Un pont verbinal mcp parle le Model Context Protocol sur un socket UNIX privé par utilisateur, et un assistant de connexion guidé écrit la configuration du client et lance un autotest. L’agent obtient la même application que vous : rechercher et télécharger, les deux visionneuses, le calepin, le stockage, les sessions, et des Flux de travail qu’il peut suivre ou rédiger.
Ce qui rend cela confortable plutôt qu’inquiétant, c’est le modèle de contrôle. Les appels en lecture seule s’appliquent tout de suite ; tout ce qui est conséquent est mis en file comme une proposition qu’un humain approuve dans l’application, et les opérations destructrices le sont toujours. Chaque action aboutit dans un journal d’événements, et tout ce qu’un agent a créé porte une pastille de robot pour que vous puissiez voir à qui revient le travail — l’observation d’Altaïr deux figures plus haut est marquée exactement ainsi. Le Guide IA vous laisse réécrire, en direct, la façon dont chacun des 135 outils se décrit, pour élargir ou restreindre ce vers quoi l’agent tend la main. C’est un assistant qui garde les mains visibles, pas un pilote automatique.
Deux visionneuses : le FITS en 2D, les cubes en 3D
Des données que l’on voit sont des données auxquelles on se fie, et Verbinal apporte ses propres visionneuses plutôt que de vous renvoyer à un navigateur. La Visionneuse FITS est une visionneuse d’images 2D avec un WCS conscient de la projection, distorsion SIP comprise (TAN, SIN, STG, ZEA), une lecture de coordonnées et un « aller à », un sondage de pixels, des coordonnées enregistrées, plusieurs étirements et palettes, une rotation nord-en-haut tirée du WCS, et un sélecteur d’extension pour les fichiers multi-HDU. Chercher ici transforme le réticule en requête d’archive. Ouvrez plusieurs fichiers à la fois et comparez-les : un réticule lié qui suit la même position céleste d’un onglet à l’autre, un zoom synchronisé malgré des échelles de pixels différentes, et un mode clignotement au fondu réglable.
La Visionneuse de cubes est la même idée en trois dimensions. En mode 3D, c’est un véritable rendu volumique — un ray-marcher GLSL sur une GtkGLArea — et vous survolez l’espace position–position–vitesse : orbitez, zoomez, mettez en orbite automatique, passez à une projection d’intensité maximale, et façonnez la fonction de transfert avec la densité, l’échelle spectrale et une courbe d’opacité modifiable jusqu’à ce que le plancher de bruit s’efface et que la structure ressorte. Un mode Coupe lit un seul canal avec les coordonnées WCS et une valeur spectrale, et le sondage au clic extrait le spectre complet à travers le cube en n’importe quel pixel. Le long du bas, un défileur de canaux avec une forme d’onde d’intensité montre d’un coup d’œil la structure spectrale de tout le cube et la parcourt. Exporter la figure compose une planche de publication en PNG ou en PDF plutôt que de prendre une capture d’écran.
Un détail ici est propre à Linux et mérite d’être dit plutôt que caché : les pilotes graphiques varient bien davantage sur Linux que sur un Mac ou une machine Windows bien élevée, de sorte que le mode Coupe est entièrement sans GL et toujours disponible. Si le rendu volumique ne démarre pas sur votre machine, il vous reste le défileur de canaux, le sondage de spectre, la lecture WCS et l’export de figure — les instruments de mesure — plutôt qu’une boîte de dialogue d’erreur et rien d’autre.
Calepin : un noyau local, et un noyau distant quand vous le voulez
Certaines analyses demandent du code, et Verbinal l’exécute sur place. Le module Calepin édite et exécute des fichiers .ipynb nativement contre un noyau Python local — votre python3 système, sans navigateur, sans serveur à démarrer, sans onglet JupyterLab à surveiller. Ouvrez plusieurs calepins en onglets, exécutez une cellule ou tout le livre, voyez les figures matplotlib s’afficher en ligne. Depuis une observation téléchargée dans Recherche, vous pouvez amorcer un calepin d’analyse prêt à l’emploi, si bien qu’une étape de flux de travail comme extraction photométrique vous dépose dans un vrai calepin garni plutôt que dans une cellule vide. Les paquets manquants peuvent être installés depuis le calepin — prudemment, car sur Ubuntu le Python système est géré de l’extérieur et pip install --user est refusé à dessein ; Verbinal ne propose de passer outre qu’après que pip l’ait dit lui-même, et seulement si vous le demandez.
Il y a un second type de calcul, et savoir lequel vous employez compte. Les noyaux de calepin s’exécutent localement, sur votre machine, avec ce que vous avez installé. run_code — l’outil vers lequel un agent tend la main — s’exécute à distance sur un conteneur CANFAR déjà chaud : Python 3.11 avec astropy, numpy, matplotlib et pyvo, votre /arc/home monté, et votre certificat CADC disponible pour les récupérations authentifiées depuis l’intérieur de la tâche. Local pour tout ce qui touche à vos propres fichiers ; distant pour tout ce qui veut les données et les paquets de la plate-forme.
Bâti à la façon Linux — et ce qui le distingue du Mac et de Windows
Parce que Verbinal est écrit nativement sur chaque plate-forme, l’application Linux n’est pas l’application Mac ou Windows recompilée. Quelques différences méritent d’être nommées franchement :
- Boîte à outils. Rust avec GTK 4 et libadwaita, là où macOS est en SwiftUI et Windows en WinUI 3. Elle suit votre thème GNOME et sa disposition adaptative plutôt que d’imiter un système sur lequel elle ne tourne pas.
- Rendu 3D. La Visionneuse de cubes est un ray-marcher OpenGL (GLSL 330) dans une
GtkGLArea, avec un mode Coupe sans GL comme repli garanti ; macOS utilise Metal et Windows Direct3D, dont aucun n’a besoin de ce repli. - Identifiants. Les jetons résident dans le trousseau du système par l’API Secret Service — trousseau GNOME, KDE Wallet ou un autre fournisseur. Sur macOS c’est le trousseau macOS ; sur Windows, le Gestionnaire d’identifiants.
- Distribution. Un
.debdepuis les versions GitHub, oucargo build --releasedepuis les sources. Aucun gardien de boutique entre vous et l’application, et aucun bac à sable ne restreint les fichiers qu’elle peut lire. - Licence. AGPL-3.0, comme le client Windows ; l’application Mac est sous MPL-2.0.
- Prérequis. GTK 4.12+, libadwaita 1.4+, un fournisseur du service de secrets, et Python 3 si vous voulez exécuter des calepins localement.
Ce que cinq versions en neuf jours ont vraiment changé
La 1.3.3 a posé les fonctionnalités. Puis six séances d’assurance qualité ont piloté l’application contre les services CADC et CANFAR en direct — dont deux réplications complètes d’articles publiés, menées entièrement sur la plate-forme — et les versions 1.3.4 à 1.3.7 ont corrigé ce que cela a révélé. Cela vaut la peine d’être précis, car le motif est instructif : presque rien de tout cela n’était visible depuis l’intérieur du code.
- Un filtre qui n’avait jamais fonctionné. L’option Données publiques seulement du formulaire de recherche construisait de l’ADQL avec
GETDATE(), qui est du T-SQL ; le CADC répond « Function [GETDATE] is not found in TapSchema ». Elle n’avait jamais fonctionné, ni ici ni dans l’application Windows d’où elle avait été portée. Le CADC déclare de l’ADQL 2.0 avec douze fonctions géométriques et aucune UDF, et un garde-fou refuse désormais tout appel hors de cet ensemble — ce qui l’aurait attrapé dès le premier jour. - Les transferts se faisaient à l’aveugle. Le Stockage gardait les fichiers entiers en mémoire : un cube de 5 Go demandait 5 Go de RAM, n’affichait rien avant la fin, et ne pouvait pas être arrêté.
- Un téléchargement qui ne produisait rien comptait comme une réussite. Un point d’accès du CADC répond HTTP 200 avec un corps vide pour un identifiant d’éditeur qu’il ne sait pas résoudre, si bien qu’un fichier de zéro octet atterrissait dans la bibliothèque, annoncé comme « Téléchargé… (0 octet) ». Zéro octet est refusé maintenant.
- Chaque fiche de la bibliothèque était anonyme. Cible, instrument, filtre et coordonnées n’étaient jamais remplis que par l’enregistrement d’un résultat de recherche, de sorte que tout ce qui était récupéré par identifiant d’éditeur arrivait avec un fichier et rien d’autre. Un téléchargement interroge désormais l’archive — une requête indexée, un quart de seconde.
- Trois services signalaient un 4xx à côté d’un crochet vert. Le défaut n’était pas l’étiquette, mais la sonde. Elle envoyait un
GETnu à des points d’accès qui répondent 400 ou 401 à exactement cela, puis déclarait l’hôte en bonne santé parce qu’il avait répondu. Chaque service IVOA publie/availabilitypour cette question, et la sonde lit désormais ce document — de sorte qu’un service annonçant un arrêt planifié est signalé comme indisponible, dans ses propres mots. - Un agent ne pouvait pas se connecter, et rien ne disait pourquoi. Un outil annonçait un schéma mal formé ; les clients qui valident avant d’enregistrer rejetaient toute la liste, ce qui se présente comme « ce serveur n’a aucun outil » plutôt que comme « un outil est mal formé ». Chaque schéma annoncé est vérifié maintenant.
- Le travail d’un agent était consigné comme le vôtre. Rien de ce qu’un agent créait n’a jamais mérité sa pastille, parce que le routeur appliquait une copie de la fiche prise avant l’apposition de la pastille.
- Les propositions en attente ne survivaient pas à un redémarrage. Sept en attente de révision se sont évanouies en silence, et une déjà approuvée a été annulée. La file est journalisée et réhydratée maintenant.
- 89 avertissements de code mort supprimés cachaient cinq vrais défauts — des fonctionnalités écrites et jamais raccordées. La version livrée passe l’analyse avec
dead_codeactivé.
La suite de tests est passée de 841 à plus de 1 200, et les ajouts sont la partie intéressante : des tests d’invariants qui parcourent le manifeste d’outils en direct pour vérifier que chaque argument annoncé est lu par quelque chose et que tout ce qui est réglable est lisible, et des tests qui parcourent les sources à la recherche des chaînes qu’une personne lit — rien n’atteint une étiquette ou une notification sans passer par le catalogue, et chaque chaîne localisée a une forme française. Ce dernier point compte, car à la 1.3.3 le français n’était jamais que la part qu’avait la référence : 621 chaînes visibles parvenaient aux gens en anglais, écrans entiers compris. Toutes sont traduites.
Vie privée, sources, et comment l’obtenir
La posture de confidentialité est celle que garde chaque application Verbinal. Aucune collecte de données, aucune analytique, aucun rapport de plantage, aucun service tiers — l’application n’a pas de serveur à elle. Vos identifiants du CADC restent dans le trousseau du système, et le trafic réseau va directement à CANFAR et au CADC en HTTPS, sans rien entre les deux. Les données que vous ouvrez dans les visionneuses sont lues et rendues sur votre propre machine ; le cube que vous tournez en 3D n’est jamais téléversé.
Verbinal pour Linux est libre et open source sous la licence publique générale GNU Affero v3.0, avec l’intégralité des sources à github.com/szautkin/CanfarDesktopUbuntu — l’analyseur FITS, la gestion du WCS, le nuanceur volumique et la couche d’outils MCP décrits ici sont tous des choses que vous pouvez lire plutôt que croire sur parole. Installez le .deb, ouvrez une tuile, et — si le cœur vous en dit — partez d’un modèle de Flux de travail et laissez-le vous mener de l’archive à la figure sans quitter le bureau.
Obtenir Verbinal pour Linux
Libre et open source sous AGPL-3.0. GTK 4.12+, libadwaita 1.4+ et un compte CANFAR gratuit. Rechercher et les deux visionneuses fonctionnent sans connexion — et vos données restent sur votre machine.