10 Years in KDE – A Retrospective

(or: “Accidental Autobiography”)

Can you believe how time flies? Today, ten years ago my first ever KDE patch was merged. A little while later I was granted KDE developer rights with write access to all of KDE’s git repositories. This power was somewhat frightening, after having submitted not even a hand full of patches at that time, and it actually took many years for the thrill of hitting Return on a “git push” to abate. Let me take this decennial as an opportunity to tell you stories from back in the days™ and how I ended up where I did, where I surely would not be without KDE!

A box cake with blue icing, in its tin, "20 years of KDE" written on it
Let’s have some cake, too!

I actually started writing on this blog post last December, to have plenty of time for collecting trivia and ideas, never before seen prototype screenshots, and more. I surely wouldn’t have thought this to turn into half an autobiography. Mind that I’ll try my best to verify the statements that follow but they can still be inaccurate or skewed from being just memories. Now grab a cup of your favorite beverage, sit back, and join me on this trip down memory lane.

My earliest recollection of using KDE was in 1999 on SuSE Linux 6.1. Back when the “KDE Desktop Environment” was the actual product name, which is why you still hear people say “I use KDE 5” today. I still fondly remember how it had an isometric K for its start button rather than the gears logo we know and love today. I was also quite fascinated by the green and blue, depending on your edition, crystal formations on SuSE packaging – the physical cardboard boxes, that is. You could even find those 2 kg boxes that featured a tome of a manual and several CD-ROMs at your local electronics store.

I still used Windows as my main operating system, though, originally Windows 95 and Windows NT 4.0, later Windows 98 because a video editing software I wanted required it, and finally Windows XP, which would be the last Windows release I used on a daily basis. I occasionally toyed around with later SuSE releases, I went to 6.4 and then 7.1, which was the first one to come on a DVD. We didn’t have a DVD drive back then, so I had to put up with the 7 or so CDs it came with. For some reason I don’t remember we had to reinstall the system several times and at some point we created a backup copy of the first CD, and as if we had known, it actually shattered in the drive on the next installation attempt.

Pieces of a shattered green SuSE Linux 7.1 Professional CD
What’s left of that SuSE Linux 7.1 CD of mine

At some point during the KDE 3 days I managed to wipe my hard disk while playing around with “dd” and was so upset that it didn’t warn me that I was about to override my “/dev/hda” with zeroes (hello, sudo!), that I turned my back on Linux for a while. I still had it running on my second PC but my main one was Windows XP only – after restoring a backup. Still, some school project I was tasked to do over the summer holidays was irrecoverably lost.

Going Linux full time

It wasn’t until July 2009 that I made the switch to Linux full-time. My computer was giving me random blue screens quite frequently and at some point I was so done with it that I just wiped the hard disk and installed Linux on it: Kubuntu 9.04 with Plasma 4.2.2 it was. I actually missed that whole 4.0 debacle, and from what I heard, I might not even be around now if I had :-) I just remember reading an article about 4.0 on heise, thinking “gosh, that black panel is horrendous.”

When Kubuntu wasn’t any more stable either, I thought to run a memtest, et voila: one of the RAM banks had gone bad, resulting in recurring page faults. At that point, however, Windows was already gone and I tried to just deal with the new operating environment. I believe that might actually have worked… Immediately I started tinkering with it, enabling backports repositories, and trying out beta releases. Reading Planet KDE became part of my morning routine, checking out what all those talented people came up every day. I’m sure many others out there are also being inspired by those blog posts, and I feel guilty for not blogging a whole lot more! One post I distinctly remember was about a rewritten Widget Explorer, albeit apparently from a later date than I thought it was until I just looked it up.

At this point I already had a 24″ monitor (16:10! Before that 16:9 plague took over consumer monitors) and that ATI All-in-Wonder Radeon 9000 with 64 MB of RAM just wasn’t able to run Compiz, Emerald, and whatever else was hot at the time, smoothly, and I never managed to get its analog TV tuner working on Linux either. Eventually, I got myself a shiny new computer with a Core i5-750 and I started playing with kdesrc-build, remotely monitoring its progress from school on my first Android smartphone, looking at a terminal window on my desktop via VPN because, hell, I had no idea SSH was a thing.

A virtual machine window with an early Plasma mobile UI: a status bar with clock, battery, signal strength at the top, a contact list in the center, and app shortcuts at the bottom
Toying around with Plasma’s first mobile shell

I also wanted to contribute to KDE but all I had programmed with before was Visual Basic, QBasic, BlitzBasic, and PHP – I surely didn’t know anything about C++, so I started by filing bug reports. One of my earliest bug reports I found was actually about notifications, go figure. Later I joined the German translators to whose mailing list I am still subscribed today and I occasionally send them bugs, but honestly I just can’t be bothered to use SVN anymore.

My first patch!

I’ve always been a visual person, wanting to provide a graphical user interface for the things I did, but since I didn’t know any of the programming or scripting languages needed to bring up a proper dialog window, I wrote horrible Bash scripts, with kdialog to provide some kind of graphical user interface, and I was a huge fan of the “–passivepopup” option resulting in a Plasma notification popup. I start to see a pattern here! The “–icon” command line argument affected the application’s windows, such as message boxes, but the notification popup was hard-coded to a generic “dialog-information” icon.

I can’t actually recollect how I wrote the patch or built it, where I looked for how to provide a patch – KDE was using Review Board back then, so the process has changed a lot in the meantime, but documentation has improved, too. Today we have a wonderful Get Involved page on our Wiki, and you don’t necessarily have to write code, there’s lots of other fun ways to contribute! It took me a while to find the original commit as I totally forgot it was actually committed by Christoph Feck. It wasn’t until my second patch (I think) that Aaron Seigo nudged me to apply for a developer account.

A dialog box titled "Login – System Settings Module" with a single check box labeled "Fade to black (fullscreen splash screens only)"
I bet you didn’t know this option existed

Browsing through the unmaintained projects history on GitLab shows that I was a lot more active that summer than I remembered. For instance, fascinated by logging into Windows 7 on a friend’s new computer, I added an option to KWin’s login effect to let KSplash fade to black and then to the desktop rather than slowly dissolving (the transition also used to be a lot slower, as in 2 seconds or so, than it is today). The option ended up not turned on by default as it was deemed too big of a break in visual continuity from login screen to desktop or something but the option still exists today, and I even kept it when I ported the effect to JavaScript two years later.

In July I attended my first KDE event, the KDE 4.7 release party in Karlsruhe. It’s when I met some of the people behind KDE for the first time: Lydia Pintscher, Martin Flöser, Sput, Torch (RIP), and a few others. Needless to say, we all sat there at a long table in a corner at Vogelbräu with our laptops out, and Torch showed how he could change virtual desktops by tilting his laptop, using the HDD’s fall damage protection accelerometer to trigger that. The next month I did a family roadtrip on the North American East coast, and I still recall sitting on the bed in a motel somewhere on the outskirts of Montreal watching an interview by Martin (on my newly acquired and later banned Samsung Galaxy Tab 10.1) about KWin on the Road to Wayland during the 2011 Desktop Summit in Berlin.

Drawing bars in Inkscape

Later that year I began studying computer sciences and if you decide on which university to actually go to on the very last minute, it’s surprisingly hard to find an apartment, duh. This meant I spent my first semester in a shabby Autobahn motel, 45 minutes away from uni by car, or like three hours by public transport.

The smartphone revolution still felt pretty much in its infancy, the Nokia N9 was still a thing, I was still using my first ever smartphone, and Android just learned to do hardware-accelerated 2D painting on phones with Android 4.0 released in October. Free Wifi wasn’t as ubiquitous as it is today and my apartment did not feature any Internet connection whatsoever. Mobile reception on the Autobahn in the middle of nowhere can still be a challenge in Neuland today but I managed to find a carrier which got me a decent 3G connection using a USB modem stick. For maximum coverage, I plugged it into a USB extension cord and stuck it to a window.

Inkscape (vector graphics editor) window with WiFi and mobile broadband signal strength bars being drawn
Drawing a million signal strength bars in Inkscape

To be honest, I did not expect that it would just work under Linux. However, once I plugged it in, Plasma prompted me for the PIN and after selecting the correct carrier from a list of providers, I was well under way. This is when I noticed the Network Manager icon in the panel would just show a generic cell phone icon when connected via mobile broadband but I wanted signal strength bars like on my phone. Patching the network applet itself was straightforward but now I had to fire up Inkscape and draw a few dozens of signal strength bars for GPRS, EDGE, UMTS, from 0%, 20%, 40%, etc. Of course I had no idea you still had to pixel-align lines in an SVG to make 1 unit lines render crisply but my patch was accepted nonetheless and there was no VDG as we know it today to point out the blurry edges, so I quite proudly sat there in my room moving my antenna about, rejoicing at the signal bars fading in and out.

Obsessed with pixels

I failed to recollect what I actually did in 2012 and git history confirms that I wasn’t very active in KDE at that time. My highlight of that year was the KDE 4.8 Release Party in Karlsruhe in January, though. This time I didn’t have to drive home for the night but slept on Sput’s couch and after returning from the bar we spent the rest of the night watching StarCraft 2 replays. A while later I “Joined The Game” and set up a recurring, tax-deductible by the way, donation, to the KDE e.V. to help support my favorite open source community. In Summer I bought one of those newfangled Ultrabooks, an Asus ZenBook, which came with a FullHD screen – if you ever wondered where my obsession with pixels came from, this was it. Qt didn’t gain proper high dpi scaling support until Qt 5.4 so I started an effort to address bugs with large fonts caused by hard-coded layout and icon sizes throughout KDE libraries and applications.

A blue game piece with KDE logo sitting ontop of a blue cardboard box with KDE logo on it and behind it a silver credit card sized sheet reading "KDE e.V. Supporting Member"
Joined the Game™

As part of that I set out to fix the icon sizes in the icon dialog to follow your preferences. Partway through I realized I might as well clean up the code base and revamp its UI entirely, as the dialog still looked exactly from when I was a kid toying around assigning all sorts of icons to random folders on the system, which disappointingly didn’t show up when I booted back into Windows. Unfortunately, there’s quite a few different modes and flags the dialog supports; add to that complexity of custom Qt item view delegate painting and, I think, a looming feature freeze in preparation for KDE Frameworks 5, and I just never finished it. I still quite like the UI I came up with, so feel free to take it as an inspiration and rewrite the damn thing already!

A icon selection dialog window titled "Select Icon" showing a 6-by-3 grid of large icons
Never completed icon dialog rewrite

Batteries and more!

2013 was the year I really got sucked into this KDE phenomenon. I did an apprenticeship at a web design agency but didn’t want to use their iMacs so I did BYOD before it was cool. I consider myself quite lucky to have been able to use Plasma on all the jobs I’ve had so far, apart from temporary project assignments, which were actually a welcome change to check out what nifty features I could steal get inspired from for Plasma.

Obviously, I needed an external mouse to work, so I paired one of those dreadful Bluetooth Apple Magic Mice they had lying around in the office with my laptop. That’s when I noticed that it was actually reporting its battery status to the system. However, Plasma could not cope with the fact that there were two batteries present, only one of which actually powered the system: it would take the average of laptop and mouse battery and display nonsensical charge percentage in the panel. I naturally couldn’t accept the fact that OS X could handle that but “we” couldn’t.

I learned that UPower added an “is power supply” property that indicated whether a battery was actually powering the device or merely reporting status of a connected peripheral, which I added to KDE’s Solid hardware abstraction framework – of course accidentally breaking ABI and builds for any other platform than Linux in the process. After cleaning up the mess I made I then patched Battery Monitor to handle those devices correctly as well as have PowerDevil’s (Plasma’s power management service) “low battery” calculation take this property into account. Furthermore, I also added a dedicated notification to warn when your mouse or keyboard are about to run out of juice.

KDE Plasma 4.11 battery monitor popup prototype
One of the earliest screenshots of the new layout I took

Soon I realized the overall Battery Monitor layout could use some serious overhaul, and I began rewriting it basically from scratch, including the keyboard brightness support someone added to PowerDevil around the same time. I was a huge fan of Daniel Nicoletti’s work at the time and took inspiration from his then-new Print-manager applet: the battery list with its expandable details section was pretty much copy-pasted from it. KDE SC 4.11 to be released later that year was the final Plasma 4.x feature release, so I made sure my new Battery Monitor was in good shape for inclusion, or else it would have had to wait another year to see the light of day.

While I believe the layout fit Plasma 4 very well, it feels quite out of place on Plasma 5, having remained virtually unchanged from its initial release, compared to all the other applets that over time got polished as part of the KDE Consistency Goal. I would love to give it another complete overhaul at some point but so far I found none of the design suggestions people brought to me compelling. Finally, when KDE SC 4.11 came out in August 2013 I invited to a release party dinner in Stuttgart, trying to replicate the fun events I attended earlier. Alas, only two other people showed up. It was still a nice evening with good food and – of course – we had our laptops out and were playing around in VirtualBox with then-new Windows 8, giggling at its hideous non-intuitive Metro user interface.

Attending my first ever sprint

In December 2013 I stayed at Aaron Seigo’s place over the weekend and we visited Zürich Christkindlimarkt. They put up a massive Christmas tree decorated with Swarovski crystals in the platform hall of Zürich central station, alongside a bunch of christmas-markety boths. I believe I paid 8 CHF for a cup of Glühwi there. It was also the time KDE Connect was very new, so when Aaron left to visit his parents-in-law that Sunday, and called me to let him back in, I was perplexed to see a notification on my laptop that my phone which sat on the kitchen table was receiving a call. I just had both phone and laptop on the same WiFi network and the rest was magic – it truly felt like the future!

The next year, Alex Fiestas invited me to my first in-person KDE sprint in Barcelona’s Blue System offices in April 2014. It was the KDE Frameworks sprint during which important decisions, such as the rapid monthly release cycle, were decided upon. Having been my first real solo trip abroad, I was quite nervous. I will never forget that unease feeling of “how come my backpack is so light?” while waiting at the bus stop. It quickly dawned on me that I forgot to pack my laptop charger! USB-C power delivery is becoming ubiquitous nowadays but surely, not bringing that giant Asus charger brick (which is the most annoying thing on a sprint as it basically occupies three outlets on an extension cord) would have been a disaster. I lived close by that bus stop, luckily I was there early, and still had time to run back and fetch the charger. This was the day I started using checklists for everything.

When I arrived in the afternoon I met for the first time Alex Fiestas, David Faure, Kevin Ottens, David Edmundson, and others I can’t remember :) I believe I shared an apartment with Mark Gaiser and Alex Merry for the week. During the sprint I worked mostly on Solid again, trying to build a proper QML import and model for querying and enumerating hardware. However, I wasn’t very experienced with Qt yet and completely lost when the objects in my model, managed by a shared pointer in C++, would randomly disappear on the QML side when the ListView created and destroyed items as you scrolled through the list. That model was never finished in all these years but I assume the remnants of it can still be found in some abandoned branch in Solid’s repository.

An amusing coincidence was that a group of students from my former school was in town that week. I’ve been to Barcelona twice before from student exchange programmes, so I joined them for that obligatory visit to the Museu Nacional d’Art de Catalunya. Sunday morning I had to catch my flight back around noon but left the apartment a little late and then had huge trouble finding the right bus stop for the Aerobus at Plaza España, because of course it’d be opposite of where I arrived, or so I thought. Having missed two buses and the ride taking more than half an hour, time was running out. Naturally, when I finally got to the airport, there was a huge queue at the check-in desk. Fortunately, there had been a printer at the office, so I was checked in online already and got a sheet of paper with my boarding pass on it (I did not trust my phone with that sort of thing then) and arrived at the gate just as boarding was commencing.

My first Akademy

In Summer 2014 Jos Poortvliet persuaded me to sign up for my very first Akademy, KDE’s annual developer conference, in Brno, Czechia in September. Getting there was quite a chore, as I had to fly into Vienna and then proceed to Brno by coach. That bus departed every other hour but I didn’t want to risk missing it so I had to spend three hours at Vienna airport. I still vividly remember a thread on the Akademy mailing list about “bring your own toilet paper” and indeed the hotel we stayed at featured the roughest, grayest recycling tissue I have ever seen. The week was great fun with delicious food and made me wonder why I didn’t go to an Akademy sooner – make sure, whenever we can meet again in person that you, dear reader, go, too!

A wooden restaurant table with model railroad tracks on it, where a train would deliver beverages to people sitting at the table
Model train beer delivery

We have now arrived in the year 2015 where I will wrap up this post. This blog instance was set up in that year and from now on you’ll be able to follow my development on your own. While there are surely many more fun stories and anecdotes to tell, there has to be some material left for a sequel ;) I hope you enjoyed this history lesson and I can only encourage you to do the same, reflect on what you’ve achieved and tell the world, inspire others! Bhushan Shah once told me how some of my posts on Google+ years ago got him into KDE and can you imagine KDE and Plasma Mobile without him? I owe my entire professional career, pretty much all my debugging, and programming skills to all those talented people in the KDE Community. ❤

2 thoughts on “10 Years in KDE – A Retrospective”

  1. Inspirational post man! KDE has been transformational for so many of us, giving us a skills, a career, relationships and endless inspiration! Thanks for being part of the journey.

  2. Great read, thanks for sharing. Fun to see, that you changed the topics you were working on from time to time. Others start working on one topic and stick with it.
    Your are lucky that you are allowed to use KDE at your workplace. Since I left academia I am forced to use Windows. At least it makes me enjoy KDE in my private time even more.

Leave a Reply

Your email address will not be published. Required fields are marked *