Nuvaka › Geliştirici belgeleri › Program uyumluluğu

Program uyumluluğu ve bağımlılıklar

Her program paketi nerede çalıştığını (compat), her sürüm de neye ihtiyaç duyduğunu (dependencies) bildirmek zorundadır. Bildirimler eksikse sürüm incelemeye gönderilemez. Mağaza bu bilgilerle kartta "Ubuntu 22.04+, Fedora 39+ · x86_64" gibi bir özet gösterir. Uygulama da cihaza uygun paketi seçer ve eksik bağımlılıkları kullanıcıya söyler.

Uyumluluk bildirimi (compat)

compat paket başına, yani her platform anahtarı için ayrı verilir. İki yolu var:

  • yüklerken ?compat= sorgu alanında, URL kodlu JSON olarak;
  • sonradan PUT /api/programs/dev/{id}/versions/{v}/packages/{platform}/compat ile, gövdede JSON olarak.

Sunucu bildirimi doğrular ve normalize eder. Normalize bildirim paket kaydına girer ve imzalanır.

Biçim

// Windows: windows-msi, windows-exe, windows-exe-arm64, windows-msix
{ "arch": "x86_64", "os": { "minVersion": "10.0.19041" },
  "launch": { "uninstallKey": "Nuvaka GPU Control", "exe": "bin\\GpuControl.exe" }, "processName": "GpuControl.exe" }

// macOS: macos-dmg
{ "arch": "universal", "os": { "minVersion": "12.0" }, "launch": { "bundleId": "com.nuvaka.gpucontrol" } }

// Android: android-apk
{ "arch": "universal", "os": { "minSdk": 26 } }

// Linux paket yöneticisi: linux-deb, linux-rpm, linux-pacman
{ "arch": "x86_64", "linux": { "distros": [ { "id": "ubuntu", "min": "22.04" }, { "id": "debian", "min": "12" } ] },
  "launch": { "desktopId": "gpu-control.desktop" }, "processName": "gpu-control" }

// AppImage: linux-appimage ("glibc 2.31 ya da üstü olan her dağıtım")
{ "arch": "x86_64", "linux": { "glibc": "2.31" }, "launch": { "desktopId": "gpu-control.desktop" } }
AlanKural
archx86_64, arm64 ya da universal. windows-exe kendiliğinden x86_64, windows-exe-arm64 kendiliğinden arm64'tür: yazmazsan bu değerler kullanılır, farklı bir değer yazarsan hata döner. Diğer tüm anahtarlarda zorunludur.
os.minVersionWindows ve macOS'ta zorunlu. Windows için tam yapı numarası: 10.0.17763 (1809), 10.0.19041 (2004), 10.0.22000 (Windows 11). macOS için 11, 12.0, 13.3 gibi.
os.minSdkAndroid'de zorunlu. API düzeyi, 16–99 arası tam sayı (ör. 26 = Android 8.0).
linux.distrosdeb, rpm ve pacman paketlerinde zorunlu: 1–20 öğe, her biri { id, min? }. id, /etc/os-release dosyasındaki ID değeridir ve paket türünün ailesinden olmalı (aşağıdaki tablo). min en düşük VERSION_ID değeridir. min yazmazsan dağıtımın her sürümü kabul edilir; Arch gibi yuvarlanan dağıtımlarda böyle bırak. AppImage'da bu alan isteğe bağlıdır ve yalnız bilgi verir.
linux.glibc2.31 biçiminde. AppImage'da zorunlu, diğer Linux paketlerinde isteğe bağlı. Derlediğin sistemin glibc sürümünü ldd --version gösterir.

Bilinmeyen alan reddedilir. Linux anahtarlarında arch, linux, launch, processName, packageName, replaces, ui, bridge ve background; Windows ve macOS'ta arch, os, launch, processName, ui, bridge ve background; Android'de yalnız arch ve os olabilir. ui, bridge ve background yalnız masaüstü paketlerinde bulunur (Yerel uçlar). Eski minOsVersion alanı compat'tan türetilir: Windows ve macOS'ta minVersion, Android'de minSdk, Linux'ta boş.

Başlatma bilgisi (launch) ve süreç adı

Masaüstü paketlerinde (Windows, macOS, Linux) launch zorunludur. Uygulama programı yalnız bu bilgiyle başlatır; bir uzantının verdiği yolu asla kullanmaz.

PaketlaunchKural
linux-*{ "desktopId": "gpu-control.desktop" }Paketin kurduğu .desktop dosyasının adı (yol değil).
windows-*{ "uninstallKey": "Nuvaka GPU Control", "exe": "bin\GpuControl.exe" }uninstallKey: HKLM/HKCU …\Uninstall altındaki anahtar adı ya da DisplayName (1–200). exe: InstallLocation altında göreli .exe yolu; .., sürücü harfi ve baştaki \ ya da / olamaz.
macos-dmg{ "bundleId": "com.nuvaka.gpucontrol" }Uygulamanın paket kimliği (ters DNS).
android-apkyokAndroid'de launch verilmez.

processName isteğe bağlıdır: programın "çalışıyor" durumu için süreç adı (yol değil), ör. GpuControl.exe ya da gpu-control. İkisi de compat'ın parçasıdır; imzalı paket kaydına girer ve detayda packages[].compat içinde döner. Hata yolları: compat.launch, compat.launch.exe, compat.processName gibi.

Dağıtım aileleri

Anahtarİzin verilen id değerleri
linux-debdebian, ubuntu, linuxmint, pop, elementary, zorin, kali, raspbian, deepin, mx, neon, devuan, pureos, tuxedo
linux-rpmfedora, rhel, centos, rocky, almalinux, ol, opensuse-leap, opensuse-tumbleweed, sles, nobara, amzn, ultramarine
linux-pacmanarch, manjaro, endeavouros, garuda, cachyos, artix, steamos

Ailesine uymayan bir dağıtım yazarsan reddedilir. Ör. bir deb paketinde fedora yazarsan yanıt şöyle olur:

{ "success": false, "error": "compat_invalid", "path": "compat.linux.distros[1].id",
  "message": "fedora bu paket türüne uymaz; linux-deb için: debian, ubuntu, linuxmint, …" }

Örnek: tek sürümde beş paket

Kısalık için launch alanları yazılmadı; her masaüstü paketinde gerekir.

// windows-msi
{ "arch": "x86_64", "os": { "minVersion": "10.0.19041" } }
// windows-exe-arm64 (arch kendiliğinden arm64)
{ "os": { "minVersion": "10.0.22000" } }
// linux-deb
{ "arch": "x86_64", "linux": { "distros": [ { "id": "ubuntu", "min": "22.04" }, { "id": "debian", "min": "12" }, { "id": "linuxmint", "min": "21" } ] } }
// linux-rpm
{ "arch": "x86_64", "linux": { "distros": [ { "id": "fedora", "min": "39" }, { "id": "opensuse-tumbleweed" } ] } }
// linux-pacman
{ "arch": "x86_64", "linux": { "distros": [ { "id": "arch" }, { "id": "manjaro" }, { "id": "endeavouros" } ] } }

Yerel uçlar: ui, bridge, background

Programın arayüzü ve widget'ı uygulamaya yerel uçlarla bağlanır. Uçlar paket başına compat içinde bildirilir: imzalı paket kaydının parçasıdır ve yolları işletim sistemine göre değişir. Yalnız masaüstü paketlerinde (Windows, macOS, Linux) bulunur; Android'de bu alanlar bilinmeyen alan sayılır ve reddedilir.

  • ui: programın Nuvaka penceresinde açılan arayüzü. runMode:"embedded" programlarda her masaüstü paketinde zorunludur.
  • bridge: eşlikçi uzantının widget'ının programla konuştuğu köprü. widget.kind:"extension" sürümlerde her masaüstü paketinde zorunludur.
  • background: uygulamanın, kullanıcı onayıyla başlatabileceği arka plan parçası.

Gömülü arayüz (ui)

// önerilen: unix soket ya da named pipe (port gaspı yok, belirteç gerekmez)
"ui": { "transport": "unix", "path": "runtime:gpu-control-ui.sock", "args": ["--serve"] }          // Linux, macOS
"ui": { "transport": "pipe", "pipe": "\\\\.\\pipe\\nuvaka-gpu-control-ui", "args": ["--serve"] }  // Windows
// http: belirteç dosyası (handshake "file"; portFile ile varsayılan)
"ui": { "transport": "http", "portFile": "gpu-control-ui.json" }
// http: ortam değişkeniyle el sıkışma (UI sunucusunu uygulama başlatır)
"ui": { "transport": "http", "port": 47123, "handshake": "env", "args": ["--serve"], "urlPath": "/app" }
AlanKural
transportunix (Linux, macOS), pipe (yalnız Windows) ya da http. unix ve pipe önerilir.
path (unix)"/run/<ad>.sock", "/run/<dizin>/<ad>.sock" (macOS'ta /var/run/…) ya da "runtime:<ad>.sock" / "runtime:<dizin>/<ad>.sock". Her parça ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$ kuralına uyar. Yol .sock ile biter, en çok 100 karakterdir ve .. içermez. Arayüz için runtime:<ad>-ui.sock önerilir.
pipe (pipe)"\\.\pipe\<ad>"; ad [A-Za-z0-9][A-Za-z0-9._-]{0,99}. JSON'da ters bölüleri kaçışla yaz.
port ya da portFile (http)Yalnız biri verilir. port 1024–65535. portFile: çalışma dizinine göre .json dosya adı, en çok bir alt dizin ("gpu-control/ui.json"); mutlak yol, \ ve .. olamaz.
handshake (http)file (varsayılan; portFile gerekir) ya da env. Aşağıya bak.
urlPathİsteğe bağlı başlangıç yolu. / ile başlar, [A-Za-z0-9._~/-] karakterlerinden oluşur, en çok 200 karakterdir; .. ve // içermez. Varsayılan /.
argsİsteğe bağlı, en çok 16 metin (her biri en çok 256 karakter, NUL yok). Verirsen UI sunucusunu uygulama başlatır: compat.launch hedefini bu argümanlarla, kullanıcının yetkisiyle (asla root ya da yönetici olarak değil). Vermezsen program UI sunucusunu kendisi açar.

Kullanıcı çalışma dizini. runtime: yolları ve portFile bu dizine göre çözülür:

  • Linux: $XDG_RUNTIME_DIR (yoksa /run/user/<uid>);
  • Windows: %LOCALAPPDATA%\Nuvaka\run;
  • macOS: $TMPDIR (getconf DARWIN_USER_TEMP_DIR).

Uygulama bu kökün dışına çıkan yolu (sembolik bağ dahil) reddeder.

http el sıkışması (zorunlu). Port gaspına ve DNS rebinding'e karşı korur:

  • handshake:"file": programın kendi kullanıcı düzeyindeki UI sunucusu (asla root servis değil) portFile'ı 0600 kipinde yazar: { "port": 47123, "token": "<en az 32 bayt rastgele, base64url>" }. Uygulama dosyanın sahibinin kullanıcı olduğunu ve grup ya da diğerlerine açık olmadığını denetler.
  • handshake:"env": UI sunucusunu uygulama kendisi başlatır (args ile) ve ortama NUVAKA_UI_TOKEN=<rastgele> koyar. Görünüm açılmadan önce GET http://127.0.0.1:<port>/.well-known/nuvaka-ui isteği (yetkisiz) { "token": "<NUVAKA_UI_TOKEN>" } döndürmelidir; tutmazsa hiçbir şey gösterilmez. portFile ile birlikte kullanılırsa dosya yalnız { "port" } içerebilir.
  • İki kipte de uygulama istekleri kendi özel şeması üzerinden vekil olarak iletir: Host: 127.0.0.1:<port> ve Authorization: Bearer <token> ile. Belirteç görünüme (webview) asla ulaşmaz. Programın sunucusu başka bir Host değerini ve belirteçsiz isteği reddetmeli (401 ya da 421) ve yalnız 127.0.0.1'e bağlanmalı.
  • unix soket ve pipe'ta belirteç yoktur; bunun yerine uç sahipliği denetlenir (aşağıda).

Widget köprüsü (bridge)

// Linux: sistem servisi (gpud)
"bridge": { "source": "service", "transport": "unix", "path": "/run/nuvaka-gpud/gpud.sock", "protocol": "jsonl-v1",
            "hello": { "cmd": "hello", "proto_version": 1 },
            "methods": [ { "name": "status", "readOnly": true }, { "name": "set_profile", "readOnly": false, "rateLimitPerMin": 30 } ] }
// Windows
"bridge": { "source": "service", "transport": "pipe", "pipe": "\\\\.\\pipe\\nuvaka-gpud", "protocol": "jsonl-v1", "methods": [ … ] }
// arka plan parçası ve kullanıcı soketi
"background": { "args": ["--background"] },
"bridge": { "source": "background", "transport": "unix", "path": "runtime:gpu-control.sock", "protocol": "jsonl-v1", "methods": [ … ] }
AlanKural
sourceservice: paket her zaman çalışan bir işletim sistemi servisi kurar (systemd birimi, Windows servisi, launchd). background: uygulama, kullanıcının onayıyla, Nuvaka açılınca programın arka plan parçasını başlatabilir; paket compat.background bildirmeli (yoksa compat_invalid, path: compat.background).
transport ve uçui'daki gibi (path, pipe, port ya da portFile ve handshake). source:"service" yalnız unix ya da pipe kullanır, çünkü sistem servisi kullanıcının belirtecini veremez. http yalnız background ile olur.
protocol"jsonl-v1" (tek değer).
methods1–32 öğe { name, readOnly, rateLimitPerMin? }. name ^[a-z][a-z0-9_]{0,31}$ kuralına uyar ve tekildir. readOnly zorunlu bir bool'dur. rateLimitPerMin 1–600; yoksa uygulamanın varsayılanı geçerlidir (okuma 120, yazma 30). Uygulama listede olmayan yöntemi reddeder (method_not_allowed).
helloİsteğe bağlı JSON nesnesi, en çok 1 KB. Uygulama onu her bağlantının ilk satırı olarak aynen gönderir ve bir yanıt satırı bekler (ör. {"cmd":"hello","proto_version":1}). Yanıt gelmezse ya da error içerirse uç bridge_unavailable sayılır.

Köprü sözleşmesi (jsonl-v1) ve uygulamanın sınırları

Uzantı köprüyü nuvaka.programs.call(method, params?) ile çağırır; sonuç bir Promise'tir. Çağrı yalnız companionOf değeri ve programs: "companion" izni olan, programın kurulu sürüm kaydında widget.kind:"extension" ve widget.extensionId değeri kendisi olan uzantıda çalışır (Ana sayfa widget'ı). İsteği uygulama kendisi kurar; uzantı ham satır gönderemez.

Çerçeve: UTF-8, satır başına bir JSON nesnesi, satır \n ile biter (satır içinde ham yeni satır olmaz). Bir bağlantıdaki istekler sıralıdır; her istek satırına bir yanıt satırı gelir.

→ {"cmd":"hello","proto_version":1}                       // hello varsa, bağlantının ilk satırı (aynen)
← {"ok":true}
→ {"id":1,"method":"status","params":{}}
← {"id":1,"result":{"temp":61,"profile":"quiet"}}
→ {"id":2,"method":"set_profile","params":{"name":"perf"}}
← {"id":2,"error":{"code":"busy","message":"…"}}
  • http'de (yalnız source:"background"): her istek satırı POST /.well-known/nuvaka-bridge isteğinin gövdesidir; yanıt gövdesi tek satırdır. El sıkışma ve Host/Bearer kuralları ui'daki gibidir.
  • Sınırlar: params en çok 64 KB, yanıt satırı en çok 1 MB, yanıt zaman aşımı 5 sn. rateLimitPerMin yöntem başına, uygulamada uygulanır.
  • Yazma yöntemleri (readOnly:false) yalnız kullanıcı hareketinden (tıklama ya da tuş, yaklaşık 1 sn içinde) sonra çağrılabilir; aksi hâlde gesture_required.
  • Uç sahipliği: unix soketin sahibi root ya da kullanıcı olmalı ve soket herkese yazılabilir olmamalı (runtime: soketleri kullanıcıya aittir; 0600 önerilir). Windows'ta pipe sunucusunun süreci (GetNamedPipeServerProcessId) programın InstallLocation dizini altındaki bir dosya olmalı. Tutmazsa uygulama bağlanmaz (bridge_unavailable).

Hatalar Promise reddi olarak gelir; kod error.code alanındadır:

KodAnlamı
bridge_unavailableUç yok, bağlanılamadı, sahiplik ya da el sıkışma tutmadı, hello reddedildi. Widget standart "Program/servis çalışmıyor · Başlat" durumunu çizer (Widget standardı).
method_not_allowedYöntem methods listesinde yok.
gesture_requiredYazma yöntemi kullanıcı hareketi olmadan çağrıldı.
rate_limitedYöntemin rateLimitPerMin sınırı aşıldı.
timeout5 sn içinde yanıt gelmedi.
too_largeparams ya da yanıt sınırı aştı.
bad_responseYanıt satırı geçerli değil.
not_authorizedUzantı bu programın köprüsünü çağırmaya yetkili değil.

Programın kendi döndürdüğü hata kodu (ör. busy) error.code'da aynen gelir; önüne ek konmaz.

Arka plan parçası (background)

"background": { "args": ["--background"], "persist": false }
  • args: 1–16 metin (her biri en çok 256 karakter, NUL yok). persist: isteğe bağlı bool, varsayılan false.
  • Uygulama yalnız compat.launch hedefini bu argümanlarla başlatır: Linux'ta .desktop dosyasının Exec satırı (alan kodları atılır), Windows'ta InstallLocation\exe, macOS'ta bundleId. Bunu root ya da yönetici yetkisi olmadan ve kullanıcının açık onayından sonra yapar ("GPU Control arka planda çalışsın mı?"); kullanıcı onayı ayarlardan geri alabilir.
  • Arka plan parçası Nuvaka açılınca başlatılır, Nuvaka kapanınca durdurulur. persist:true ise çalışmaya devam eder.

Bağımlılıklar (dependencies)

dependencies sürüm başına verilir: POST …/versions ile sürümü oluştururken ya da sonradan PUT …/versions/{v} ile. Alan zorunludur. Bağımlılık yoksa boş liste [] gönder; bu açıkça "bağımlılık yok" demektir. Alanı hiç göndermezsen sürüm incelemeye gönderilemez (dependencies_required).

[
  { "kind": "driver", "name": "NVIDIA driver", "version": ">=535", "required": false, "platforms": ["windows", "linux"],
    "note": { "tr": "Yalnız NVIDIA ekran kartlarında", "en": "NVIDIA GPUs only" }, "url": "https://www.nvidia.com/drivers" },
  { "kind": "hardware", "name": "NVIDIA or AMD GPU", "required": true },
  { "kind": "runtime", "name": ".NET Desktop Runtime", "version": ">=8.0", "required": true, "platforms": ["windows"],
    "url": "https://dotnet.microsoft.com/download/dotnet/8.0" },
  { "kind": "program", "name": "nuvaka.gpu-runtime", "version": ">=1.0.0", "required": true }
]
AlanKural
kinddriver (sürücü), runtime (çalışma zamanı), hardware (donanım), program (başka bir Nuvaka programı) ya da system (işletim sistemi özelliği, ör. WSL, systemd).
name1–100 karakter. kind program ise mağazada yayında ve listelenen bir programın kimliği olmalı. Program kendine bağımlı olamaz.
versionİsteğe bağlı kısıt: >=535, 8.0, >=1.2.0 gibi. Önüne >=, <=, >, <, =, ~ ya da ^ gelebilir; en çok 40 karakter.
requiredZorunlu, true ya da false. false "önerilir" demektir.
noteİsteğe bağlı { tr, en }. Her dil 1–300 karakter.
urlİsteğe bağlı bir https adresi (indirme ya da bilgi sayfası).
platformsİsteğe bağlı. Bağımlılığın geçerli olduğu platform anahtarları ya da işletim sistemleri (windows, linux…). Yazmazsan tüm platformlarda geçerlidir.
  • En çok 30 bağımlılık olabilir. Aynı kind ve name ikilisi iki kez yazılamaz. Bilinmeyen alan reddedilir.
  • Linux sistem kütüphanelerini burada değil, paketin kendi bağımlılık alanında bildir (Depends:, Requires:, depends=()). Onları paket yöneticisi kurar. Bu liste paket yöneticisinin kuramayacağı şeyler içindir.
  • program bağımlılığında uygulama, kullanıcıya önce o programı kurmayı önerir. O programın paketi de kendi compat bildirimine göre seçilir. Bağımlı olunan program sonradan yayından kalkarsa yeni sürümün gönderimi ve onayı reddedilir.

Hata kodları

KodNe zaman
400 compat_invalid + pathcompat hatalı. path hatalı alanın yoludur: compat.arch, compat.os.minVersion, compat.linux.distros[1].id, compat.linux.glibc gibi. Yerel uçlarda: compat.ui, compat.ui.transport|path|pipe|port|portFile|handshake|urlPath|args|args[i]; compat.bridge, compat.bridge.source|transport|path|pipe|port|portFile|handshake|protocol|methods|methods[i]|methods[i].name|methods[i].readOnly|methods[i].rateLimitPerMin|hello; compat.background, compat.background.args|args[i]|persist.
400 compat_required + platformsGönderim ya da onay sırasında compat'ı olmayan paketler var.
400 dependencies_invalid + pathBağımlılık listesi hatalı ya da program bağımlılığı bulunamadı, ör. dependencies[0].kind, dependencies[2].name.
400 dependencies_requiredSürümde dependencies alanı hiç bildirilmedi.
400 ui_required + platformsProgram runMode:"embedded" ve bu masaüstü paketlerinde compat.ui yok. Gönderim ve onayda.
400 widget_invalid, reason: bridge_requiredWidget kind:"extension" ve bir masaüstü paketinde compat.bridge yok: path: "packages.<platform>.compat.bridge" ve platforms gelir. Sürümde hiç masaüstü paketi yoksa path: "packages". Gönderim ve onayda.
409 not_editableİncelemedeki ya da yayındaki sürümün compat'ı veya bağımlılıkları değiştirilemez.

Mağaza ve uygulama ne görür

Liste kartında (GET /api/programs) son sürümün paketlerinden işletim sistemi başına bir özet bulunur:

"compat": {
  "windows": { "arch": ["x86_64", "arm64"], "minVersion": "10.0.19041" },
  "linux":   { "arch": ["x86_64"], "distros": [ { "id": "ubuntu", "min": "22.04" }, { "id": "fedora", "min": "39" } ], "glibc": "2.31", "anyDistro": true },
  "android": { "arch": ["universal"], "minSdk": 26 }
}

Değerler paketler arasındaki en düşük sürümlerdir. anyDistro: true, bir AppImage paketi olduğunu, yani glibc yeterliyse her dağıtımda çalıştığını gösterir. Detayda (GET /api/programs/{id}) her paketin tam compat'ı, her sürümün dependencies'i ve son sürümün bağımlılıkları bulunur. Program bağımlılıklarına mağaza kartı eklenir.

Eşleştirme kuralları

Uygulama kararı cihazda kendisi verebilir. İstersen sunucuya da sorabilirsin: detay isteğine cihaz bilgisini eklersen yanıtta compatibility alanı gelir.

GET /api/programs/{id}?platform=linux&arch=x86_64&distro=ubuntu&distroVersion=24.04&distroLike=debian&glibc=2.39
"compatibility": {
  "compatible": true, "recommended": "linux-deb",
  "packages": [
    { "platform": "linux-appimage", "compatible": true,  "reasons": [], "warnings": [] },
    { "platform": "linux-deb",      "compatible": true,  "reasons": [], "warnings": [] },
    { "platform": "linux-rpm",      "compatible": false, "reasons": ["distro_not_supported"], "warnings": [] }
  ]
}

Parametreler:

  • arch: x86_64 (amd64 ve x64 da olur) ya da arm64 (aarch64 da olur).
  • osVersion: Windows'ta yapı numarası (10.0.22631), macOS'ta sürüm (14.5), Android'de API düzeyi (34).
  • distro, distroVersion, distroLike: /etc/os-release dosyasındaki ID, VERSION_ID ve ID_LIKE değerleri.
  • glibc: cihazın glibc sürümü.

Verilmeyen bilgi denetlenmez. Kurallar her paket için ayrı uygulanır:

  • Mimari: universal paket her mimaride çalışır. Aynı mimari uyar. arm64 Windows ve Apple Silicon Mac, x86_64 paketi öykünmeyle çalıştırır: paket uyar, uyarı olarak arch_emulated eklenir. Diğer farklar arch_mismatch sebebiyle uymaz.
  • Windows ve macOS: cihaz sürümü minVersion'dan küçükse os_too_old. Sürümler noktalı sayı olarak parça parça karşılaştırılır.
  • Android: API düzeyi minSdk'dan küçükse os_too_old.
  • glibc: cihazın glibc'si paketin bildirdiğinden eskiyse glibc_too_old.
  • deb, rpm, pacman:
    • Dağıtım listede varsa ve min bildirilmişse cihazın sürümü en az min olmalı; değilse distro_too_old. Sürüm bilinmiyorsa uyarı distro_version_unknown eklenir.
    • Dağıtım listede yok, ama kendisi ya da ID_LIKE değerlerinden biri paketin ailesindeyse paket uyar ve uyarı distro_family_match eklenir. Bu durumda sürüm denetlenmez. Örnek: listede yalnız ubuntu varken Linux Mint.
    • Hiçbiri tutmazsa distro_not_supported.
  • AppImage: dağıtıma bakılmaz; yalnız mimari ve glibc denetlenir.

recommended, uyan paketler arasından şöyle seçilir: tam eşleşme önce gelir; aile eşleşmesi ya da öykünme ikinci sıradadır; AppImage en son. Eşitlikte platform anahtarı listesindeki sıra geçerlidir. Hiçbir paket uymuyorsa compatible false, recommended null olur.

Nuvaka Apps API v1 · son güncelleme 2026-10-17