cns me / blog Cloudy with a Chance of Freefall
← Index | | 11 min read

Two Floppy Disks, a Broken Graphics Card and a Browser Tab

AI Generated - a typical nerd bedroom of the 90s

Some time around the turn of the century, in a bedroom with blue walls and a Buffy the Vampire Slayer poster tacked up crooked above the desk, my friend Rob Wilson 's graphics driver stopped working. The card was fine. Something in the software had come loose, as software regularly did, and putting it right meant recompiling a kernel and leaving the machine grinding away overnight. We had a DVD of The Matrix and we had that evening.

Article content
Simpler times

That is Rob in the photograph, curly hair and glasses, leaning right across the desk to reach the mouse with his arm blurred by the motion. Three beige monitors. A tower with a little panel of red and green lights on the front. It is a film photograph, so it has dust and scratches on it, which is the correct medium for the story.

Rob Wilson had the better machines, the better poster, and a bedroom his mum had stopped coming into.

Most of the time we were not indoors at all. We were on mountain bikes, riding down flights of stairs, drifting round corners, burning rubber off the back wheel purely for the noise, and coming home with wheels that no longer went round properly. Rob could do an endo: brake hard enough to lift the back wheel and then just sit up there on the front one, balanced, as though it were nothing. Doug could do wheelies, which is the same trick pointing the other way and looks considerably better. I could do neither. What I could do was drive my own groin into the headstock, over and over, for about four summers, trying. It is a wonder I was able to have children. The Linux box was what we did when we were not out ruining our bikes, and our parents were firmly in favour of the Linux box.

Article content
AI Generated: Another good day's work

The thing that rescued that evening had been sitting on Rob's machine for months and we had found it by accident. He typed bb into a terminal, reaching for something else entirely, and then sat looking at what came up with an expression I remember better than most of that decade. The screen had filled with a spinning, zooming, shading animation made entirely out of the characters on his keyboard. That is what ASCII art is: pictures drawn with letters and punctuation. Underneath bb sat aalib, a library that would turn anything at all into them, written in 1997 by Jan Hubicka and Kamil Toman, who had bought two second-hand monochrome monitors and wanted to put a picture on them. bb became our screensaver for most of a year.

You can open it in a browser right now and be looking at it before you finish this sentence. In 2019, reaching the same thing took a command and a download. Nothing about the demo changed in between. The floor did.

Installing Linux in that bedroom took two floppy disks, a boot and a root. Disk one got the machine as far as being able to read disk two, and disk two was everything else. It was not hard. It was short.

Rob compiled things. I packaged things. I do not think either of us has changed.

I preferred Debian, because of apt, which fetched software for you and, if you typed apt-get moo, drew a cow and granted you Super Cow Powers. I have been telling people for twenty-five years that apt was charming not least because apt gets me a sandwich. The cow is the one I could actually have seen at the time. Memory cost nearly as much per megabyte then as it does now, which is a lie, and a lie that has been getting less funny every quarter this year.

Everybody wanted a 3Com 3C509. Not for its speed, which was ten megabits and unremarkable, but because you could put one in a machine and the machine would simply have a network, which was not how any of the rest of it went. Rob also had a card that did nothing but 3D, a 3dfx Voodoo, which I called an Nvidia for years and was wrong about, right up until Nvidia bought 3dfx's assets and made me accidentally almost right. I never found out what it did. He liked games. I was never into games.

Sound came out of a Sound Blaster, which was a card you went out and bought and fitted yourself, back when a computer would otherwise not make a noise at all apart from a beep. Hold on to that one.

What Rob and I actually did with all this was sell it. In the years when a small office might have four computers and one telephone line, there was a real market for a cheap Linux box that sat in the corner and did the dialling for everybody. Somebody opened a browser, the box heard about it, and the modem started up in the corner while the room waited. I wrote the rules by hand, in ipchains. The router in your hall does that job today and has never once mentioned it.

My longest-running box stayed up for about five years. Linux could not count that high at the time; the counter wrapped somewhere around day 497, so the machine outlasted its own ability to say how long it had been running.

The best machines we sold were the ones nobody ever touched. Twenty-odd years later I applied that same standard to a repository and called it maintenance.

The argument every other household had, the one about the phone line, was never really available to me. I am an only child, and my mother is very deaf.

Article content
AI Generated (badly, only kept because how hilarious the interpreation of a BT master socket is)

Which brings me back to the evening the driver broke. MPlayer, the video player on Rob's machine, had an output mode that rendered every frame as text characters instead of pixels. We already knew what aalib was, because bb was sitting right there. So we watched The Matrix as text.

It was green on black, or as close to green on black as a frame buffer could manage, at a resolution best described as several hundred letters. MPlayer's ASCII output hands you keys for contrast and brightness, and Rob rode them for most of the film, hunting for a setting in which a face was a face. I do not think he ever found one. He kept going anyway.

The famous bullet-time scene from The Matrix as played through AA lib rendered into beautiful ASCII art

It took months for the obvious to land, and the joke is not a deep one. We had taken a film full of green characters falling down a screen and watched it as green characters falling down a screen, at considerably worse resolution, and neither of us noticed at the time. Not a deeper reading of the film. A worse copy that happened to land nearer the source.

That is the first evening. Here is the second.

In December 2019 I packaged bb as a Docker image, which is a way of bundling a program up with everything it needs so that one command, docker run, starts it on anybody's machine. That was as low as I could get the floor in 2019, and I was right about it. Then I did nothing for six years. The git log is, as ever, more honest than my memory: almost every commit through 2024 and 2025 is a bot called Renovate, noticing that somebody else's base image had a new checksum and opening a pull request about it, roughly thirty times, while I did not look. That is what I mean when I say I have been maintaining this repository for years.

One evening this week I wondered how hard it would be to run bb in a browser instead. I was low on Claude session tokens, so I ran the cheaper Sonnet model, which is what running out of the good stuff looks like in 2026. Minutes later there was a WebAssembly build. WebAssembly is a way of compiling a program so that a browser can run it, which turns the entire business of installing something into a link. Six pull requests over two days, all of them in the same repository I had been ignoring since 2019.

Article content
Screenshot from bb.cns.me

Then it got strange. aalib has been able to draw a cell dim, bold or reversed since 1997. bb's plain-text output driver only ever declared that it supported normal, so aalib, being obedient, rendered every character flat for twenty-nine years. The new build patches one declaration to say that dim, bold and reverse are also acceptable, and the picture acquires depth. Nothing was broken and nothing was hidden. One line in one driver, written in 1997, declined an offer the layer underneath had been making ever since.

Article content
Deep ASCII Art

Those attribute classes are mapped, in the page's stylesheet, to four shades of green. The source calls it a green phosphor-CRT palette.

The same evening produced static binaries, cross-compiled with zig cc, for around twenty Linux architectures: riscv32, mips, loongarch64, both endiannesses of ppc64, and a Hexagon DSP. Plus FreeBSD, NetBSD, OpenBSD, Windows and macOS. Getting one small program onto twenty-odd architectures used to sit at the far end of a career. It is now an evening's idle curiosity.

Nobody has ever wanted this.

I should be careful about whose evening that was. It was made out of other people's decades. Somebody wrote a compiler that will build for a processor it has never met. Somebody built the sandbox that lets a browser run a program written years before browsers could run programs. Somebody is, this afternoon, maintaining a C library for an architecture I had to look up in order to spell. I did none of it. I asked for a thing and went to put the kettle on. The floor did not rise on its own. It was carried up in pieces, over twenty years, by people whose names are not in this article, and the honest version of my delight is that I am standing on their work admiring the view.

I should also admit that I now spend most of my working life in a terminal with eighteen panes open, which is not where I expected the future to put me.

Article content
AI Generated: All that silent effort, stacked up in pieces, ready for another dawn.

Then the sound.

A file called bb.s3m, a genuine Scream Tracker 3 module, has been in the source tree the entire time, alongside working drivers for Sound Blaster, PC speaker and Gravis UltraSound. The claim we read on that CRT was never a bluff. It was a driver. I never heard it, and I do not think he did either, because the Unix build played through /dev/dsp, and on any later desktop that fails silently while the text on screen still cheerfully describes the hardware it supports. The WebAssembly module still cannot make a sound, because the sandbox it runs in has no audio at all, so the browser plays the actual 1997 file alongside the demo, out of step with whatever is on the screen.

I heard it for the first time in August 2026, on my own, in a tab. It was Rob's card, in Rob's tower, in Rob's bedroom, and the two of us were sitting right in front of it when it told us what it could do.

A while back I wrote that the craft was never the point, that access was, and that depth is a gift and not a toll. I still think that. What I had not noticed is that a gift has a shelf life. Nobody takes it back. It simply stops being one.

Nobody moved the demo. The floor came up underneath it, and I was still standing on the old one holding a Docker image, quite pleased with myself.

I did not notice, because the person who lays a floor is the last person in the building to look at it. The command I put there in 2019 to let people in is now the thing standing between them and the door.

NDX took three years to teach me, at national scale, that handing somebody access is not the same as handing them something they can use. Same law here, opposite outcome, for exactly one reason. The useful thing was already in the room. A 1997 demo takes about ten seconds and needs nobody to introduce it. All that was ever missing was the floor.

My children have lately been getting both feet up onto the crossbar and riding along like that until the bike slows enough that they have to jump off. It is a deep joy to watch and I am not at all sure it is a good idea. Nobody had to lower anything for it.

Some of the stupid things we did while waiting for a linux kernel to compile

There is something you loved once that is one evening away from being reachable again. It will not matter to anyone. That has never been much of an argument against it.

Rob will read this before most of you do, and I have probably got half of it wrong: the years, the order, which machine we were sitting at.

So there are two screens in this story. A beige monitor in a bedroom under a poster, and a tab on whatever you are reading this on. The same demo both times, and neither of us improved it in that bedroom, and I did not improve it this week. It was fine in 1997. It was fine in 2019. It is fine now, and almost nobody will open it, which was equally true in that bedroom. The only thing that changed is who could reach it, and I was not the one who moved.

https://bb.cns.me

(Views in this article are my own.)

🦩