Dopo un anno e mezzo di sviluppo, è stata pubblicata una nuova versione stabile dello strumento Flatpak 1.18, che fornisce un sistema per la creazione di pacchetti autonomi, non legati a distribuzioni Linux specifiche, ed eseguiti in un contenitore speciale che isola l'applicazione dal resto del sistema. Il supporto per l'esecuzione dei pacchetti Flatpak è garantito per Fedora, CentOS, Debian, Arch Linux, Gentoo, Linux Mint, Alt Linux e Ubuntu. I pacchetti Flatpak sono inclusi nel repository di Fedora e sono supportati dai programmi di gestione delle applicazioni GNOME e KDE.
Novità principali nella versione Flatpak 1.18:
- È stata implementata la supporto per le autorizzazioni condizionali, che consentono, al momento della richiesta di autorizzazioni, di verificare la presenza di determinate funzionalità nel sistema o nel runtime. Ad esempio, se è necessario accedere a un dispositivo di input, anziché usare «—device=all», si può richiedere l'autorizzazione «—device-if=all:!has-input-device —device=input», che fornirà accesso solo ai dispositivi di input oppure tornerà ad accettare l'accesso a tutti i dispositivi se il rilascio selettivo non è supportato nel runtime. Allo stesso modo si può richiedere accesso a dispositivi USB («has-usb-device» e «has-usb-portal») o a sottosistemi condivisi.
- È stato consentito l'accesso al dispositivo /dev/ntsync per l'interazione con
il modulo del kernel NTSYNC, che implementa un insieme di primitive per la sincronizzazione utilizzate nel kernel di Windows NT e che consentono di migliorare notevolmente le prestazioni dei giochi Windows eseguiti tramite Wine. - Per le GPU Intel Xe è stata attivata la compatibilità con l'API VA-API per l'accelerazione hardware della decodifica video.
- È stata implementata la possibilità di accedere al dispositivo /dev/kfd (Kernel Fusion Driver) utilizzando le autorizzazioni fornite per i dispositivi DRI. Il driver kfd implementa un'interfaccia per l'esecuzione diretta di calcoli sulla GPU AMD da applicazioni che utilizzano AMD ROCm, HIP e OpenCL.
- È stata aggiunta la supporto per l'uso di opzioni della riga di comando per fornire accesso a directory per applicazioni isolate.
- È stata aggiunta la supporto per la directory «preinstall.d», che definisce l'elenco delle applicazioni Flatpak preinstallate (per includere le applicazioni Flatpak nel sistema operativo).
- È consentita l'installazione diretta di applicazioni da immagini di contenitori in formato OCI, che possono essere caricate da repository OCI proprietari e archivi locali.
- Nel comando «flatpak install —from» è stata aggiunta la supporto per URI «flatpak+https://».
- Nel comando «flatpak run» è stata aggiunta l'opzione «—clear-env» per ripulire le variabili d'ambiente prima di eseguire l'applicazione.
- È stata fornita la possibilità di esportare la directory radice dell'ambiente host in un ambiente isolato dell'applicazione con accesso tramite la directory /run/host/root.
- È stata aggiunta la possibilità di produrre l'output del risultato dell'esecuzione dei comandi in formato JSON.
- È stata aumentata l'isolamento dell'ambiente di costruzione: il comando «flatpak build» ora non fornisce per impostazione predefinita accesso all'host.
- È stato aggiunto il comando «reinstall» per reinstallare le dipendenze (bundle).
- Le impostazioni di D-Bus di default sono state spostate dalla directory /etc a /usr.
- Tempi di avvio ridotti quando si utilizza il terminale fish.
- Nella libreria libflatpak è stata aggiunta una funzione per ottenere informazioni sulla data di creazione della configurazione, permettendo a applicazioni come GNOME Software di determinare che i dati memorizzati nel cache richiedono un aggiornamento.
- È stata rimossa l'opzione di costruzione http_backend, e per il caricamento tramite HTTP/HTTPS è stata utilizzata la libreria libcurl al posto di libsoup2.
- Di default, è stato incluso l'uso delle sequenze di escape per indicare il progresso dell'operazione in corso.
- È stato consentito il passaggio dei diritti di accesso ai dispositivi negli ambienti sandbox nidificati creati tramite i portali Flatpak.
- Per le applicazioni fornite in forma di immagini OCI, è stato implementato un meccanismo «extra-data» per consentire, ad esempio, la riproduzione di video h.265 nei pacchetti Flatpak di Fedora Linux.
- È stata aggiunta la supporto per la compressione delle dipendenze (OCI bundle) utilizzando l'algoritmo zstd, che comprime i dati in modo più efficiente. Di default, continua a essere utilizzato gzip per la compressione, garantendo la massima compatibilità.
Flatpak semplifica la distribuzione di software che non è incluso nei repository ufficiali delle distribuzioni, preparando un contenitore universale che libera gli sviluppatori dalla necessità di creare build separate per ogni distribuzione. Per gli utenti attenti alla sicurezza, Flatpak offre la possibilità di eseguire applicazioni sospette in un contenitore, fornendo accesso selettivo solo alle funzionalità di rete e ai file necessari. Per chi è interessato alle novità, Flatpak consente di installare le versioni di test e stabili più recenti delle applicazioni senza modificare il sistema. Ad esempio, i pacchetti Flatpak vengono creati per LibreOffice, GIMP, Inkscape, Kdenlive, Steam, 0 A.D., Visual Studio Code, VLC, Slack, Telegram Desktop, Android Studio, ecc.
Per ridurre le dimensioni, il pacchetto include solo le dipendenze specifiche per l'applicazione. Le librerie di sistema e grafiche di base (GTK, Qt, librerie GNOME e KDE, ecc.) vengono fornite come ambienti runtime standard. La principale differenza tra Flatpak e Snap è che Snap utilizza i componenti dell'ambiente del sistema principale e l'isolamento basato sulla filtrazione delle chiamate di sistema, mentre Flatpak crea un contenitore separato dal sistema e opera con ampi set di runtime, fornendo come dipendenze non pacchetti, ma ambienti di sistema standard (ad esempio, tutte le librerie necessarie per eseguire applicazioni GNOME o KDE).
Oltre all'ambiente di sistema standard (runtime), installato tramite un repository speciale, vengono fornite dipendenze aggiuntive (bundle) necessarie per il funzionamento dell'applicazione. Insieme, il «runtime» e il «bundle» formano il nucleo del contenitore, dove il «runtime» viene installato separatamente e collegato a più contenitori, evitando la duplicazione dei file di sistema comuni ai contenitori.
In un sistema possono essere installati diversi «runtime» (GNOME, KDE) o più versioni dello stesso «runtime» (GNOME 50, GNOME 49). Un contenitore con un'applicazione come dipendenza utilizza il collegamento solo a un particolare «runtime», senza tenere conto dei pacchetti separati che compongono il «runtime» selezionato. Tutti gli elementi mancanti vengono impacchettati direttamente insieme all'applicazione. Durante la creazione del contenitore, il contenuto del «runtime» viene montato come partizione /usr, mentre il «bundle» viene montato nella cartella /app.
Il nucleo del «runtime» e dei contenitori delle applicazioni è generato utilizzando la tecnologia OSTree, attraverso la quale l'immagine viene aggiornata in modo atomico da un repository simile a Git, permettendo di applicare tecniche di controllo delle versioni ai componenti della distribuzione (ad esempio, è possibile ripristinare rapidamente il sistema a uno stato precedente). I pacchetti RPM vengono traslati nel repository OSTree mediante un livello intermedio rpm-ostree.
L'installazione selettiva e l'aggiornamento dei pacchetti all'interno dell'ambiente di lavoro non sono supportati: il sistema viene aggiornato non a livello di componenti singoli, ma globalmente, cambiando atomisticamente il proprio stato. Sono forniti strumenti per applicare aggiornamenti incrementali, evitando la necessità di una sostituzione completa dell'immagine a ogni aggiornamento.
L'ambiente isolato creato non dipende dalla distribuzione utilizzata e, con le opportune impostazioni del pacchetto, non ha accesso ai file e ai processi dell'utente o del sistema principale e non può inoltre accedere direttamente all'hardware, tranne che per l'output tramite DRI. L'output grafico e la gestione dell'input sono realizzati tramite il protocollo Wayland o mediante il forwarding del socket X11. L'interazione con l'ambiente esterno è strutturata attraverso un sistema di messaggistica DBus e un'API speciale Portals.
Per l'isolamento viene utilizzato un livello intermedio Bubblewrap e tecnologie di virtualizzazione dei contenitori tradizionali per Linux, basate sull'utilizzo di cgroups, spazi dei nomi (namespaces), Seccomp e SELinux. Durante la creazione del pacchetto, l'isolamento può essere disattivato, cosa che alcuni sviluppatori di pacchetti utilizzano per ottenere accesso completo al filesystem e a tutti i dispositivi del sistema.
Fonte: opennet.ru
