This Google Summer of Code was about adding Windows/MSVC support to Dino. Dino is an XMPP client, XMPP is decentralized instant messaging standard. It is written in Vala, a programming language that integrates well with the GNOME ecosystem.

The work was started by porting Dino to the Meson build system; previously, Dino used the CMake build system. Doing this would help the Windows porting efforts, as a lot of dependencies use Meson, especially the GNOME libraries. This porting was done in dino#1453 (plus a fix in dino#1500).

As the next step, a base Dino (without any plugins) needed to be built on Windows. This first involved problems with getting Vala itself to work, and then fixing a couple of code generation issues (vala!331, vala!335 and most importantly vala!345, not yet fixed vala#1483). Meson also posed a little problem, but it could be worked around (meson#2103 comment).

Afterwards, all the dependencies needed to be ported to Windows and made compatible with Meson. For many GNOME packages, this was already the case. Many were also already in Meson’s WrapDB, a dependency manager for Meson projects. Those that haven’t found a place in WrapDB were contributed there: gee (wrapdb#1094, wrapdb#1098), gdk-pixbuf (wrapdb#1156), gtk4 (wrapdb#1206), pango (wrapdb#1207), libadwaita (wrapdb#1208), nghttp2 (wrapdb#1221), libsoup (wrapdb#1222), glib-networking (wrapdb#1223), libpsl (wrapdb#1260), libsignal-protocol-c (wrapdb#1276), qrencode (wrapdb#1277).

Some upstream bugs were also filed (libadwaita#739, libadwaita#740, wrapdb#1179, libpsl#216) or pull requests created (libsoup!381, meson#12394, libomemo-c#9).

As GnuTLS doesn’t support building in MSVC, we decided to try to replace its use with OpenSSL. This also avoided porting the complicated-to-build gpg-error. For the most part, the porting to OpenSSL was uncomplicated, however porting the DTLS/SRTP2 handshake proved non-trivial.

All in all, the most important functionality of Dino (base, http-files, omemo) works on Windows now. It still lacks polish, for example installing doesn’t work in adequately on Windows yet. The results are currently in the pr_meson_windows branch. It’s missing support for audio/video calls due to the aforementioned difficulties with OpenSSL porting.

Additionally, the goal of supporting SCRAM together with keyrings was not reached.

I’d like to thank my two mentors fiaxh and mar-v-in without whom this wouldn’t have been possible. They were quick to answer me when I struggled with problems.

I’d also like to thank my mentoring organization, the XSF (XMPP standards foundation) and especially emus who represented it for me.