فلت‌هاب و فلت‌پک

· نویسنده: مهیار

وجود یک سیستم بسته‌بندی و مدیریت نرم‌افزار یکپارچه همیشه از چالش‌های مهم در توزیع‌های لینوکسی بوده است. در این مقاله، به نحوهٔ شکل‌گیری سیستم بسته‌بندی Flatpak و روش نصب و استفادهٔ آن در توزیع‌های اصلی لینوکسی می‌پردازیم.

تاریخچه

نخستین تلاش جدی برای ارائهٔ قالبی یکپارچه و مستقل از توزیع‌های لینوکسی با پروژه‌ای به نام XDG-App آغاز شد. این پروژه را الکساندر لارسن، از توسعه‌دهندگان گنوم، پایه‌گذاری کرد. با گذر زمان و استقبال کاربران، XDG-App به Flatpak تغییر نام داد و به‌عنوان یک سیستم بسته‌بندی و توزیع نرم‌افزار در محیط ایزوله (sandbox) معرفی شد. از همان زمان، Flatpak همراه با مخزن مرکزی Flathub به زیرساختی محبوب برای انتشار و دریافت برنامه‌ها در اکوسیستم لینوکس تبدیل شد.

فلت‌پک چیست؟

فلت‌پک یک سیستم بسته‌بندی و توزیع نرم‌افزار برای لینوکس است که برنامه‌ها را در محیط‌های ایزوله اجرا می‌کند. در این مدل، هر برنامه همراه با کتابخانه‌های مورد‌نیاز خود نصب می‌شود و از دیگر برنامه‌ها مستقل است؛ در نتیجه، مشکل تداخل نسخه‌های مختلف کتابخانه‌ها از بین می‌رود.

از دیگر مزایای این روش، امنیت بیشتر و سرعت بالاتر I/O است. فلت‌پک ضمن تأمین امنیت به‌واسطهٔ محیط ایزوله، از چک‌کردن مکرر پرمیشن‌های I/O جلوگیری می‌کند و در این‌گونه عملیات‌ها، سرعت بهینه‌تری نسبت به بسته‌های بومی از خود نشان می‌دهد. همچنین بسته‌های فلت‌پک را می‌توان روی توزیع‌های مختلف مانند اوبونتو، فدورا، آرچ و دبیان بدون هیچ تغییری اجرا کرد.

معماری فلت‌پک

شماتیکی از نحوهٔ ایزوله‌سازی و مدیریت وابستگی‌ها در فلت‌پک منبع: اسناد Flatpak

چرا فلت‌پک؟

یکی از مهم‌ترین ویژگی‌های فلت‌پک، سازگاری بین توزیع‌ها است. توسعه‌دهندگان می‌توانند یک‌بار بسته را بسازند و آن را در تمام توزیع‌ها اجرا کنند. از سوی دیگر، اجرای برنامه‌ها در محیط‌های ایزوله، امنیت سیستم را افزایش می‌دهد؛ زیرا هر برنامه تنها به منابعی دسترسی دارد که صراحتاً به آن اجازه داده شده است. همچنین روند به‌روزرسانی برنامه‌ها بسیار سرراست و راحت است و در نتیجه، آخرین نسخهٔ برنامه در اسرع وقت در فلت‌هاب قرار داده می‌شود.

با این حال، فلت‌پک به‌دلیل دانلود مکرر کتابخانه‌ها ممکن است فضای بیشتری اشغال کند (گاهی کتابخانه‌های مشترک در فلت‌پک از این مشکل تا حدودی جلوگیری می‌کنند). همچنین به‌دلیل ماهیت ایزوله‌بودن برنامه‌ها، گاهی دسترسی مستقیم به کارت گرافیک با چالش‌هایی روبه‌رو است و بنچ‌مارک‌های مختلف نشان می‌دهند بسته‌های Flatpak و Snap در رندر با استفاده از Blender و GIMP، عملکرد ضعیف‌تری نسبت به بسته‌های بومی دارند.

مدیریت وابستگی‌ها در فلت‌پک

فلت‌پک برای مدیریت وابستگی‌ها از مفهومی به نام Runtime استفاده می‌کند. Runtime مجموعه‌ای از کتابخانه‌ها و ابزارهای پایه است که برنامه‌ها برای اجرا به آن نیاز دارند. در کنار آن، SDK برای توسعه‌دهندگان جهت ساخت بسته ارائه می‌شود.

بسته به نوع برنامه، می‌توان از Runtimeهای مختلف مانند GNOME Platform، KDE Platform یا Freedesktop استفاده کرد. فهرست کامل Runtimeها را می‌توانید در اسناد فلت‌پک مشاهده کنید.

برای نصب Runtimeها می‌توانید از دستورات خود فلت‌پک استفاده کنید:

flatpak install flathub org.gnome.Platform
flatpak install flathub org.gnome.Sdk

پورتال‌های XDG

پورتال‌های XDG نقش مهمی در تعامل ایمن میان برنامه‌های ایزوله و سیستم میزبان دارند. به‌عنوان مثال، زمانی‌که برنامه‌ای نیاز به باز‌کردن فایل دارد، درخواست خود را به پورتال ارسال می‌کند. پورتال یک دیالوگ استاندارد باز‌کردن فایل مطابق با محیط میزکار کاربر نمایش می‌دهد و پس از انتخاب کاربر، تنها فایل انتخاب‌شده در اختیار برنامه قرار می‌گیرد.

این سیستم شامل پورتال‌های متعددی مانند File Chooser، Screenshot، Camera، Notification و Print بوده و کتابخانه‌های مدرن مانند GTK ۴ و Qt ۶ نیز از این پورتال‌ها پشتیبانی می‌کنند.

ساخت و اجرای یک بستهٔ فلت‌پک

برای شروع، ابزار flatpak-builder را نصب کنید:

sudo apt install flatpak-builder     # اوبونتو/دبیان  
sudo dnf install flatpak-builder     # فدورا

حال یک فایل Manifest با نام آیدی برنامه ایجاد کنید (در مثال ما، نام فایل my.example.app خواهد بود):

{
  "app-id": "my.example.app",
  "runtime": "org.gnome.Platform",
  "runtime-version": "49",
  "sdk": "org.gnome.Sdk",
  "command": "exampleapp",
  "finish-args": [
    "--share=ipc",
    "--socket=wayland",
    "--device=dri",
    "--filesystem=home"
  ],
  "modules": [
    {
      "name": "myapp",
      "sources": [
        {
          "type": "git",
          "url": "https://github.com/example/app.git",
          "tag": "v1.0.0"
        }
      ]
    }
  ]
}

پ.ن: این نمونه، بسیار مختصر از یک برنامهٔ فلت‌پک است. هنگام ثبت برنامه در Flathub، ممکن است به دلایل مختلفی در این فایل بازنگری انجام شود. برای اطلاعات بیشتر اسناد فلت‌پک را مطالعه کنید.

اکنون می‌توانید بسته را بسازید و به‌صورت محلی اجرا کنید:

flatpak-builder --repo=myrepo build-dir my.example.app.json
flatpak install --user myrepo my.example.app

انتشار در فلت‌هاب

نمایه‌ای از بازارچهٔ Flathub
منبع: فلت‌هاب

فلت‌هاب، اصلی‌ترین مخزن بسته‌های فلت‌پک است. در این قسمت به‌صورت خلاصه، به نحوهٔ ثبت برنامه‌های خود در فلت‌هاب می‌پردازیم.

موارد مهم هنگام ثبت برنامه‌ها عبارت‌اند از:

پ.ن: موارد بسیار زیادند، اما در این‌جا به خلاصه‌ای از آن‌ها اشاره شده است. جهت مطالعهٔ بیشتر به اسناد فلت‌هاب مراجعه کنید.

نتیجه‌گیری

فلت‌پک، روشی مدرن، ایمن و توزیع‌پذیر برای اجرای نرم‌افزارها در لینوکس است. اگرچه ممکن است فضای بیشتری نسبت به بسته‌های بومی استفاده شود، اما در مقابل، کاربر را از مزایایی مانند سازگاری بین توزیع‌ها، امنیت بالا و دسترسی سریع به نسخه‌های جدید بهره‌مند می‌سازد.