Po dwóch i pół roku rozwoju opublikowano nową stabilną wersję narzędzia Flatpak 1.16, które oferuje system budowy samodzielnych pakietów, niezwiązanych z konkretnymi dystrybucjami Linuksa i uruchamianych w specjalnym kontenerze, izolującym aplikację od reszty systemu. Wsparcie dla uruchamiania pakietów Flatpak zapewnione jest dla Fedory, CentOS, Debiana, Arch Linuksa, Gentoo, Linux Mint, Alt Linux i Ubuntu. Pakiety Flatpak zostały włączone do repozytorium Fedory i są wspierane w standardowych programach zarządzania aplikacjami GNOME i KDE.
Kluczowe nowości w wersji Flatpak 1.16:
- Wprowadzono przejście na system budowy Meson. Wsparcie dla budowy za pomocą narzędzi Autotools zostało zakończone. Do budowy Flatpak teraz wymagane jest posiadanie w systemie Pythona w wersji co najmniej 3.5.
- Zrealizowano wspólny dostęp do gniazda gssproxy, umożliwiającego korzystanie z uwierzytelniania przez Kerberos w aplikacjach uruchamianych w trybie izolacji sandbox.
- Podczas tworzenia gniazda dla Wayland wykorzystano rozszerzenie security-context, dzięki któremu kompozytor serwer może identyfikować i ograniczać aplikacje uruchomione w trybie izolacji sandbox. Dodano opcję "--socket=inherit-wayland-socket" do dziedziczenia istniejącego gniazda dla Wayland.
- Po zainstalowaniu lub zaktualizowaniu aplikacji zapewniono automatyczne ponowne załadowanie konfiguracji sesyjnej magistrali D-Bus w celu uwzględnienia nowych serwisów D-Bus eksportowanych przez aplikacje.
- Dystrybucje mają możliwość definiowania repozytoriów z pakietami Flatpak, korzystając z katalogu "/usr/share/flatpak/remotes.d", oprócz "/etc/flatpak/remotes.d".
- Wykonano prace nad podziałem dużych plików źródłowych na mniejsze moduły.
- Dodano opcję "--device=input" do dostępu do urządzeń wejściowych przez /dev/input.
- Do izolacji aplikacji wykorzystano nową wersję narzędzia bubblewrap 0.11. W dystrybucjach, które budują Flatpak z użyciem systemowego pliku wykonywalnego bwrap, wymagana jest co najmniej wersja bubblewrap 0.11. Zwiększono ochronę przed tworzeniem w środowiskach sandbox zagnieżdżonych przestrzeni identyfikacji użytkowników (user namespace).
- Ułatwiono konfigurację dodatkowych języków. Zapewniono identyfikację języków na podstawie informacji o użytkownikach, dostarczanej przez serwis DBus AccountsService.
- Aplikacjom wykorzystującym zagnieżdżoną izolację sandbox, na przykład opartym na silniku WebKit, zezwala się na korzystanie z protokołu AT-SPI w celu interakcji z czytnikami ekranu. Dodano opcję „flatpak run —a11y-own-name” do wyboru magistrali, przez którą uzyskuje się dostęp do środków dla osób z ograniczeniami.
- Po wykonaniu polecenia „flatpak run -vv ” wyświetlane są wszystkie odpowiednie opcje izolacji sandbox.
- Dodano opcję „—device=usb”, a także parametry „—usb” i „—no-usb” do zarządzania dostępem aplikacji do urządzeń USB.
- Dodano wsparcie dla frameworka KCompletion, który jest stosowany do autouzupełniania wyszukiwanych fraz w KDE.
- Dodano zmienne środowiskowe „FLATPAK_DATA_DIR” oraz „FLATPAK_DOWNLOAD_TMPDIR”, aby zdefiniować katalogi danych ( /usr/share/flatpak) i plików tymczasowych do pobrania ( /var/tmp).
- Dodano wyjście sekwencji ucieczki do wyświetlania postępu operacji w emulatorach terminali.
Przypominamy, że Flatpak upraszcza dystrybucję programów, które nie są dostępne w standardowych repozytoriach dystrybucji, poprzez przygotowanie jednego uniwersalnego kontenera, który zwalnia programistów z konieczności tworzenia odrębnych kompilacji dla każdej dystrybucji. Użytkownicy, dla których bezpieczeństwo ma znaczenie, mogą uruchomić podejrzaną aplikację w kontenerze, co daje im możliwość wyborczego dostępu tylko do niezbędnych funkcji sieciowych i plików użytkownika. Użytkownicy zainteresowani nowościami mogą instalować najnowsze wersje testowe i stabilne aplikacji bez konieczności wprowadzania zmian w systemie. Na przykład pakiety Flatpak są dostępne dla LibreOffice, GIMP, Inkscape, Kdenlive, Steam, 0 A.D., Visual Studio Code, VLC, Slack, Telegram Desktop, Android Studio itp.
Aby zmniejszyć rozmiar, do pakietu dołączane są jedynie specyficzne dla aplikacji zależności. Podstawowe biblioteki systemowe i graficzne (GTK, Qt, biblioteki GNOME i KDE itd.) są dostarczane w postaci wtyczkowych standardowych środowisk uruchomieniowych. Kluczowa różnica między Flatpak a Snap polega na tym, że Snap wykorzystuje komponenty środowiska głównego systemu i izolację opartą na filtrowaniu wywołań systemowych, podczas gdy Flatpak tworzy kontener odseparowany od systemu i operuje dużymi zbiorami środowisk uruchomieniowych, dostarczając jako zależności nie pakiety, a standardowe środowiska systemowe (na przykład wszystkie biblioteki potrzebne do pracy programów GNOME lub KDE).
Oprócz standardowego środowiska systemowego (runtime), instalowanego przez specjalne repozytorium, dostarczane są dodatkowe zależności (bundle), wymagane do działania aplikacji. W sumie „runtime” i „bundle” tworzą zawartość kontenera, przy czym „runtime” instalowane jest oddzielnie i może być przypisane do kilku kontenerów, co pozwala uniknąć duplikacji wspólnych dla kontenerów plików systemowych.
W jednym systemie można zainstalować kilka różnych „runtime” (GNOME, KDE) lub kilka wersji jednego „runtime” (GNOME 46, GNOME 47). Kontener z aplikacją jako zależnością używa powiązania tylko z określonym „runtime”, bez uwzględnienia poszczególnych pakietów, które tworzą wybrany „runtime”. Wszystkie brakujące elementy są pakowane bezpośrednio z aplikacją. Podczas tworzenia kontenera zawartość „runtime” jest montowana jako partycja /usr, a „bundle” montowany jest w katalogu /app.
Skład „runtime” i kontenerów aplikacji jest tworzony z użyciem technologii OSTree, w której obraz atomowo aktualizuje się z magazynu przypominającego Git, co pozwala stosować metody kontroli wersji do komponentów dystrybucji (np. można szybko przywrócić system do poprzedniego stanu). Pakiety RPM są tłumaczone do repozytorium OSTree przy pomocy warstwy rpm-ostree.
Wyborcza instalacja i aktualizacja pakietów wewnątrz środowiska roboczego nie jest obsługiwana — system aktualizuje się nie na poziomie pojedynczych komponentów, a w całości, atomowo zmieniając swoje stany. Zapewnione są narzędzia do inkrementalnego stosowania aktualizacji, eliminujące potrzebę pełnej wymiany obrazu przy każdej aktualizacji.
Izolowane środowisko jest całkowicie niezależne od używanej dystrybucji i przy odpowiednich ustawieniach pakietu nie ma dostępu do plików ani procesów użytkownika ani głównego systemu, a także nie może bezpośrednio komunikować się z sprzętem, z wyjątkiem wyjścia przez DRI. Wyjście grafiki i organizacja wejścia zostały zrealizowane za pomocą protokołu Wayland lub przez przekazanie gniazda X11. Interakcja z zewnętrznym środowiskiem odbywa się za pośrednictwem systemu wymiany wiadomości DBus i specjalnego API Portals.
Do izolacji stosowana jest nakładka Bubblewrap oraz tradycyjne technologie wirtualizacji kontenerów w systemie Linux, oparte na użyciu cgroups, przestrzeni nazw (namespaces), Seccomp i SELinux. Do wyjścia dźwięku używany jest PulseAudio lub PipeWire. Podczas tworzenia pakietu izolacja może być wyłączona, co wykorzystują programiści wielu popularnych pakietów, aby uzyskać pełny dostęp do systemu plików i wszystkich urządzeń w systemie.
Na przykład z ograniczonym trybem izolacji, który pozostawia pełny dostęp do katalogu domowego, dostarczane są pakiety GIMP, VSCodium, PyCharm, Octave, Inkscape, Audacity i VLC. W przypadku kompromitacji pakietów z dostępem do katalogu domowego, pomimo obecności w opisie pakietu etykiety „sandboxed”, atakującemu do wykonania swojego kodu wystarczy zmienić plik ~/ .bashrc. Osobnym zagadnieniem jest kontrola nad wprowadzaniem zmian w pakietach oraz zaufanie do twórców pakietów, którzy często nie są związani z głównym projektem ani dystrybucjami.
Źródło: opennet.ru
