So funktioniert FlyingFiles
Diese Seite ist für Neugierige und für Administratoren, die vor der Installation wissen möchten, was die App mit Dateien, Passwörtern und dem Netzwerk macht.
Auf einen Blick
FlyingFiles ist eine native App für macOS, Windows und Linux. Sie läuft nur auf Ihrem Computer.
Es gibt keinen zwischengeschalteten Server und kein Konto. Dateien gehen direkt zwischen Ihrem Computer, Ihren Datenträgern und Ihren Servern hin und her, und Einstellungen und Dateien gekoppelter Computer direkt zwischen diesen Computern in Ihrem lokalen Netzwerk.
Die Website
nci.pldient zum Herunterladen der App für macOS und Linux und zur Suche nach Updates — beim Start (lässt sich abschalten) und wenn Sie es verlangen. Die Windows-Version liefert und aktualisiert der Microsoft Store.
flowchart LR
subgraph PC["Ihr Computer"]
APP["FlyingFiles"]
DISK["Datenträger, USB-Sticks,<br/>Netzwerkfreigaben"]
KEY["Schlüsselbund /<br/>Anmeldeinformationsverwaltung"]
TERM["Programme des Systems<br/>Terminal, FFmpeg,<br/>Disc-Brennen"]
end
SRV["Ihre Server<br/>FTP · FTPS · SFTP"]
PEER["Ihre gekoppelten Computer<br/>im lokalen Netzwerk"]
NCI["nci.pl<br/>Download und Updates<br/>macOS und Linux"]
STORE["Microsoft Store<br/>Windows-Installation und Updates"]
APP <--> DISK
APP <--> KEY
APP --> TERM
APP <--> SRV
APP <-. "TLS, nach der Kopplung" .-> PEER
APP -. "beim Start und auf Wunsch" .-> NCI
STORE -. "Windows" .-> APP
Wie die App aufgebaut ist
FlyingFiles ist in C# auf .NET 10 geschrieben, mit einer Benutzeroberfläche in Avalonia 12. Derselbe Code läuft auf allen drei Systemen; systemspezifischer Code ist davon getrennt, an einer Stelle.
Die App besteht aus drei Schichten:
| Schicht | Zuständig für |
|---|---|
| Core | Dateisysteme (Datenträger, Archive), Kopieren und Verschieben, Konfliktprüfung, Archive, Ansehen und Bearbeiten von Dateien jeder Größe, Markdown, Suche, Vergleich, Statistik, .ffignore-Regeln, Verkleinern von Dateien, Befehle für FFmpeg, Einstellungen, Synchronisierung der Einstellungen und die .ffsync-Datei, Übersetzungen |
| Network | FTP und FTPS (Bibliothek FluentFTP), SFTP (SSH.NET), Lesen und Speichern von Passwörtern im Passwortspeicher des Systems, Kopplung von Computern und Verbindungen im lokalen Netzwerk (Einstellungen und Dateien gekoppelter Computer) |
| App | Fenster und Panels (MVVM-Muster), Tastatur und eigene Tastenkürzel, Ziehen mit der Maus, Integration ins System: Papierkorb, Finder und Datei-Explorer, mit Dateien verknüpfte Apps, Terminal, FFmpeg, Disc-Brennen, Formatieren von Volumes, Installation und Updates |
In nativen Code kompiliert
Die App wird vorab (Native AOT) zu einer ausführbaren Datei für einen bestimmten Prozessor kompiliert. Dadurch:
müssen Sie .NET nicht installieren,
startet die App in Sekundenbruchteilen,
braucht sie weniger Speicher als eine App mit Interpreter.
Eine Oberfläche, die nicht einfriert
Jeder Vorgang auf Datenträgern und im Netzwerk läuft im Hintergrund, und die Oberfläche zeigt nur den Fortschritt. Selbst das Auflisten eines Ordners auf einer hängenden Netzwerkfreigabe blockiert das Fenster nicht. Jeder Vorgang, der länger dauern kann, hat ein Fortschrittsfenster und eine funktionierende Schaltfläche Abbrechen.
Eine Textdatei bis 4 MB lesen Ansehen (F3) und Bearbeiten (F4) vollständig ein. Größeren Text und jede Binärdatei lesen sie stückweise — nur das, was auf dem Bildschirm zu sehen ist —, sodass sich eine Datei von mehreren Gigabyte auf dem Datenträger sofort öffnet; eine solche Datei von einem Server (mit Fortschrittsfenster) oder aus einem Archiv kopiert das Programm zuerst in eine temporäre Datei. Zeilennummern und Suche laufen im Hintergrund, und beim Speichern einer Datei vom Datenträger, deren Länge sich nicht ändert, werden nur die geänderten Bytes an Ort und Stelle überschrieben.
Ein Modell für jeden Ort
Der lokale Datenträger, ein Archiv, ein FTP-Server, ein SFTP-Server und die Laufwerke eines gekoppelten Computers teilen in der App eine gemeinsame Dateisystem-Schnittstelle: auflisten, lesen, schreiben, Ordner anlegen, löschen, umbenennen. Panel, Kopieren, Vorschau, Suche und Vergleich nutzen nur diese Schnittstelle. Deshalb:
funktioniert Kopieren in jeder Kombination: Datenträger → Server, Server → Archiv, Server → Server;
verhält sich ein Archiv wie ein Ordner — die App entpackt es in einen privaten temporären Ordner und packt die Änderungen wieder ein, wenn Sie es verlassen;
funktionieren Suche und Statistik auf einem Datenträger, in einem Archiv und auf einem Server gleich.
So funktioniert das Kopieren
.ffignore-Regeln — Elemente, die unter die Regeln von Quelle und Ziel fallen, werden herausgefiltert.Prüfung des Ziels — Sie können kein Element auf sich selbst kopieren und keinen Ordner in einen seiner eigenen Unterordner, auch wenn derselbe Ort anders geschrieben ist: über einen symbolischen Link, in anderer Groß-/Kleinschreibung oder — unter Windows — über den Buchstaben eines Netzlaufwerks. Auf einem Datenträger vergleicht das Programm die Identität der Dateien im Dateisystem und nicht nur den Text des Pfads, sodass ein Verschieben „auf sich selbst“ nie die einzige Kopie einer Datei löscht.
Scan — in einem einzigen Durchgang sammelt die App die Dateiliste, die Gesamtzahl der Bytes und die Konflikte. Bei Servern merkt sie sich die Inhaltslisten der Zielordner, damit sie den Server nicht zu jeder Datei einzeln befragen muss.
Entscheidung bei Konflikten — ein Dialog mit der Wahl: alle überschreiben, ältere überschreiben, Duplikate überspringen, abbrechen.
Kopieren in Blöcken von 256 KB, mit Fortschritt:
Verschieben innerhalb eines Datenträgers ist ein Umbenennen — sofort;
beim Schreiben auf einen Datenträger entsteht eine temporäre Datei neben dem Ziel, die die Zieldatei erst am Ende ersetzt, sodass eine Unterbrechung keine halbe Datei hinterlässt;
das Verschieben eines symbolischen Links auf einen Ordner leert nie den Ordner, auf den er zeigt;
ein Fehler bei einer Datei hält nicht den ganzen Vorgang an — die Datei kommt mit dem Grund auf die Liste der fehlgeschlagenen Elemente.
Nach dem Abschluss — optionales Aufräumen der macOS-Metadateien, Aktualisieren der Panels, eine Zusammenfassung, die Liste der fehlgeschlagenen Elemente und ein Eintrag im Übertragungsprotokoll.
Mit Servern
Neuer Versuch nach einer Zeitüberschreitung und neue Verbindung nach einem Verbindungsabbruch, mit Rückkehr in denselben Ordner.
Vollständigkeitsprüfung — nach einem Fehler vergleicht die App die Größe der Datei auf dem Server. Eine vollständige Datei gilt als erledigt, und wenn sich der Zustand nicht feststellen lässt, versucht die App es nicht blind noch einmal, damit sie keine gute Kopie überschreibt.
Prüfung mit SHA-256 (optional) — die Prüfsumme der Quelldatei wird mit der Prüfsumme der Kopie verglichen. Bei SFTP versucht die App, die Prüfsumme auf dem Server zu berechnen (
sha256sum,shasum,openssl), und wenn das Konto das nicht erlaubt, liest sie die Kopie zurück.Abbrechen — eine halb hochgeladene Datei wird vom Server gelöscht, und ein Download hinterlässt keine Reste auf dem Datenträger.
Dateien vor dem Hochladen verkleinern
Das Feld Dateien verkleinern im Fenster Änderungen bestätigen arbeitet im Programm selbst, auf Ihrem Computer — ohne externes Werkzeug und ohne einen Dienst im Netz:
das Programm liest die PHP-Datei aus der Quelle, entfernt aus dem Code Kommentare, Leerzeilen, Einrückungen und überflüssige Leerzeichen und schreibt das Ergebnis sofort ans Ziel — auf einen Datenträger genauso atomar wie eine gewöhnliche Kopie, auf einen Server als gewöhnliches Hochladen;
die Quelldatei bleibt unberührt, und HTML außerhalb der PHP-Tags, Zeichenketten und Heredoc-Blöcke kommen Byte für Byte unverändert an;
eine Datei, bei der sich das Programm nicht sicher ist (z. B. mit dem kurzen Tag
<?), und eine Datei über 32 MB gehen unverändert ans Ziel, und der Grund landet im Übertragungsprotokoll.
Ziehen mit der Maus
Das Ziehen nutzt den Drag-and-Drop-Mechanismus des Systems — denselben, den der Finder, der Datei-Explorer und andere Programme verwenden.
Das Ablegen in einem Panel startet denselben Ablauf wie F5 oder F6:
.ffignore-Regeln, Prüfung des Ziels, Scan, Konflikte und Fortschrittsfenster.Einträge von FTP/SFTP-Servern und aus Archiven reisen in einem Format, das das Programm nicht verlässt, sodass ein anderes Programm sie nicht sieht. Ablegen lassen sie sich nur in den Panels des Fensters, aus dem sie stammen.
Dateien vom Datenträger reisen zusätzlich als gewöhnliche Dateien des Systems. Der Finder, der Datei-Explorer, der Schreibtisch und andere Programme sehen sie deshalb wie alle anderen und kopieren oder verschieben sie nach ihren eigenen Regeln. Unter Windows bittet FlyingFiles um Kopieren: Der Datei-Explorer kopiert ohne Taste und verschiebt erst mit Shift.
Bei Dateien, die aus einem anderen Programm hereingezogen werden, meldet FlyingFiles immer Kopieren, sodass jenes Programm die Originale nie selbst löscht. Ein Verschieben, wenn Sie es wählen, führt FlyingFiles aus, genau wie F6.
So läuft das Brennen einer Disc ab
FlyingFiles hat keinen eigenen Treiber für den Brenner. Die Disc brennt das Werkzeug, das das System mitbringt: unter macOS drutil (dasselbe, das der Finder verwendet), unter Windows IMAPI — der in Windows eingebaute Brennmechanismus —, unter Linux xorriso. Das Programm bereitet die Daten vor, achtet auf den Platz und liest den Fortschritt aus der Ausgabe des Werkzeugs.
Schätzung des Abbilds — aus der Dateiliste berechnet das Programm, wie viel das Disc-Abbild belegen wird: volle Sektoren zu 2048 Bytes für jede Datei, Ordner und Namen in mehreren Dateisystemen (ISO 9660, Joliet, UDF) und eine Belegungskarte, die mit dem Abbild wächst. Dieselbe Schätzung berechnet den Balken der Disc-Vorlage.
Prüfung der Disc — vor dem Schreiben noch einmal: ob im Laufwerk dieselbe Disc liegt und ob sie genug Platz hat.
Genaues Abbild — das Systemwerkzeug setzt das Abbild zusammen und nennt seine Größe auf den Sektor genau; passt es nicht, beginnt das Schreiben nicht.
Schreiben mit Fortschrittsbalken, Geschwindigkeit und Protokoll.
Prüfung (optional, standardmäßig eingeschaltet) — die gebrannten Daten werden von der Disc gelesen und mit dem Abbild verglichen.
Abschließen und Auswerfen der Disc.
Unter Windows geht eine leere BD-R nicht den gewöhnlichen Weg über IMAPI, der sie immer mit einem Ersatzbereich formatiert (es sei denn, Sie schalten den Ersatzbereich in den Einstellungen ein): Das Programm setzt das Abbild mit IMAPI zusammen und schreibt es Sektor für Sektor auf die Disc, und bei der Prüfung vergleicht es jeden Sektor mit dem Abbild. So fasst dieselbe Disc unter Windows genauso viel wie unter macOS und Linux. Nichts davon verlässt den Computer.
So läuft die Umwandlung eines Videos ab
FlyingFiles kodiert Videos nicht selbst und legt FFmpeg den Paketen nicht bei. Es nutzt das kostenlose Programm FFmpeg, das im System installiert ist, und startet es als eigenen Prozess.
FFmpeg suchen — zuerst der Pfad aus den Einstellungen (Feld FFmpeg-Programm: auf der Registerkarte Vorschau und Video), dann die Ordner aus
PATH, zuletzt die üblichen Installationsorte: Homebrew und MacPorts unter macOS; winget, Chocolatey, Scoop undC:\ffmpeg\binunter Windows;/usr/bin,/usr/local/binund/snap/binunter Linux. Fehlt es, zeigt das Programm, wie Sie es installieren.Beschreibung des Videos —
ffprobe, das meist zusammen mit FFmpeg kommt, liefert Auflösung, Länge, Codecs und Ton. Ohneffprobekennt das Programm nur Länge und Auflösung aus dem Header von MP4- und MOV-Dateien.Verfügbare Encoder — das Programm fragt FFmpeg, was es kodieren kann (
ffmpeg -encoders), und bietet nur das an. Die Hardwarekodierung erscheint erst nach einem erfolgreichen Versuch mit einem einzelnen Bild.Umwandlung — der Befehl ist eine Liste von Argumenten, die direkt an den Prozess geht, ohne die Shell des Systems; ein Dateiname kann deshalb nicht zu einem Befehl werden. FFmpeg darf nichts überschreiben (
-n), und das Programm wählt für das Ergebnis einen freien Namen.Fortschritt — das Programm liest ihn aus der Ausgabe von FFmpeg. Die Datei gilt nur dann als fertig, wenn FFmpeg ohne Fehler endet und das Ende der Arbeit meldet.
Abbruch oder Fehler — die unfertige Datei wird gelöscht, und bei einem Fehler zeigt das Fenster die letzten Meldungen von FFmpeg.
Umwandeln lassen sich nur Dateien auf dem lokalen Datenträger. Das Video verlässt den Computer nicht: FFmpeg liest es vom Datenträger und speichert das Ergebnis neben dem Original oder im Ordner des anderen Panels.
Synchronisierung der Einstellungen und lokales Netzwerk
Seit Version 1.5.0 gehen Einstellungen mit einer Datei oder über das lokale Netzwerk von einem Computer auf einen anderen über (Handbuch). In beiden Fällen geht nichts über einen Server im Internet.
Was sich seit dem letzten Mal geändert hat
Jeder Eintrag — ein Server, ein Terminal, eine Kategorie, ein favorisierter Pfad, eine einzelne Einstellung, der Satz der Tastenkürzel — hat eine Version: den Zeitpunkt der Änderung mit einem Zähler und der Kennung des Computers. Das Programm erkennt Änderungen, indem es die aktuellen Einstellungen mit den Fingerabdrücken vergleicht, die in der Datei sync-state.toml gespeichert sind (ohne die Werte selbst; die Fingerabdrücke von Passwörtern werden mit einem Schlüssel berechnet, der im Schlüsselbund liegt). Deshalb erfasst es auch Änderungen, die von Hand in settings.toml eingetragen wurden, und das Format dieser Datei ändert sich nicht. Das Löschen hinterlässt eine Markierung mit Version, sodass es auf andere Computer übertragen wird. Bei zwei Änderungen desselben Eintrags gewinnt die neuere.
Die .ffsync-Datei
Der Inhalt wird mit AES-256-GCM verschlüsselt, mit einem Schlüssel, der mit der Funktion PBKDF2-HMAC-SHA256 aus Ihrem Passwort abgeleitet wird (600 000 Durchläufe, zufälliges Salt von 16 Bytes). Das Passwort wird vorher normalisiert (NFC), damit dieselben Zeichen, die auf verschiedenen Systemen eingegeben wurden, denselben Schlüssel ergeben.
Der Kopf der Datei — Formatkennung, Version, Parameter der Schlüsselfunktion, Salt — ist in die Authentifizierung der Verschlüsselung einbezogen, sodass schon die Änderung eines einzigen Bytes beim Laden auffällt.
Ohne das Passwort lässt sich nichts lesen — weder die Server noch der Computername noch das Datum des Speicherns; offen sind nur der Kopf und die Größe der Datei. Der vorgeschlagene Dateiname enthält den Computernamen und das Datum — Sie können ihn beim Speichern ändern. Das Passwort lässt sich nicht wiederherstellen.
Eine fremde Datei oder eine, die mit einer neueren Version des Formats gespeichert wurde, lehnt das Programm ab, bevor es nach dem Passwort fragt.
Kopplung
Jede Installation hat einen eigenen Schlüssel (ECDSA P-256) mit einem Zertifikat, in dem kein Computername steht. Die Kopplung merkt sich den Hash (SHA-256) des Schlüssels der anderen Seite.
Der sechsstellige Code wird aus den Schlüsseln beider Computer, aus den genauen Bytes ihrer Begrüßungsnachrichten und aus Zufallszahlen beider Seiten berechnet. Der antwortende Computer legt sich zuerst auf seine Zufallszahl fest (er sendet ihren Hash), sodass ein Angreifer, der sich im Netzwerk dazwischenschaltet, eine Chance von eins zu einer Million hat, dass die Codes übereinstimmen — und jeder Versuch erfordert einen Klick auf Fortfahren auf dem anderen Computer. In einem geöffneten Fenster gibt es höchstens drei fehlgeschlagene Versuche (erfolgreiche Kopplungen zählen nicht mit), und nach jedem fehlgeschlagenen folgt eine Pause von 3 Sekunden.
Beim Code zeigt das Fenster nicht den Namen an, den der andere Computer angegeben hat — nur seine Adresse und sein System —, und die Schaltflächen werden erst nach anderthalb Sekunden aktiv.
Verbindungen
Jede Verbindung ist TLS 1.2 oder 1.3 mit Zertifikaten beider Seiten. Beim Laden von Einstellungen und Dateien prüfen beide Seiten, ob der Schlüssel der anderen Seite mit dem bei der Kopplung gespeicherten übereinstimmt; bei der Kopplung selbst übernimmt diese Rolle der Vergleich des Codes.
Ist das Kopplungsfenster geschlossen, wird ein nicht gekoppelter Computer abgewiesen, bevor das Programm auch nur ein Byte seiner Anfrage liest. Bei geöffnetem Fenster liest das Programm eine einzige Anfrage von ihm und nimmt nur eine Bitte um Kopplung an. Das Programm nimmt Verbindungen nur aus den Subnetzen eingeschalteter Ethernet- und WLAN-Adapter an; Tunnel, PPP-Verbindungen sowie bekannte VPN-Adapter und Adapter virtueller Maschinen lässt es aus. Das ist eine Liste bekannter Adapter, keine Garantie — vor einem fremden Computer schützt ohnehin der festgehaltene Schlüssel. Höchstens 8 Verbindungen zugleich und 2 von einer Adresse.
Ports: UDP 28217 (Ankündigungen bei geöffnetem Kopplungsfenster und Anfragen nach der Adresse eines gekoppelten Computers — bei jeder Verbindung mit ihm, neben dem Versuch unter der letzten bekannten Adresse) und TCP 28217–28220 (der erste freie). Nur IPv4-Adressen.
Die Anfrage nach der Adresse eines gekoppelten Computers trägt ein Kennzeichen aus dem bei der Kopplung vereinbarten Schlüssel, sodass nur dieser Computer darauf antwortet. Die Ankündigung bei geöffnetem Kopplungsfenster (512 Bytes) enthält den Computernamen, das System, den TCP-Port und den Anfang des Schlüssel-Fingerabdrucks. Außerhalb des Kopplungsfensters kündigt das Programm nichts über sich an; der Computername geht nur an einen gekoppelten Computer, über eine verschlüsselte Verbindung. Das Zertifikat mit dem öffentlichen Schlüssel (ohne den Namen des Computers) ist Teil jeder TLS-Verbindung — bei TLS 1.2, das immer verwendet wird, wenn ein Mac der Server ist, wird es unverschlüsselt übertragen.
Der Dienst läuft nur, wenn Kopplungen gespeichert sind oder das Kopplungsfenster geöffnet ist. Wer keine Computer koppelt, hat deswegen keinen offenen Port und keinen Lesezugriff auf den Schlüsselbund. Den Dienst führt jeweils nur ein Prozess des Programms.
Das Laden von Einstellungen geschieht immer auf Anforderung (Jetzt synchronisieren) und nur in eine Richtung: von jenem Computer auf diesen. Übertragen werden die auf beiden Computern ausgewählten Gruppen, und Serverpasswörter nur an Computer, denen das erlaubt wurde. Der freigebende Computer liest die Passwörter ohne Fenster des Systems (unter macOS aus seiner eigenen verschlüsselten Kopie).
Die Identität des Computers und die Liste der Kopplungen speichert das Programm in der Datei
sync-lan.bin, verschlüsselt (AES-256-GCM) mit einem Schlüssel, der aus dem Synchronisierungsschlüssel im Schlüsselbund abgeleitet wird. Inhalt: Zertifikat und privater Schlüssel dieses Computers, der Schalter für die Freigabe der Einstellungen und für jeden gekoppelten Computer der Fingerabdruck seines öffentlichen Schlüssels, Name, System, Datum der Kopplung, Schlüssel zum Auffinden des Partners, Zustimmung zur Freigabe der Passwörter, letzte Adresse und letzter Port sowie die Zeitpunkte des letzten Ladens.
Dateien eines gekoppelten Computers
Die Dateifreigabe ist eine eigene Zustimmung, standardmäßig ausgeschaltet. Jede Anfrage und jeder Teil einer Übertragung prüft, ob Zustimmung und Kopplung noch gelten — das Ausschalten der Freigabe (nach OK) oder das Entfernen der Kopplung auf dem Computer, der die Dateien freigibt, bricht eine laufende Übertragung ab.
Dateien gehen in Teilen von bis zu 128 KiB, ohne Größenbeschränkung. Kopieren und Verschieben vom Datenträger dieses Computers und zwischen gekoppelten Computern lädt die Datei nicht in den Speicher; zwischen zwei gekoppelten Computern geht eine Datei über eine temporäre Kopie auf dem Datenträger dieses Computers. Ansehen mit F3, Bearbeiten mit F4 und Kopieren von einem FTP/SFTP-Server auf einen gekoppelten Computer laden die ganze Datei.
Das Schreiben am Ziel ist atomar: Abbruch, unterbrochene Verbindung, falsche Datenlänge oder ausgeschaltete Zustimmung hinterlassen die vorherige Datei, und die temporäre Datei wird gelöscht.
Der Computer mit den Laufwerken prüft Pfade und Identität der Dateien selbst, sodass sich keine Datei auf sich selbst verschieben und kein Ordner in seinen Unterordner kopieren lässt, auch nicht über einen anderen Pfad zum selben Ort. Die Stammverzeichnisse der Laufwerke lassen sich nicht löschen, verschieben oder überschreiben.
Daten und Sicherheit
Was die App speichert
| Was | Wo |
|---|---|
| Einstellungen (auch geänderte Tastenkürzel), gespeicherte Verbindungen (ohne Passwörter), favorisierte Pfade, Terminals | settings.toml im Einstellungsordner — macOS: ~/Library/Application Support/FlyingFiles/, Windows: %APPDATA%\FlyingFiles\, Linux: ~/.config/FlyingFiles/ |
| Sicherungen der Einstellungen | settings.toml.bak.0 … .bak.5 daneben |
| Passwörter der FTP/SFTP-Server | macOS-Schlüsselbund / Windows-Anmeldeinformationsverwaltung / Schlüsselbund unter Linux (GNOME Keyring, KWallet), Dienst FlyingFiles FTP |
| Übertragungsprotokoll | logs/transfers.log im Einstellungsordner |
| Adressen von Netzwerkfreigaben (macOS) | network-mounts.toml im Einstellungsordner |
| entpackte Archive | der private temporäre Ordner des Systems, gelöscht, wenn das Archiv geschlossen wird |
| Dateien über 4 MB von einem Server oder aus einem Archiv, zum Ansehen oder Bearbeiten geöffnet | eine Kopie im temporären Ordner des Systems, gelöscht, wenn das Fenster geschlossen wird |
| Stand der Synchronisierung der Einstellungen (Fingerabdrücke und Versionen der Einträge, ohne Werte) | sync-state.toml im Einstellungsordner |
| verschlüsselte Kopie der Passwörter für die Synchronisierung (nur macOS) | sync-passwords.bin im Einstellungsordner |
| Schlüssel dieses Computers und Liste der gekoppelten Computer, verschlüsselt | sync-lan.bin im Einstellungsordner (Windows: %LOCALAPPDATA%\FlyingFiles\) |
| Schlüssel der Synchronisierung der Einstellungen | Schlüsselbund / Anmeldeinformationsverwaltung, Dienst FlyingFiles Sync |
Passwörter
Passwörter werden im Passwortspeicher des Systems abgelegt — im macOS-Schlüsselbund, in der Windows-Anmeldeinformationsverwaltung oder im Schlüsselbund unter Linux (GNOME Keyring, KWallet). Das System verschlüsselt sie, und unter macOS kontrolliert es außerdem, welche Apps sie lesen dürfen.
Außerhalb des Passwortspeichers des Systems landen Passwörter nur in verschlüsselten Synchronisierungsdateien: in der
.ffsync-Datei, wenn Sie sie mit Passwörtern speichern, und unter macOS in der Kopiesync-passwords.bin, die mit einem Schlüssel aus dem Schlüsselbund verschlüsselt ist und dank der die Synchronisierung den Schlüsselbund nicht nach jedem Passwort einzeln fragt.Die Einstellungsdatei enthält nie Passwörter.
Die App liest ein Passwort nur, wenn sie sich mit diesem Server verbindet, wenn die Verbindung bearbeitet wird oder bei einer Synchronisierung der Einstellungen mit Passwörtern, nicht beim Start.
Im Protokoll der Kommunikation mit dem Server ist das Passwort maskiert (
PASS ********).
Die Einstellungsdatei
Das Speichern ist atomar (eine temporäre Datei, dann ein Austausch), mit einer Sperre, die davor schützt, dass zwei Fenster gleichzeitig speichern.
Unter macOS hat die Datei Rechte nur für den Besitzer (
0600), weil sie Serveradressen und Benutzernamen enthält.Beim Lesen toleriert die App fehlende und unbekannte Schlüssel, und beim Speichern behält sie Schlüssel, die sie nicht kennt — manuelle Ergänzungen und Einstellungen aus älteren Versionen gehen nicht verloren.
Vor dem Speichern werden Sicherungen angelegt.
Terminals
Adresse und Benutzername eines Terminals dürfen nur sichere Zeichen enthalten (Buchstaben, Ziffern, ., -, _, : und die Klammern von IPv6-Adressen). So kann ein gespeicherter Eintrag keinen zusätzlichen Befehl ins Terminal einschleusen.
Bekannte Sicherheitseinschränkungen
Das Zertifikat des FTPS-Servers wird nicht geprüft, und der Host-Schlüssel bei SFTP wird akzeptiert, ohne ihn mit einer Liste bekannter Hosts abzugleichen. Die Verschlüsselung schützt vor Abhören, aber nicht vor einem Server, der sich als ein anderer ausgibt.
Einfaches FTP verschlüsselt nichts — weder das Passwort noch die Dateien.
Vertrieb und Updates
macOS
Die App ist mit einem Developer ID-Zertifikat signiert, läuft mit aktivierter Hardened Runtime und ist von Apple notarisiert. Das Notarisierungsticket ist an die App und an das
.dmg-Disk-Image geheftet, sodass das System es ohne Netzwerkverbindung prüfen kann.Die App hat eine zusätzliche Berechtigung: andere Apps steuern (Apple Events) — ausschließlich, um eine SSH- oder Telnet-Verbindung in der App Terminal zu öffnen. macOS fragt bei der ersten Verwendung nach Ihrer Zustimmung.
Aus dem Disk-Image gestartet, kopiert sich die App nach
~/Applications. Durch die Installation im Ordner des Benutzers brauchen Updates kein Administratorpasswort.Updates (Bibliothek Velopack) kommen über HTTPS aus
https://nci.pl/flyingfiles/releases/osx-arm64/. Die App prüft die Liste der Releases beim Start (lässt sich in den Einstellungen abschalten) und auf Wunsch; das Paket lädt sie erst nach Ihrer Zustimmung herunter, ersetzt sich dann selbst und startet neu. Die App im Paket ist mit demselben Developer-ID-Zertifikat signiert und notarisiert, genau wie bei der ersten Installation.Die App hat eine Beschreibung für den Zugriff auf das lokale Netzwerk: macOS fragt möglicherweise nach Ihrer Zustimmung, wenn sich FlyingFiles zum ersten Mal mit einem Gerät im lokalen Netzwerk verbindet — zum Beispiel beim Koppeln von Computern.
Die App ist nicht im Mac App Store: Die Sandbox des Stores erlaubt weder, sich frei auf dem ganzen Datenträger zu bewegen, noch Terminal zu steuern — und genau dafür ist ein Dateimanager da.
Windows
Die App erscheint als MSIX-Paket im Microsoft Store. Das Paket ist von Microsoft signiert, sodass die Installation ohne SmartScreen-Warnungen durchläuft.
Updates installiert der Microsoft Store. Die App erkennt, dass sie aus einem Store-Paket läuft, und schaltet ihren eigenen Update-Mechanismus ab. Stattdessen fragt sie beim Store nach — seit Version 1.5.0 auch beim Start —, und Hilfe → Nach Updates suchen… zeigt den Download-Fortschritt und installiert das Update; wenn der Store scheitert, bietet die App an, ihre Store-Seite zu öffnen.
Das Paket deklariert Firewallregeln für die Ports des lokalen Netzwerks (UDP 28217, TCP 28217–28220). Windows legt sie bei der Installation an und entfernt sie bei der Deinstallation, ohne Firewall-Fenster und ohne Administratorrechte.
Die App läuft als gewöhnliche Windows-App mit den Rechten Ihres Kontos. Sie braucht keine besondere Zustimmung für den Zugriff auf Dateien und speichert ihre Einstellungen im gewöhnlichen Ordner
%APPDATA%\FlyingFiles.
Datenschutz durch Technikgestaltung
Keine Telemetrie, keine Analyse, keine Konten und keine Werbung.
Die einzigen Netzwerkverbindungen der App sind: Ihre FTP/FTPS/SFTP-Server, Ihre Netzwerkfreigaben, Computer in Ihrem lokalen Netzwerk, wenn Sie Computer koppeln oder gekoppelte haben, und
nci.pl— beim Start (lässt sich abschalten) und wenn Sie Nach Updates suchen… wählen (macOS und Linux). Die Windows-Version aus dem Store fragt den Microsoft Store, nicht unseren Server.Die Videovorschau nutzt Quick Look des Systems auf Ihrem Computer; nichts wird irgendwohin gesendet.
Die Videoumwandlung startet FFmpeg auf Ihrem Computer, und Dateien verkleinern ändert Dateien im Speicher des Programms, bevor sie ans Ziel kommen. Keine dieser Funktionen nutzt Dienste im Internet.
Die Markdown-Ansicht lädt keine Bilder aus dem Internet — sie zeigt nur Bilder vom Datenträger des Computers, und ein Link öffnet sich erst nach einem Klick.
Vollständiger Text: Datenschutzerklärung.
Sprachen
Alle Texte der Oberfläche stehen in einer einzigen Übersetzungsdatei, auf Deutsch, Englisch, Polnisch, Spanisch und Französisch. Jeder Text existiert in allen fünf Sprachen, was automatische Tests prüfen. Beim ersten Start wählt die App die Sprache Ihres Systems (Englisch, wenn das System eine Sprache verwendet, die die App nicht kennt); danach bleibt Ihre Wahl aus dem Menü Sprache in der Einstellungsdatei gespeichert. Die Sprache wechselt sofort, ohne Neustart der App.
Qualität
Mehr als 3700 automatische Tests prüfen die Logik und die Fenster der App — auch ohne Bildschirm — unter macOS und unter Windows. Kopplung und Verbindungen im lokalen Netzwerk prüfen die Tests über die Loopback-Schnittstelle des Computers.
Jede Fehlerbehebung beginnt mit einem Test, der den Fehler reproduziert.
Die Unterstützung von FTP und SFTP wird zusätzlich auf echten Servern mit einem eigenen Werkzeug geprüft, das eine Liste von Vorgängen abarbeitet: verbinden, auflisten, hochladen, herunterladen, prüfen, abbrechen und neu verbinden.
Geschichte
Bis Version 0.1.0 war FlyingFiles eine Python-App mit einer Qt-Oberfläche. Im September 2026 wurde die App von Grund auf in C# neu geschrieben, nach einer ausführlichen Spezifikation des Verhaltens der alten Version — für einen nativ schnellen Start, Signatur und Notarisierung unter macOS, ein Microsoft-Store-Paket und eine einzige Codebasis für beide Systeme. Das erste stabile Release der neuen Version ist 1.0.0 vom 13. September 2026, das Release mit neuen Funktionen ist 1.1.0 vom 16. September 2026. Versionsgeschichte.
Open-Source-Bibliotheken
| Bibliothek | Lizenz | Verwendet für |
|---|---|---|
| .NET 10 | MIT | Laufzeitumgebung |
| Avalonia, Avalonia.Themes.Fluent | MIT | Benutzeroberfläche |
| CommunityToolkit.Mvvm | MIT | MVVM-Muster |
| Tomlyn | BSD-2-Clause | TOML-Einstellungsdatei |
| SharpCompress | MIT | Archive bzip2, xz, 7z, RAR |
| Joveler.Compression.XZ, liblzma | MIT; Public Domain / 0BSD | Schreiben von xz-Archiven |
| FluentFTP | MIT | FTP und FTPS |
| SSH.NET, BouncyCastle.Cryptography | MIT | SFTP |
| Microsoft.Extensions.Logging.Abstractions | MIT | Abhängigkeit von SSH.NET |
| Avalonia.AvaloniaEdit | MIT | Texteditor |
| SkiaSharp | MIT | Bilder |
| Velopack | MIT | Updates unter macOS |
FFmpeg ist weder Teil des Programms noch der Pakete: FlyingFiles startet es als eigenes Programm, wenn es im System installiert ist. Ebenso sind die Werkzeuge zum Brennen von Discs eigene Programme — drutil unter macOS und xorriso unter Linux.
Die aktuellen Versionen zeigt das Fenster Hilfe → Über.