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, Windows i Linuksa. 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, a ustawienia i pliki sparowanych komputerów — bezpośrednio między tymi komputerami w Twojej sieci lokalnej.
Strona
nci.plsłuży do pobrania programu na macOS i Linuksa i do sprawdzenia aktualizacji — przy uruchomieniu (da się to wyłączyć) i na Twoje żądanie. 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["Programy systemu<br/>Terminal, FFmpeg,<br/>nagrywanie płyt"]
end
SRV["Twoje serwery<br/>FTP · FTPS · SFTP"]
PEER["Twoje sparowane komputery<br/>w sieci lokalnej"]
NCI["nci.pl<br/>pobranie i aktualizacje<br/>macOS i Linuksa"]
STORE["Microsoft Store<br/>instalacja i aktualizacje Windows"]
APP <--> DISK
APP <--> KEY
APP --> TERM
APP <--> SRV
APP <-. "TLS, po sparowaniu" .-> PEER
APP -. "przy starcie i 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 wszystkich trzech systemach; kod specyficzny dla systemu jest wydzielony w jednym miejscu.
Program składa się z trzech warstw:
| Warstwa | Za co odpowiada |
|---|---|
| Core | systemy plików (dysk, archiwa), kopiowanie i przenoszenie, skanowanie konfliktów, archiwa, podgląd i edycja plików dowolnej wielkości, Markdown, wyszukiwanie, porównanie, statystyki, reguły .ffignore, zmniejszanie plików, polecenia dla FFmpeg, ustawienia, synchronizacja ustawień i plik .ffsync, tłumaczenia |
| Network | FTP i FTPS (biblioteka FluentFTP), SFTP (SSH.NET), odczyt i zapis haseł w magazynie systemu, parowanie komputerów i połączenia w sieci lokalnej (ustawienia i pliki sparowanych komputerów) |
| App | okna i panele (wzorzec MVVM), klawiatura i własne skróty, przeciąganie myszą, integracja z systemem: Kosz, Finder i Eksplorator, programy skojarzone z plikami, Terminal, FFmpeg, nagrywanie płyt, formatowanie woluminów, 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.
Plik tekstowy do 4 MB podgląd (F3) i edycja (F4) wczytują w całości. Większy tekst i każdy plik binarny czytają kawałkami — tylko to, co widać na ekranie — więc plik z dysku wielkości kilku gigabajtów otwiera się od razu; taki plik z serwera (z oknem postępu) albo z archiwum program najpierw kopiuje do pliku tymczasowego. Numery wierszy i wyszukiwanie liczą się w tle, a zapis pliku z dysku bez zmiany długości nadpisuje w miejscu tylko zmienione bajty.
Jeden model dla wszystkich miejsc
Dysk lokalny, archiwum, serwer FTP, serwer SFTP i dyski sparowanego komputera 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
Reguły
.ffignore— elementy objęte regułami źródła i celu są odfiltrowane.Sprawdzenie celu — nie da się skopiować elementu na niego samego ani katalogu do jego podkatalogu, także gdy to samo miejsce jest zapisane inaczej: przez dowiązanie, inną wielkością liter albo — w Windows — przez literę dysku sieciowego. Na dysku program porównuje tożsamość plików w systemie, a nie sam zapis ścieżki, więc przeniesienie „na siebie” nie skasuje jedynej kopii pliku.
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.
Decyzja o konfliktach — okno z wyborem: nadpisz wszystkie, nadpisz starsze, pomiń duplikaty, anuluj.
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;
przeniesienie dowiązania do katalogu nigdy nie opróżnia katalogu, na który ono wskazuje;
błąd jednego pliku nie przerywa całości — plik trafia na listę nieudanych z przyczyną.
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.
Zmniejszanie plików przed wysłaniem
Pole Zmniejsz pliki w oknie Zatwierdź zmiany działa w samym programie, na Twoim komputerze — bez zewnętrznego narzędzia i bez żadnej usługi w sieci:
program czyta plik PHP ze źródła, usuwa z kodu komentarze, puste wiersze, wcięcia i zbędne odstępy i od razu zapisuje wynik w miejscu docelowym — na dysku tak samo atomowo jak zwykłą kopię, na serwerze jako zwykłe wysłanie pliku;
plik źródłowy zostaje nietknięty, a HTML poza znacznikami PHP, napisy i bloki heredoc przechodzą bajt w bajt;
plik, którego program nie jest pewny (np. z krótkim znacznikiem
<?), i plik większy niż 32 MB idą bez zmian, a powód trafia do dziennika transferów.
Przeciąganie myszą
Przeciąganie korzysta z mechanizmu przeciągania i upuszczania systemu — tego samego, którego używają Finder, Eksplorator i inne programy.
Upuszczenie w panelu uruchamia ten sam przebieg co F5 albo F6: reguły
.ffignore, sprawdzenie celu, skan, konflikty i okno postępu.Wpisy z serwerów FTP/SFTP i z archiwów jadą w formacie, który nie opuszcza programu, więc inny program ich nie zobaczy. Upuścić je można tylko w panelach okna, z którego pochodzą.
Pliki z dysku jadą dodatkowo jako zwykłe pliki systemu, więc Finder, Eksplorator, pulpit i inne programy widzą je jak każde inne i same je kopiują albo przenoszą według własnych zasad. W Windows FlyingFiles prosi o kopiowanie: Eksplorator bez klawiszy kopiuje, a przenosi dopiero z Shift.
Plikom przeciąganym z innego programu FlyingFiles zawsze zgłasza kopiowanie, więc tamten program nigdy sam nie usuwa oryginałów. Przeniesienie, jeśli je wybierzesz, wykonuje FlyingFiles tak jak F6.
Jak przebiega nagrywanie płyty
FlyingFiles nie ma własnego sterownika nagrywarki. Płytę nagrywa narzędzie, które daje system: na macOS drutil (to samo, którego używa Finder), na Windows IMAPI — mechanizm nagrywania wbudowany w Windows, na Linuksie xorriso. Program przygotowuje dane, pilnuje miejsca i czyta postęp z wyjścia narzędzia.
Szacunek obrazu — z listy plików program liczy, ile zajmie obraz płyty: pełne sektory po 2048 bajtów na każdy plik, katalogi i nazwy w kilku systemach plików (ISO 9660, Joliet, UDF) i mapę zajętości, która rośnie razem z obrazem. Ten sam szacunek liczy pasek wzorca płyty.
Sprawdzenie płyty — przed zapisem jeszcze raz: czy w napędzie jest ta sama płyta i czy ma dość miejsca.
Dokładny obraz — narzędzie systemowe składa obraz i podaje jego rozmiar co do sektora; gdy się nie mieści, zapis się nie zaczyna.
Zapis z paskiem postępu, prędkością i dziennikiem.
Sprawdzenie (opcjonalne, domyślnie włączone) — nagrane dane są czytane z płyty i porównywane z obrazem.
Zamknięcie płyty i wysunięcie.
Na Windows pusta BD-R nie przechodzi przez zwykłą ścieżkę IMAPI, która zawsze formatuje ją z obszarem zapasowym (chyba że obszar zapasowy włączysz w ustawieniach): program składa obraz narzędziem IMAPI i zapisuje go na płytę sektor po sektorze, a przy sprawdzaniu porównuje z obrazem każdy sektor. Dzięki temu ta sama płyta mieści na Windows tyle samo co na macOS i Linuksie. Nic z tego nie wychodzi poza komputer.
Jak przebiega konwersja wideo
FlyingFiles nie koduje filmów sam i nie dołącza FFmpeg do paczek. Korzysta z darmowego programu FFmpeg zainstalowanego w systemie i uruchamia go jako osobny proces.
Szukanie FFmpeg — najpierw ścieżka z ustawień (pole Program FFmpeg w zakładce Podgląd i wideo), potem katalogi z
PATH, na końcu typowe miejsca instalacji: Homebrew i MacPorts na macOS; winget, Chocolatey, Scoop iC:\ffmpeg\binw Windows;/usr/bin,/usr/local/bini/snap/binna Linuksie. Gdy go brak, program pokazuje, jak go zainstalować.Opis nagrania —
ffprobe, który zwykle przychodzi razem z FFmpeg, podaje rozdzielczość, czas, kodeki i dźwięk. Bez niego program zna tylko czas i rozdzielczość z nagłówka plików MP4 i MOV.Dostępne kodery — program pyta FFmpeg, co potrafi zakodować (
ffmpeg -encoders), i proponuje tylko to. Kodowanie sprzętowe pojawia się dopiero po udanej próbie na jednej klatce.Konwersja — polecenie to lista argumentów przekazana wprost do procesu, bez powłoki systemu, więc nazwa pliku nie może stać się poleceniem. FFmpeg dostaje zakaz nadpisywania (
-n), a program wybiera dla wyniku wolną nazwę.Postęp — program czyta go z wyjścia FFmpeg. Plik jest gotowy tylko wtedy, gdy FFmpeg zakończy się bez błędu i zgłosi koniec pracy.
Anulowanie albo błąd — niedokończony plik jest usuwany, a przy błędzie okno pokazuje ostatnie komunikaty FFmpeg.
Konwertować można tylko pliki z dysku lokalnego. Film nie opuszcza komputera: FFmpeg czyta go z dysku i zapisuje wynik obok oryginału albo w katalogu drugiego panelu.
Synchronizacja ustawień i sieć lokalna
Od wersji 1.5.0 ustawienia przechodzą między komputerami plikiem albo przez sieć lokalną (instrukcja). W obu przypadkach nic nie przechodzi przez serwer w internecie.
Co zmieniło się od poprzedniego razu
Każda pozycja — serwer, terminal, kategoria, skrót ścieżki, pojedyncze ustawienie, komplet skrótów klawiaturowych — ma wersję: czas zmiany z licznikiem i identyfikatorem komputera. Program wykrywa zmiany, porównując bieżące ustawienia z odciskami zapamiętanymi w pliku sync-state.toml (bez samych wartości; odciski haseł są liczone z kluczem trzymanym w pęku kluczy). Dlatego wychwytuje też zmiany wpisane ręcznie w settings.toml, a format tego pliku się nie zmienia. Usunięcie zostawia znacznik z wersją, więc przechodzi na inne komputery. Przy dwóch zmianach tej samej pozycji wygrywa nowsza.
Plik .ffsync
Zawartość jest szyfrowana algorytmem AES-256-GCM kluczem wyprowadzonym z Twojego hasła funkcją PBKDF2-HMAC-SHA256 (600 000 powtórzeń, losowa sól 16 bajtów). Hasło jest przed tym normalizowane (NFC), żeby te same znaki wpisane na różnych systemach dały ten sam klucz.
Nagłówek pliku — znacznik formatu, wersja, parametry funkcji klucza, sól — jest objęty uwierzytelnieniem szyfru, więc zmiana choćby jednego bajtu wychodzi przy wczytaniu.
Bez hasła nie da się odczytać niczego — ani serwerów, ani nazwy komputera, ani daty zapisu; jawne są tylko nagłówek i rozmiar pliku. Proponowana nazwa pliku zawiera nazwę komputera i datę — możesz ją zmienić przy zapisie. Hasła nie da się odzyskać.
Plik obcy albo zapisany przez nowszą wersję formatu program odrzuca, zanim zapyta o hasło.
Parowanie
Każda instalacja ma własny klucz (ECDSA P-256) z certyfikatem, w którym nie ma nazwy komputera. Parowanie zapamiętuje skrót (SHA-256) klucza drugiej strony.
Sześciocyfrowy kod liczy się z kluczy obu komputerów, z dokładnych bajtów ich powitań i z liczb losowych obu stron. Komputer odpowiadający najpierw zobowiązuje się do swojej liczby losowej (wysyła jej skrót), więc pośrednik w sieci ma jedną szansę na milion, że kody wyjdą takie same — a każda próba wymaga kliknięcia Kontynuuj na drugim komputerze. W jednym otwarciu okna są najwyżej trzy nieudane próby (udane parowania się nie liczą), a po każdej nieudanej są 3 sekundy przerwy.
Przy kodzie okno nie pokazuje nazwy podanej przez drugi komputer — tylko jego adres i system, a przyciski stają się aktywne po półtorej sekundy.
Połączenia
Każde połączenie to TLS 1.2 albo 1.3 z certyfikatami obu stron. Przy pobieraniu ustawień i plików obie strony sprawdzają, czy klucz drugiej strony zgadza się z zapamiętanym przy parowaniu; przy samym parowaniu tę rolę pełni porównanie kodu.
Gdy okno parowania jest zamknięte, niesparowany komputer dostaje odmowę, zanim program przeczyta choć bajt jego żądania. Przy otwartym oknie program czyta jedno jego żądanie i przyjmuje tylko prośbę o parowanie. Program przyjmuje połączenia tylko z podsieci włączonych kart Ethernet i Wi-Fi; pomija tunele, połączenia PPP oraz znane karty VPN i maszyn wirtualnych. To lista znanych kart, nie gwarancja — przed obcym komputerem chroni i tak przypięty klucz. Najwyżej 8 połączeń naraz i 2 z jednego adresu.
Porty: UDP 28217 (ogłoszenia przy otwartym oknie parowania i zapytania o adres sparowanego komputera — przy każdym połączeniu z nim, obok próby pod ostatnim znanym adresem) i TCP 28217–28220 (pierwszy wolny). Tylko adresy IPv4.
Zapytanie o adres sparowanego komputera niesie znacznik z klucza ustalonego przy parowaniu, więc odpowiada na nie tylko ten komputer. Ogłoszenie przy otwartym oknie parowania (512 bajtów) zawiera nazwę komputera, system, port TCP i początek odcisku klucza. Poza oknem parowania program niczego o sobie nie ogłasza; nazwa komputera trafia tylko do sparowanego komputera, w szyfrowanym połączeniu. Certyfikat z kluczem publicznym (bez nazwy komputera) jest częścią każdego połączenia TLS — w TLS 1.2, używanym zawsze, gdy serwerem jest Mac, przesyłany jawnie.
Usługa działa tylko wtedy, gdy są zapisane parowania albo jest otwarte okno parowania. Kto nie paruje komputerów, nie ma żadnego otwartego portu ani odczytu pęku kluczy z tego powodu. Usługę prowadzi jeden proces programu naraz.
Pobieranie ustawień jest zawsze na żądanie (Synchronizuj teraz) i idzie w jedną stronę: z tamtego komputera na ten. Przechodzą grupy zaznaczone na obu komputerach, a hasła do serwerów — tylko do komputerów, którym na to pozwolono. Komputer udostępniający czyta hasła bez okien systemu (na macOS — z własnej zaszyfrowanej kopii).
Tożsamość komputera i listę parowań program trzyma w pliku
sync-lan.bin, zaszyfrowanym (AES-256-GCM) kluczem wyprowadzonym z klucza synchronizacji w pęku kluczy. Zawartość: certyfikat i klucz prywatny tego komputera, przełącznik udostępniania ustawień, a dla każdego sparowanego komputera odcisk jego klucza publicznego, nazwa, system, data sparowania, klucz wykrywania pary, zgoda na udostępnianie haseł, ostatni adres i port oraz daty ostatnich pobrań.
Pliki sparowanego komputera
Udostępnianie plików jest osobną zgodą, domyślnie wyłączoną. Każde żądanie i każda porcja transferu sprawdza, czy zgoda i parowanie nadal obowiązują — wyłączenie udostępniania (po OK) albo usunięcie parowania na komputerze, który udostępnia pliki, przerywa trwający transfer.
Pliki idą porcjami do 128 KiB, bez limitu rozmiaru. Kopiowanie i przenoszenie z dysku tego komputera i między sparowanymi komputerami nie wczytuje pliku do pamięci; między dwoma sparowanymi komputerami plik przechodzi przez tymczasową kopię na dysku tego komputera. Podgląd F3, edycja F4 i kopiowanie z serwera FTP/SFTP na sparowany komputer wczytują cały plik.
Zapis w miejscu docelowym jest atomowy: anulowanie, zerwane połączenie, zła długość danych albo wyłączona zgoda zostawiają poprzedni plik, a plik tymczasowy jest usuwany.
Komputer z dyskami sam sprawdza ścieżki i tożsamość plików, więc nie da się przenieść pliku na niego samego ani skopiować katalogu do jego podkatalogu, także przez inną ścieżkę do tego samego miejsca. Korzeni dysków nie da się usunąć, przenieść ani nadpisać.
Dane i bezpieczeństwo
Co program zapisuje
| Co | Gdzie |
|---|---|
| ustawienia (także zmienione skróty klawiaturowe), zapisane połączenia (bez haseł), skróty ścieżek, terminale | settings.toml w katalogu ustawień — macOS: ~/Library/Application Support/FlyingFiles/, Windows: %APPDATA%\FlyingFiles\, Linux: ~/.config/FlyingFiles/ |
| kopie zapasowe ustawień | settings.toml.bak.0 … .bak.5 obok |
| hasła do serwerów FTP/SFTP | pęk kluczy macOS / Menedżer poświadczeń Windows / pęk kluczy na Linuksie (GNOME Keyring, KWallet), usługa FlyingFiles FTP |
| dziennik transferów | logs/transfers.log w katalogu ustawień |
| adresy udziałów sieciowych (macOS) | network-mounts.toml w katalogu ustawień |
| rozpakowane archiwa | prywatny katalog tymczasowy systemu, usuwany po zamknięciu archiwum |
| pliki powyżej 4 MB z serwera albo z archiwum otwarte w podglądzie albo edycji | kopia w katalogu tymczasowym systemu, usuwana po zamknięciu okna |
| stan synchronizacji ustawień (odciski i wersje pozycji, bez wartości) | sync-state.toml w katalogu ustawień |
| zaszyfrowana kopia haseł do synchronizacji (tylko macOS) | sync-passwords.bin w katalogu ustawień |
| klucz tego komputera i lista sparowanych komputerów, zaszyfrowane | sync-lan.bin w katalogu ustawień (Windows: %LOCALAPPDATA%\FlyingFiles\) |
| klucz synchronizacji ustawień | pęk kluczy / Menedżer poświadczeń, usługa FlyingFiles Sync |
Hasła
Hasła są przechowywane w systemowym magazynie haseł — pęku kluczy macOS, Menedżerze poświadczeń Windows albo pęku kluczy na Linuksie (GNOME Keyring, KWallet). System szyfruje je, a na macOS pilnuje też, który program może je odczytać.
Poza magazynem systemu hasła trafiają tylko do zaszyfrowanych plików synchronizacji: do pliku
.ffsync, jeśli zapiszesz go z hasłami, a na macOS — do kopiisync-passwords.bin, zaszyfrowanej kluczem z pęku kluczy, dzięki której synchronizacja nie pyta pęku o każde hasło osobno.Plik ustawień nigdy nie zawiera haseł.
Program czyta hasło dopiero przy łączeniu z danym serwerem, przy edycji połączenia albo przy synchronizacji ustawień z hasłami, 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) przychodzą z katalogu
https://nci.pl/flyingfiles/releases/osx-arm64/przez HTTPS. Program sprawdza listę wydań przy uruchomieniu (da się to wyłączyć w Ustawieniach) i na żądanie; pakiet pobiera, podmienia się i uruchamia ponownie dopiero po Twojej zgodzie. Program w pakiecie jest podpisany tym samym certyfikatem Developer ID i notaryzowany jak przy pierwszej instalacji.Program ma opis dostępu do sieci lokalnej: macOS może zapytać o zgodę, gdy FlyingFiles pierwszy raz łączy się z urządzeniem w sieci lokalnej — na przykład przy parowaniu komputerów.
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. Pyta za to Sklep — od wersji 1.5.0 także przy uruchomieniu — a Pomoc → Sprawdź aktualizacje… pokazuje postęp pobierania i instaluje aktualizację; gdy Sklep zawiedzie, program proponuje otwarcie swojej strony w Sklepie.
Pakiet deklaruje reguły zapory dla portów sieci lokalnej (UDP 28217, TCP 28217–28220). Windows zakłada je przy instalacji i usuwa przy odinstalowaniu, bez okna zapory i bez praw administratora.
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, komputery w Twojej sieci lokalnej, gdy parujesz komputery albo masz sparowane, oraz
nci.pl— przy uruchomieniu (da się to wyłączyć) i gdy wybierzesz Sprawdź aktualizacje… (macOS i Linux). Wersja dla Windows ze Sklepu pyta Microsoft Store, nie nasz serwer.Podgląd nagrań korzysta z systemowego QuickLook na Twoim komputerze; nic nie jest wysyłane.
Konwersja wideo uruchamia FFmpeg na Twoim komputerze, a Zmniejsz pliki zmienia pliki w pamięci programu, zanim trafią do miejsca docelowego. Żadna z tych funkcji nie korzysta z usług w internecie.
Widok Markdown nie pobiera obrazów z internetu — pokazuje tylko obrazy z dysku komputera, a odnośnik otwiera się dopiero po kliknięciu.
Pełny tekst: polityka prywatności.
Języki
Wszystkie teksty interfejsu są w jednym pliku tłumaczeń, po polsku, po angielsku, po hiszpańsku, po niemiecku i po francusku. Każdy tekst istnieje we wszystkich pięciu językach, co sprawdzają testy automatyczne. Przy pierwszym uruchomieniu program wybiera język systemu (angielski, gdy system jest w języku, którego program nie zna); potem Twój wybór z menu Język zostaje w pliku ustawień. Język zmienia się od razu, bez ponownego uruchomienia.
Jakość
Ponad 3700 testów automatycznych sprawdza logikę programu i okna — także bez ekranu — na macOS i na Windows. Parowanie i połączenia w sieci lokalnej testy sprawdzają na pętli zwrotnej komputera.
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, a wydanie z nowymi funkcjami — 1.1.0 z 16 września 2026. Historia zmian.
Biblioteki open source
| Biblioteka | Licencja | Do czego |
|---|---|---|
| .NET 10 | MIT | środowisko uruchomieniowe |
| Avalonia, Avalonia.Themes.Fluent | MIT | interfejs |
| CommunityToolkit.Mvvm | MIT | wzorzec MVVM |
| Tomlyn | BSD-2-Clause | plik ustawień TOML |
| SharpCompress | MIT | archiwa bzip2, xz, 7z, RAR |
| Joveler.Compression.XZ, liblzma | MIT; public domain / 0BSD | zapis archiwów xz |
| FluentFTP | MIT | FTP i FTPS |
| SSH.NET, BouncyCastle.Cryptography | MIT | SFTP |
| Microsoft.Extensions.Logging.Abstractions | MIT | zależność SSH.NET |
| Avalonia.AvaloniaEdit | MIT | edytor tekstu |
| SkiaSharp | MIT | obrazy |
| Velopack | MIT | aktualizacje na macOS |
FFmpeg nie jest częścią programu ani paczek: FlyingFiles uruchamia go jako osobny program, gdy jest zainstalowany w systemie. Tak samo osobnymi programami są narzędzia nagrywania płyt — drutil na macOS i xorriso na Linuksie.
Aktualne wersje pokazuje okno Pomoc → O programie.