După un an și jumătate de dezvoltare, a fost lansată o nouă versiune stabilă a instrumentului Flatpak 1.18, care oferă un sistem pentru crearea pachetelor autonome, independente de distribuțiile Linux specifice și care rulează într-un container special, izolând aplicația de restul sistemului. Suportul pentru rularea pachetelor Flatpak este asigurat pentru Fedora, CentOS, Debian, Arch Linux, Gentoo, Linux Mint, Alt Linux și Ubuntu. Pachetele Flatpak sunt incluse în depozitul Fedora și sunt suportate în aplicațiile standard de gestionare a aplicațiilor GNOME și KDE.
Noile caracteristici cheie din versiunea Flatpak 1.18:
- A fost implementat suportul pentru permisiuni condiționate (conditional permission), care permite la solicitarea permisiunilor verificarea existenței anumitor capabilități în sistem sau în runtime. De exemplu, atunci când este necesar să se obțină acces la un dispozitiv de intrare, în loc de "—device=all", se poate solicita permisiunea "—device-if=all:!has-input-device —device=input", care va oferi acces doar la dispozitivele de intrare sau va reveni la accesul la toate dispozitivele, dacă furnizarea selectivă a accesului nu este suportată în runtime. De asemenea, accesul la dispozitivele USB poate fi solicitat («has-usb-device» și «has-usb-portal») sau subsisteme partajate.
- Accesul la dispozitivul /dev/ntsync pentru a accesa
modulul kernel NTSYNC, care implementează un set de primitive pentru sincronizare utilizate în kernelul Windows NT și care permit îmbunătățirea semnificativă a performanței jocurilor Windows rulate prin Wine. - Pentru GPU Intel Xe, a fost inclus suportul pentru API VA-API pentru accelerarea hardware a decodării video.
- A fost implementată posibilitatea accesului la dispozitivul /dev/kfd (Kernel Fusion Driver) utilizând permisiunile oferite pentru dispozitivele DRI. Driverul kfd implementează o interfață pentru executarea directă a calculilor pe GPU AMD din aplicațiile care utilizează AMD ROCm, HIP și OpenCL.
- A fost adăugat suportul pentru utilizarea opțiunilor din linia de comandă pentru a redirecționa accesul la directoare în aplicații izolate.
- A fost adăugat suportul pentru directorul «preinstall.d», care definește lista aplicațiilor Flatpak preinstalate (pentru a include aplicațiile Flatpak în sistemul de operare).
- A fost permisă instalarea directă a aplicațiilor din imagini de containere în format OCI, care pot fi descărcate din propriile depozite OCI și arhive locale.
- În comanda «flatpak install —from» a fost adăugat suport pentru URI «flatpak+https://».
- Comanda „flatpak run” a fost adăugată cu opțiunea „—clear-env” pentru a curăța variabilele de mediu înainte de a porni aplicația.
- A fost posibilă exportarea directorului rădăcină al mediu-ului gazdă într-un mediu izolat al aplicației cu acces prin directorul /run/host/root.
- A fost adăugată posibilitatea de a afișa rezultatul execuției comenzilor în format JSON.
- Izolarea mediu-ului de construire a fost întărită — comanda „flatpak build” nu oferă acum acces la gazdă implicit.
- A fost adăugată comanda „reinstall” pentru reinstalarea dependențelor (bundle).
- Setările D-Bus au fost mutate implicit din directorul /etc în /usr.
- Timpul de pornire a fost redus atunci când se utilizează interpretul de comenzi fish.
- În libflatpak a fost adăugată o funcție pentru obținerea informațiilor despre timpul de creare a configurației, ceea ce permite aplicațiilor, cum ar fi GNOME Software, să determine că datele stocate de acestea necesită actualizare.
- Opțiunea de construire http_backend a fost eliminată, în loc de libsoup2 pentru descărcarea prin HTTP/HTTPS fiind utilizată biblioteca libcurl.
- În mod implicit, utilizarea secvențelor de escape pentru a indica progresul execuției operațiunii este activată.
- A fost permisă transmiterea drepturilor de acces la dispozitive în medii sandbox încrucișate, create prin portalurile Flatpak.
- Pentru aplicațiile livrate sub formă de imagini OCI, a fost implementat un mecanism „extra-data”, permițând, de exemplu, organizarea redării video h.265 în pachetele Flatpak din Fedora Linux.
- A fost adăugată suportul pentru comprimarea dependențelor (OCI bundle) utilizând algoritmul zstd, care comprimă datele mai eficient. În mod implicit, pentru comprimare este în continuare utilizat gzip, asigurând compatibilitate maximă.
Flatpak facilitează distribuția programelor care nu sunt incluse în repositoarele standard ale distribuțiilor, prin pregătirea unui container universal care scutește dezvoltatorii de necesitatea de a crea versiuni distincte pentru fiecare distribuție. Utilizatorilor preocupați de securitate, Flatpak le oferă posibilitatea de a rula aplicații suspecte în container, acordând acces selectiv doar la funcțiile de rețea necesare și fișierele utilizatorului. Utilizatorilor interesați de noutăți, Flatpak le permite să instaleze cele mai recente versiuni beta și stabile ale aplicațiilor fără a fi necesare modificări în sistem. De exemplu, pachetele Flatpak sunt disponibile pentru LibreOffice, GIMP, Inkscape, Kdenlive, Steam, 0 A.D., Visual Studio Code, VLC, Slack, Telegram Desktop, Android Studio etc.
Pentru a reduce dimensiunea, pachetul include doar dependențele specifice aplicației. Bibliotecile de bază sistemice și grafice (GTK, Qt, biblioteci GNOME și KDE etc.) sunt furnizate sub formă de medii runtime standardizate. Principala diferență dintre Flatpak și Snap este că Snap folosește componentele mediului sistemului principal și izolația pe baza filtrării apelurilor de sistem, în timp ce Flatpak creează un container separat de sistem și operează cu seturi mari de runtime, oferind nu pachete ca dependențe, ci medii sistemice standardizate (de exemplu, toate bibliotecile necesare pentru funcționarea programelor GNOME sau KDE).
Pe lângă mediul sistemic standard (runtime), care este instalat printr-un repository special, sunt furnizate dependențe suplimentare (bundle) necesare pentru funcționarea aplicației. Împreună, „runtime” și „bundle” formează umplutura containerului, având în vedere că „runtime” este instalat separat și se leagă de mai multe containere, permițând evitarea duplicării fișierelor sistemice comune pentru containere.
Într-un sistem pot fi instalate mai multe „runtime”-uri diferite (GNOME, KDE) sau mai multe versiuni ale aceluiași „runtime” (GNOME 50, GNOME 49). Containerul cu aplicația ca dependență folosește o legătură doar la un anumit „runtime”, fără a ține cont de pachetele individuale care constituie „runtime”-ul ales. Toate elementele lipsă sunt împachetate direct împreună cu aplicația. Atunci când se creează containerul, conținutul „runtime”-ului este montat ca partajare /usr, iar „bundle”-ul este montat în directorul /app.
Umplutura „runtime” și a containerelor aplicațiilor este formată utilizând tehnologia OSTree, prin care imaginea este actualizată atomic dintr-un depozit similar Git, permițând aplicarea metodelor de control al versiunilor asupra componentelor distribuției (de exemplu, se poate reveni rapid la starea comună a sistemului anterior). Pachetele RPM sunt traduse în depozitul OSTree printr-un strat rpm-ostree.
Instalarea selectivă și actualizarea pachetelor în interiorul mediului de lucru nu sunt acceptate — sistemul este actualizat nu la nivelul componentelor individuale, ci în întregime, schimbându-și atomic starea. Sunt furnizate mijloace pentru aplicarea incrementală a actualizărilor, scutind de necesitatea înlocuirii complete a imaginii la fiecare actualizare.
Mediul izolat creat nu depinde de distribuția utilizată și, cu setările corecte ale pachetului, nu are acces la fișierele și procesele utilizatorului sau ale sistemului principal, fiind incapabil de a accesa direct hardware-ul, cu excepția ieșirii prin DRI. Ieșirea grafică și organizarea input-ului sunt realizate prin protocolul Wayland sau prin redirecționarea socket-ului X11. Interacțiunea cu mediul extern se realizează prin sistemul de mesagerie DBus și API-uri specializate Portals.
Pentru izolare se folosește un strat Bubblewrap și tehnologii tradiționale de virtualizare a containerelor pe Linux, bazate pe utilizarea cgroups, spațiilor de nume (namespaces), Seccomp și SELinux. Atunci când se creează pachetul, izolația poate fi dezactivată, ceea ce este utilizat de dezvoltatorii unor pachete pentru a obține acces complet la sistemul de fișiere și la toate dispozitivele din sistem.
Sursa: opennet.ro
