Als Gegenstück zu den bekannten Instant-Messaging-Systemen etabliert sich zunehmend das Open-Source- basierte Jabber. Auf einer soliden XML-Protokollgrundlage bieten Server und Clients alle Features, die kommunikationsfreudige Anwender erwarten. Zudem ist Jabber offen für Chats mit fremden Welten.
Instant-Messaging-Systeme wie ICQ, AIM, MSN und der Yahoo Messenger sind inzwischen recht beliebt und weit verbreitet. Einige Studien prophezeien sogar, dass Instant Messaging (IM) in der Businesswelt der E-Mail Konkurrenz machen wird[7]. Allerdings sind die Systeme nicht kompatibel zueinander. Benutzer müssen sich meist bei verschiedenen Systemen registrieren, um alle Partner zu erreichen.
Anno 1998 begann Jeremie Miller sich mit IM zu befassen und überlegte, wie die Kommunikation einfacher und besser ablaufen könnte. Daraus entwickelte er die Grundlagen zu Jabber. Jabber ist ein offenes XML-Protokoll, das den Austausch von Messages und Online-Status in Echtzeit ermöglicht. Es steht im Funktionsumfang den bekannten Messaging-Systemen in nichts nach, vielmehr bringt Jabber Features mit, die bei proprietären Systeme häufig fehlen.
Es existieren viele Jabber-Server- und -Clients sowie einige Libraries, sodass dieses IM-System mittlerweile auf nahezu jeder Plattform läuft. Die Server-Implementierung der Jabber Software Foundation[1] unterliegt einer dualen Lizenz: GPL und JOSL, der Jabber Open Source License.
Das IM-System ist dezentral aufgebaut und damit hervorragend skalierbar, daher kann jeder Admin auch leicht seinen eigenen Jabber-Server aufsetzen. In puncto Sicherheit unterstützt Jabber das SSL-Protokoll für die sichere Kommunikation zwischen Client und Server. Einige Clients haben auch PGP- oder GPG-Funktionen für die Verschlüsselung der Nachrichten.
Nachrichtenkanäle
Sendet ein User eine Message an einen anderen, dann ähnelt der weitere Ablauf stark dem bekannten E-Mail-Prinzip: »user1« auf »jabberserver1.net« schickt eine Nachricht an »user2« auf »jabberserver2.net«, dabei nimmt der erste Server die Message an und leitet sie an den zweiten Server weiter, der die Nachricht dann an »user2« zustellt (siehe Abbildung 1). Der fundamentale Unterschied zu E-Mail ist, dass es sich bei Jabber nicht um ein klassisches Store-and-Forward-Prinzip handelt, sondern dass die Clients den Servern ihren Online-Status mitteilen. Diese so genannte Presence ist auch von anderen Instant-Messaging-Systemen her bekannt.
Da das Jabber-Protokoll offen gelegt und durch XML auch recht einfach zu implementieren ist, können die Messages nicht nur zwischen Menschen, sondern ohne großen Aufwand auch zwischen Programmen laufen. Denkbar wären etwa Bots, die auf Anfrage Börsenkurse ausgeben oder das Posten in einen Blog (Online-Tagebuch) erlauben. Perl-Programmierer werden dabei vom Modul »Net::Jabber« unterstützt.
Die Jabber-Adressen basieren auf DNS und URI (Uniform Resource Identifier), sie ähneln sehr den E-Mail-Adressen in der Form » User@Host«. Zusätzlich führen Jabber-Adressen aber noch eine so genannte Ressource mit. Wenn ein User mit mehreren Programmen gleichzeitig angemeldet ist, dann finden die Messages mit Hilfe der Ressource den richtigen Client. Deren Name bestimmt jeder User selbst, es bieten sich der Ort oder der Name des Clients an (Arbeit, Zuhause, Gabber, Psi …). Die Jabber-ID, auch JID genannt, ist als » User@Domain/Resource« aufgebaut.
Jabber ist ein Client-Server-Dienst, bei dem die Clients ihre Nachrichten immer zu einem Server senden. Allerdings gibt es eine Ausnahme: Beim Dateiaustausch (Filesharing) belasten die Clients keinen Server, sondern nehmen – nach Vermittlung durch die Server – direkt Verbindung zueinander auf und übertragen die Daten dann ohne Umweg.
|
Jabber |
|---|
|
Protokoll: XML-basiertes, offenes, standardisiertes Protokoll Server: Mehrere Implementierungen, der Referenzserver ist »jabberd«[2] Lizenz: In Version 1 GPL und JOSL (Jabber Open Source License), Version 2 nur GPL Feature: Umfassendes Instant Messaging mit allen IM-typischen Funktionen Besonderheiten: Über so genannte Transportmodule nimmt der Server auch Kontakt mit fremden IM-Netzen auf; Benutzer können ihre Roster (Kontakteliste) auf dem Server ablegen und ihn daher von jedem Client aus nutzen Architektur: Dezentralisiertes Client-Server-Modell; die Server bilden ein gemeinsames Netz, Clients können daher mit beliebigen Servern verbunden sein und dennoch miteinander kommunizieren |
Präsenz zeigen
Sobald ein User mit seinem Client online ist, meldet dieser den Online-Status an den Server. Diese Presence bleibt so lange bestehen, bis der Client den Status ändert, sich beispielsweise als abwesend, länger abwesend oder offline deklariert. Im Gegensatz zu E-Mail sendet der Server eine hereinkommende Nachricht sofort an den Client (Server-Push), wenn dieser online ist.
Jabber kennt auch das Prinzip, dass Anwender die ihnen bekannten User in einer Liste führen. Was anderswo Buddy-Liste heißt, ist bei Jabber als Roster bekannt. Will etwa Anwender A einen anderen User B in seinen Roster aufnehmen, dann sendet Jabber diesem User B eine Message, die er bestätigen muss. Erst dann informiert das IM-System den User A über alle Statuswechsel des Benutzers B. Damit bleibt die Privatsphäre gut gewahrt.

Abbildung 1: User 1 sendet eine Nachricht an User 2. Sein Jabber-Client übergibt dabei den Text in XML verpackt (siehe Listing 2) an den Jabber-Server 1, der ihn an Server 2 weiterleitet. Der wiederum liefert die Message per Server-Push an User 2 aus.
Kontakt zur Konkurrenz
Jabber ist auch offen für fremde Systeme und Protokolle. So genannte Transports verbinden Jabber mit anderen Instant-Messaging-Netzen, so kommunizieren die User über IM-Grenzen hinweg miteinander. Das setzt allerdings voraus, dass der Jabber-Anwender auch im fremden System registriert ist.
Bei dieser Gelegenheit zeigt Jabber eine seiner großen Stärken: Es verwaltet den Roster und die Transports Server-seitig. Egal von welchem Rechner aus und mit welchem Client, jeder Benutzer sieht immer alle seine Kontakte, auch wenn sie in fremden IM-Netzen angemeldet sind. Bei herkömmlichen Systemen wie AIM müsste der Anwender auf jedem neuen Rechner seinen Client erneut einrichten, die Buddy-Liste neu anlegen und sie mit Einträgen füllen.
Eine typische Jabber-basierte Kommunikation kann zum Beispiel in folgenden Schritten ablaufen:
- User 2 geht online. Da er im Roster von User 1 eingetragen ist,
erfährt dieser den neuen Online-Status (siehe Listing 1). - User 1 sendet eine normale, einfache Message an User 2 (Listing
2 und Abbildung 1). - Die Message kann auch ein Subject erhalten (Listing 3). Sie
erinnert damit stark an eine E-Mail. - Statt der normalen Mitteilungen können sich die Benutzer
auch Chat-Messages zusenden (Listing 4a und 4b) und sich so
unterhalten.
Jeder Benutzer kann öffentliche Jabber-Server wie [jabber://jabber.org] oder [jabber://amessage.de] verwenden. Wer seinen eigenen Server betreiben will, muss ein wenig Installationsaufwand in Kauf nehmen. Der modulare Aufbau des Servers erlaubt es dem künftigen Jabber-Admin, genau die Features zu installieren, die er benötigt. Der Jabber-Server läuft auf allen gängigen Unixen, er setzt lediglich GNU Pth[8], Make und optional OpenSSL voraus.
Als praktische Fallback-Lösung enthält das Jabber-Paket auch eine Version der Threading-Bibliothek Pth. Das Configure-Skript greift auf diese zurück, falls noch kein Pth installiert ist, und spart dem Admin so Zusatzarbeit.
Der Server sollte praktischerweise über eine Internetverbindung verfügen. Damit die Kommunikation mit anderen Jabber-Servern funktioniert, ist ein eigener DNS-Name (FQDN) unabdingbar. Die Firewall sollte die Ports 5222 und 5269 akzeptieren. Port 5222 dient zur Client-Server-Kommunikation (mit SSL: 5223), während über Port 5269 die Kommunikation mit anderen Jabber-Servern läuft (siehe Abbildung 1).
Falls Transports zu anderen Systemen installiert werden sollen, muss die Firewall auch deren Ports freigeben. Wer mit Filesharing experimentieren will, muss zusätzlich Port 5530 freigeben. Dieses Feature ist aber nur in wenigen Clients implementiert.
|
Listing 1: |
|---|
<presence from='user2@jabberserver2.net/cafe' to='user1@jabberserver1.net/zuhause'> <status>Online</status> <priority>2</priority> </presence> |
|
Listing 2: Einfache |
|---|
<message from='user1@jabberserver1.net/zuhause' to='user2@jabberserver2.net/cafe'> <body>Hey, alles klar bei dir?</body> </message> |
|
Listing 3: |
|---|
<message from='user2@jabberserver2.net/cafe' to='user1@jabberserver1.net/zuhause'> <subject>Sitze im Cafe</subject> <body>Ich trinke gerade einen Kaffee, die haben WLAN hier</body> </message> |
|
Listing 4a: |
|---|
<message type='chat' from='user1@jabberserver1.net/cafe' to='user2@jabberserver2.net/cafe'> <thread>01</thread> <body>und, was geht ab?</body> </message> |
|
Listing 4b: |
|---|
<message type='chat' from='user2@jabberserver2.net/cafe' to='user1@jabberserver1.net/cafe'> <thread>01</thread> <body>och, nicht viel.</body> </message> |

Abbildung 2: Der Jabber-Client Psi mit einer Roster-Liste, sie entspricht der Buddy-Liste anderer Systeme.
Einfacher Servertest mit Telnet-Client
Nach der Installation befindet sich der kompilierte »jabberd« im gleichnamigen Unterverzeichnis, ein »make install« ist nicht vorgesehen und auch nicht nötig. Der Jabber-Server lässt sich testweise ohne weitere Konfiguration starten: »./jabberd/jabberd«. Als Ausgabe erscheint:
20030407T06:16:12: [notice] (-internal): initializing server
Ein erster Test für den laufenden Server ist mit einer einfachen Telnet-Session möglich. Nach dem Öffnen der Verbindung mit »telnet localhost 5222« startet der folgende XML-Text einen Jabber-Stream:
<stream:stream to='localhost' xmlns= 'jabber:client' xmlns:stream= 'http://etherx.jabber.org/streams'>
Der Server antwortet darauf mit diesen XML-Daten:
<?xml version='1.0'?><stream:stream xmlns:stream='http://etherx.jabber.org/ streams' id='3E9150C4' xmlns='jabber: client' from='localhost'>
Der Server läuft also. Um den Stream wieder zu beenden, gibt man Folgendes in die Telnet-Session ein:
</stream:stream>
Ein beherztes [Ctrl]+[C] im Terminal beendet auch den laufenden Server, der sich mit einer Ausgabe bedankt:
20030407T10:21:24: [notice] (-internal): shutting down server

Abbildung 3: Gabber bietet bereits im Login-Fenster eine Menge Einstellungen. Die Jabber-Kennung ist übersichtlich aufgeschlüsselt (Name, Server, Ressource …).
Jabber konfigurieren
Für einen richtigen Jabber-Server ist noch einiges zu tun. Die Konfigurationsdatei »jabber.xml« wirkt auf den ersten Blick lang und unübersichtlich, aber die meisten Einstellungen passen so, wie sie sind. Ändern sollte man vor allem den Hostnamen, damit der eigene Jabber-Server mit anderen Servern Daten austauschen kann.
<host>
<jabberd:cmdline flag="h">
jabberserver1.net
</jabberd:cmdline>
</host>
Außerdem empfiehlt es sich, den ursprünglich eingeplanten Update-Mechanismus auszukommentieren (»<!– Text –>«). Das Feature funktioniert nicht, es produziert aber laufend störende Fehlermeldungen.
<!--
<update>
<jabberd:cmdline flag="h">
localhost
</jabberd:cmdline>
</update>
-->
Da der Server modular aufgebaut ist, kann man recht einfach die Transports, also Übergänge zu anderen Netzen, hinzufügen. Die verschiedenen Transports sind auf[2] zu finden.
|
Jabber-Server |
|---|
|
Die aktuelle Referenzimplementierung des Jabber-Servers ist »jabberd«, Version 1.4.2. Das Paket ist einfach zu installieren und zu administrieren[2]. Es gibt aber auch mehrere Alternativen. Das Installieren läuft in wenigen Schritten ab: Paket laden, im Zielverzeichnis auspacken und hineinwechseln. cd /usr/local/ wget http://jabberd.jabberstudio.org/ downloads/jabber-1.4.2.tar.gz tar xfvz jabber-1.4.2.tar.gz cd jabber-1.4.2 Danach folgt der übliche Configure-Schritt. Wer SSL-Unterstützung will, muss hier »./configure –enable-ssl« angeben. Das Skript (übrigens kein Autoconf-Skript, sondern vom Jabber-Team selbst entwickelt) informiert über seine Aktivitäten: Running Jabber Configure ======================== Getting pth settings... Done. Setting Build Parameters... Done. Generating Settings Script... Done. You may now type 'make' to build your new Jabber system. Als Abschluss fehlt nur noch der gewohnte »make«-Aufruf. |
Erste Sprechversuche
Es gibt mittlerweile eine stattliche Anzahl an IM-Clients für Linux. Zu den reinen Jabber-Programmen zählen Psi, Gabber und Tkabber. Einige Clients unterstützen von sich aus verschiedene IM-Systeme, verbreitet sind etwa Kopete, Everybuddy und Center ICQ. Eine Übersicht aller Jabber-fähigen Clients ist bei[3] zu finden. Auch für mobile User mit J2ME-fähigen Handys gibt es passende Software, etwa MJabber oder Jabber IM[4]. WAP-Nutzer müssen dabei nicht zurückstehen, für sie existiert das JPT-Projekt (Jabber for wireless Terminals)[5]. Für Besitzer eines Zaurus bietet sich TCK-Jabber an[6].
Die verschiedenen Clients unterscheiden sich ein wenig in der Handhabung und in der Anzahl der Features, alle können aber einen Roster führen (Abbildung 2) und Chats oder Messages hin- und herschicken. Filetransfer unterstützt momentan aber nur Gabber.
Wenn der Client noch keinen Account auf dem Server besitzt, legt er automatisch beim Connect einen neuen an (Abbildung 3). Danach zeigt er den Roster, der natürlich noch recht leer ist. Es empfiehlt sich nun, nach und nach die Kontakte einzufügen. Wer sich seine Kontakte von der jeweiligen Gegenseite autorisieren lässt, erfährt vom Roster die aktuelle Presence.
Selbstverständlich lassen sich die Kontakte auch in unterschiedlichen Gruppen anordnen, ebenso stehen verschiedene Ansichten zur Auswahl. Wer mal nicht genau weiß, wie ein Kontakt heißt, wirft einfach einen Blick in das Jabber User Directory (JUD). Jeder Jabber-User hat außerdem die Möglichkeit, mit seinem Client eine VCard zu erstellen, die seine wesentlichen persönlichen Informationen enthält. Speichert er diese VCard im JUD, ist er für andere Benutzer besonders leicht zu finden.
Zentrales Telefonbuch
Das zentrale JUD »users.jabber.org« ist bei der Installation des Servers bereits vorkonfiguriert und als Agent vorhanden, man muss sich dort lediglich anmelden und kann dann nach Kontakten suchen (Abbildung 4).
Beim Erstellen einer neuen Nachricht bieten die Jabber-Clients zwei Alternativen an: Message oder Chat. Messages gibt es mit und ohne Betreff, in beiden Fällen schließt sich das Eingabefenster nach dem Absenden. Bei einer eingehenden Nachricht öffnet sich ein neues Fenster oder es ertönt ein Erinnerungssignal. Bei einem Chat bleibt dagegen das Fenster geöffnet und die Texte der Gesprächspartner laufen automatisch in dasselbe Textfeld (Abbildung 5).
Fazit
In den letzten Jahren hat Jabber einen enormen Zuwachs an Usern verzeichnet. Das System ist inzwischen eine ernst zu nehmende Alternative zu den proprietären Varianten. Mit ein wenig Konfigurationsaufwand kann man schnell seinen eigenen Server zum Laufen bringen und dank des modularen Aufbaus ist es leicht, zusätzliche Features hinzuzufügen. (fjl)
|
Infos |
|---|
|
[1] Jabber Software Foundation: [http://www.jabber.org] [2] Downloads: [http://www.jabberstudio.org] [3] Alle Clients: [http://www.jabber.org/user/clientlist.php] [4] MJabber: [http://www.mjabber.com] und Movial IM Jabber: [http://www.movial.fi] [5] Jabber for wireless Terminals: [http://jpt.jabberstudio.org/] [6] TCK-Jabber: [http://www.thekompany.com/embedded/tkcjabber/] [7] “Gartner Says Free Instant Messaging will be Found in 70 Percent of Enterprises within Two Years” (Pressemitteilung): [http://www.gartner.com/5_about/press_releases/2001/pr20011011a.html] [8] GNU Portable Threads (Pth): [http://www.gnu.org/software/pth/] |

Abbildung 4: Bei der Suche nach den Kontaktdaten eines Bekannten ist JUD, das Jabber User Directory, die erste Anlaufstelle. Es enthält die Daten von Jabber-Anwendern, die ihre VCard dort abgelegt haben.

Abbildung 5: Unterhaltungen per Text-Chat sind auch mit Jabber sehr einfach. Statt einzelne Nachrichten zu senden, sammeln die Clients die Texteingaben der beteiligten User – farblich unterschieden – in einem Fenster.
|
Der |
|---|
|
Nico Lumma ist Leiter der Technikabteilung bei der Orangemedia.de GmbH. Er arbeitet gerade an der Umsetzung einer größeren Web-Community mit Jabber als Basis. |






