Lent 2026
I’ve given up macOS (≥10.0) for lent. This is how that’s going.
Overview
Background
My breakdown of OS use (among server/laptop/desktop-class operating systems) is probably about 60% macOS, 35% Plan 9, and 5% FreeBSD. I have a MacBook and a Mac mini running macOS, a whole lot of things running Plan 9 including various Raspberry Pi and cloud instances, and some cloud instances, an Intel NUC, and a half-busted laptop running FreeBSD.
For work, which is mostly back-end web development these days, I do probably 2/3 of my development on Plan 9 (connecting to FreeBSD servers) and the remainder on my Mac (while sitting on the couch). While working from Plan 9 I test on an iPad 90% of the time already; while working from the Mac, I test on the Mac.
Research and recreational development is almost entirely Plan 9, although probably half of that is via macOS (via qemu or drawterm) because I don’t have a great way to use Plan 9 natively from my couch.
Okay, but why?
MacOS has slowly been eating more and more of my computer time. I’ve used Plan 9 as my primary workstation for years, but I’ve been spending less and less time at my desk. And while Plan 9 is my favorite system to work with at the OS level or use to build most sorts of other software, macOS is obviously better for a lot of “normal consumer” stuff.
But macOS has been getting worse for a few years now (and I’m diligently avoiding 26), and I’m more and more uncomfortable relying on Apple as a company. While using my Mac, I feel like I understand what my computer is doing less than any time in the past 30+ years, and have less say in that. And while Apple’s sort of crashed from higher highs, the trajectory is the same for all of Big Tech.
It all just feels worse.
So what’s the plan?
I’ve pushed back before against the idea that computers, in any sort of general sense, are less fun or worse now. But I think Big Tech likely is, and their gravity is greater than ever. Maybe it’s that the good stuff’s still out there, but it takes more intention to get to. Maybe.
So, the plan in brief: cut out macOS, and try to push most of that use to Plan 9 and (where necessary) FreeBSD.
I’m explicitly constraining this to laptop/desktop/server systems, and therefore explicitly not addressing iOS. There’s a bunch of reasons for that, some okay and some frustrating, but that’s the state of things. I am, however, trying not to move much of the macOS time to iOS, outside of web testing, although I’m starting off a little behind on preparing my portable work setup, so that might bend a little at first.
Let’s see how it goes.
Daily Logs
Week 2
Feb 25, Day 7
Minimal computer touching today, displaced by chaperoning a field trip with my 6yo’s class. Did, however, find that my X server is busted after replacing the pkg tree yesterday. It adds random garbage on keyboard input. Sigh.
Feb 24, Day 6
Okay, with yesterday’s deployment done,
today I get to focus some actual attention on this FreeBSD box
instead of just poking at it between other things.
I still think dynamic linking is a wreck (this is not a new position),
but in FreeBSD’s defense I was able to get the pkg tree working again
(using pkg-static; see?!?).
The ports tree, however, is another story. In FreeBSD 15, they’ve started using git to maintain and distribute the ports tree. And I’m now 0/2 for trying to get it downloaded and in place, both times failing after about an hour of churning.
Today was the first day it didn’t feel like the majority of what would have been macOS time just went to iOS, which is good.
Feb 23, Day 5
Back at the coworking space. After some minor last-minute changes requested by the client, I did the deployment this morning I’ve been working towards. I don’t love having the private keys on cloud servers, but at least they’re just for this one repository. It went as expected. It was mostly via the iPad, though.
The NUC is being a problem. Issues with graphics, networking, and upgrading.
On networking, it seems almost random whether the WiFi adapter will connect to my phone’s network.
ifconfig will report the correct ssid and claim the interface is up,
but the phone doesn’t report any connections.
But then trying again works. Almost all the time.
Unless you have to try again. ¯_(ツ)_/¯
Two issues on graphics.
First, I’d forgotten how irritating X11 fonts are to work with.
“-*-lucida-medium-r-normal-*-24-*-*-*-*-*-*-””
is not a reasonable font name.
And I don’t have very good ones installed (FreeBSD is very stingy by default here).
Worse, though, xrandr seems not to be working,
and my little portable screen turns up in portrait mode by default
(and is a rather wide/tall aspect ratio).
I don’t yet know what the issue is here or how to address it.
Then I tried to update the very old 13.5 installation to 15.0. I have a disturbingly high failure reate with FreeBSD updates, and this didn’t go well.
Dynamic linking remains a pox.
Week 1
Feb 22, Week 1 Recap
Folks who didn’t grow up in the church (and many who did!) are often surprised to learn that Sundays aren’t part of lent. Yes, it’s a built-in “cheat day” (the Orthodox make this harder on themselves, but that’s another story).
Week 1 went pretty well, aside from the self-inflicted errors on Day 3 and the fact that I didn’t finish preparing a portable setup ahead of time. It’s definitely harder when not at home, but I’m working on that. I definitely used the iPad (mostly ssh and Drafts) for more of a substitute than I was hoping to.
Today’s computer time was limited to more testing for tomorrow’s deployment (Plan 9 plus the iPad, as normal), ripping some DVDs using Handbrake on macOS and moving the files to my Synology (which is my normal process; I don’t have a good way to get them to the projector otherwise), poking at the Intel NUC to get it better prepared for tomorrow, copying out the ssh keys I need for deployment tomorrow (I confirmed I can get them through Backblaze, but this is easier), and using the Foundry TTRPG web app, also on macOS. I’m glad my weekly Pathfinder game is on Sunday evenings, but I may try it out on FreeBSD anyway.
I discovered the NUC has its own WiFi, which I’ve never had cause to use before. Neat; won’t need the TP-Link there. I still want to get it attached to my phone’s hotspot for the laptops to use.
Feb 21, Day 4
I almost had no call to touch a computer today, but then I realized I wanted to do a little more testing before deploying tomorrow. And then forgot until my partner reminded me at 21:00. 😭 Anyway, at least it was at home so I had the easy setup.
I realized I don’t have a way to rip DVDs. I suspect my shortest path forward there is going to be attaching my existing USB optical drive to my FreeBSD box, but haven’t tried that yet.
Feb 20, Day 3
Today’s not going well, although that’s mostly my fault (well, look this is all self-inflicted, but this is different).
I overslept by just enough to make the morning rushed, and between that and getting my daughter ready for school I wasn’t paying good enough attention when packing my bag. I forgot both the TP-Link and the monitor for the NUC! So work today is mostly ssh from the iPad. The small screen and lack of real windowing definitely slows things down, but it’s manageable.
I also realized today I don’t have the private key to push my git repositories to Bitbucket, which is part of my production deployment path. I managed to get it onto my iPad, and thus the FreeBSD box I need to be able to push from, using the web interface to Backblaze.
Someone on IRC reminded me of the netsurf port for Plan 9, which at least has a good shot of being able to do the web login things I need in order for Plan 9 to access various otherwise-open WiFi networks.
Oh! I just realized Shellfish, which I’m using for ssh from the iPad, can do multiple windows. They’re cramped, but better than nothing. It would be nice if I could put the iPad in portrait orientation and have the ssh windows stacked top to bottom, but iOS won’t do that.
Feb 19, Day 2
Frustratingly, Safari on my iPad has decided it only wants to speak https when connecting to a non-standard port, even when given a url like http://foo.example:8888. This was working fine yesterday. I wasted a little time on this before just switching to the Orion browser, which behaves properly (as does Firefox Focus, my normal second browser, but I want tabs for this).
I realized this night that I still didn’t have a good portable setup, and I’m working from a coworking space tomorrow. This is mostly fallout from a remarkably unproductive second half of the week last week.
With my two native Plan 9 laptops, I didn’t have much confidence I could get on the WiFi at my coworking site. It’s an open network, and I’ve got a card that can join that fine, but it requires one of those “enter your secret code” portals and I haven’t tested this particular one with any of the (terrible) browsers available on Plan 9. Slightly longer-term, I think I have a solution here using a tiny TP-Link router/bridge thingie and my phone, but haven’t gotten there yet. And even it needs JavaScript for its management UI.
So my “portable” solution is… a desktop. I’ve got an Intel NUC 6 running FreeBSD and a small, tablet-sized USB-powered HDMI display, and the stand from my old OQO to hold it. This should allow me to drive the TP-Link to connect to the WiFi (or my phone, if I want to test that).
Feb 18, Day 1
This went fine. My main workstation at home (when I’m not on the couch) for years has been a very comfortable setup with a Raspberry Pi 4 running Plan 9 and nice LG 5K display, so no adjustments are needed there. Client work right now involves web development on a FreeBSD server, which I connect to via ssh and 9p and test the results with either my laptop or my iPad, so I’m just using the iPad now. It does make things like “view source” harder, but that’s rarely an issue with the stack I’m using on the server end.