Jak działa FlyingFiles

Ta strona jest dla ciekawych i dla administratorów, którzy chcą wiedzieć, co program robi z plikami, hasłami i siecią, zanim go zainstalują.

W skrócie

  • FlyingFiles to natywny program na macOS i Windows. Działa wyłącznie na Twoim komputerze.

  • Nie ma serwera pośredniczącego ani konta. Pliki idą bezpośrednio między Twoim komputerem, Twoimi dyskami i Twoimi serwerami.

  • Strona nci.pl służy do pobrania programu na macOS i — na Twoje żądanie — do sprawdzenia aktualizacji. Wersję dla Windows dostarcza i aktualizuje Microsoft Store.

flowchart LR
  subgraph PC["Twój komputer"]
    APP["FlyingFiles"]
    DISK["Dyski, pendrive'y,<br/>udziały sieciowe"]
    KEY["Pęk kluczy /<br/>Menedżer poświadczeń"]
    TERM["Terminal systemu"]
  end
  SRV["Twoje serwery<br/>FTP · FTPS · SFTP"]
  NCI["nci.pl<br/>pobranie i aktualizacje macOS"]
  STORE["Microsoft Store<br/>instalacja i aktualizacje Windows"]
  APP <--> DISK
  APP <--> KEY
  APP --> TERM
  APP <--> SRV
  APP -. "na żądanie" .-> NCI
  STORE -. "Windows" .-> APP

Budowa programu

FlyingFiles jest napisany w C# na platformie .NET 10, z interfejsem Avalonia 12. Ten sam kod działa na obu systemach; kod specyficzny dla systemu jest wydzielony w jednym miejscu.

Program składa się z trzech warstw:

WarstwaZa co odpowiada
Coresystemy plików (dysk, archiwa), kopiowanie i przenoszenie, skanowanie konfliktów, archiwa, podgląd, wyszukiwanie, porównanie, statystyki, reguły .ffignore, ustawienia, tłumaczenia
NetworkFTP i FTPS (biblioteka FluentFTP), SFTP (SSH.NET), odczyt i zapis haseł w magazynie systemu
Appokna i panele (wzorzec MVVM), klawiatura, integracja z systemem: Kosz, Finder i Eksplorator, programy skojarzone z plikami, Terminal, instalacja i aktualizacje

Kompilacja do kodu natywnego

Program jest kompilowany z wyprzedzeniem (Native AOT) do pliku wykonywalnego dla danego procesora. Dzięki temu:

  • nie trzeba instalować .NET,

  • program startuje w ułamku sekundy,

  • zajmuje mniej pamięci niż aplikacja z interpreterem.

Interfejs, który nie zamarza

Każda operacja na dysku i w sieci działa w tle, a interfejs tylko pokazuje postęp. Nawet listowanie katalogu na zawieszonym udziale sieciowym nie blokuje okna. Każda operacja, która może potrwać, ma okno postępu i działający przycisk Anuluj.

Jeden model dla wszystkich miejsc

Dysk lokalny, archiwum, serwer FTP i serwer SFTP mają w programie wspólny interfejs systemu plików: listowanie, odczyt, zapis, tworzenie katalogów, usuwanie, zmiana nazwy. Panel, kopiowanie, podgląd, wyszukiwanie i porównanie korzystają tylko z tego interfejsu. Dlatego:

  • kopiowanie działa w każdej kombinacji: dysk → serwer, serwer → archiwum, serwer → serwer;

  • archiwum zachowuje się jak katalog — program rozpakowuje je do prywatnego katalogu tymczasowego, a zmiany pakuje z powrotem przy wyjściu;

  • wyszukiwanie i statystyki działają tak samo na dysku, w archiwum i na serwerze.

Jak przebiega kopiowanie

  1. Reguły .ffignore — elementy objęte regułami źródła i celu są odfiltrowane.

  2. Sprawdzenie celu — nie da się skopiować elementu na niego samego ani katalogu do jego podkatalogu.

  3. Skan — program jednym przejściem zbiera listę plików, sumę bajtów i konflikty. Przy serwerach zapamiętuje listingi katalogów docelowych, żeby nie pytać serwera o każdy plik osobno.

  4. Decyzja o konfliktach — okno z wyborem: nadpisz wszystkie, nadpisz starsze, pomiń duplikaty, anuluj.

  5. Kopiowanie porcjami po 256 KB, z postępem:

    • przenoszenie w obrębie jednego dysku to zmiana nazwy — natychmiastowa;

    • zapis na dysk idzie do pliku tymczasowego obok celu i dopiero na końcu zastępuje plik docelowy, więc przerwanie nie zostawia połówki pliku;

    • błąd jednego pliku nie przerywa całości — plik trafia na listę nieudanych z przyczyną.

  6. Po zakończeniu — opcjonalne sprzątanie plików metadanych macOS, odświeżenie paneli, podsumowanie, lista nieudanych i wpis w dzienniku transferów.

Przy serwerach

  • Ponawianie po przekroczeniu czasu i ponowne łączenie po zerwaniu, z powrotem do tego samego katalogu.

  • Sprawdzenie kompletności — po błędzie program porównuje rozmiar pliku na serwerze. Plik kompletny uznaje za gotowy, a gdy stanu nie da się ustalić, nie ponawia w ciemno, żeby nie nadpisać dobrej kopii.

  • Weryfikacja SHA-256 (opcjonalna) — suma pliku źródłowego jest porównywana z sumą kopii. Na SFTP program próbuje policzyć sumę na serwerze (sha256sum, shasum, openssl), a gdy konto na to nie pozwala, czyta kopię z powrotem.

  • Anulowanie — plik wysłany w połowie jest usuwany z serwera, a pobieranie nie zostawia śmieci na dysku.

Dane i bezpieczeństwo

Co program zapisuje

CoGdzie
ustawienia, zapisane połączenia (bez haseł), skróty ścieżek, terminalesettings.toml w katalogu ustawień — macOS: ~/Library/Application Support/FlyingFiles/, Windows: %APPDATA%\FlyingFiles\
kopie zapasowe ustawieńsettings.toml.bak.0.bak.5 obok
hasła do serwerów FTP/SFTPpęk kluczy macOS / Menedżer poświadczeń Windows, usługa FlyingFiles FTP
dziennik transferówlogs/transfers.log w katalogu ustawień
adresy udziałów sieciowych (macOS)network-mounts.toml w katalogu ustawień
rozpakowane archiwaprywatny katalog tymczasowy systemu, usuwany po zamknięciu archiwum

Hasła

  • Hasła są przechowywane wyłącznie w systemowym magazynie haseł — pęku kluczy macOS albo Menedżerze poświadczeń Windows. System szyfruje je i pilnuje, który program może je odczytać.

  • Plik ustawień nigdy nie zawiera haseł.

  • Program czyta hasło dopiero przy łączeniu z danym serwerem albo przy edycji połączenia, nie przy starcie.

  • W dzienniku rozmowy z serwerem hasło jest zamaskowane (PASS ********).

Plik ustawień

  • Zapis jest atomowy (plik tymczasowy, potem podmiana), z blokadą chroniącą przed jednoczesnym zapisem z dwóch okien.

  • Na macOS plik ma uprawnienia tylko dla właściciela (0600), bo zawiera adresy serwerów i loginy.

  • Program przy odczycie toleruje brakujące i nieznane klucze, a przy zapisie zachowuje klucze, których nie zna — ręczne dopiski i ustawienia starszych wersji nie giną.

  • Przed zapisem powstają kopie zapasowe.

Terminale

Adres i nazwa użytkownika terminala mogą zawierać tylko bezpieczne znaki (litery, cyfry, ., -, _, : i nawiasy adresów IPv6). Dzięki temu zapisany wpis nie może przemycić dodatkowego polecenia do terminala.

Znane ograniczenia bezpieczeństwa

  • Certyfikat serwera FTPS nie jest weryfikowany, a klucz hosta SFTP jest akceptowany bez sprawdzenia z listą znanych hostów. Szyfrowanie chroni przed podsłuchem, ale nie przed podstawionym serwerem.

  • Zwykły FTP nie szyfruje niczego — ani hasła, ani plików.

Dystrybucja i aktualizacje

macOS

  • Program jest podpisany certyfikatem Developer ID, działa z włączonym Hardened Runtime i jest notaryzowany przez Apple. Bilet notaryzacji jest dołączony do programu i do obrazu .dmg, więc system może go sprawdzić bez sieci.

  • Program ma jedno dodatkowe uprawnienie: sterowanie innymi aplikacjami (Apple Events) — wyłącznie po to, żeby otworzyć połączenie SSH albo Telnet w aplikacji Terminal. macOS pyta o zgodę przy pierwszym użyciu.

  • Uruchomiony z obrazu program sam kopiuje się do ~/Applications. Instalacja w katalogu użytkownika sprawia, że aktualizacje nie wymagają hasła administratora.

  • Aktualizacje (biblioteka Velopack) pobierane są na żądanie z katalogu https://nci.pl/flyingfiles/releases/osx-arm64/ przez HTTPS. Program sprawdza listę wydań, pobiera pakiet, podmienia się i uruchamia ponownie. Program w pakiecie jest podpisany tym samym certyfikatem Developer ID i notaryzowany jak przy pierwszej instalacji.

Programu nie ma w Mac App Store: piaskownica sklepu nie pozwala na swobodne poruszanie się po całym dysku ani na sterowanie Terminalem — czyli na to, do czego menedżer plików służy.

Windows

  • Program jest wydawany jako pakiet MSIX w Microsoft Store. Pakiet podpisuje Microsoft, więc instalacja przebiega bez ostrzeżeń SmartScreen.

  • Aktualizacje instaluje Microsoft Store. Program rozpoznaje, że działa z pakietu Sklepu, i wyłącza własny mechanizm aktualizacji.

  • Program działa jako zwykła aplikacja Windows z uprawnieniami Twojego konta. Nie potrzebuje specjalnych zgód na dostęp do plików, a ustawienia trzyma w zwykłym %APPDATA%\FlyingFiles.

Prywatność z założenia

  • Brak telemetrii, analityki, kont i reklam.

  • Połączenia sieciowe programu to wyłącznie: Twoje serwery FTP/FTPS/SFTP, Twoje udziały sieciowe oraz — gdy wybierzesz Sprawdź aktualizacje… (macOS i dawna beta dla Windows z pliku Setup.exe) — nci.pl.

  • Podgląd nagrań korzysta z systemowego QuickLook na Twoim komputerze; nic nie jest wysyłane.

Pełny tekst: polityka prywatności.

Języki

Wszystkie teksty interfejsu są w jednym pliku tłumaczeń, po polsku i po angielsku. Każdy tekst istnieje w obu językach, co sprawdzają testy automatyczne. Język zmienia się od razu, bez ponownego uruchomienia.

Jakość

  • Ponad 1700 testów automatycznych sprawdza logikę programu i okna — także bez ekranu — na macOS i na Windows.

  • Każda poprawka błędu zaczyna się od testu, który ten błąd pokazuje.

  • Obsługa FTP i SFTP jest dodatkowo sprawdzana na prawdziwych serwerach osobnym narzędziem, które przechodzi listę operacji: łączenie, listowanie, wysyłanie, pobieranie, weryfikację, anulowanie i ponowne łączenie.

Historia

Do wersji 0.1.0 FlyingFiles był aplikacją w Pythonie z interfejsem Qt. We wrześniu 2026 program napisano od nowa w C#, według szczegółowej specyfikacji zachowań starej wersji, żeby zyskać natywny start, podpis i notaryzację na macOS, pakiet w Microsoft Store i jeden kod dla obu systemów. Pierwsze stabilne wydanie nowej wersji to 1.0.0 z 13 września 2026. Historia zmian.

Biblioteki open source

BibliotekaLicencjaDo czego
.NET 10MITśrodowisko uruchomieniowe
Avalonia, Avalonia.Themes.FluentMITinterfejs
CommunityToolkit.MvvmMITwzorzec MVVM
TomlynBSD-2-Clauseplik ustawień TOML
SharpCompressMITarchiwa bzip2, xz, 7z, RAR
Joveler.Compression.XZ, liblzmaMIT; public domain / 0BSDzapis archiwów xz
FluentFTPMITFTP i FTPS
SSH.NET, BouncyCastle.CryptographyMITSFTP
Microsoft.Extensions.Logging.AbstractionsMITzależność SSH.NET
Avalonia.AvaloniaEditMITedytor tekstu
SkiaSharpMITobrazy
VelopackMITaktualizacje na macOS

Aktualne wersje pokazuje okno Pomoc → O programie.