The XMPP protocol has many implementations in many projects, sometimes together with other protocols. Which implementation is the best to build up on. Among c open source implementations listed, jabberd14 and jabberd2, latter seems to be more recent, more widely adopted, and hence have better community support, so I played with jabberd2 for a while. Then I also looked at Java implementations. Openfire seems to be more complete than Tigase. It also has a company behind it, rather than a single developer. So currently I am using Openfire.
On the client side development I plan to continue implementing from scratch. Because client program is to be distributed to users and except LGPL opensource, using an open source code would require me to open my source as I had mentioned here. Still, when I am stuck about solving an issue, I can check how they had solved it in one of the open source clients. A well established XMPP client project is: Empathy but it is targeting Linux where as we target customers on Windows initially . LGPL is more common among softare libraries, and there are a few XMPP libraries with LGPL, I initially considered the only C++ one, QXMPP, but now I am using jabber-net and ported my C++/CLI client code to C# as well since utilizing examples for this C# library was easier when I coded in C# as well.
libjingle is a library implementing a useful extention of XMPP protocol, named jingle. Jingle is for initiating and managing peer-to-peer media sessions between two XMPP entities to be used for a wide variety of application types (e.g., voice chat, video chat, file transfer). Luckily, libjingle is made available under a Berkeley-style license, which means you are free to incorporate it into commercial software. Using libjingle, I won’t waste time on the obstacles I would face, like reverse NAT traversal problem I had faced with my own client. As an example, (as described here) libjingle already implements STUN to solve this problem.
Resources:
Comparison of XMPP and other IM Protocols
jabberd2 home page.
Developer documentation for jabberd2.
jabberd2 install guide.
jabberd2 architecture doc. Especially required database tables given at the end.
precompiled windows binaries and suse rpms.
All server implementations list from official website.
