Old Computer Challenge v4: Conclusion

So I’ve participated in OCC v4 with my TiBook. Just like last time, I have some conclusions.

Conclusion (n.) - when you’re done thinking.

Using the machine as a daily driver

Hot stuff

The fan noise is awful. I don’t know if it’s the hot summer days, the G4 CPU itself, or the fan being small/old/noisy in general; but it spins up after a couple minutes of sitting idle and never stops. I’ve been seriously concerned about the machine getting too hot (especially as I’ve been compiling things non stop for the first couple of days), so I ended up putting it on top of another fan (as I’ve been using an external screen+peripherals, this didn’t affect the ergonomics).

Default apps

Many of the builtin apps are great (just like they are today), in particular I really enjoyed using iTunes, Finder, Terminal, and Stickies. I’ve been missing some of the modern builtin apps, most importantly Notes and Reminders; however (similarly to Contacts or Calendar) they do not provide that much value without iCloud sync anyway. I first thought of Stickies as a poor substitute for Notes, but I found they fit a niche in my workflow and I’m now using them daily on my M1 Mac.

Peripherals

The machine has impressive support for basic USB1.1 devices; I’ve tested a hub, a mouse (with a wireless receiver and with a cable), my Ergodox keyboard, an external CD drive, and everything Just Works™. It also provides enough miliamps over a single port to power all of that; this is impressive even by 2012 standards - when USB CD drives often came with a special cable to draw power from two ports.

This is also a huge contrast to anything and everything I still remember experiencing as a kid growing up in the 90s: everything had its own weird cable, and even things that plugged over USB needed an exotic driver, often bundled with crapware.

The USB2.0 PC Card is detected by the system and provides power to a USB fan, but when connecting actual devices (such as keyboards), they do not get detected by the system. Yoinking the PC Card caused my first and only kernel panic on that machine.

Accessibility

In my regular setup, I use a single 43" screen at 4k@1x; I sometimes rely on the system’s zoom to read some tiny text or focus on a detail. The TiBook can push 1920x1080@60Hz over DVI, so everything being twice as big on-screen was throwing me off at first, but I found it to be OK on that machine - mostly because I had many less apps/windows open, as multitasking too many things can really push this machine. The system zoom in OSX 10.5 still works great by the way!

The most important thing is that I didn’t need to tick all the accessibility options like “reduce transparency”, “reduce motion”, “draw borders around toolbar buttons”, etc - because the culprits were not there to begin with.

The green “zoom” button on each window is actually doing a useful thing: it tells the window to resize itself to fit the contents. You can still get this behavior today by double-clicking the title bar (if you can find it), or by opt-clicking the green button; but in my 5 years with macOS I found the full screen mode to be pretty useless even on a much smaller (15") screen. I don’t even use it with windowed games, or apps like Logic.

The old system is not without its flaws though.

“Traditional” scrolling on the mouse wheel feels wrong - perhaps it was a controversial decision around 2007, but once the world embraced smartphones & touchscreens, “natural” scrolling made so much more sense on all devices. I found myself clicking scrollbars a lot, as it’s far less confusing than having the content move in the wrong direction.

I’ve also found that resizing windows is unnecessarily cumbersome. The only way to do that is by dragging the bottom right corner, which also does not give you the much-useful feedback by changing the cursor shape on hover.

The Internet

The only web browser modern enough to tackle today’s WWW is TenFourFox, which is a 2016 fork of Firefox (right before the quantum release, which both improved performance by leaps, and made further porting efforts infeasible).

Unfortunately, you can no longer find any “classic” add-ons on AMO. You have to go hunting and foraging, which is less than ideal, but somehow still feels better than the crapshow that modern Safari extensions are.

NoScript is basically a must-have. Websites are far too frivolous with what code they ask you to execute in your browser these days; it’s not even the security or privacy concerns, but simply the click-by-click performance impact.

As usual, I chose DuckDuckGo as my search engine, but I’ve set up TFF to use the HTML-only, “lo-fi” variant. Yet again, I wish this “lo-fi” version was the only and default, with any modern features being progressively added through JavaScript. It’s nice that it exists, but it’s the “mobile websites” all over again. We figured out progressive enhancement through CSS breakpoints, now just draw the rest of the owl already!

Music

I’ve cancelled my Apple Music subscription half a year earlier; but I didn’t transfer any of my local library to the TiBook.

Instead I’ve been ripping my humble CD collection, which has been on my TODO list for a really long while! Just like during OCCv2, not having access to the boundless algorithmically-generated playlists, OR months’ worth of music in the local library, made my choice of what & when to listen to more deliberate, and thus more enjoyable.

iTunes is great: works as advertised, and didn’t yet have the massive bloat that led up to splitting it into several dedicated apps in 2019 (Music.app still being bloated and buggy after the procedure). The machine can encode & play ALAC while doing other tasks and you wouldn’t notice. Playback is glitchless even under load, something today’s Music.app somehow can’t do.

I was also surprised to find that TenFourFox does not struggle at all with music playback; I didn’t even try loading YouTube, but the good old (even if sold out) friend Bandcamp delivered smoothly.

The builtin speakers are barely audible, and anything but good. The 3.5mm headphones port works well and the subjective audio quality is great, but notably (even though the system correctly detects the presence of headphones), volume control is not separated from the internal speakers. Remember to turn it all the way down before plugging anything in, and then slowly raise the volume. (The urban legend is that Steve Jobs was deaf, which I think also explains the fan noise.)

Native apps

All of the apps (with TenFourFox being the only outlier) are 100% native Cocoa apps. This feels like a blessing. Apps feel snappy, follow all system settings and user preferences, support fonts and rich text universally, feel “integrated”.

I really wish we could go back to building native applications for all major platforms, rather than defaulting to the lowest common denominators (like Electron) for getting interactive pixels on the screen.

I found many interesting or useful apps in the following places:

Talking to people

I didn’t care to set up email, as it’s mostly work and spam these days; I would not consider using this machine for work, even if it was feasible (can’t exactly trust vintage FileVault etc), and spam is spam.

I rarely post on fora; Headcrash was kind enough to offer an open space for participants to hang out on a good old phpBB forum, https://bb.deadnet.se. The nostalgia was too real.

Most mobile messengers offer desktop apps these days, and I normally do prefer using a mechanical keyboard when at home, especially as the chatting sessions can get pretty long and I do enjoy in-depth topics (you probably already figured that out).

Having had to deal with the lack of these chat apps on my desktop machine is how I resolved to continue reluctantly tolerating Electron in my life.

I feel like the crapshow that modern chat is would deserve another post, but there’s already been too much written about it. I miss XMPP; it’s technically a bad protocol, but it’s far from the worst one out there. Thanks, Google, for effectively killing it.

Software development

Compiling software is sloooooow, gets the machine hooooot, and the fan is noooooooisy.

I’ve managed to build LibreSSL, OpenSSH, curl, and git, before my patience ran out. The latest versions of everything but git were surprisingly completely painless to build; in the worst case I needed an extra include path.

Git

Git turned out really tricky, as it made far too many assumptions about its environment, despite living in the autohell-land. The configure script ended up misdetecting features and forcing me to try, fail, and recompile everything again and again: one compiler flag changed, time to rebuild every file, whether the flag affected it or not.

Notably: it misdetected/assumed native support for arc4random (not sure which OSX introduced it) and libdispatch/GCD (available only since 10.6). These kinds of build failures often make themselves invisible until the time comes to link all of the object files, which is the second-worst kind of failure (right behind a mysterious crash, which luckily didn’t happen).

I would like to clean up my fixes and contribute them back to the upstream; unfortunately I couldn’t easily track my changes to the source tree, as I was using a release tarball, rather than a git checkout (go figure). In my opinion, this makes git unnecessarily difficult to bootstrap, which is concerning, considering how ubiquitous and crucial it has become in the past two decades.

Perhaps OpenBSD’s Game of Trees is worth a closer look.

C sucks

There, I said it. suckless.org can roast me.

The C compiler is wasting so much CPU time on simply processing the same header file text, over and over again, just to use the few definitions that you actually needed. (I know this is also because the standard header files are badly organized, and use the include guard antipattern liberally, but the language and its standard library are effectively married to each other, so you can’t really avoid it; maybe unless you live in the magical Plan 9 land.)

Changing one innocent flag requires rebuilding every single file, whether the flag affects the resulting object file or not. Once the number of files starts going into dozens or hundreds, this becomes a major pain point. (I know that again, this is an argument against large software in general, but using C makes it worse. Also: Greenspun’s Tenth Rule.)

I’ve been living in my Go/Python/Lua bubble for a long while; I haven’t built a custom Linux kernel in what must now be decades; overall enjoying pre-built C binaries, and I keep forgetting just how painful and wasteful compiling large C software can be.

(Of course, everything here applies to C++ as well.)

Python

The system ships with Python 2.5.1 in the base installation, and some core bits of the OS likely rely on that being the case. Modern macOS still ships Python (version 3.9, as of macOS 14), likely for similar reasons.

The Python project has graciously provided a pre-built PPC release of Python 2.7.14 (2017), its final release for the 2.x branch. No PPC builds exist for the 3.x series, and I didn’t dare try building any more C/C++ software after the hell that git has pulled me thru.

Turns out, “batteries included” is certainly the case. I’ve had a brief look at the Mac OS X chapter in the standard library docs, and tried writing a couple simple scripts, to the tune of:

import EasyDialogs
EasyDialogs.Message("hello, world")

If I do get back to this machine in the future, and find myself needing some simple GUI apps, this is most likely the path I will take.

Gaming

I’ve been playing StarCraft since it came out in 1998, and I do have a 2011 re-release - in a box, on CDs - which includes both the Windows and Mac OS X binaries; the latter turned out to be universal! Which is absolutely amazing, as I was able to resume my playthru of the campaign.

Gameplay-wise, I didn’t find any particular differences from the modern SC1 Remastered (sans the new graphics, which are 100% optional), or from how I remember the game from ages ago (I’m mostly playing SC2 these days), but that’s pretty much how SC1 always was: the pro scene both keeps the game alive, and unchanging (choosing instead to refine the metagame). It feels very fitting for this challenge, almost like another parallel universe, that also keeps moving along one axis, but refuses to even twitch in another.

Closing thoughts

I’ve interrupted the challenge mid-week, as “life” stuff got in the way, and I didn’t find the motivation (nor much more patience for the fan noise) to continue in the following month. It’s a bit unfortunate, but I still do have great reasons to get back to this machine: now that it hosts my StarCraft campaign progress, it’s the best way to continue that playthru ;)

My main wish is that it was less noisy & hot. I can live with most of its limitations, and do enjoy using it in general, but I can hear it idling from another room, and it disturbs me. Perhaps if it was a desktop machine (rather than a laptop), I could try upgrading it with a better fan, but I’m also concerned with power usage. My Mac mini pulls 7-8W (and I’ve never ever heard the fan spinning), which should be the universal standard for a machine that doesn’t need to run a game at 60FPS, encode live video, or train a model at this particular moment.

The noise/thermals of my Thinkpad T495 (although still very decent - by 2019 standards) is also the main reason why I avoid using that machine. I do truly feel that x86 is already the technology of yesterday, and despite its massive momentum will continue fading away. Performance per watt is getting increasingly more important than raw performance, not just because of battery life, but also electricity prices (related to the 2022-onward geopolitical situation), and the ongoing global climate crisis.

I wonder how we’re gonna look at our current machines 20 years from now.