Comment fonctionne FlyingFiles
Cette page s'adresse aux curieux, et aux administrateurs qui veulent savoir ce que l'application fait des fichiers, des mots de passe et du réseau avant de l'installer.
En bref
FlyingFiles est une application native pour macOS, Windows et Linux. Elle ne fonctionne que sur votre ordinateur.
Il n'y a ni serveur intermédiaire ni compte. Les fichiers circulent directement entre votre ordinateur, vos disques et vos serveurs, et les préférences et les fichiers des ordinateurs jumelés — directement entre ces ordinateurs, sur votre réseau local.
Le site
nci.plsert à télécharger l'application pour macOS et Linux et à vérifier les mises à jour — au démarrage (cela peut être désactivé) et quand vous le demandez. La version Windows est distribuée et mise à jour par le Microsoft Store.
flowchart LR
subgraph PC["Votre ordinateur"]
APP["FlyingFiles"]
DISK["Disques, clés USB,<br/>partages réseau"]
KEY["Trousseau /<br/>Gestionnaire d'identification"]
TERM["Programmes du système<br/>Terminal, FFmpeg,<br/>gravure de disques"]
end
SRV["Vos serveurs<br/>FTP · FTPS · SFTP"]
PEER["Vos ordinateurs jumelés<br/>sur le réseau local"]
NCI["nci.pl<br/>téléchargement et mises à jour<br/>macOS et Linux"]
STORE["Microsoft Store<br/>installation et mises à jour Windows"]
APP <--> DISK
APP <--> KEY
APP --> TERM
APP <--> SRV
APP <-. "TLS, après jumelage" .-> PEER
APP -. "au démarrage et à la demande" .-> NCI
STORE -. "Windows" .-> APP
Comment l'application est construite
FlyingFiles est écrit en C# sur .NET 10, avec une interface Avalonia 12. Le même code fonctionne sur les trois systèmes ; le code propre à un système est tenu à part, en un seul endroit.
L'application comporte trois couches :
| Couche | Responsable de |
|---|---|
| Core | systèmes de fichiers (disque, archives), copie et déplacement, analyse des conflits, archives, aperçu et modification des fichiers de toute taille, Markdown, recherche, comparaison, statistiques, règles .ffignore, réduction des fichiers, commandes pour FFmpeg, préférences, synchronisation des préférences et fichier .ffsync, traductions |
| Network | FTP et FTPS (bibliothèque FluentFTP), SFTP (SSH.NET), lecture et enregistrement des mots de passe dans le stockage du système, jumelage des ordinateurs et connexions sur le réseau local (préférences et fichiers des ordinateurs jumelés) |
| App | fenêtres et panneaux (modèle MVVM), clavier et raccourcis personnalisés, glisser-déposer, intégration au système : corbeille, Finder et Explorateur de fichiers, applications associées aux fichiers, Terminal, FFmpeg, gravure de disques, formatage des volumes, installation et mises à jour |
Compilé en code natif
L'application est compilée à l'avance (Native AOT) en un exécutable destiné à un processeur donné. Il en découle que :
vous n'avez pas besoin d'installer .NET,
l'application démarre en une fraction de seconde,
elle consomme moins de mémoire qu'une application avec interpréteur.
Une interface qui ne se fige pas
Toute opération de disque et de réseau se déroule en arrière-plan, et l'interface ne fait qu'en afficher la progression. Même l'affichage d'un dossier sur un partage réseau bloqué ne fige pas la fenêtre. Chaque opération qui peut durer a une fenêtre de progression et un bouton Annuler qui fonctionne.
L'aperçu (F3) et l'éditeur (F4) chargent en entier un fichier texte jusqu'à 4 Mo. Ils lisent par morceaux un texte plus gros et tout fichier binaire — seulement ce qui est à l'écran —, si bien qu'un fichier de plusieurs gigaoctets sur le disque s'ouvre immédiatement ; un tel fichier venant d'un serveur (avec une fenêtre de progression) ou d'une archive est d'abord copié dans un fichier temporaire. Les numéros de ligne et la recherche sont calculés en arrière-plan, et l'enregistrement d'un fichier du disque dont la longueur ne change pas n'écrase sur place que les octets modifiés.
Un seul modèle pour tous les emplacements
Le disque local, une archive, un serveur FTP, un serveur SFTP et les disques d'un ordinateur jumelé partagent dans l'application une interface commune de système de fichiers : lister, lire, écrire, créer des dossiers, supprimer, renommer. Le panneau, la copie, l'aperçu, la recherche et la comparaison n'utilisent que cette interface. C'est pourquoi :
la copie fonctionne dans toutes les combinaisons : disque → serveur, serveur → archive, serveur → serveur ;
une archive se comporte comme un dossier — l'application l'extrait dans un dossier temporaire privé et y réempaquette les modifications quand vous la quittez ;
la recherche et les statistiques fonctionnent de la même façon sur un disque, dans une archive et sur un serveur.
Comment se déroule une copie
Règles
.ffignore— les éléments couverts par les règles de la source et de la destination sont écartés.Contrôle de la destination — vous ne pouvez pas copier un élément sur lui-même ni un dossier dans l'un de ses sous-dossiers, même quand le même emplacement est écrit autrement : à travers un lien symbolique, avec une autre casse ou — sur Windows — par une lettre de lecteur réseau. Sur le disque, l'application compare l'identité des fichiers dans le système, et non le seul texte du chemin : un déplacement « sur lui-même » n'effacera donc pas la seule copie d'un fichier.
Analyse — en un seul passage, l'application rassemble la liste des fichiers, le nombre total d'octets et les conflits. Avec des serveurs, elle retient le contenu des dossiers de destination pour ne pas interroger le serveur fichier par fichier.
Décision sur les conflits — une fenêtre propose : tout remplacer, remplacer les plus anciens, ignorer les doublons, annuler.
Copie par blocs de 256 Ko, avec progression :
un déplacement à l'intérieur d'un même disque est un renommage — instantané ;
l'écriture sur un disque passe par un fichier temporaire à côté de la destination, qui ne remplace le fichier de destination qu'à la fin : une interruption ne laisse donc pas un demi-fichier ;
le déplacement d'un lien vers un dossier ne vide jamais le dossier vers lequel il pointe ;
une erreur sur un fichier n'arrête pas toute l'opération — le fichier va dans la liste des éléments en échec, avec la raison.
À la fin — nettoyage facultatif des fichiers de métadonnées macOS, actualisation des panneaux, bilan, liste des éléments en échec et entrée dans le journal des transferts.
Avec des serveurs
Nouvelle tentative après un dépassement de délai et reconnexion après une coupure, avec retour dans le même dossier.
Contrôle d'intégralité — après une erreur, l'application compare la taille du fichier sur le serveur. Elle considère un fichier complet comme terminé et, quand l'état ne peut pas être établi, elle ne réessaie pas à l'aveugle, pour ne pas écraser une copie saine.
Vérification SHA-256 (facultative) — la somme du fichier source est comparée à celle de la copie. En SFTP, l'application essaie de calculer la somme sur le serveur (
sha256sum,shasum,openssl) et, quand le compte ne le permet pas, elle relit la copie.Annulation — un fichier envoyé à moitié est supprimé du serveur, et un téléchargement ne laisse pas de déchets sur le disque.
Réduire les fichiers avant l'envoi
La case Réduire les fichiers de la fenêtre Confirmer les modifications fonctionne dans l'application elle-même, sur votre ordinateur — sans outil externe ni aucun service en ligne :
l'application lit le fichier PHP à la source, retire du code les commentaires, les lignes vides, l'indentation et les espaces inutiles, et écrit aussitôt le résultat à destination — sur le disque de façon aussi atomique qu'une copie ordinaire, sur un serveur comme un envoi de fichier ordinaire ;
le fichier source reste intact, et le HTML hors des balises PHP, les chaînes et les blocs heredoc passent à l'octet près ;
un fichier dont l'application n'est pas sûre (par ex. avec la balise courte
<?) et un fichier de plus de 32 Mo partent sans modification, et la raison est notée dans le journal des transferts.
Glisser-déposer
Le glisser-déposer passe par le mécanisme de glisser-déposer du système — celui qu'utilisent le Finder, l'Explorateur de fichiers et les autres applications.
Un dépôt dans un panneau lance le même déroulement que F5 ou F6 : règles
.ffignore, contrôle de la destination, analyse, conflits et fenêtre de progression.Les entrées des serveurs FTP/SFTP et des archives voyagent dans un format qui ne quitte pas l'application : une autre application ne les voit donc pas. Elles ne peuvent être déposées que dans les panneaux de la fenêtre d'où elles viennent.
Les fichiers du disque voyagent en plus comme des fichiers ordinaires du système : le Finder, l'Explorateur de fichiers, le bureau et les autres applications les voient comme n'importe quels autres, et les copient ou les déplacent selon leurs propres règles. Sur Windows, FlyingFiles demande une copie : l'Explorateur de fichiers copie sans touche et ne déplace qu'avec Shift.
Aux fichiers glissés depuis une autre application, FlyingFiles annonce toujours une copie : cette application ne supprime donc jamais les originaux elle-même. Le déplacement, si vous le choisissez, est effectué par FlyingFiles, comme avec F6.
Comment se déroule une gravure
FlyingFiles n'a pas son propre pilote de graveur. Le disque est gravé par l'outil que fournit le système : sur macOS drutil (celui qu'utilise le Finder), sur Windows IMAPI — le mécanisme de gravure intégré à Windows —, sous Linux xorriso. L'application prépare les données, surveille l'espace et lit la progression dans la sortie de l'outil.
Estimation de l'image — à partir de la liste des fichiers, l'application calcule la place que prendra l'image du disque : des secteurs complets de 2048 octets pour chaque fichier, les dossiers et les noms dans plusieurs systèmes de fichiers (ISO 9660, Joliet, UDF), et la table d'occupation, qui grandit avec l'image. La même estimation alimente la barre du modèle de disque.
Contrôle du disque — encore une fois avant l'écriture : le lecteur contient-il le même disque, et celui-ci a-t-il assez de place ?
Image exacte — l'outil du système construit l'image et en donne la taille au secteur près ; si elle ne tient pas, l'écriture ne commence pas.
Écriture avec une barre de progression, la vitesse et un journal.
Vérification (facultative, activée par défaut) — les données gravées sont relues sur le disque et comparées à l'image.
Finalisation du disque et éjection.
Sur Windows, un BD-R vierge ne passe pas par le chemin IMAPI habituel, qui le formate toujours avec une zone de secours (sauf si vous activez la zone de secours dans les préférences) : l'application construit l'image avec l'outil IMAPI et l'écrit sur le disque secteur par secteur, puis, à la vérification, compare chaque secteur à l'image. Ainsi, le même disque contient autant de données sur Windows que sur macOS et Linux. Rien de tout cela ne quitte l'ordinateur.
Comment se déroule une conversion vidéo
FlyingFiles n'encode pas les vidéos lui-même et n'inclut pas FFmpeg dans ses paquets. Il utilise le programme gratuit FFmpeg installé sur le système et le lance comme un processus distinct.
Recherche de FFmpeg — d'abord le chemin des préférences (champ Programme FFmpeg : de l'onglet Aperçu et vidéo), puis les dossiers du
PATH, enfin les emplacements d'installation habituels : Homebrew et MacPorts sur macOS ; winget, Chocolatey, Scoop etC:\ffmpeg\binsur Windows ;/usr/bin,/usr/local/binet/snap/binsous Linux. S'il manque, l'application indique comment l'installer.Description de la vidéo —
ffprobe, qui accompagne généralement FFmpeg, fournit la résolution, la durée, les codecs et le son. Sans lui, l'application ne connaît que la durée et la résolution tirées de l'en-tête des fichiers MP4 et MOV.Encodeurs disponibles — l'application demande à FFmpeg ce qu'il sait encoder (
ffmpeg -encoders) et ne propose que cela. L'encodage matériel n'apparaît qu'après un essai réussi sur une seule image.Conversion — la commande est une liste d'arguments transmise directement au processus, sans passer par l'interpréteur de commandes du système : un nom de fichier ne peut donc pas devenir une commande. FFmpeg reçoit l'interdiction d'écraser (
-n), et l'application choisit pour le résultat un nom encore libre.Progression — l'application la lit dans la sortie de FFmpeg. Le fichier n'est considéré comme terminé que si FFmpeg s'arrête sans erreur et signale la fin du travail.
Annulation ou erreur — le fichier inachevé est supprimé et, en cas d'erreur, la fenêtre affiche les derniers messages de FFmpeg.
Seuls les fichiers du disque local peuvent être convertis. La vidéo ne quitte pas l'ordinateur : FFmpeg la lit sur le disque et écrit le résultat à côté de l'original ou dans le dossier de l'autre panneau.
Synchronisation des préférences et réseau local
Depuis la version 1.5.0, les préférences passent d'un ordinateur à l'autre par un fichier ou par le réseau local (manuel). Dans les deux cas, rien ne passe par un serveur sur Internet.
Ce qui a changé depuis la dernière fois
Chaque élément — serveur, terminal, catégorie, chemin favori, préférence individuelle, jeu de raccourcis clavier — a une version : l'heure de la modification, avec un compteur et l'identifiant de l'ordinateur. L'application détecte les modifications en comparant les préférences actuelles aux empreintes mémorisées dans le fichier sync-state.toml (sans les valeurs elles-mêmes ; les empreintes des mots de passe sont calculées avec une clé conservée dans le trousseau). Elle repère donc aussi les modifications saisies à la main dans settings.toml, et le format de ce fichier ne change pas. Une suppression laisse une marque avec sa version : elle passe donc sur les autres ordinateurs. Quand le même élément a été modifié des deux côtés, la modification la plus récente l'emporte.
Le fichier .ffsync
Le contenu est chiffré avec l'algorithme AES-256-GCM et une clé dérivée de votre mot de passe par la fonction PBKDF2-HMAC-SHA256 (600 000 itérations, sel aléatoire de 16 octets). Le mot de passe est d'abord normalisé (NFC), pour que les mêmes caractères saisis sur des systèmes différents donnent la même clé.
L'en-tête du fichier — marqueur de format, version, paramètres de la fonction de dérivation, sel — est couvert par l'authentification du chiffrement : la modification d'un seul octet est détectée au chargement.
Sans le mot de passe, rien ne peut être lu — ni les serveurs, ni le nom de l'ordinateur, ni la date de l'enregistrement ; seuls l'en-tête et la taille du fichier sont visibles. Le nom de fichier proposé contient le nom de l'ordinateur et la date — vous pouvez le changer lors de l'enregistrement. Le mot de passe ne peut pas être récupéré.
Un fichier étranger, ou enregistré par une version plus récente du format, est refusé avant même que le mot de passe soit demandé.
Jumelage
Chaque installation a sa propre clé (ECDSA P-256) avec un certificat qui ne contient pas le nom de l'ordinateur. Le jumelage mémorise l'empreinte (SHA-256) de la clé de l'autre partie.
Le code à six chiffres est calculé à partir des clés des deux ordinateurs, des octets exacts de leurs messages d'ouverture et de nombres aléatoires des deux parties. L'ordinateur qui répond s'engage d'abord sur son nombre aléatoire (il en envoie l'empreinte) : un intermédiaire sur le réseau a donc une chance sur un million d'obtenir des codes identiques — et chaque tentative exige un clic sur Continuer sur l'autre ordinateur. Une même ouverture de la fenêtre permet au plus trois tentatives infructueuses (les jumelages réussis ne comptent pas), avec 3 secondes de pause après chaque échec.
Pendant l'affichage du code, la fenêtre ne montre pas le nom indiqué par l'autre ordinateur — seulement son adresse et son système —, et les boutons ne deviennent actifs qu'au bout d'une seconde et demie.
Connexions
Chaque connexion est en TLS 1.2 ou 1.3, avec les certificats des deux parties. Lors de la récupération des préférences et des fichiers, les deux parties vérifient que la clé de l'autre correspond à celle mémorisée lors du jumelage ; lors du jumelage lui-même, c'est la comparaison du code qui joue ce rôle.
Quand la fenêtre de jumelage est fermée, un ordinateur non jumelé est refusé avant que l'application ne lise le moindre octet de sa requête. Quand la fenêtre est ouverte, l'application lit une seule de ses requêtes et n'accepte qu'une demande de jumelage. L'application n'accepte les connexions que depuis les sous-réseaux des cartes Ethernet et Wi-Fi activées ; elle ignore les tunnels, les connexions PPP ainsi que les cartes VPN et de machines virtuelles connues. C'est une liste de cartes connues, pas une garantie — face à un ordinateur étranger, c'est de toute façon la clé mémorisée qui protège. 8 connexions au plus à la fois, et 2 depuis une même adresse.
Ports : UDP 28217 (annonces quand la fenêtre de jumelage est ouverte et requêtes cherchant l'adresse d'un ordinateur jumelé — à chaque connexion avec lui, en plus d'une tentative à la dernière adresse connue) et TCP 28217–28220 (le premier libre). Adresses IPv4 uniquement.
La requête qui cherche l'adresse d'un ordinateur jumelé porte une marque dérivée de la clé établie lors du jumelage : seul cet ordinateur y répond. L'annonce faite quand la fenêtre de jumelage est ouverte (512 octets) contient le nom de l'ordinateur, le système, le port TCP et le début de l'empreinte de la clé. En dehors de la fenêtre de jumelage, l'application n'annonce rien d'elle-même ; le nom de l'ordinateur ne va qu'à l'ordinateur jumelé, dans une connexion chiffrée. Le certificat avec la clé publique (sans le nom de l'ordinateur) fait partie de chaque connexion TLS — en TLS 1.2, utilisé chaque fois qu'un Mac est le serveur, il est transmis en clair.
Le service ne fonctionne que s'il existe des jumelages enregistrés ou que la fenêtre de jumelage est ouverte. Si vous ne jumelez pas d'ordinateurs, il n'y a pour cette raison ni port ouvert ni lecture du trousseau. Un seul processus de l'application à la fois assure ce service.
La récupération des préférences se fait toujours à la demande (Synchroniser maintenant) et dans un seul sens : de l'autre ordinateur vers celui-ci. Passent les groupes cochés sur les deux ordinateurs, et les mots de passe des serveurs seulement vers les ordinateurs qui y ont été autorisés. L'ordinateur qui partage lit les mots de passe sans fenêtre du système (sur macOS, depuis sa propre copie chiffrée).
L'application conserve l'identité de l'ordinateur et la liste des jumelages dans le fichier
sync-lan.bin, chiffré (AES-256-GCM) avec une clé dérivée de la clé de synchronisation du trousseau. Contenu : le certificat et la clé privée de cet ordinateur, l'interrupteur de partage des préférences et, pour chaque ordinateur jumelé, l'empreinte de sa clé publique, son nom, son système, la date du jumelage, la clé de découverte de la paire, l'autorisation de partage des mots de passe, la dernière adresse et le dernier port ainsi que les dates des dernières récupérations.
Les fichiers d'un ordinateur jumelé
Le partage des fichiers est une autorisation distincte, désactivée par défaut. Chaque requête et chaque bloc du transfert vérifient que l'autorisation et le jumelage sont toujours valables — désactiver le partage (après OK) ou supprimer le jumelage sur l'ordinateur qui partage ses fichiers interrompt le transfert en cours.
Les fichiers circulent par blocs de 128 Kio au plus, sans limite de taille. La copie et le déplacement depuis le disque de cet ordinateur et entre ordinateurs jumelés ne chargent pas le fichier en mémoire ; entre deux ordinateurs jumelés, le fichier passe par une copie temporaire sur le disque de cet ordinateur. L'aperçu F3, la modification F4 et la copie d'un serveur FTP/SFTP vers un ordinateur jumelé chargent le fichier entier.
L'écriture à destination est atomique : une annulation, une connexion coupée, une longueur de données erronée ou une autorisation désactivée laissent le fichier précédent, et le fichier temporaire est supprimé.
L'ordinateur qui a les disques vérifie lui-même les chemins et l'identité des fichiers : on ne peut donc pas déplacer un fichier sur lui-même ni copier un dossier dans son propre sous-dossier, même par un autre chemin menant au même endroit. Les racines des disques ne peuvent être ni supprimées, ni déplacées, ni écrasées.
Données et sécurité
Ce que l'application conserve
| Quoi | Où |
|---|---|
| préférences (y compris les raccourcis clavier modifiés), connexions enregistrées (sans les mots de passe), chemins favoris, terminaux | settings.toml dans le dossier de préférences — macOS : ~/Library/Application Support/FlyingFiles/, Windows : %APPDATA%\FlyingFiles\, Linux : ~/.config/FlyingFiles/ |
| sauvegardes des préférences | settings.toml.bak.0 … .bak.5 à côté |
| mots de passe des serveurs FTP/SFTP | trousseau macOS / Gestionnaire d'identification Windows / trousseau sous Linux (GNOME Keyring, KWallet), service FlyingFiles FTP |
| journal des transferts | logs/transfers.log dans le dossier de préférences |
| adresses des partages réseau (macOS) | network-mounts.toml dans le dossier de préférences |
| archives extraites | le dossier temporaire privé du système, supprimé à la fermeture de l'archive |
| fichiers de plus de 4 Mo venant d'un serveur ou d'une archive, ouverts dans l'aperçu ou l'éditeur | une copie dans le dossier temporaire du système, supprimée à la fermeture de la fenêtre |
| état de la synchronisation des préférences (empreintes et versions des éléments, sans les valeurs) | sync-state.toml dans le dossier de préférences |
| copie chiffrée des mots de passe pour la synchronisation (macOS seulement) | sync-passwords.bin dans le dossier de préférences |
| clé de cet ordinateur et liste des ordinateurs jumelés, chiffrées | sync-lan.bin dans le dossier de préférences (Windows : %LOCALAPPDATA%\FlyingFiles\) |
| clé de synchronisation des préférences | trousseau / Gestionnaire d'identification, service FlyingFiles Sync |
Mots de passe
Les mots de passe sont conservés dans le stockage de mots de passe du système — le trousseau macOS, le Gestionnaire d'identification Windows ou le trousseau sous Linux (GNOME Keyring, KWallet). Le système les chiffre et, sur macOS, contrôle aussi quelles applications peuvent les lire.
En dehors du stockage du système, les mots de passe ne vont que dans les fichiers de synchronisation chiffrés : dans le fichier
.ffsync, si vous l'enregistrez avec les mots de passe, et sur macOS dans la copiesync-passwords.bin, chiffrée avec une clé du trousseau, grâce à laquelle la synchronisation ne sollicite pas le trousseau pour chaque mot de passe séparément.Le fichier de préférences n'en contient jamais.
L'application ne lit un mot de passe que lorsqu'elle se connecte au serveur concerné, quand la connexion est modifiée ou lors d'une synchronisation des préférences avec les mots de passe, pas au démarrage.
Dans le journal du dialogue avec le serveur, le mot de passe est masqué (
PASS ********).
Le fichier de préférences
L'enregistrement est atomique (un fichier temporaire, puis un échange), avec un verrou qui protège de deux fenêtres enregistrant en même temps.
Sur macOS, le fichier n'est lisible que par son propriétaire (
0600), car il contient des adresses de serveurs et des identifiants.À la lecture, l'application tolère les clés manquantes et inconnues et, à l'enregistrement, elle conserve les clés qu'elle ne connaît pas — les ajouts manuels et les réglages des versions plus anciennes ne sont pas perdus.
Les sauvegardes sont faites avant l'enregistrement.
Terminaux
L'adresse et le nom d'utilisateur d'un terminal ne peuvent contenir que des caractères sûrs (lettres, chiffres, ., -, _, : et les crochets des adresses IPv6). Ainsi, une entrée enregistrée ne peut pas glisser une commande supplémentaire dans le terminal.
Limites de sécurité connues
Le certificat d'un serveur FTPS n'est pas vérifié, et la clé d'hôte SFTP est acceptée sans être comparée à une liste d'hôtes connus. Le chiffrement protège de l'écoute, mais pas d'un serveur qui se fait passer pour un autre.
Le FTP simple ne chiffre rien — ni le mot de passe, ni les fichiers.
Distribution et mises à jour
macOS
L'application est signée par un certificat Developer ID, fonctionne avec le Hardened Runtime activé et est notariée par Apple. Le billet de notarisation est agrafé à l'application et à l'image disque
.dmg, si bien que le système peut le vérifier sans connexion réseau.L'application a une autorisation supplémentaire : contrôler d'autres applications (Apple Events) — uniquement pour ouvrir une connexion SSH ou Telnet dans l'application Terminal. macOS demande votre accord à la première utilisation.
Lancée depuis l'image disque, l'application se copie dans
~/Applications. Installée dans le dossier de l'utilisateur, elle se met à jour sans mot de passe d'administrateur.Les mises à jour (bibliothèque Velopack) arrivent depuis
https://nci.pl/flyingfiles/releases/osx-arm64/en HTTPS. L'application consulte la liste des publications au démarrage (cela peut être désactivé dans les Préférences) et à la demande ; elle ne télécharge le paquet, ne se remplace et ne redémarre qu'avec votre accord. L'application contenue dans le paquet est signée avec le même certificat Developer ID et notariée, comme lors de la première installation.L'application comporte une description de l'accès au réseau local : macOS peut demander votre accord la première fois que FlyingFiles se connecte à un appareil du réseau local — par exemple lors du jumelage des ordinateurs.
L'application n'est pas sur le Mac App Store : le bac à sable de cette boutique n'autorise pas à circuler librement sur tout le disque ni à contrôler Terminal — ce qui est précisément le rôle d'un gestionnaire de fichiers.
Windows
L'application est publiée sous forme de paquet MSIX dans le Microsoft Store. Le paquet est signé par Microsoft, l'installation se passe donc sans avertissement SmartScreen.
Les mises à jour sont installées par le Microsoft Store. L'application reconnaît qu'elle fonctionne depuis un paquet du Store et désactive son propre mécanisme de mise à jour. Elle interroge en revanche le Store — depuis la version 1.5.0, aussi au démarrage — et Aide → Rechercher les mises à jour… affiche la progression du téléchargement et installe la mise à jour ; quand le Store échoue, l'application propose d'ouvrir sa page dans le Store.
Le paquet déclare des règles de pare-feu pour les ports du réseau local (UDP 28217, TCP 28217–28220). Windows les crée à l'installation et les supprime à la désinstallation, sans fenêtre du pare-feu et sans droits d'administrateur.
L'application fonctionne comme une application Windows ordinaire, avec les droits de votre compte. Elle n'a besoin d'aucune autorisation particulière pour accéder aux fichiers, et elle garde ses préférences dans le dossier habituel
%APPDATA%\FlyingFiles.
La confidentialité par conception
Aucune télémétrie, aucune analyse d'audience, aucun compte, aucune publicité.
Les seules connexions réseau de l'application sont : vos serveurs FTP/FTPS/SFTP, vos partages réseau, les ordinateurs de votre réseau local quand vous jumelez des ordinateurs ou en avez de jumelés, et
nci.pl— au démarrage (cela peut être désactivé) et quand vous choisissez Rechercher les mises à jour… (macOS et Linux). La version Windows du Store interroge le Microsoft Store, pas notre serveur.L'aperçu vidéo utilise Coup d'œil du système, sur votre ordinateur ; rien n'est envoyé nulle part.
La conversion vidéo lance FFmpeg sur votre ordinateur, et Réduire les fichiers modifie les fichiers dans la mémoire de l'application avant qu'ils n'arrivent à destination. Aucune de ces fonctions n'utilise de service sur Internet.
La vue Markdown ne télécharge pas d'images depuis Internet — elle n'affiche que les images présentes sur le disque de l'ordinateur, et un lien ne s'ouvre que lorsque vous cliquez dessus.
Texte complet : politique de confidentialité.
Langues
Tous les textes de l'interface sont dans un seul fichier de traduction, en polonais, anglais, espagnol, allemand et français. Chaque texte existe dans les cinq langues, ce que des tests automatisés vérifient. Au premier lancement, l'application prend la langue de votre système (l'anglais quand le système utilise une langue qu'elle ne connaît pas) ; ensuite, votre choix dans le menu Langue est conservé dans le fichier de préférences. La langue change immédiatement, sans redémarrer l'application.
Qualité
Plus de 3 700 tests automatisés vérifient la logique et les fenêtres de l'application — y compris sans écran — sur macOS et sur Windows. Les tests vérifient le jumelage et les connexions sur le réseau local sur l'interface de bouclage de l'ordinateur.
Chaque correction de bogue commence par un test qui reproduit le bogue.
La prise en charge de FTP et SFTP est en plus vérifiée sur de vrais serveurs avec un outil distinct qui parcourt une liste d'opérations : connexion, listage, envoi, téléchargement, vérification, annulation et reconnexion.
Histoire
Jusqu'à la version 0.1.0, FlyingFiles était une application Python avec une interface Qt. En septembre 2026, l'application a été réécrite de zéro en C#, en suivant une spécification détaillée du comportement de l'ancienne version, pour gagner une vitesse de démarrage native, la signature et la notarisation sur macOS, un paquet Microsoft Store et une base de code unique pour tous les systèmes. La première version stable de la nouvelle application est la 1.0.0, du 13 septembre 2026, et la version qui apporte de nouvelles fonctions est la 1.1.0, du 16 septembre 2026. Historique des modifications.
Bibliothèques libres
| Bibliothèque | Licence | Utilisée pour |
|---|---|---|
| .NET 10 | MIT | environnement d'exécution |
| Avalonia, Avalonia.Themes.Fluent | MIT | interface utilisateur |
| CommunityToolkit.Mvvm | MIT | modèle MVVM |
| Tomlyn | BSD-2-Clause | fichier de préférences TOML |
| SharpCompress | MIT | archives bzip2, xz, 7z, RAR |
| Joveler.Compression.XZ, liblzma | MIT ; domaine public / 0BSD | écriture des archives xz |
| FluentFTP | MIT | FTP et FTPS |
| SSH.NET, BouncyCastle.Cryptography | MIT | SFTP |
| Microsoft.Extensions.Logging.Abstractions | MIT | dépendance de SSH.NET |
| Avalonia.AvaloniaEdit | MIT | éditeur de texte |
| SkiaSharp | MIT | images |
| Velopack | MIT | mises à jour sur macOS |
FFmpeg ne fait partie ni de l'application ni de ses paquets : FlyingFiles le lance comme un programme distinct, quand il est installé sur le système. De même, les outils de gravure de disques sont des programmes distincts — drutil sur macOS et xorriso sous Linux.
Les versions actuelles sont indiquées dans la fenêtre Aide → À propos.