different distros have different set of libraries, + Debian vs RPM packages
Conosci le tue "dipendenze di superficie". Quindi per ogni distro è necessario trovare i pacchetti che forniscono tali dipendenze (e documentano ciò), e verificare che porti anche tutte le dipendenze transitive (non solo in termini di librerie sottostanti, ma anche in termini di "costruito con le opzioni giuste" o qualsiasi vincolo di runtime potrebbe esistere). Trovare il set di pacchetti è un'attività che non è mai troppo complicata, ma dovrai testare almeno per ogni versione, quindi è necessario un buon setup di test (buona automazione e / o goot team QA).
Ma se hai un insieme complesso di dipendenze, diventa più probabile che ti imbatti in vincoli complessi su quale versione di ciò che è necessario, e a volte devi abbandonare alcune versioni di alcune distro ... o iniziare ad affrontare questo provando cose più difficili che portano un altro insieme di complessità: compilati e spedisci i tuoi glibc e le tue librerie, o costruisci binari collegati staticamente , ma aprirai una nuova lattina di worm ... Questo dipenderà strongmente su ciò che usi per creare la tua applicazione . Se si usa C ++, ad esempio, si devono prendere in considerazione molti altri dettagli (l'ABI del compilatore di sistema, l'ABI del kernel ...). Dall'esperienza, la cosa più terribile è quando usi diverse librerie commerciali, ognuna delle quali ha il proprio set di "piattaforme" supportate, e se guardi più da vicino scopri che incorrono in strane restrizioni su quale versione del compilatore puoi usare, e tu devo chiamarli e negoziare le build personalizzate ... (quell'esperienza era 15 anni fa, forse le cose vanno meglio ora).
Docker può aiutare a semplificare l'infrastruttura necessaria per i test. Può anche permetterti di saltare tutto questo, se preferisci rimanere con una distro, e spedire la tua app con un'immagine docker che si basa su quella distro (che funzionerà allo stesso modo in tutte le distro). Alcuni sistemi sul lato server lo fanno, ma non ho visto quella seconda opzione in natura per le applicazioni desktop, quindi sono sicuro che ci sono altre difficoltà (supponendo: la visualizzazione di materiale non deve essere troppo complicata se puoi passare $DISPLAY
e le impostazioni di rete lo consentono, ma il lavoro di copia-incolla dovrebbe essere eseguito? Drag-and-drop? ...).
Ovviamente se ciò che costruisci è open source, meglio abbracciare ciascun sistema di distribuzione e diventare parte dell'ecosistema, come descritto nella risposta di Kilian.
Different UI - Gnome vs KDE
Nota laterale: ogni ambiente desktop (DE) viene fornito con il proprio set di pacchetti e alcune delle dipendenze potrebbero dipendere da pacchetti disponibili solo con un DE. Ma di solito qualsiasi pacchetto di cui hai bisogno è disponibile per l'installazione, quindi diciamo che questo è indirizzato dalla sezione "pacchetti distro")
Per aspetto e aspetto, se vuoi che la tua app appaia "nativa", dipende ancora da ciò che usi. Il tuo toolkit UI potrebbe essere basato su GTK, o Qt (ci sono Qt look-and-feel che possono sembrare app GTK - questo dipende anche dalla distribuzione e dai pacchetti, ma per alcune distro comuni potrebbe valer la pena documentare "installazione pacchetto così e così, vai lì nelle tue impostazioni, scegli questo ... ").
Oppure potresti usare un toolkit "neutrale" e non ti interessa. Ma avresti ancora "problemi di integrazione desktop" come " Come posso aprire la pagina web con il browser predefinito dell'utente? " o " Apri il file pdf con il visualizzatore PDF predefinito ". Esistono comandi specifici per gnome e specifici per KDE, ma ci sono anche strumenti generici, io consiglierei xdg-open
. Potresti imbatterti in casi edge divertenti, quindi potresti voler offrire all'utente la possibilità di configurare i comandi di sistema per l'integrazione desktop, ma con una solida configurazione di base che dovrebbe funzionare con impostazioni del 99% (vedi < strong> XDG standard e xdg-open )