Report from XMMS2Con

Thursday, February 25, 2010

The XMMS2 Team Hard at Work
Photo by Sébastien Cevey

Last weekend I arranged and participated in the first XMMS2Con. For those not familiar with XMMS2, it's a cross-platform Free software media player software suite that allows you to play audio files, manage your music libraries and more. Usually we do our yearly meetup at FOSDEM, but this year it wasn't possible for a couple of us to join, so I entertained the idea of a special meetup. We got a lot of things done and a lot of code merged.

First of all, we released the latest version of XMMS2, 0.7 DrNo, even before the Con started. This release was way overdue; in fact, it was nearly a year since our last release, 0.6 DrMattDestruction. We had a few reasons for the delay of the release — I think most of the people in the team are starting to feel the effects of their "real life." Some have become parents, others have been busy with work, school and other activities that have to take precedence over our love for hacking. But as always, when we get together and get to it, we get a lot of work done. I think I am not the only one to feel a bit energized and to come away with a lot of ideas that would be cool to see realized.

The most discussed topic on Saturday was GenIPC. What is GenIPC you might ask yourself? Well if you have been around and tried to write any XMMS2 bindings at any point you know that it involves a lot of manual labour for wrapping all the functions the server implements. GenIPC makes that effort less difficult. Our plan is to have the IPC definition in a XML file, which can then be used to generate the code for each binding. One of the benefits of this approach is that it will be easier to add new functions to all bindings. The other great benefit is that it will be easier to implement native bindings for all languages, since you only need to write the serialization and the code generator and the rest will be taken care of for you. Tilman Sauerbeck has done some great work with GenIPC and the server side of it was merged directly after the DrNo request. On Saturday Tilman, Anders Waldenborg and Henrik Gustafsson discussed a lot of improvements for GenIPC in order to allow for function overloading and default arguments. This work is now well under way and I hope to see it in the master branch pretty soon, since I want to convert native Qt4 bindings to GenIPC and also finish my Objective-C bindings.

The next big project that Sebastien Cevey and Daniel Svensson looked at was S4. S4 is our homegrown database backend that is supposed to replace the SQLite backend we have now. S4 was developed by Sivert Berg as a Google Summer of Code™ 2009 project. The rationale behind S4 is that we horribly misuse the SQL part of SQLite and force our datamodel into it. This mismatch leads to bad performance, lot of code overhead and so on. S4 solves this by introducing a datamodel that fits our use case a lot better. Preliminary tests show that S4 is a lot faster when you have a lot of entries in the database, in fact the only time it's slower is when you do advanced queries that use regex matching and that's slow almost everywhere. We will probably do some reworking so that we don't use regex, but rather globbing as we had with SQLite. I hope to see S4 merged soon.

We also discussed our participation in Google Summer of Code for 2010 and everyone was really looking forward to it. We discussed a lot of ideas that we could have propose as student projects and I think we have some really cool and interesting ideas coming up for 2010.

Thanks to everyone that came out. I had a great time organizing it and I am more than willing to do it again. I also want to make sure to thank Purple Scout AB for hosting us and Google for the fantastic Google Summer of Code program, that not only gives us cool code and good students but also money to spend on things like XMMS2Con.