Johdanto
Jami-asennuksessa on tyypillisesti kaksi pääkomponenttia:
Jami daemon/library, ja
asiakas (eli ohjelma tai käyttöliittymä).
Jamiin tarvitaan aina Jami-taustapalvelu/kirjasto, koska se on Jamin sydän ja sisältäen kaiken liitettävyys-, kommunikaatio-, kryptografia- ja medialogiikka. Se käyttää kirjastoja, kuten OpenDHT, PJSIP, GnuTLS ja FFmpeg, ja useita API-rajapintoja, kuten DBus, libwrap (jaettu kirjasto), JNI ja REST. API-rajapintojen avulla on mahdollista olla yhteydessä Jamiin ilman graafista käyttöliittymää (hyödyllinen Jamin käytössä headless/server asetuksissa), rakentaa automaatiota/skriptejä Jamin ympärille ja mukautettuja käyttöliittymiä Jamille.
Ohjelma (eli käyttöliittymä) riippuu käytettävästä käyttöjärjestelmästä tai alustasta. Esim. Android tämä olisi jami-client-android, iOS jami-client-ios ja GNU/Linux, macOS ja Windows tämä olisi jami-client-qt. Aikaisemmin oli myös GTK-pohjainen jami-client-gnome ja macOS jami-client-macos, jotka ovat vanhentuneet uuden Qt-ohjelmistoon perustuvan jami-client-qt:n siirtymän jälkeen.
GNU/Linux-järjestelmissä jami-client-qt voidaan konfiguroida ja rakentaa käyttämään yhtä kahdesta pää API:stä Jami-daemon/library:n kanssa:
libwrap: Kun jami-client-qt on määritetty käyttämään libwrapia (macOS ja Windows), se käyttää Jami taustapalvelun jaettua API-kirjastoa, eikä ole erillistä prosessia. Etu, että se on jonkin verran tehokkaampi kuin DBus-API, mutta samalla vähemmän joustavaa (ei voi olla yhteydessä Jamin kanssa DBus:in kautta käytettäessä libwrapia).
Kaikki dl.jami.net kautta jaettavat Jami-paketit ovat määritetty käyttämään libwrap API:a.
DBus: Kun jami-client-qt on määritetty käyttämään DBus-rajapintaa, se kommunikoi Jami-taustapalvelun kanssa sen DBus-rajapinnan kautta ja palvelu toimii erillisenä prosessina. Tämä on erittäin joustavaa kommunikoinnissa palvelun ja sen ohjaamisessa muilla tavoilla (esimerkiksi pienillä apuohjelmilla) samanaikaisesti kuten Qt-pohjainen Jami-ohjelma.