Kristian Glass - Do I Smell Burning?

Mostly technical things

USB-C: A Rant

(Disclaimer: This is a minimally-edited version of a midnight rant on Discord. Do not expect a particularly nuanced take, this does not reflect my usual level of compassion and empathy, I’m sure the standards authors are smart and wonderful people and I benefit from their work etc.)

I’m sure the spec authors are smart and reasonable upstanding people who believe they are making the world a better place but with all due respect USB-C can absolutely get in the sea. Or at least I wish some very stubbed toes upon people.

There was a brief shining period in my life when USB felt good. I felt like I understood it, I felt like I could trust it. It was simple.

There was a version number, that basically meant “speed”: 1 was “slow as heck”, 2 was “decent” and 3 was “turbo”. There was a letter for the connector: A was for hosts and basically came in maxi only (if you’ve ever seen mini or micro A in real life please let me know), and B was for devices and came in maxi/mini/micro and was really the only end worth mentioning. And that was basically it? And things just worked? And sure, there were quirks like you’d need to try three times to plug something in, but you knew where you stood. Things were simple but effective - if you could plug it in, 999 times out of 1000 things would Just Work.

And then along comes USB-C, which isn’t so much a standard as 14159265 different standards and options all stood on one another’s shoulders under a big-ass trenchcoat. Does C refer to the standard or the connector or something else? I sure don’t know. (Edit: I’m wrong, USB-C refers to the connector, it’s probably more accurate to say my frustrations are with some new version of the USB standard, but I still don’t fully understand what and which, and I’m not alone here!)

Sure, there’s only one connector type now, and orientation doesn’t matter (mechanically at least; I’ll get to that nuance later). But other than that, my life as a user has gotten materially more frustrating.

Because now everything is Smart, or needs to be. You can put Ethernet down it or HDMI down it, except maybe you can’t if one of the devices at the other end or the cable itself disagrees. How do you know if the cable will work? Good bloody question. Devices might negotiate power except they might not and maybe you’ll plug something in to charge and it just won’t and haha sucks to be you. (Edit: In 2021 there were apparently 8 kinds of USB-C to USB-C cable, all visually indistinct)

And the plugs have computers. And I sometimes feel like I have enough computers in my life already without my cables being two computers too. Because now my plugs can be running different versions of firmware, or maybe they’re running something malicious and haha as if I’ve got any chance of figuring that out. (Edit: See whitequark on this and many other bits of USB bonkers up- and down-thread)

There was a time when “my cable has a tiny computer in it” was how you identified the Bad USB Cables because it meant someone was doing Naughty Things and you could smash the cable and be free. But now your cables don’t do the right things if the tiny computers disagree and haha good luck.

And has anyone developed a standard for clearly identifying or labelling what a cable might decide to do? Have they bollocks. (Edit: There is now a proposal, but good luck figuring out what you actually have)

So now I have half a face of stubble because my beard trimmer “charges with USB-C” except I have a USB-C charger here and when I plug it in then precisely nothing happens, which I can only assume is because the charger is expecting it to negotiate power and the beard trimmer is negotiating precisely sod all because it’s a beard trimmer and consists of a battery and a motor and a blade.

I’m going to go wax my face or something.

Update: Adafruit have a (genuinely) helpful guide about USB-C cable types and differences. However it includes this gem:

Always double check a cable’s capabilities before using to power laptops or monitors

I appreciate that the message is effectively a disclaimer, and made with good intent. However it feels akin to being told to write a distributed map reduce function in Erlang in order to query a database - not entirely the most practical of advice…

I think it’s fair to say I’m somewhat technically competent, like, I own USB debug hardware and I even have a rough idea of how to use it. But I have no idea how to “check a USB-C cable’s capabilities” beyond offering up a prayer to Benson. I imagine the average layperson doesn’t even realise different cables exist…!

Update: In attempting to learn which version of USB to hold responsible, I turned to the Wikipedia article on USB-C whereupon I learned that:

A device with a Type-C connector does not necessarily implement any USB transfer protocol, USB Power Delivery, or any of the Alternate Modes: the Type-C connector is common to several technologies while mandating only a few of them.

Good luck.