uni.horse / review: framework 16

(I'm updating this post as I discover things I didn't yet know when I wrote it. Updates are added as footnotes in the relevant section; the original text is left unchanged.)

I broke my laptop screen. It was extremely annoying to find a replacement screen. So I bought a Framework 16 to replace the whole machine.

It's hard to find reviews of things that aren't one or more of {sponsored, clickbait, written by someone who focuses more on random Windows features than the hardware}! So I'd like to start writing them when I can, under the impression that a blog post on some random person's website is hopefully more trustworthy.

I hereby promise that if a company ever reaches out to me to review their thing, I will accept the free item, then write the most scathing review possible, interleaved with relentless mocking of their marketing department for thinking this was a good idea.

background

How someone feels about a computer — or any tool, really — will depend greatly on what they're doing with it. Your experiences may vary, the further your usage patterns are from mine.

I run Arch Linux as my OS, and i3wm as my desktop. My heaviest workloads consist mainly of compiling C++ code and running Electron apps to chat with my friends. I also do electronics and CAD work sometimes. I do very little on this machine that benefits from a GPU fancier than an average integrated one.

I leave applications running on inactive workspaces like some people hoard browser tabs, so I tend to max out the RAM on every machine so I can run without swap. I strongly prefer larger laptops (15 inch is my absolute minimum, ideally 16-17), which is the main reason I didn't consider something like an MNT Reform.

I don't care very much about portability or battery life beyond absolute minimums; it's rare for me to leave the house with my laptop, and if I do, I'm going to another place that has power. I do sometimes use my laptop from the couch or from my electronics workbench without external power, and that's the main reason I use laptops instead of desktops, but the vast majority of the time I either have a charger connected or can easily get one.

The laptop I'm switching from is an LG Gram 17.

ordering

Ordering was generally a pleasant experience. My configuration at order time was:

Framework will sell RAM with the machine but it's over twice the price, as seems to be fairly normal with laptop manufacturers. Usually what I do here is order the smallest amount of RAM they'll let me pick (usually 4GB), and then immediately remove it and install my own RAM, and then give the 4GB stick to someone later.*1

They have a RAM compatibility list, which says "we sell Framework-branded RAM, but really it should work with anything following these specs; here's what we've tested ourselves", and call out a bug with certain configurations with sufficiently old Linux kernel versions. A hardware manufacturer linked to a specific commit in the Linux kernel on their official site. My mind is blown.

I do find myself wondering why they made their own RAM modules instead of just ordering a batch from literally any existing manufacturer. That strikes me as an odd choice; there's nothing special about theirs as far as I can tell. I also note that they offer 96GB as a configuration for their DIY machines while not listing it on their compatibility list. I assume this is "the problems got fixed and we never went back to update the compatibility list", but I haven't asked.

I placed my on 2 February, received a tracking number on 7 February, and received the laptop on 10 February. On 5 February, I emailed them to ask if they could add an HDMI port to my existing order, and whether the ongoing nonsense in the US government at the time had interfered with their shipping (they ship from Taiwan, but it was unclear whether the US was differentiating between Taiwan and mainland China). Their responses were, respectively, "Unfortunately, as this is an in stock order and not a pre-order, the order was locked and transmitted for processing and shipment. As such, we are unable to make modifications to those orders." and "We are actively monitoring the situation around importing into the US to avoid or limit impact to our customers. At this point in time, we haven't had any disruptions with our shipments."

  1. I still have a 4GB stick from when I did this with my work machine; I have no idea what I'm supposed to do with it since it's technically not mine, and it seems weird to ask.

assembly

It came mostly assembled. Only the keyboard, bezel, and expansion modules were packed separately. I first had to remove the touchpad and mid plate to put my RAM and hard drive in; I assume they come preinstalled on non-DIY machines. They have official guides for this, which is nice.

The base of the laptop disassembles from the top (keyboard) side. I had an overwhelming sense of dread upon realizing this, because every laptop I've had that disassembles from that side has been an absolute pain in the ass to work on, but I persevered.

The keyboard and touchpad attach with magnets and latches. Under those, there is a thin sheet of metal with some pogo pin connectors called the mid plate. I emphasize "thin" here; it bends under its own weight and feels like you could easily damage it. That connects to the mainboard below it with a ribbon cable, and is held down with 16 screws. All of the screws in the machine use the same tiny Torx head; they included a screwdriver with it.

With the mid plate removed, the RAM and SSD slots (and the battery, which I didn't have to mess with) were easily accessible. No surprises or problems here, they're standard slots and they install like any other SODIMM RAM and M.2 SSD.

While I was in here, I disconnected the speakers (I don't use onboard speakers in any laptop, and unplug them as a guarantee that my machine will never unexpectedly start playing sound out loud). I didn't consult the guide for this, I just removed the thing below the screen that looked like speakers, and... nope, that's a fan intake. The cable going up there was for the fingerprint reader; there are no other parts mounted on it. I reinstalled it and consulted the guide, which informed me that the speakers were in the two corners of the base furthest from the screen. I didn't bother removing these, just disconnected the cable and put a bit of tape over it to keep it from bumping into anything. As a result, I will not be reviewing the speaker quality, other than to note that I've seen other people complaining about them, and that they sound pleasantly silent to my ears when physically unplugged.

A bit of thermal strip fell out when I removed the mid plate, with no indication of what it was for. It turns out this is for the SSD, which I learned from this mildly infuriating Reddit thread in which a bunch of people say "stop panicing" and then one person actually bothers to say what the thermal pad is for.

Putting everything back together, I noticed the keyboard spacers have pogo pin connection pads on them. I don't know why.*2

The screen bezel goes on with magnets. It's very secure. I later tried to pull it off to show my partner and couldn't do it without a pointy tool to pull the two parts apart first.

The input modules are all just USB-C to whatever dongles, in standard-sized rectangular cases sized to fit flush with the rest of the case. They're held in with more latches. There appears to be nothing particularly special about them otherwise. You can take them out and use them as adapters in other USB-C ports. It's a clever system. I'm glad they used USB-C and didn't make up their own weird standard here.

  1. I did try pulling one out while watching dmesg to see what disconnected, but it turns out this disconnects all the inputs. I am now even more intensely curious. Maybe something electrically requires something to be on each pad or else none of them work?

first boot

My first problem here was I couldn't find the power switch. I had to consult the manual to figure out how to turn my laptop on. I think this means I am now old. (It's the fingerprint reader. You lightly touch it for fingerprint reading, and press it down for power button.)

It took long enough starting the first time before any screen output that I started to get nervous something was broken. Finally I got my first screen output, a message telling me I had no bootable devices. I haven't had this happen since the first boot; I don't know exactly what it was doing.

build quality

First impression: it's thicker and heavier than my old laptop. It is obviously made of metal. I could smack someone with the bottom and they would probably take more damage than the laptop. This is a desirable property for electronics, in my opinion.

The screen flexes a bit, but less than the LG's did. It feels about as solid as the screen on the 15-inch Dell Inspiron I use for work.

The touchpad spacers aren't perfectly level with the touchpad module and the edges of the laptop. Depending on exactly where they land relative to each other, this sometimes resulted in pointy corners poking my wrists and forearms. I briefly considered various methods of fancy precision shimming, but then thought of an easier way: just file the offending corners down with a nail file.*3 Barring re-engineering into some totally different system, I probably would've just filleted all the external edges at the factory; this creates a bit of a groove to collect dirt, but they didn't fit together perfectly and kind of had that problem anyway.

The outer edges, though, are filleted. As they should be. I wouldn't expect to have to call this out, but LG put very sharp edges on the Gram and it tends to be mildly uncomfortable to rest my arms directly on it.

  1. Or a bit of very fine-grit sandpaper, if you're not the sort of person who has a nail file nearby.

aesthetics

I got the keyboard spacers, bezel, and USB-C ports in lavender. It's a pretty color on its own, but honestly, it looks pretty weird next to the silver of the rest of the case, like someone tried to color match from a photo on a very poorly calibrated monitor. It's fine on the bezel, but I'd probably do all silver spacers and ports since those look like they're supposed to match due to their placement next to silver parts.

It's got a Framework logo on the lid, but no other logos or text anywhere visible, which is nice. The logo is entirely inset in the lid, so it should be easy to cover with a sticker (I am not a huge fan of visible branding on things).

compatibility

So far I have seen no bad effects from running with 96GB of RAM.

Everything onboard seems to work with mainline Linux and whatever autodetection Arch does by default. I didn't really have to do anything.

I briefly ran Wayland on it, but then switched back to X (nothing to do with this specific hardware, just that Wayland itself still isn't quite what I want it to be). Both ran fine, no fiddling with settings required.

USB-C to HDMI adapters have historically been very fiddly for me on Linux. The one built into one of my chargers didn't work, but it didn't work on my old laptop either, and I never found out why. I ordered one of Framework's HDMI port modules in a separate order (arriving next week, as of when I'm writing this) and look forward to seeing if it will work reliably. If it does, and doesn't spontaneously stop working later for no clear reason, I will be Very Impressed. I'll update this section later with results.*4

I have a mildly horrifying chain of USB hubs under my desk that are all connected at once in a sudden flood of "HELLO I AM A NEW USB DEVICE" when I plug in the USB-C cable at my desk. This laptop occasionally seems to have trouble enumerating the last one in the chain. Worse, it keeps trying to enumerate them after I unplug the USB-C cable, as if it noticed there were new devices there but never got around to noting where in the USB tree they were and so didn't realize they had gone away. Attempting to run lsusb then hangs until it manages to get out of that state. I have never seen this before and will have to do more investigation before I decide whether to blame the laptop or Linux or the hub.

  1. Update 2025-02-18: It arrived. It was exactly as fiddly as every other one I've used. It does work now (despite X thinking it's actually DisplayPort), and I do not know what I did to get it to work. I am only moderately confident I won't have to mess with it again in the near future. I miss when we had different ports for different types of devices.

keyboard*5

This is probably the nicest laptop keyboard I've used. In desktop keyboards, I use tactile mechanical switches, and these feel a lot like those but with less key travel.

They are, however, still regular scissor switches with rubber domes under them, the same ones I absolutely hate because inevitably I will launch one or more of the tiny bits inside across the room and spend the next 20 minutes looking for. Like I just did, before coming back to this review to add this paragraph. I had remapped a couple of keys and was considering swapping the keycaps to match, but for now I have decided to just put that one back on and not touch it.

It also runs QMK, one of the major firmwares for those fancy mechanical desktop keyboards. This seemed exciting at first, but when they say "QMK" it turns out they mean a two-years-out-of-date fork of QMK that they show no interest in keeping up to date or merging upstream. It's so unmaintained that the sole maintainer has had most of their own issues closed by a stalebot, including the one saying "hey maybe we should merge this upstream".

So I did it myself. It wasn't very hard. It took me about an hour, done in the background while I was playing D&D. (I have worked with both Git and QMK a lot before though, enough to already know my way around.) I'm now running a recent QMK on my own keyboard, and also kind of passive-aggressively submitted the single largest pull request I have ever created by a couple of orders of magnitude to them to see if they could be poked into realizing the problems with this.

This is a failure mode I see in a lot of OSHW-and-adjacent projects, and seeing it here was the first big disappointment for me. They build flexibility into the thing, and make a big deal about how their firmware is open source and can be customized and used however you want. But they don't make plans for anyone actually using that flexibility, and the ability to use it bit-rots away.*6 Eventually nobody even tries and everyone's running the same stock hardware and firmware and never looks at the sources anyway, and nothing's actually any different than it would have been if it was closed source. It's the same problem you run into with a lot of ARM SBCs, where theoretically they run any ARM Linux distribution, but practically you either get a Debian image someone bodged together once and hosted on Dropbox, or you prepare to spend weeks screwing around with stuff manually because none of it is properly documented. I hope Framework's gestures toward open source don't fall into that trap.

I get the sense they have The One Guy Who Knows QMK Stuff and he's been busy working on other things. Sufficiently small companies do wind up in situations like that annoyingly often (I specifically have often been that person). But the results can still be disappointing even if I understand the causes.

  1. Update 2025-02-19: the keyboard and touchpad have started occasionally dropping off the USB bus while typing, and reconnecting a couple of seconds later. I suspect one of the input module connectors is flaky. I am contacting Framework support and will update this later.
  2. A certain other project I've contributed to recently may think I'm calling them out here. My work there is an attempt to stop this from happening to you, and that you're willing to engage with that instead of just declaring "no, that's unsupported, go away" is good enough for me. You're cool. :)

camera/microphone

There are two switches at the top of the screen, controlling the microphone and camera. They aren't the type I'm used to that physically cover the camera. The camera one appears to disconnect it from the USB bus, and the microphone one mutes the microphone audio (presumably by disconnecting its wires as well). One side of each switch is red and one is black, but it's not obvious at all which way is on and which is off. I experimentally determined that for both, inward (switch moved toward the camera lens, red showing from behind the switch) is off, and outward (black showing) is on.

The camera is about average quality for a modern webcam. It's fine for my uses.

The microphone is extremely sensitive. 30% volume or so seems like the maximum usable.

In practice, I will rarely use the camera and definitely never use the microphone (for the same reason as the speakers: I use a dedicated headset when I want audio), and wish I could have bought a laptop without them. I'd like to have the physical thing over the lens as a definite, obvious "this camera is not functional" reminder. But disconnecting the camera from the USB bus does mean stuff won't autodetect it and go HI I WILL TURN ON YOUR CAMERA FOR YOU, YOU'RE WELCOME, as modern software loves to do, so that's nice.

firmware

It's UEFI, without all the things that usually make me uncomfortable with UEFI. There's a button right there in the boot menu to execute an arbitrary UEFI binary. You can disable secure boot, or enable it with your own signing keys. This is the first time I've willingly used UEFI instead of running away screaming because I know it'll cause me immense pain the moment I do anything that's not officially supported.

I'm planning to try the self-signed secure boot thing at some point, but I have not yet.

power usage

I'm using powerprofilesctl set power-saver with its default settings as my only power management setup.

The battery was 100% charged when I started editing these notes into a review at 12:20. Three hours of light text editing and web browsing later, at 15:20, it's at 66%. Extrapolated, this is about 9 hours of battery life for light use.

things I am not that picky about but will try to comment on anyway

Screen: It's matte, it's fairly high resolution, it looks good to me. Default brightness is blinding and I usually run it around 20%.

Trackpad: It's a standard trackpad, of the "fixed mount at the top edge, entire rest of it is clickable but it's easier to press down the further you get to the bottom" type. No separate buttons. It works fine. It supports the usual libinput settings for things like tap-to-click and scrolling direction and disable-while-typing. It is neat that you can move it between left/right/center positions.

Fingerprint reader: I've had laptops with these before, but never decided to actually use them. This time, on a whim, I set up sudo to accept a fingerprint as authentication.*7 It seems to work reliably, maybe somewhat more reliably than my phone's fingerprint reader.

  1. I only really have it prompt for authentication at all because some programs — looking at you, Ruby package managers — think it's okay to just run sudo on their own whenever they want.

so yeah, it's not perfect, but it's better than most other things

I'm overall satisfied with it so far. It's a laptop. It feels like a finished product and not an alpha testing device. It's made by people who trust that I know what I want better than they do. And next time I manage to break a screen, it'll probably cost a lot less.