So, my trusty M1 Macbook Air running Asahi Linux is, well, trusty, but it doesn’t have the screen space and power I really want out of a personal workstation. So, I took a look at what Macs Asahi Linux supported, saw that M4 support isn’t coming anytime soon, and did the open source right thing and bought an older one decided to give macOS another try.

My Reasoning Beforehand#

There were a few reasons I ended up deciding to do this.

First, my development workflow had changed—and by “development workflow,” I mean my workflow for writing fiction, this blog, my todo lists and personal calendar, as well as the fairly limited level of software development I do in my personal life (I’m a hobby tech writer/educator more than a hobby programmer—work gets most of my actual productive coding).

How had it changed? Well, as you can see in my most recent organization post, I previously used gvim and a terminal in a tiling window manager as my way of interacting with computers. My current job requires me to use Windows (boo!) on my work workstation (“at a train station the train stops, at a workstation the work stops”—because it’s running Windows), and so I ended up actually biting the bullet and seeing if this whole VSCode thing could be made somehow remotely tolerable.

Turns out, yes. Mostly because it’s vim support actually works, and then it turns out that I like having the terminal at the bottom, multiple tabs of files, directory structure on the left, and all that fun stuff, on a bigger screen.

So, I start using VSCode at home, with my tiling window manager still, and now my monitor suddenly seems small. I’m becoming a normie with normie complaints. Perhaps my ADHD meds are normalizing me too much. But in any case, I decide to get a laptop with a larger monitor to keep up with my normal consumerist needs I’ve suddenly developed.

And it turns out I now usually have exactly one window per screen. That’s what macOS does! So, maybe I can use VSCode in macOS and not feel like I’m missing out by not having terminal and a vim window—b/c mvim+Terminal.app+futzing with the macOS window manager don’t cut it, but maybe just full-screening VSCode can!

Secondly, I still did boot my Asahi Linux computer into macOS for things like:

  1. Family book club
  2. Online medical appointments
  3. Remote Spanish lessons
  4. Remote Netflix and YouTube watches

Mostly, I don’t want to be bothered with Bluetooth on Linux. I don’t even know if Asahi Linux has support for it, it didn’t instantly work and so that’s more effort than I can deal with. If I don’t know when starting a project how long it’s going to take, I tend to assume it takes infinitely long and therefore I don’t attempt, unless I really have to. To be clear, this is a character flaw and I’m working on it in general—but I really am not working on it when it comes to signing up for random sysadmin-type IT projects.

But then, if I could tolerate doing my Productive Work™ on macOS™, then it’d be more convenient for me not to have to reboot the daggone thing every time I wanted to do a different thing. Then I could make plans in my organizational repo while having a Zoom conversation.

Thirdly, macOS command line isn’t as messed up as Windows command line. I could probably even use VSCode locally on macOS. How hard could it be?

Like, Apple is Unix. Irrelevantly but endearingly, it’s even trademark Unix, for which it has to pass a real battery of certification tests from an organization much less relevant than Apple which has somehow ended up the government’s designated judge of who gets to call things Unix (by which I mean, the owner of the certification mark).

Of course, by the more reasonable definitions, Apple is Unix like Linux is, because it supports the Unix/POSIX API. It’s also Unix in a way that Linux isn’t, in that it’s based heavily on FreeBSD, which is a genetic Unix.

Trademark, work-alike, and genetic! True Unix!

Probably the weirdest one—neither X nor Wayland, organizes apps in this weird way it inherited from NeXT, and like, Cocoa couldn’t be further from Unix in vibes. It really seems like two operating systems, a Unix CLI and a GUI, just awkwardly adjacent to each other, sharing a file system and maybe a few low level kernel components but little else. While Apple’s advertisements may lead you to believe that the operating system is “layered onto” Unix, I think many of the modern features work around large swaths of the Unix layer.

But, well, it has a Unix CLI, so that’s fine. I can deal with a case-insensitive filesystem (oh crap, can I?) in exchange for having my life-as-consumer and life-as-producer on a single device. At least I wouldn’t have to learn Powershell.

Of course, it’s also a proprietary Unix by a condescending monopolist (though not in workstations) who thinks users need to be dumbed down to. But while Apple is evil, I don’t tend to mind buying things I find useful from evil companies. I don’t really believe in the power of boycott, but rather in the power of antitrust enforcement, to fix the type of problems that Apple has.

I don’t want to try to enforce antitrust by boycotting evil companies—because it would hurt me, a neurodivergent human who can barely juggle all the tasks I have, more than it would hurt those companies. I think contributing to open source and the general education/awareness I do of the issues of big companies contributes more to stopping them do evil than withholding from them my small pile of dollars.

And how our system is set up, getting a proprietary workstation operating system from Apple or Microsoft means that everything consumerist Just Works out of the box for me. And that’s kind of ideal for me. Again, I’m not really a big believer in boycott, nor the notion that purchasing something is automatically complicity in whatever evils anyone working at that company has ever done.

Now That I Have It#

Yay, all the consumerist stuff works out of the box! I mean, basically.

Window Management#

The window management is a disappointment. It’s fine, I’ll get used to it, but eh.

So, yes, you can full-screen VSCode. And your browser. And your iMessage, your Mail client (good ol’ Mail.app, wonder if it has any overlap with the NeXT version), etc. But they always start not full screen. Which is dumb, because I kind of never want overlapping windows. Why would I?

Additionally, Cmd-Tab cycles through applications not windows. So if I have like, 5 VSCodes open, I only see one VSCode icon. Fortunately you can swipe with three fingers instead, and that cycles through full-screen windows, but this was not obvious, and like, I’d like:

  1. A key combination please to rotate between ALL window/screens
  2. Labels of what project’s in what window/screen
  3. Option-N to take me to a specific window/screen

I understand there’s also virtual desktops on macOS. But I don’t know how that interacts with the normal full-screen app feature, which also seems to work like virtual desktops. These two different features with overlapping use cases can’t, I feel, interact in a way that’ll be easy on my already overwhelmed cognitive load. I’ll try it, sure, but I’ll probably stick to full-screen-windows-three-finger-swipe mode for a while.

I do like that there’s absolutely no user interface elements outside of my window. I like web browsing with no URL bar until I want one, no back button even, just the website displayed directly on my monitor. That’s nice, actually.

iCloud#

Moved my files around. It just moved my files around! I apparently “upgraded to Tahoe” even though this laptop’s almost new, and I already had enough files that it put them separately from my existing iCloud files and put my Documents folders’ contents into Documents-dictatorship and dropped me into Finder, which was running backround jobs to sync files who-knows-where.

It was all git repositories so I ended up just checking them out fresh.

Finder#

My experience with Finder is that it’s flaky, featureless, oddly unstable, and nowhere near as good as any random other file manager app—or just doing file management in the CLI. I gave it another chance for like two minutes, found it overwhelming, and gave up.

Annoyingly, it seemed more than 2 minutes of work to add “Open in VSCode” to the context menus of folders. I feel like the VSCode installer should just do this, but they do not. I guess I’ll just use VSCode’s interface for opening folders. On a related note, I think opening a new folder in VSCode should default in doing it in a new window, rather than replacing the current window. Why would I want that?

Also, isn’t it weird how the words “folder” and “directory” coexist? When do I use each? Because I definitely use both, and I’m pretty sure I’ve mixed them up in the same sentence before. I don’t know why “directory” was seen as too user-unfriendly such that someone (was it Apple originally?) decided “folder” was a better name. In real life, in the material world, I’ve never seen someone put a folder inside another folder.

VSCode#

Hey, there’s a difference now between Ctrl-C (terminate process) and Cmd-C (copy). There’s a difference between Ctrl-V (block highlight) and Cmd-V (paste). This whole split between Cmd and Ctrl is super nice. It also feels comfortable on the hands. I like this part.

Of course, this shows up only when using the terminal (so in VSCode or in the terminal app), because no other apps really Unix. But that’s OK, because I feel like I spend 90% of my time or so in VSCode anyway, so that’s nice.

Btw, the M4 Pro is so much faster than the M1 Air and it shows! This makes sense, but man.

The CLI#

Homebrew was easy to install. So was Rust. My blog deps were a little harder, but not actually hard. zsh is fine. BSD coreutils are fine. I haven’t even had to think about either of those adjustments yet, just, oh tab completion looks a little different, sort of thing.

SIDEBAR: I never was like, an ideological fan of bash anyway. I’m not an FSF/GNU groupie, I say Linux not GNU/Linux, I honestly think the Unix tradition’s contribution to modern Linux is bigger than the small part of the implementation that happens to be specifically GNU, and that Richard Stallman isn’t standing up for free software but his own ego and neuroses with his naming inflexibilities.

I do think that basically all software should be open source. I’m comfortable saying “open source” because that’s the word people know. Yes, I care about it being open source with full software freedoms, but yes, most people who use the phrase “open source” do too.

“Free software” is confusing in English, and as much as you want to argue libre vs gratis, everyone thinks it means gratis, every time. “Open source” won the naming war except for a small set of ideologues.

This post must make me sound like such a corporatist and some sort of sell-out to those same ideologues, which I’m aware of but kind of amused by, just shaking my head over here.

Random papercut: htop requires sudo—weird.

Some things perplexed me—apparently when you ls inside Documents, the “Terminal” needs permission to access the documents folder. How does the ls process inherit the “Terminal”’s profile of permissions? What’s that even mean?

There’s actually really deep implications here. If I write a CLI app, do I have to program to this interface? Will my open(2) system call invocation just block while my operating system does a SURPRISE GRAPHICAL DIALOG BOX saying that the Terminal app wants to access my Documents directory? What if I try to use non-blocking I/O—does that just, not work because I’ve tried to read the Documents directory? Does it just fail, even though I have the Unix permissions I need? How does the open(2) syscall trigger a dialog box??

Like, is anyone using this thing on the server? I guess besides probably Apple, mostly not? Nevertheless, I found this little thing shocking, and amusing, and oddly quaint, and so foreign.

I’m not going to research it, but feel free to explain it to me if you happen to know.

Summary of Experience#

IDEs are great! VSCode is really cool! I cared more about vim keybindings than actual vim, the entire time, and just couldn’t be bothered to change. macOS just kind of feels nice and comfy.

I’m into bigger monitors now. I’ve become extremely normie. Next, I suppose I’ll have to learn who actually plays for the Eagles or something, and when football season even is.

Feelings#

Well, I do have some reservations.

First off, that thing I pointed out, where I can’t switch between windows with a key combo, only between apps—that’s annoying. And it’s more philosophically annoying because I’m at the mercy of Apple about it, which is unnecessary.

Theoretically, in Linux, I could fix any papercut with any program I ran. I can fix the code, or I could find an alternative to any program I would run that doesn’t fit my workflow. If I don’t like the window manager which comes with the system, I can use a tiling window manager instead, that meets my specs. I know that given enough work, I can change anything.

And even if I weren’t a programmer, that still is important to me. I know that others out there can help fix problems. I know that if a problem is common enough, or serious enough, there’ll be a fork. Every piece of software, including system software, has an alternative.

Even the kernel, even Linux itself—I could switch to FreeBSD if I wanted. I can find an alternative build of the kernel. I can have a different distro for different package management.

As long as I’m using macOS, though, I’m in this special garden where most of the components aren’t freely switchable. I know there’s ways of customizing macOS, but there’s also, in the end, a corporation that doesn’t have my best interests at heart. Realy, that’s why I’m using macOS—they switched up how bootloaders worked, and didn’t publish the docs, so Asahi Linux couldn’t keep up with the new Macs. Being able to use macOS sometimes on a new computer has implied for me that I have to use macOS.

I don’t like this situation, philosophically. I’ll probably switch back to Linux/macOS dual boot when it catches up. I’ll certainly look into virtualization options—that’s on my TODO list.

But again, I’m not a real believer in boycotts as a way to make change. Taking revenge against the system hurts me way more than it hurts the system, in general. But I do want to do something about this. I’d really like a workstation computer as good as the Mac, with support for everything Apple supports in the land of being a “consumer”—by which I really mean, texting, voice calls, seamless headphone usage, not having to troubleshoot anything—but that runs an operating system that’s customizable and open source.

I’ve fantasized many times about making my own brand of workstations, running my own office suite, my own GUI, maybe a Linux kernel but it’s a fantasy so I can write my own kernel. I really admire SerenityOS, another person’s journey to do exactly that. I would enjoy, I think, writing my own SerenityOS in Rust, with my own aesthetic.

But I know I don’t have the bandwidth. We’ll see how this macOS experiment goes.