October 15, 2021
I feel like I’m at a bit of a crossroads, from a personal computing perspective.
Since I switched from coding to managing for a living, I have a fairly limited set of use cases for personal computing. They are:
- Gaming. No AAA titles, but smaller / older stuff like Kerbal Space Program, Starbound, and of course Minecraft.
- Communication. Mostly email, but also IRC, Mattermost, Slack, and Whereby.
- Administration. Managing our family LAN containing an old HP ProLiant DL320 G6 running as a NAS, a ThinkPad X200 (a gift from my friend Nadia) running as a games server, and a brace of Raspberry Pis running Pi-hole, OpenVPN, and Home Assistant.
- Media. Watching streaming and local movies, and listening to streaming and local music.
- Programming. Recreational and open-source, these days.
At the same time, I’m becoming increasingly dissatisfied with the direction of mainstream technology.
The Web is now essentially owned by Google. We’re back to the bad old days of “this site best viewed in Internet Explorer”, except this time the bad actor isn’t a company wanting to shore up its operating system dominance, it’s a company that wants to track the every action of every one of its users. Far more worrisome.
Development is … not a great experience. More and more projects go ‘cross platform’ by shipping as Electron apps. These are huge, and support three operating systems (MacOS, Windows, and Linux … provided you have GPU support, systemd, dbus, etc.). Bad news if you’re on one of the BSDs, or something more exotic, or older, or resource-limited, etc. - like a smartphone. Electron apps are also huge, memory hungry, laggy, and the Electron framework itself does OS rather than platform capability detection so porting it is a PITA.
Then there’s the Internet of Things. The best solution I’ve found involves building apps for Ubuntu Core, which requires apps to be shipped as Snaps. There’s no dependency management there, so if I want to (not so hypothetically) build a solution involving go-ipfs, Samba, NGINX and so on, then I need to build all of those into my Snap, and maintain them as patches, fixes, etc. get released.
In the recent past I used FreeBSD as a daily driver, on a ThinkPad X220. This was a great combination - fast, stable, secure, and physically robust.
So this is where the mid-life crisis comes in. I’ve done some experimentation, and I’ve narrowed my strategy down to a few choices:
- Double down on Linux. Switch away from Ubuntu for something more easily configurable and predictable, keep X, and either fix StumpWM to play nicely with docking or switch WMs.
- Switch back to FreeBSD. This would involve abandoning a bunch of Linux-specific tooling. Experimentation has showed that even with the new Ubuntu-based Linux compatibility layer, many Linux apps won’t run because they expect other typical parts of a Linux distro to be present. So I’d need to be running Web-based UIs for Slack, Mattermost and the like, probably Axolotl for Signal, and the (excellent) spotify-tui for Spotify.
- Switch to Plan 9. I’ve been test-driving the 9front fork of Plan 9 for the past month or so, and it’s great fun.
- Switch to Mezzano. This is an open source Lisp operating system; my friend Brett recently let me know that it’s now running on real hardware. As appealing as this seems, I think it’s still a little early for a daily driver. And that’s coming from someone who’s considering Plan 9 …
Plan 9 is really good fun. It feels very minimalist, because it is. ~ 50,000 lines of code in the kernel, as opposed to ~ 30 million in the Linux kernel.
This is reflected in a few ways. It’s fast - runs perfectly well on the ancient ThinkPad R51 I installed it on (though my latest playing around has been in QEMU). It’s simple - it’s possible to literally buy and read hard copies of the manpages. It’s the scale of system that can fit in a single human brain. Its C dialect is nice, and it has great support for Golang.
It also has support for enough connectivity - SSH and VNC - that I could use Plan 9 as a reasonable base for my proposed thin client approach, where most stuff runs on a server in my home rack, and my “personal computer” is mostly a thin client.
However, Plan 9 would really represent a minimalist computing route. I’d be giving up most web apps (as they struggle to support Firefox these days, let alone NetSurf or Mothra. And with no Rust or Node support, a lot of console apps would be off-limits too, including the aforementioned spotify-tui. This wouldn’t necessarily be a downside; instead, choosing Plan 9 would be to expressly reject many of the things I don’t value in software and technology.
In some ways, that’s appealing. A simple, fast, clean OS with great Unicode and Golang support is actually a pretty nice place to live. However after some experience with Plan 9, there are two things I think I’d miss too much:
Lisp - specifically SBCL and SLIME. I’ve never used a programming environment that competes, and I have a little commercial experience with it now, so I am confident that the power and speed translate well into the Real World™.
Emacs - specifically GNU Emacs. I like the Acme editor a lot, and I like it more the more I use it. But the focus on mouse chording over keyboard acceleration is dead wrong. The Plan 9 folks claim the mouse is faster but that doesn’t gel with my experience as an Emacs power user. Even leaving aside SLIME and Common Lisp, Golang development in Emacs is much faster, especially with things like go-mode. It’s probable that the “mouse is faster” claims were comparing mouse and keyboard on a vanilla system, vs. on a personally optimised Emacs system with a tiling WM.
So as much as I like Plan9, lack of support for my preferred development environment is a non-starter. Acme and Golang are a great combination, to be sure, but they’re not up to the standard set by SBCL and SLIME. I could forgive the focus on mouse chording in isolation, but when combined with a less powerful language and environment, it all becomes a deal-breaker.
Mezzano is very interesting, but still way too light on features for a daily driver. As things stand, it wouldn’t even work as a thin client, unlike Plan 9.
So the realistic choices are: Linux - non-Ubuntu - and FreeBSD. Looking at the Linux-specific apps I’d need to abandon, I’m A-OK with that - with only one concern, Signal. Given how often I use Signal Desktop, I’d rather not give it up … but there seems to be little interest in a Signal port to FreeBSD from the team.
So FreeBSD it is … but then, vanilla FreeBSD or hello? I’ve spent a little time with hello in VirtualBox - it’s a pleasant OS, and is (unsurprisingly!) quite reminiscent of early Mac UIs, just without the instability. But I’d still prefer a tiling WM, so there’s not much point to it vs. building off a vanilla installation.
Next up, the question of hardware. Lenovo has comprehensively nerfed the ThinkPad range; while the keyboards are still class-leading and the matte screens lovely, other aspects are seriously lacking. Working on my kids’ X250s is markedly more difficult, and less pleasant, than working on my old X200 and X220. Even straightforward jobs like swapping an SSD involve substantial disassembly. So I don’t think I’ll be running a ThinkPad myself, after my current W540 expires. Which may be sooner rather than later; it’s suffering from a scuffed screen problem that seemingly impacts many modern ThinkPads.
Recently I’ve been working with my kids to build a cyberdeck out of a Raspberry Pi, LCD screen, and peripherals. In fact, the same set of parts I’d originally earmarked for the Beastie Box bench-test prototype v1. It works surprisingly well; the tiny LCD screen is a drawback, and the ancient Pi 1B is incapable of running a modern GUI well. But the concept seems pretty sound.
Looking at the world of single-board computers, the Udoo Bolt V8 seems ideal for a final build.
Plenty of power, a Radeon GPU that’s supported by FreeBSD 13, and up to 32GiB of RAM. The only slight downside is the 65W power consumption; it will necessitate I think a 19V 6Ah lithium battery which won’t be light. If I put in a SATA switch and a multi-SSD bay, I could switch between FreeBSD, Linux for gaming, and perhaps other OSs like Mezzano and Plan 9 for fun.
So I think there’s a clear strategy forwards here - incremental, in the same way I got the kids running on a fleet of 3 x X250s and 3 x Google Pixels:
- Finish the open issues on my FreeBSD setup scripts, in VirtualBox.
- Purchase a used X250 w/ 1080P display, install with FreeBSD 13.
- Retire W540 as a gaming machine.
- Upgrade X250 to max. RAM and super-fast SSD.
- Update Beastie Box plans with results from Pi cyberdeck build, starting with Udoo SBC.
- Once the Beastie Box is done, set it up with multiple OSs so I can keep an eye on Mezzano’s readiness, and try out other fun OSs without virtualisation.
The intermediate goal will be to be running FreeBSD on an X-series for everything but gaming, and the long-term goal will be to have FreeBSD running on my own cyberdeck-style hardware, with Linux gaming also on that hardware.