Three years later, a new Psi
The latest development cycle has been a tough one. While Psi releases have never been exactly punctual, the time gap between 0.14 and 0.15 is surely the longest yet.
It’s easy to blame this long cycle on my inability to contribute much since early 2010, but it’s not as if contribution in general was lacking. The Psi+ project has remained steadily active, and a couple of years ago we gave commit access to Sergey (Rion), one of the Psi+ founders, and then later on to Khryukin (Dealer_WeARE), another Psi+ developer. Together, they have been merging changes upstream from Psi+ to Psi all this time. I’m amazed at their dedication, having maintained both repositories for years even though Psi had no clear roadmap or release plan. They are choosy about what to merge, too. Many traditional Psi users regard the Psi+ application as a scary patchfest, but the Psi+ developers are no fools. Sure, they enjoy a bleeding edge app, but they also know what’s ready and what isn’t, and only the stuff that is ready finds it way back into Psi. For better or worse, Psi+ is where the action is, so get used to their code being the basis of new Psi releases.
This isn’t to say there haven’t been non-Psi+ contributions to 0.15. A big one is TURN proxy support for voice calling. You can set up a TURN server, and finally put an end to voice call connectivity problems. This feature was actually implemented just after Psi 0.14 was released, back when I was working at Barracuda Networks. Finally it sees the light of day! Additionally, Michail (mblsha) merged his rewritten contact list code. It uses the Qt 4 model stuff. You can select and drag multiple contacts now, and it should be a lot faster too. This new contact list code, along with some other changes (like the rewritten history window), helped us transition away from Qt3Support at long last. This was primarily important so we could compile against the Cocoa version of Qt/Mac. Of course it’s also nice to be relieved of having to link to unnecessary libraries like QtSql. Either way, it’s about time we officially got off of Qt 3. Seriously. Qt 4 has been out for like 7 years, and Qt 5 is just around the corner. Seeeeriously.
So if we’ve had features in the queue and regular contribution, why the hold up? Well, the real reason it has taken so long to get 0.15 out the door is because making a Psi release is just plain hard. Particularly with the introduction of GStreamer as a dependency since 0.13, a considerable amount of compilation judo is needed to produce official binary packages. Psi has some 20 dependencies. Keeping these current, and producing builds for both Windows and Mac takes more than a passing familiarity with the project. We got by when I was at Barracuda because it was my day job to make this stuff happen. I was also provided various build machines. These resources are now gone (which included a PowerPC Mac, which is one reason why Psi 0.15 is not available for PPC, not that anyone cares). In order to produce Psi builds again, I needed to recreate the environment I had at Barracuda. Actually, I needed to do it one better: I needed to automate as much as possible so that not only Psi but dependencies could be maintained using minimal brainpower. It needed to be possible for me to push a single button and get a release, with no arcane steps that I’d soon forget the moment I switch focus away from Psi.
In March of this year, I set out to build this magical solution. The result is a new repository, psideps, which handles the building of dependencies, as well as some additional scripts in Psi’s own repository to simplify building Psi itself. It’s all a bunch of bash scripts and makefiles, and fairly straightforward. The devil is in the details though. Most dependencies required patching to build properly, and a lot happens in three years. Growl went payware. Ndhotkeyevent only built with clang. Glib atomic operations got broken on Mac. GStreamer had some critical regressions. Build patches were numerous. Psideps has 24 .diff files, and that’s not even including any ad-hoc sed crap I do to some of these packages. My favorite patch is the one where I slow down certain configure scripts (by injecting sleeps) because they execute too fast on MinGW and cause random failures. Also, people expect 64-bit builds these days, so the scripts do multiple passes, and of course all that fun install_name_tool stuff in Mac’s case. It’s not like all dependencies built cleanly in 64-bit either. I mean, that would have been too easy. Getting this all correct took patience. Builds take a long time, especially in VMs. Suddenly, the Windows build of some dependency breaks. I fix that, but in the process break the Mac build. No wait, it’s only the 64-bit pass on Mac that I broke, so I’ll need to fix in a way that doesn’t break 32-bit. This is build failure whack-a-mole. Rebuild again. Wait 30 minutes again. Curse all of these dependencies of which I am not an author… again. Finally, everything builds in every combination and there is harmony. All in all, it was a lot of time spent, and hardly any of it was on Psi itself. I did use the past couple of weeks to shake out bugs and get Psi into a release quality state, but all other time since March was put towards build automation. I am quite sick of watching compilations at this point. However, this work was hugely important. The notion of building a Psi release has gone from something completely unapproachable (by its own founder!) to something one might do while sleeping.
Lately I’ve been wondering where to go from here. Originally, Psi was created to suit myself and other IM geeks. It became a bit more than that, though, inadvertently becoming a flagship XMPP client of sorts, and there were a run of sponsored forks promising greater user-friendliness. I’d like to think Psi helped further open IM in general, and for awhile this was my major motivation. However, nowadays XMPP is everywhere, and implemented in some pretty amazing clients. Most people I know use Adium, iChat, Pidgin, Gmail, etc. Empathy/telepathy is taking over desktop Linux. What role does Psi play in this world, where XMPP has already won? I’m happy to report that since 0.15 Beta 2, Psi has already been downloaded over 8000 times from SourceForge. That’s in just two weeks. I guess the role it plays is an app that many people seem to like. :) Perhaps that is good enough, and we can put the MSN-looking forks and world domination plans to rest. Psi has its niche.
Even after all this time, I still love hacking on Psi, and the challenge has always been balancing it among my other responsibilities. Now that we are on track to be able to produce releases again, I hope we can return to a routine again of releasing semi-regularly, even if it continues to just be patches from Psi+. ;)
Enjoy.