Jabber is an XML-based, open-source system and protocol for real-time messaging and presence notification. The first application of Jabber is an instant messaging (IM) system similar to AOL Instant Messenger, ICQ, MSN Instant Messenger, or Yahoo! Messenger. However, Jabber is also being applied in the realms of wireless communications, embedded systems, and Internet infrastructure.
The Jabber.org Project was started by Jeremie Miller in early 1998. The first public recognition of the project appeared at Slashdot on 1999-01-04.
There are about a dozen main contributors to the Jabber.org Project, although many more people help out by writing Jabber clients, testing, and so forth. An incomplete list of contributors is available here.
Well, we would definitely like to support cool technologies like SMS, wireless devices, and embedded applications. We're also excited about the rapidly-evolving peer-to-peer space, and are working to make Jabber more of a true peer-to-peer application, e.g. through the Jabber-as-Middleware (JAM) project. Security and privacy are extremely important to us, which is why we'd like to build on our already-strong commitment in that area (e.g., full PGP/GPG support is built into several major Jabber clients). The ability to use Jabber over http would be a good thing, so we're working on that, too. If you have suggestions for other functionality, feel free to email us via info@jabber.org. See also the Help Wanted section of the Jabber Dev Zone website.
At the 1999 O'Reilly Open Source Software Convention, Jeremie got to talking with some folks from Webb Interactive Services, a company building XML-based commerce software for the small-business market. Webb was interested in creating an XML-based messaging system, and instead of building it themselves they decided to support the Jabber.org Project. In March of 2000, Jabber.com was formed as a wholly-owned subsidary of Webb. Jabber.com has supported the project in many ways and has also hired many of the core developers, enabling them to work full-time on Jabber. Michael Bauer and Peter Saint-Andre have written a series of Jabber Essays exploring the relationship from the perspective of Jabber.com. While the addition of a commercial element is not without risk and tension, we believe that Jabber.com's support has enabled the Jabber.org Project to move forward much more quickly than it would have otherwise, and that our open source software has benefited from the software engineering and quality assurance practices in place at Jabber.com. That said, the Jabber.org Project is and will remain an independent effort that involves the entire Jabber community, not any particular commercial interest.
The Jabber open-source server software available on at jabber.org is covered under the Jabber Open Source License (see below for details). Jabber clients are available under various licenses; please refer to the documentation for your client of choice for more information.
1.7. What is the JOSL? Why did you create another open-source license? What does JOSL offer that existing licenses don't?
The Jabber Open Source License, or JOSL, is an OSI approved Open Source License that is very similar to the Mozilla Public License. For example, it enables developers to write additional modules without necessarily making those modules open-source, while at the same time ensuring that any modifications to the original sourcecode for the Jabber server are contributed back to the Jabber community for possible incorporation into the server.
The key difference between MPL-derived licenses (including the JOSL) and the GPL is that the MPL-derived licenses narrow their definition of derivative works, focusing on the actual source code files. By doing so, these licenses allow code to be linked to the original source code through modules defined in separate files without those additional modules being covered under the MPL as well - and without requiring that the linked software source code be made freely available. This gives software developers greater flexibility in how they license their Jabber-related software.
The full text of the JOSL is available on this site at http://docs.jabber.org/general/html/josl.html.
The main reason Jabber has not been involved with IMUnified.org is that we weren't invited and we never received replies to our inquiries. However, we strongly support open standards and hope that organizations such as IMUnified can develop some standards for interoperability between the member companies' systems. And if IMUnified publishes a spec for interoperability, we will certainly work to develop a transport/gateway that can communicate using whatever protocol they develop.
Jabber's open XML protocol was submitted as an RFC to the IETF's Instant Messaging and Presence Protocol (IMPP) working group on 2000-06-15. While our RFC was not accepted, it must be noted that the IMPP was not successful in its mission to develop an Internet standard. Because the Jabber.org Project is committed to open standards, we are actively seeking ways to pursue standardization for the Jabber protocol, and hope to have some results on that front in the next few months.
For links to news stories about Jabber, the best place to look is JabberCentral. If you're an end user seeking help with Jabber, check out the Jabber User Guide. Technical information can be found in the documentation area of this site.
Yes, we have translations into several languages. If you would like to contribute a translation, please contact Peter Saint-Andre via email or Jabber via stpeter@jabber.org.
Thanks for your interest -- there's a lot to do, so your help is needed! Check out the Help Wanted area of this site for ideas on what you can do.
So far you can use Jabber to talk with other people who are using Jabber as well as with users of other IM services (see below). You can also join IRC channels using Jabber. Before long you will be able to receive news headlines and get other useful information through your Jabber client, too.
You certainly can! Communications with other IM services are made possible by what we call "transports". So far we have transports to AOL Instant Messenger (AIM), ICQ, MSN Instant Messenger, and Yahoo Messenger, as well as IRC. We plan to add transports to SMS (Short Message Service, very popular in Europe) and other IM services in the future. See the Jabber User Guide for help setting up the transports in your Jabber client.
Unfortunately, for the last few months AOL has been actively working to block AIM subscribers who wish to connect to AIM through Jabber's AIM Transport. While jabber.org programmers have addressed these blockage attempts through various means (including updated versions of the AIM Transport), at this time some public Jabber servers have not yet installed the most recent versions of the AIM Transport (thus disabling communications with AIM), and even those servers which have installed the most recent versions may be experiencing intermittent communications to AIM. We apologize for the inconvenience and sincerely hope that AOL, along with all other providers of IM services, will work together for true interoperability.
The best place to download Jabber clients is http://www.jabbercentral.com/clients/. See also the Jabber client projects page in the Jabber DevZone.
Which Jabber client is best for you depends on what operating system you run and what your needs are. Some clients are farther along (read: more stable) than others, some offer more features, etc. Most developers would tend to recommend WinJab for Windows, Jabbernaut for MacOS, and Gabber for Linux. However, the best thing to do is to visit the clients page at JabberCentral and explore your options.
Here again, which server is best for you depends on your needs. The public server we run here at Jabber.org also functions as our development environment, so once in a while it experiences outages when other servers do not (however, it's been pretty much rock-solid since the upgrade to the 1.4 server). On the other hand, the Jabber.org server tends to have the latest and greatest features. :) The public server at Jabber.com tends to be fairly stable. You can find a list of public servers and their current status at http://www.jabberview.com/.
Recent versions of almost all of Jabber's "transports" to other IM services will now automatically import your contact list from the non-Jabber service when you register with the appropriate transport.
If your firewall administrators will open port 5222, you can use Jabber without any worries. If not, certain Jabber clients, such as WinJab, support the ability to talk through at least certain kinds of proxy servers (most often SOCKS servers). In addition, we are working on an http service that will enable you to use Jabber over the web. Unfortunately, it's not quite ready for prime time.
If you have questions about getting Jabber up and running or about using certain features, the best place to go for answers is the Jabber User Guide. You can also usually find immediate assistance in the jdev discussion room or the #jabber IRC channel.
Peter Saint-Andre usually takes care of these, so contact him at stpeter@jabber.org (email or Jabber). If that doesn't work, send an email to info@jabber.org.
You can change your own password by logging into your Jabber account and then sending the following XML (using the "XML Debug" or "Raw XML" feature of a Jabber client such as WinJab, Gabber, or Jarl):
<iq type='set' to='jabberhostname[e.g., jabber.org]'> <query xmlns='jabber:iq:register'> <username>username</username> <password>newpassword</password> </query> </iq>
Alternatively, you can ask a server administrator to do this for you.
You can remove your account by logging into your Jabber account and then sending the following XML (using the "XML Debug" or "Raw XML" feature of a Jabber client such as WinJab, Gabber, or Jarl):
<iq type='set' to='jabberhostname[e.g., jabber.org]'> <query xmlns='jabber:iq:register'> <remove/> </query> </iq>
Alternatively, you can ask a server administrator to do this for you.
The Jabber server is written in C. The JabberBeans library provides a Java interface to a lot of server functionality, and the Net::Jabber module will be of interest to you Perl hackers. Jabber clients are written in a variety of languages, including C++, Java, Perl, Delphi, PHP, VisualBasic, and Flash.
You sure can! The server code is available for free download on this site, with Jabber Server 1.4 being the latest stable version. Visit the Server HOWTO for installation and configuration instructions, and see below for FAQs related to the 1.4 server.
The Jabber server is developed on Linux but will run on just about any flavor of Unix, including Solaris, AIX, FreeBSD, and the like. It will not run on Windows NT or Windows 2000 at this time. However, there is an effort underway to create a native win32 version of the Jabber server, and there is a mailing list devoted to that project if you are interested in contributing; in addition, developer Jim Powell has been working to get the open-source Jabber server to run under Cygwin -- visit his page at http://gsetss.dnsalias.org/JabberServer/ for details (see also http://www.jabcast.com/, which is developing a commercial Jabber server on win32).
Yes, XML is "heavier" than plain text or some binary format. But we think the benefits of XML -- structured data, open formats, extensibility -- outweigh the somewhat greater packet size. In addition, much of the point of Jabber from its earliest days was to build an XML-based messaging system. It's something of our raison d'etre, and we're not about to give it up. :)
Part of the design philosophy for Jabber has been to move complexity to the server, thus making it easy for client developer to create their clients and easy for server administrators to add new functionality without requiring massive client updates. However, since the Jabber server is relatively small (especially if only Jabber-native communications are desired), it can be embedded in devices so that each machine has its own Jabber server, thus moving Jabber closer to a peer-to-peer model.
Funny you should ask, because one of the hottest areas of development in the Jabber world right now is the Jabber-as-Middleware project, also known as JAM. We definitely see Jabber fitting in rather well as a vehicle for discovering services, authenticating sessions, reliably delivering XML packets containing service requests and responses, and notifying senders that their packets have been delivered. For more on JAM, check out the JAM Discussion Forum or sign up for the JAMDEV mailing list.
We are working a process for incorporating enhancements to the Jabber protocol and hope to have some processes and tools in place for that soon. In the meantime, the best place to bring up protocol issues is the JDEV mailing list.
No. You can make your Jabber client available under any licensing that works for you, although we certainly encourage client developers to consider the benefits of open source development. If you are interested in creating a Jabber transport or server module, it is possible but not likely that you may need to make it open source (depending on what libraries you use -- e.g., suppose that your hypothetical NNTP Transport is built on top of the mythical libnntp library, which is GPL'ed ... the terms of the GPL might require that you make your NNTP Transport GPL as well). If you have any questions about licensing, feel free to contact us via info@jabber.org.
You might want to check out the documentation area, specifically the Jabber Technology Overview and the Jabber Protocol Overview. For questions about installing, configuring, and administering Jabber servers, check out the server howto or send an email to the JADMIN mailing list. The best places to ask questions about technical aspects of the Jabber project are the JDEV mailing list and the jdev discussion room. And as always, feel free to contact us via info@jabber.org. If you have ongoing needs for support, you might want to contact the folks at Jabber.com about their various support packages (contact them via email or Jabber at support@jabber.com).
Please see the Jabber Server 1.4 HOWTO for general instructions. The following FAQs address issues that are not included in the HOWTO.
As an admin user as defined in your jabber.xml configuration file, send either of the following bits of XML:
<iq type="get" to="yourhostname"> <query xmlns="jabber:iq:admin"> <who/> </query> </iq> or: <iq type='get' to='yourhostname/admin'> <query xmlns='jabber:iq:browse'/> </iq>
Comment out or remove the <service id="dnsrv"/> and <service id="s2s"/> sections of your jabber.xml file. Since now you don't have a server-to-server (s2s) component and can't do DNS lookups of other domains, any messages sent to other servers will be ignored. (You'll still see attempts to send messages to addresses at update.jabber.org whenever users log in, but those are just Jabber clients seeking information about the latest available version, and can be safely ignored.)
4.4. I keep seeing entries in my error.log about bouncing packets to update.jabber.org -- how can I stop these?
First, these are warnings, not errors, so don't worry: your server is running fine! However, your server can't connect to update.jabber.org, perhaps because you are behind a firewall. Packets destined for addresses at update.jabber.org are usually generated by Jabber clients that are looking for new versions of the software. You can prevent these packets from being sent by using a Jabber client (such as WinJab) that enables you to turn off the autoupdate feature. Alternatively, you can follow the instructions in the previous FAQ to prevent any outbound traffic from being sent.
The only ports you need to have open for basic Jabber operations are 5222 (for client-to-server) and 5269 (for server-to-server). If you want to run the transports, you'll need to open up more ports because they don't use 5222 and 5269. Here is a list of ports you need to open for transport functionality:
AIM Transport -- no incoming ports and the outgoing port is any random port (not specified in the configuration)
ICQ Transport -- UDP port 4000, TCP listening ports as determined by the <ports/> element in jabber.xml, TCP outgoing ports for client-to-client connections are determined by the ICQ client you're talking to and can't be easily predicted. If you're behind a firewall, use the <disable-tcp/> element in jabber.xml and open the UDP port. (Firewall support to get around this is forthcoming.)
IRC Transport -- TCP port 6667 (in rare situations you'll need to open some other port if that's what is used by the IRC server you're connecting to)
MSN Transport -- TCP port 1863
Yahoo Transport -- TCP ports 5050 and 80
4.6. I get a message saying "Jabberd is unable to listen on ports 5222 and 5269" -- how do I fix that?
You need to add specific bindings to the IP address rather than binding to null. In the <pthcsock/> section of your jabber.xml file, change <ip port="5222"/> to <ip port="5222">yourIPaddress</ip> and in the dialback section of your jabber.xml file, change <ip port="5269"/> to <ip port="5269">yourIPaddress</ip>. Also, if you are having binding problems, with the 1.4.1 server you can add a <bind>yourIPaddress</bind> element to the <io/> section in your jabber.xml file.
Comment out or delete the <register/> section of jabber.xml as well as the <mod_register/> line of the <load/> section. However, please note that there is a known bug in 1.4final which prevents this from working, so you will need to get the CVS version of the Jabber server. To do so, follow the instructions in the Quick Start with CVS document and get the 'jabber2' module.
This is a known bug in the 1.4 server. Keith Minkler created a patch for this, which he posted to the JADMIN mailing list. This fix is included in the 1.4.1 version of the server. Finally, you might want to check into using the daemontools package.
Yes, the protocol changed with the 1.4 server. For details, check out the groupchat roundup put together by D.J. Adams.
4.10. When I try to start the server, I get an error that "Configuration parsing using jabber.xml failed" -- what's the solution?
There are actually two reasons why you might get this error. One is that the file you're pointing to doesn't exist; to solve that you might want to point to the exact location of the file, e.g. by typing './jabberd/jabberd -c /path/to/jabber.xml'). The other is that the file exists but has an XML error in it; the solution here is to fix your XML -- for help with that, you can paste your whole jabber.xml file into the handy XML Syntax Checker at xml.com.
4.11. I set everything up correctly but when I try to send messages I get a "sending name is invalid" DNS error -- what's up?
Your server is probably set up correctly but your DNS is not. Can you ping your jabber server? You might want to talk with the folks who take care of your network and/or hosting and make sure that your server name has a valid DNS entry.
The server is limited by the number of socket connections possible on your system and the select() method in GNU pth (which the 1.4 server uses for threading). E.g., on a standard Linux machine you'll be limited to 1024 simultaneous socket connections without kernel tweaking. There are currently efforts underway, in concert with the Open Source Development Lab to improve the scalability of the Jabber server.
The Jabber 1.4 server stores session and other information in a file named record.log, which is created in the root jabber directory (e.g., /usr/local/jabber/ or wherever you installed the server). E.g., the lines containing "session end" give you information about user sessions, specifically the number of seconds in the session, the number of packets sent, and the number of packets received by that particular user.
First, you need to compile SSL support into the server, so type './configure --enable-ssl' when you compile the server software. Then generate your SSL certificate, which you can do using the script that Thomas Muldowney posted to the JADMIN list. Finally, change your jabber.xml to include configuration information for SSL. The relevant sections of jabber.xml should look something like this:
<pthcsock> ... <ip port="5222"/> <ssl port="5223">your-ip-address</ssl> ... </pthcsock> <io> ... <ssl> <key ip="your-ip-address">/path/to/cert.pm</key> </ssl> ... </io>
Note that there is an XML error in the jabber.xml file that's included in 1.4final. Within the <pthcsock/> section it has an opening <ssl> tag followed by a closing </ip>, so make sure to fix that or you'll get a "Configuration parsing using jabber.xml failed" message.
4.15. I'd like to manipulate the user.xml files in the spool/ directory with some scripts -- is there any danger in that?
Since these files are straight XML text, it's safe to use scripts to make changes to them or create files for all of your users. However, be aware that the XDB component caches these files as a default setting, so you'll want to disable caching if you're going to change user.xml files. You do this by setting the timeout value to zero:
<xbd_file xmlns="jabber:config:xdb_file"> <spool>yourspooldirectory</spool> <timeout>0</timeout> </xbd_file>
Step 1 -- modify your jabber.xml server configuration file to include an administrative user with write privileges in the <admin/> section of the config file:
<admin> <write>some-admin@yourserver.com</write> </admin>
Step 2 -- create that administrative user account via a standard Jabber client (or by creating that user.xml file in the spool directory).
Step 3 -- log in as that administrative user with a Jabber client that enables you to send raw XML (e.g., WinJab, Gabber, or Jarl).
Step 4 -- send the following XML:
<message to="yourserver.com/announce/online"> <body>This is a broadcast message!</body> </message>
If you will often send such messages, you can add "yourserver.com/announce/online" to your roster (although that address obviously won't accept your subscription) and then just send plain messages to it without having to type the raw XML. This enables you to use any Jabber client you please.
As an admin user with read privileges (see previous question), send the following XML:
<iq type='get' to='yourjabberhostname'> <query xmlns="jabber:iq:admin"> <who/> </query> </iq>
A user can change their own password by logging into your Jabber server and then sending the following XML:
<iq type='set' to='yourjabberhostname'> <query xmlns='jabber:iq:register'> <username>username</username> <password>newpassword</password> </query> </iq>
Alternatively, if you are an admin of the server, you can look up the user's password, log in as them, and then send that XML yourself (e.g., if you think that your users will not be able to send raw XML themselves).
A user can remove their account by logging into your Jabber server and then sending the following XML:
<iq type='set' to='yourjabberhostname'> <query xmlns='jabber:iq:register'> <remove/> </query> </iq>
Alternatively, if you are an admin of the server, you can look up the user's password, log in as them, and then send that XML yourself (e.g., if you think that your users will not be able to send raw XML themselves).