Over my vacation Solene launched the Old Computer Challenge. I figured I'd give it a shot when I got home so here we are. The rules: Easy, right? I already know that there will be one "cheat" day: on Thursdays I watch stuff with a girlfriend and that's blatantly impossible with this setup. I'll use either my desktop or my primary laptop for that.

The Hardware

I picked the only suitable hardware I have sitting around. It's a Dell Latitude D400 (vintage 2003). It's got an Intel Centrino (P2 based) running at 1.6 GHz. 256 MB of RAM, Intel integrated graphics. It's got a 30 GB hard drive in it which is honestly on its last legs and should probably be replaced. For context, I usually use this as a late 90's/early 2000's gaming laptop for Windows 2000. Notable problem: the battery is dead, so I'll be tethered to outlets.

A Dell Latitude D400 sitting on a railing with a courtyard behind it. It is a monochrome image tinted orange.

As an extra layer of fun, I'm going to try and see if I can rely as much on my PDA as possible for mobile stuff (mostly music.) It's a Palm TX.


The Software

Going in I knew 256MB was going to be tight. I ended up splitting the hard drive in half and installing Slackware 14.2 with a 256MB swap partition. In retrospect Slackware may not have been a good choice because beyond its default packages, it relies on a port system. As for the software I actually run...

Desktop Environment

For a window manager I have WindowMaker up and running (though I may give icewm some time as well.) It's running along with wmclock and xbattbar for my "desktop".


Terminals are managed via urxvtd to save on memory where I can. I only have one persistent terminal app, though.


This is split. There are 4 main chat protocols I use: XMPP, IRC, Telegram, and Discord. Discord is a non-starter and I hate it anyway. XMPP points towards Pidgin, which is considerably lighter than most of the alternatives. It's feeding XMPP and Telegram. purple-tdlib is really good these days. IRC is actually kinda boring. I considered trying to use hexchat just to see how it'd behave, but irssi is in base and works fine. There's always a urxvt open with it.

The browser situation is handled fairly competently by Netsurf.


I've brushed up Jasspa MicroEmacs to run on modern systems and I've been using that for development anyway, no big deal.


Aside from hanging out in IRC I'm mostly listening to internet radio. I might play around with some muds and update my page on that later, who knows. I'm usint audacious for my music player; mpv uses too much memory after an hour+ of streaming.

Day 0

I knew there'd be a bit of setup involved before I could actually start the challenge, so I began on Monday afternoon. First I resized the Windows partition to allow me 15GB or so for Linux. That was an ordeal in itself because this is a pre-coppermine centrino; it doesn't have PAE (why would it? This machine probably maxed out at 512MB.) This alone meant an awful lot of distros (anything vaguely modern and Debian based for example,) wouldn't boot. Gparted Live still supports back to 486 but this box didn't have enough memory to load its initrd. Eventually I went with Slacko Pup 14.1, which finally let me do my partitioning. Since I knew Slackware worked, it's lightweight, and it's my favorite distribution anyway, I chose it. The only catch was that I had to select huge.s not hugesmp.s on boot to avoid PAE.

Installation went smoothly. I excluded the xfce, kde, kdei (internationalization), t (tex), and e (emacs) sets and installed. The end result was 4 GB or so. On advisement in IRC I decided to try and build a slimmer kernel and wasted a few hours (and plenty of OOMs) on it before seeing that slackware's "huge" kernel is really only about 4 MB. That was good enough for me.

Then things got less smooth because I had to install software. On initial boot I ran through all the upgrades made over the last 5 years and kept getting "corrupted filesystem" errors. Thankfully after letting that complete I was able to schedule an fsck for the next boot; everything seemed fine after that.

Slackbuilds setup was easy, you just install the sbotools package. The tree was fetched and I started building what I needed. wmclock, xbattbar, dillo, urxvt. All of those were smooth (not least because they're all in C).

Even Lurch (which enables omemo in pidgin) wasn't too bad. A git pull (I had to find the repo with dillo, but that's tolerable.) It built with a makefile. It was fine.

Telegram threatened to cancel the whole project. purple-tdlib naturally needs tdlib. tdlib is written in C++, and C++ is the devil for machines with a small amount of ram. This library meant to let you do instant messaging brags in its repository that if you run a special PHP script to split files up when you build it then it will ONLY use up to 1GB of RAM per file. For "low memory systems." This was untenable. I gave it a shot anyway, but gave up after compiling a single file had taken half an hour. I booted my desktop (also Slackware thankfully) and built a package in a few minutes. I installed it on this box and started building the libpurple plugin. "This requires tdlib 1.6.5 or earlier." Oops. I rebuild the package and transfer it over, but the plugin won't load. Something about missing fcntl64... After a few minutes of searching I realize my desktop is using -current, not 14.2. Install 14.2 on a vm, two-step transfer files back and forth, wait another 30 minutes for a purple plugin to compile (it's C++, of course,) and I have telegram.

That left a couple more itches. I had to build microemacs (trivial), and I had to figure out entertainment. After a bit of poking around I found podget, which handles podcasts quite nicely. Browsing proved to be a serious problem: dillo doesn't render most sites correctly, but beyond that duckduckgo is completely broken for me. Clicking on an out link will just hang on the redirect. Unfortunately there are only 2 serious "lightweight" browsers, Dillo and Netsurf, and I'd known for years that netsurf constantly crashes. I installed it ans sure enough, constant crashes. A while of poking around and I learned that it's a known bug, fixed in new versions. Edit the slackbuild, build the package, install netsurf. Now I have a solid browser.

The last bit of trouble was easy: pulseaudio sometimes just drops connections. Disable pulse in asound.conf, kill pulseaudio. Easy.

Day 1

Going surprisingly well. I didn't really miss much at all while I was working; I just listened to internet radio. I spent a bit of time after work poking at my PDA; I think I'm going to try and use that rather than my phone where I can, though that's limited by the dead battery in it. I think mpv has a memory leak, after a couple hours of play it started to use a lot of memory; audacious seems to behave better. Pidgin is doing what I need it to. Source-based packages are still biting me, but that's going to matter less and less as the week goes on. After work I reinflated the tires on my bike. If the weather holds up I'm hoping to some weeding at the community garden.

No programming of note. I got a bit of reading in for my entertainment as I waited for games to install (roguelikes mostly.) Not a lot to say, really. I installed claws-mail for a mail client, a luxury compared to my usual mutt. Netsurf seems to handle pages as well as a js-less browser can. No modern devices used aside from my work laptop.

Considering taking this week to do a bit of work on the site. Maybe add a navbar or something, improve the workflow beyond "cp index.html newfile.html" to something maybe using bmake. I took a picture of the laptop, but it was too dark, might try again tomorrow.

Day 2

It's early but I figured I might micro-update. After posting yesterday I decided to do some of that touching up, see here. It's wasteful (it regenerates pages every time) but it works okay for my purposes. I don't need a powerful templating system.

I hit an unexpected setback today as well: I can't get music on my PDA. I think I need to find some small music files, zip them up, and serve them via http. No FTP clients for PalmOS bizarrely, and hotsync can't move arbitrary files. The browser also seems to choke on files if they don't fit in ram for some reason. Something to look into later. Probably run an http server and feed it in that way, if that works.

Okay, 10 PM on day 2. I'm kinda disturbed how little stuff has changed, honestly. My decision on a whim to start using me has helped a lot. Basically all that's been cut is stuff that I feel terrible for anyway. Got a bit of reading in, went to movie club. Had to use my phone for slack temporarily as I wait for go to compile for a cli slack client (movie club is organized that way.) Not a ton to report. I've been playing with the PDA to see if I can get it to work.

Day 3

First real problem: ran out of hard drive space. I had to pick through and free up a few gigs. Thankfully Slackware packages include extracted size in their metadata, so figuring out the biggest packages was basically just

grep "UNCOMPRESSED" /var/log/packages/* | awk {print $5 $0} | sort -h | less

So not much of a problem at all. Purged unneeded kernels, qt, mariadb, and a few other things. Initially purged samba but apparently mplayer is linked against it, so that had to stay. Sitting with a few gigs free now.

Started on The Guns of the South for my entertainment. I'm not sure I'll stick with it.

Took my bike out for dinner with a friend, it was nice. Brought my PDA with me but didn't really use it. I really need a better battery for this thing too.

Day 4

The halfway point. I don't think I used my phone for anything at all today (I've used it previously this week for, for example, taking those pictures.) Took a nap after dinner and woke up at 2 AM, so not much to report.

The only really notable thing is that I went and built a Discord plugin for libpurple. It's actually working better than I'd imagined at the start. My biggest complaints about Discord in particular circle around its abusive UX, which Pidgin solves. I'm also giving Enlightenment 16 a shot while I'm here. It seems nice enough; not sure it's good enough to use over wmaker though.

Day 5

Ended up with a little computer use today to check in on someone not otherwise accessible. Finished a book (The Guns of the South,) and so started a new one, back to nonfiction. I began with a book on the history of sampling with a focus on the history of hip-hop but I got about 20 pages in when I realized that it'd really help to be able to hear what's being discussed.

Instead I went with Purely Functional Data Structures by Chris Okasaki, a book I picked up a while ago. I was able to install chicken easily so that I had access to a good functional language; I'm compiling ocaml now, partly because types might be helpful in some of the examples and partly to see if it'll go at all. I found yesterday that I can compile simple SDL2 apps without much pain, ocaml could prove fun as well.

Day 6

Purely Functional Data Structures proved to be a bit much, namely that I couldn't understand what one exercise as suggesting, so I swapped it out for The Sawbones Book. Finished that today. Spent some time on main computer mostly to pick a friend's brain about said exercise, no luck there. Began 1632 because Guns of the South put me in the mood for a good alt history nonsense book. It scratched the itch quite well.

Dusted off the Dreamcast today as well. I figure that ought to be well within the bounds of the challenge: 16 MB of RAM, one solitary CPU at 200 MHz (Dreamcast Linux Challenge when?) Played some Tony Hawk's Pro Skater 2 on there; a good time was had.

Considering looking for a MUD to play tonight. I doubt I'll get good results, but it'll be posted tomorrow (and in the muds directory too,) if I find something cool.

Day 7

Well, here it is. 7 days using the D400 as my primary personal computer. I squeaked in with half the maximum amount of ram and even managed to largely avoid my phone while I was at it (I essentially used it as a feature phone, when I did. SMS and music, though I did track how long my bike ride was today.)

How am I feeling about it? It was nice. This is by no means the first time I've gone techno-aescetic for a bit, but the sense of community that built up in IRC made it a lot more fun, even if I was taking the challenge later than everyone else. I got a lot of reading done, I got a lot of writing done, I was able to play some games that've been sitting on my shelf for a bit. All probably in less combined computing resources than it takes to run one process on my normal laptop (and not even the hungriest!)

That made me think a bit. How much "e-waste" do we run into every year? It's not as bad now that performance has been steady for a while on the CPU side, but we still swallow up RAM like it's candy. When this laptop was built I was still in elementary school. I was able to do most of my everyday things, but I'm not a normal user. I was able to go to lengths no reasonable person could think of to get it to work properly, and I had years of experience to tell me how to do it. That doesn't have to be the case. Making your software accessible to normal people doesn't mean it has to be bloated and slow, you can write it right. Pick a target; it doesn't have to be old enough to vote like this one; let's say 10 years. You don't even need new hardware for this: spin up a virtual machine. 2 cores, cpu to core2duo. Cut down the clock to 1.6 or 2 ghz. Does your software still run? Does it still run well when you have other apps running? Does your web page work? Does it work without javascript? Try it on an artificially slowed network connection (your local firewall can help with this.) If you really want to make a difference with computers consider this: what kind of computing power can a poor, curious kid pick up at the thrift store? Does your software empower that kid? It should.

Here's a parting screenshot of my final setup: I decided to play with amiwm today.

An AmigaOS-like desktop with many windows open
But this page is ugly!