Introdução
Uma instalação de Jami normalmente tem dois componentes principais:
o daemon/librário Jami, e
O cliente (ou seja, interface front-end ou de utilizador).
Para usar Jami, o Jami daemon / biblioteca é sempre necessário, já que é o núcleo de Jami e contém toda a conectividade, comunicação, criptografia e lógica de mídia. Ele usa bibliotecas como OpenDHT, PJSIP, GnuTLS e FFmpeg, e tem várias API, incluindo DBus, libwrap (libraria compartilhada), JNI e REST. Essas API permitem interagir com Jami sem passar por uma interface gráfica de usuário (especialmente útil para usar Jami em uma configuração sem cabeça / servidor), construir ferramentas de automação / scripts em torno de Jami e construir interfaces de usuário personalizadas para Jami.
O cliente (ou seja, interface do usuário) pode variar dependendo do sistema operacional e/ou plataforma a ser usada. Por exemplo, em sistemas Android/Replicant este seria jami-client-android, e em GNU/Linux, Windows e macOS este seria o jami-client-qt. Também havia um jami-client-gnome baseado em GTK para GNU/Linux e um jami-client-macos para macOS, ambos foram depreciados em favor da nova plataforma transversal jami-client-qt baseada no framework Qt.
Nos sistemas GNU/Linux, jami-client-qt pode ser configurado e construído para usar uma das duas principais APIs para se comunicar com o daemon/librário Jami:
libwrap: quando jami-client-qt é configurado para usar libwrap (o que é sempre o caso no macOS e Windows), ele usará a API da biblioteca compartilhada do Jami daemon, e não haverá um processo de daemon separado. Isso tem a vantagem de ser um pouco mais eficiente do que com a API DBus mencionada abaixo, em troca de menos flexibilidade (não poder interagir com Jami via DBus ao usar libwrap).
Os pacotes Jami distribuídos através dl.jami.net estão atualmente todos configurados para usar a API libwrap.
DBus: quando jami-client-qt é configurado para usar DBus, ele se comunicará com o daemon Jami através de sua API DBus, e o daemon será executado como um processo separado por si mesmo. Isso é muito flexível para se comunicar e controlar o daemon através de outros meios (por exemplo, pequenos scripts de utilidade) simultaneamente, enquanto o cliente Jami baseado em Qt também usa e interage com ele. O custo associado desta flexibilidade adicional é o custo geral de usar DBus.