Comparison of the source code of four different XMPP clients

In a Matrix vs. XMPP discussion a few months ago, somebody mentioned that the XMPP clients look old-fashioned, not like a modern messenger. I was wondering if it might be the source code that prevents people from beautifying well-known desktop XMPP clients, if such efforts seem necessary. So I took a brief look at the source code of Gajim, Kopete, Pidgin and Psi to see if it is well-structured, documented (source code documentation) and if the source code is organised in a way that would make a redesign of the GUI or improvements in general easy. The results:

1. Gajim:
The GUI is defined in XML files (probably for GTK), so it should be it easy to redesign the GUI itself with a designer. Gajim uses Python which is fairly well-known and can be used for big projects like an XMPP client. The source code could need more structure to make it more clear which files belong to the GUI and which belong to other parts of the program. Lots of source files lack source code documentation.

2. Kopete:
The GUI definition is placed in XML files (for Qt), so redesigning the GUI is probably not an issue. The files in the "kopete" subdirectory lack source code documentation, some files in the "plugins" and "protocols" subfolder have some documentation. The files I viewed from the "libkopete" subfolder have lots of documentation: The classes and their methods are well documented in the header files and even in the source files you will find hints what a block of code is doing. The code in general is well enough structurised to quickly find out where to look for a specific source file. Using Qt-C++ as programming language surely is helpful with such a big project.

3. Pidgin:
If you know that Pidgin's core functionality comes from the libpurple library, then it is easy to guess where to look for internal stuff: the "libpurple" subdirectory. The GUI code is placed in the "pidgin" subdirectory and the definitons in a subdirectory called "resources" which I find unintuitive ("gui" would be better). Pidgin is written in C. The source code in both the "pidgin" and the "libpurple" directory is very unordered since most of the source files are directly placed below these folders. Only protocols, plugins and some other parts get their own subfolders. Header files often have function documentation blocks, but in the corresponding source files you have to search for comments that explain what the code is doing. I can imagine that writing such a big project entirely in C can make it complicated for people new to the project to write good code.

4. Psi:
Where is the gui code? Ah, it is in the "src" subdirectory, together with the rest of the source code. At least the GUI definitions are stored in XML files (for Qt). But there is only this flat directory with all source files. This can make it hard to figure out where to look for specific functionality. The source code is in Qt-C++, but lacks documentation, both in header an source files. The coding style differs and seems to be chaotic sometimes. In general, I consider that bad code quality.

Pidgin and Psi have big source code quality problems that can make it hard for new people to improve things. Gajim and Kopete on the other hand seem to be good candidates for that. But both could require more source code documentation.

# # # # # # # # #