Throwback Thursday: KDE 2 on SuSE Linux 7.3

“Do you pine for the days when men were men and wrote their own device drivers?”
– Linus T.

Throwback Thursday: KDE 2 on SuSE Linux 7.3

It was 1999 when I ran Linux on my personal computer for the first time. Like many others, I was coming from Microsoft’s Windows 98, which, at the time, was a bit of a mixed bag and was more performance-hungry than its predecessor. However, Linux was not love at first sight to me. The distribution I tried – which I had gotten from a free CD that was attached to a magazine – came with the GNOME 1 desktop and barely any tooling. Compared to Windows 98 it felt faster, yet a lot clunkier and… weirder, if that makes sense.

Over the coming months I kept going back and forth between Windows and Linux until eventually I stumbled upon a box at a local bookstore that read SuSE Linux 7.0:

Copyright https://dl.acm.org/doi/fullHtml/10.5555/364682.364705

For the time, the packaging and contents looked polished and comparable to the box releases of Mac OS X Server and Desktop – and superior to Microsoft’s Windows ME box. Not being able to afford the $70 at that time, though, I was stuck with my free magazine Linux distro and GNOME 1 for another year, during which SuSE released the 7.1 and 7.2 versions of their Linux distribution.

With the release of 7.3, I eventually got the chance to hop on the bandwagon and see for myself what all the fuss was about. The press release for SuSE Linux 7.3 back on October 2nd, 2001 – exactly 23 years and one day ago – read as follows:

Today, SUSE Linux, the international technology leader and provider of Open Source solutions, announced SuSE Linux 7.3, which offers high-end enterprise and standard desktop users advantages in security, stability and a greatly improved ergonomical user interface with new image, graphics and audio features. The release of SuSE Linux 7.3 confirms SUSE Linux as one of the maturest operating systems on the market.

As security becomes a higher priority among home and office users, SuSE Linux 7.3 responds by offering the possibility of a “Personal Firewall” straight from the installation process. A user-friendly graphical front-end allows easy firewall configuration. The resulting security makes it simple to protect your host or network against unauthorized access. Furthermore, SUSE"crypto file system" ensures that sensitive data is secure even if someone’s entire hardware is stolen. Stored data is only available in unencrypted forms, if the user has entered the correct password. SUSE Linux 7.3 also includes the mail scanner AMaViS (A Mail Virus Scanner) and PGP encryption for e-mail. SUSE YOU (YaST Online Update) ensures that the Linux system always stays up-to-date. Upon request, SUSE YOU connects to the SUSE ftp server and automatically installs the desired security updates and bug fixes free of charge.

New improvements for the desktop include KDE 2.2.1, the latest version of KDE’s highly ergonomical user interface. Other KDE highlights include file manager, Konqueror, which now displays file contents in thumbnail format, especially useful for images and graphics archives. The KDE graphical tool, Kooka, handles scanning jobs very quickly and the new print assistant guides the user safely through the protocol jungle of lpr and cups.

SuSE Linux 7.3 would become available twenty days later, on October 22nd, 2001, and would retail for $39.95 for the box with 3 CDs, 3 manuals, and 60 days of installation support, or $79.95 for the box with 7 CDs, 1 DVD, 5 manuals and 90 days of installation support. This is what the box looked like. Pretty fancy, innit?

With SuSE Linux 7.3 I got access to the latest and greatest in terms of open source software. Not only did it include the brand new Linux kernel 2.4.10, which featured a complete rewrite of the Virtual Memory Management subsystem amongst other things, but it also came with the K Desktop Environment, or KDE.

Boy oh boy, was that a solid piece of engineering. The desktop came with everything one could ask for back then:

Konsole: A terminal emulator with tabs

Konqueror: A file …

… and web (and FTP, and SMB, and …) browser!

KMail: An email client

Control Center: A central UI for configuring all things KDE

XMMS: A music player that really whips the llama’s ass

Calculator: A calculator!

Games: Not only Minesweeper and Solitaire

KDE Help Center: An extensive offline manual

And so much more! KDE 2 truly was peak Linux desktop back in the 2000s. Not only was it packed with features, but it was also pleasant to look at and work with. I often find myself thinking back to the good old times, especially when I’m struggling with yet another UsEr ExPeRiEnCe catastrophe that is a modern desktop, web, or mobile app.

The good old times?

Yes. I know what you’re thinking:

The good old times weren’t as good as you’re imagining them and it’s just your memory that’s tricking you.

I thought the same. Hence, I put my memory to the test: A little over a month ago I set up a KVM guest with SuSE Linux 7.3 and KDE 2 and played around with it every now and then.

First of all, let me say that I find it astonishing how 23-year-old software can still run without any issues whatsoever on modern virtualization. In case you’re curious, here’s the domain XML:

<domain type="kvm">
  <name>SuSE_Linux_7.3</name>
  <uuid>3999d686-7d81-42a7-afde-ca3f5ef36435</uuid>
  <metadata>
    <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
      <libosinfo:os id="http://redhat.com/rhel/7.1"/>
    </libosinfo:libosinfo>
  </metadata>
  <memory unit="KiB">1048576</memory>
  <currentMemory unit="KiB">1048576</currentMemory>
  <vcpu placement="static">2</vcpu>
  <os>
    <type arch="x86_64" machine="pc-i440fx-8.2">hvm</type>
  </os>
  <features>
    <acpi/>
    <apic/>
    <vmport state="off"/>
  </features>
  <cpu mode="host-passthrough" check="none" migratable="on"/>
  <clock offset="utc">
    <timer name="rtc" tickpolicy="catchup"/>
    <timer name="pit" tickpolicy="delay"/>
    <timer name="hpet" present="no"/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <pm>
    <suspend-to-mem enabled="no"/>
    <suspend-to-disk enabled="no"/>
  </pm>
  <devices>
    <emulator>/usr/bin/qemu-system-x86_64</emulator>
    <disk type="file" device="disk">
      <driver name="qemu" type="qcow2" discard="unmap"/>
      <source file="/var/lib/libvirt/images/SuSE_Linux_7.3.qcow2"/>
      <target dev="hdb" bus="ide"/>
      <boot order="2"/>
      <address type="drive" controller="0" bus="0" target="0" unit="1"/>
    </disk>
    <disk type="file" device="disk">
      <driver name="qemu" type="qcow2" discard="unmap"/>
      <source file="/var/lib/libvirt/images/SuSE_Linux_7.3-1.qcow2"/>
      <target dev="sda" bus="scsi"/>
      <boot order="1"/>
      <address type="drive" controller="0" bus="0" target="0" unit="0"/>
    </disk>
    <controller type="pci" index="0" model="pci-root"/>
    <controller type="ide" index="0">
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x1"/>
    </controller>
    <controller type="virtio-serial" index="0">
      <address type="pci" domain="0x0000" bus="0x00" slot="0x06" function="0x0"/>
    </controller>
    <controller type="scsi" index="0" model="lsilogic">
      <address type="pci" domain="0x0000" bus="0x00" slot="0x09" function="0x0"/>
    </controller>
    <controller type="usb" index="0" model="ich9-ehci1">
      <address type="pci" domain="0x0000" bus="0x00" slot="0x05" function="0x7"/>
    </controller>
    <controller type="usb" index="0" model="ich9-uhci1">
      <master startport="0"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x05" function="0x0" multifunction="on"/>
    </controller>
    <controller type="usb" index="0" model="ich9-uhci2">
      <master startport="2"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x05" function="0x1"/>
    </controller>
    <controller type="usb" index="0" model="ich9-uhci3">
      <master startport="4"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x05" function="0x2"/>
    </controller>
    <interface type="network">
      <mac address="52:54:00:69:9d:88"/>
      <source network="default"/>
      <model type="rtl8139"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x03" function="0x0"/>
    </interface>
    <serial type="pty">
      <target type="isa-serial" port="0">
        <model name="isa-serial"/>
      </target>
    </serial>
    <console type="pty">
      <target type="serial" port="0"/>
    </console>
    <channel type="unix">
      <target type="virtio" name="org.qemu.guest_agent.0"/>
      <address type="virtio-serial" controller="0" bus="0" port="1"/>
    </channel>
    <channel type="spicevmc">
      <target type="virtio" name="com.redhat.spice.0"/>
      <address type="virtio-serial" controller="0" bus="0" port="2"/>
    </channel>
    <input type="tablet" bus="usb">
      <address type="usb" bus="0" port="1"/>
    </input>
    <input type="mouse" bus="ps2"/>
    <input type="keyboard" bus="ps2"/>
    <graphics type="spice">
      <listen type="none"/>
      <image compression="off"/>
    </graphics>
    <sound model="ich6">
      <address type="pci" domain="0x0000" bus="0x00" slot="0x04" function="0x0"/>
    </sound>
    <audio id="1" type="spice"/>
    <video>
      <model type="qxl" ram="65536" vram="65536" vgamem="16384" heads="1" primary="yes"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x0"/>
    </video>
    <redirdev bus="usb" type="spicevmc">
      <address type="usb" bus="0" port="2"/>
    </redirdev>
    <redirdev bus="usb" type="spicevmc">
      <address type="usb" bus="0" port="3"/>
    </redirdev>
    <memballoon model="virtio">
      <address type="pci" domain="0x0000" bus="0x00" slot="0x07" function="0x0"/>
    </memballoon>
    <rng model="virtio">
      <backend model="random">/dev/urandom</backend>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x08" function="0x0"/>
    </rng>
  </devices>
</domain>

I can use every bit of the system, I can ssh into it – although it requires me to enable what are considered unsafe ciphers and key exchange algorithms by today’s standards – and I can even browse the web, as long as the server doesn’t enforce HTTPS.

Regular file operations with Konqueror feel more natural than ever, given that its default configuration for opening a folder was a single click. Isn’t it funny? Back in 2001, we used single clicks to open folders and files. Then for some reason, the world moved on to double-clicking everything and approximately a decade later, with the invention of multi-touch displays, it turns out that we ended up with a broken UX where, on your laptop, you need to double-click, but on your tablet you just do a single tap to open a folder. To make sure I’m not confusing things I actually put KDE 2 on my tablet to test it – and it’s true: KDE 2 is a perfect touchscreen environment!

The mouse pointer is off due to VNC

It’s not just clicking that appears surprisingly well thought out from today’s perspective, it’s every little detail. Like how when you drag a file into a folder, a menu pops up that lets you choose what you want to do, without needing to remember whether it was Shift that you needed to press to copy, Control to move, or Alt to link:

And like how you could simply make a menu open as an actual window, in case you might otherwise need to go through multiple sub-menus over and over again for repeated actions:

And like how you could just turn off animations that would otherwise just waste CPU cycles and hinder you from moving quickly through menus and applications – looking at you, modern iOS and Android UIs!

Oh and, btw, did you see those? Yeah, exactly, those:

These are called scroll bars. They used to be everywhere. Most UIs had little buttons with arrows next to the scroll bars, so you could click to scroll in case you didn’t happen to have a scroll wheel or touchpad available. KDE even went the extra mile to place two arrows right next to each other at the end of a scroll bar, so you wouldn’t need to move your mouse all the way across the bar just to click the opposite arrow.

On Linux UIs scroll bars still exist today. However, on most other operating systems they have largely been replaced by a light-gray-on-white line that shows up whenever an area is being scrolled through, acting solely as an orientation hint.

“Alright Grandpa, time for bed”

One might think that I’m just grumpy and unappreciative of today’s aesthetics and that I like to bxxxh every once in a while about how everything is going down the drain… which… yeah, I like to do. However, judging by the comments on l/unixporn, as well as r/unixporn I don’t seem to be the only one appreciative of the simpler, more functional look and feel. In fact, the KDE people did such a terrific job with KDE 2, that 23 years later a screenshot of their stock desktop is the day’s top trending post on r/unixporn, surpassing all the KDE Plasma, and Hyprland, and whatnot posts:

In that sense: Well done, KDE 2 team, well done. The software that you built is timeless.



Enjoyed this? Support me via Monero, Bitcoin, Lightning, or Ethereum!  More info.