OpenBSD Journal

g2k14: World of KDE4, Vadim Zhukov (zhuk@)

Contributed by pitrh on from the dragons or cogwheels dept.

Hot on the heels of a successful hackathon, Vadim Zhukov (zhuk@) wrote in with this report on his efforts:

I came to hackathon with a short but heavy TODO list:

1. Finish KDE 4.13.2 and prepare 4.13.3 (official announce to be done Jul 15);
2. Import at least some stuff from semi-official openbsd-wip ports repository to official CVS;
3. Fix the long-standing issue with kded4 constantly eating CPU;
4. Continue hacking on Samba 4.x;
5. Enable ext2fs in RAMDISK_CD for amd64.
6. Put in CVS some stuff under ports/infrastructure/ I've developed for last months.
7. Put in CVS the man-pages-posix port.

But in fact hackathon starts from meeting people you didn't met before. Given that the only OpenBSD event I was before was EuroBSDCon 2013, there were many new faces. I'm afraid that I didn't remembered everyone at once, but that's not because I don't respect them or their work and just due to my shortcoming. :)

So the hackathon started. Both me and kirby@ - another OpenBSD porter from Russia - sat in front of each other. And this was very helpful - he helped me with testing ext2fs kernel build and gave an idea about libinotify (see below), and I helped him in updating rawtherapee port.

My first hackathon commit was importing books/man-pages-posix port. This is a handy tool for developers, I received some positive feedback even before the port was imported. But this was not my work - a lot of invaluable input was given by schwarze@ and others. I learned many new things about mandoc, groff and pkg_create magic while working on this port. But, again, this was just for starting.

Most of the time I was sitting and doing four things, though: running make, tweaking patches, pushing them upstream and spamming landry@ with new ports. I should thank him again for his patience in this process. Thanks to his reviews we now have the following KDE4 software: Calligra suite, Digikam, K3b, Kdenlive, KDevelop, KMyMoney, KTorrent, Tellico and Yakuake (together with a couple of their dependencies like Eigen 3.x).

The only KDE4 ports left in WIP repository is audio/cantata: it has somewhat wry KDE4 integration layer, so I quickly loose interest in spending time on it, given number of audio players out there, including KDE ones. I hope Rafael Sadowski, who assisted me many times, don't feel offended. :)

The KDE 4.13.2 update part is boring and uninteresting. You have 200+ ports, you type 200+ times "make configure update-plist port-lib-depends-check package clean", you push some patches upstream, you're done. That's all. Really. Hard parts were initial work and making KDE3 and KDE4 co-exist; maintaining KDE4 is not that hard.

And then came a really interesting part related to kded4. If you're not aware of details, here they are. kded4, which stands for "KDE 4 Daemon", is an app started (usually) by kdeinit - i.e., either at the beginning of KDE session or together with first KDE app you run during any X session. This daemon hosts so-called KDE modules - if you seen services.exe on Windows, you'll get the idea, it's almost the same. Also, another function of kded4 is monitoring of system configuration files, especially MIME-related .desktop ones. When you install/configure/deinstall application, .desktop files are tweaked, either system ones (under /usr/local) or your personal (under $KDEHOME). Many programs, especially different desktop widgets (read: KDE menu and similar), are interested in notifications about such changes. Thus, kded4 monitors a couple of directories for addition/modification/removal of .desktop files.

This process was very ineffective on OpenBSD. And the reason is that kded4 internally uses KDirWatch, which defaults to inotify-based mechanism on Linux and to QFSWatch-based mechanism on other systems. It also supports FAM, but I already tried to use the latter once and I was unsatisfied. I started to think about implementing kqueue backend, and at this time I remembered kirby@'s work on getting in libinotify. Which is actually what I wanted - an inotify API based on kqueue. So I wrote a FindInotify.cmake which should work on both Linux and non-Linux OSes, tweaked a few #ifdef's in the code, rebuilt kdelibs... and here we are! kded4 checks files at startup and the remains totally silent!

Even more, this also helped to stop akonadi_maildir_resource eating CPU as well - it looks like, they suffered from the same problem. Two problems gone for the price of one! So libinotify was a really good deal. :)

Other things I finished at hackathon, were:
* New portbump(1) utility for port developers, in conjuction with sqlports it could save a lot of time on massive updates.
* Addition of TEST_ENV and ALL_TEST_ENV variables to TEST_FLAGS was not enough because some ports, like CMake-based (read: using Ninja) ones won't understand TEST_FLAGS at all
* Documentation for devel/cmake and x11/kde4 modules. I don't plan to document x11/kde module because noone is developing for it anyway, and there are enough people already knowing it well to maintain existing KDE3 ports.

Unfortunately, I didn't got time to hack on Samba4. There are tricky problems involving and compiler internals which I hoped to manage at hackathon, but you can't have it all at once. And KDE was my priority anyway.

On the bright side, I was involved in some discussions and tested a few patches flying around. And even in case of errors it made me happy that I can help other OpenBSD developers directly, which is usually problematic in my day life.

In conclusion, I want (need, should) thank Mitja Muženič & and Dijaski dom Tabor for hosting this wonderful event. It was my first hackathon and it's amazing how much stuff happened in a few days. And Ljubljana is such a lovely place... But I hope someone who knows English better than me would portray this cozy city and people there. Everything were excellent - thanks, thanks and thanks again!

(Comments are closed)


Copyright © - Daniel Hartmeier. All rights reserved. Articles and comments are copyright their respective authors, submission implies license to publish on this web site. Contents of the archive prior to as well as images and HTML templates were copied from the fabulous original with Jose's and Jim's kind permission. This journal runs as CGI with httpd(8) on OpenBSD, the source code is BSD licensed. undeadly \Un*dead"ly\, a. Not subject to death; immortal. [Obs.]