RSSAmplifier

Blog

Steve Klabnik

Steve Klabniks blog

steveklabnik.comRSS feed ↗231 posts

Latest posts

Too many words about DIDs

Your “Bluesky account” is not just a Bluesky account: it is an account that can be used with a variety of other applications. This post is going to be an exploration of part of what that means from a technical perspective, so if you’re not a software developer, this post isn’t…

Compilers and AI 'cyber' defense

I haven’t had time to blog in a while, I have a lot to say, but have been doing a lot of things and so haven’t gotten words down in a while. One of those things in the past few weeks has been picking back up my Rue project. I’m really excited for what it’s turning into, even…

The most important thing when working with LLMs

Okay, so you’ve got the basics of working with Claude going. But you’ve probably run into some problems: Claude doesn’t do what you want it to do, it gets confused about what’s happening and goes off the rails, all sorts of things can go wrong. Let’s talk about how to improve…

Agentic development basics

In my last post, I suggested that you should start using Claude in your software development process via read-only means at first. The idea is just to get used to interacting with the AI, seeing what it can do, and seeing what it struggles with. Once you’ve got a handle on that…

How to think about Gas Town

I want to continue with my series on how you can use Claude Code for software development , but I have at least two posts I need to write first. This post is one of those two. Thanks for all of the kind words you all have said about the first post in the series, I’ll absolutely…

Getting started with Claude for software development

2025 was an interesting year in many ways. One way in which it was interesting for me is that I went from an AI hater to a pretty big user. And so I’ve had a few requests for a “using Claude” guide, so I figure new year, why not give it a shot? The lack of this kind of content…

Thirteen years of Rust and the birth of Rue

I started using Rust on December 21, 2012. It’s now December 22, 2025. That’s a long time. I don’t have a ton of thoughts about Rust to share today, like I thought I might. I program in the language regularly, it’s nice, I prefer it to all others. I have my beefs and my regrets,…

I see a future in jj

In December of 2012, I was home for Christmas, reading Hacker News. And that’s when I saw “ Rust 0.5 released ."" I’m a big fan of programming languages, so I decided to check it out. At the time, I was working on Ruby and Rails, but in college, I had wanted to focus on…

A tale of two Claudes

It was the best of times, it was the worst of times, it was the age of wisdom, it was the age of foolishness, it was the epoch of belief, it was the epoch of incredulity, it was the season of Light, it was the season of Darkness, it was the spring of hope, it was the winter of…

Is Rust faster than C?

Someone on Reddit recently asked: What would make a Rust implementation of something faster than a C implementation, all things being the same? I think this is a great and interesting question! It’s really tough because it ultimately relies on what exactly you mean by “all things…

I am disappointed in the AI discourse

Recently, something happened that made me kind of like, break a little bit. I’m still not entirely sure why this whole thing bothers me so much, but here’s a blog post about it. I happened to ask ChatGPT something for fun. I often do this just to see what it says, and if I feel…

Rust 1.0, ten years later

It’s kind of hard to believe it’s been ten years since Rust 1.0 was released. I stopped working on Rust three years ago, and frankly, the last three years have been pretty rough. But 2025 is shaping up to be a really good year for me, with lots of positive changes. With that in…

Thoughts on Bluesky Verification

Today, Bluesky rolled out blue checks . And, I was given one. Now, I’m not the biggest fan of this sort of feature, however, I also don’t really think this kind of feature is for me. I really like the idea of domain verification; I have been like “oh okay that’s coming from a…

Thinking like a compiler: places and values in Rust

A while back, someone on the internet asked about this syntax in Rust: * pointer_of_some_kind = blah; They wanted to know how the compiler understands this code, especially if the pointer wasn’t a reference, but a smart pointer. I wrote them a lengthy reply, but wanted to expand…

Does unsafe undermine Rust's guarantees?

When people first hear about unsafe in Rust, they often have questions. A very normal thing to ask is, “wait a minute, doesn’t this defeat the purpose?” And while it’s a perfectly reasonable question, the answer is both straightforward and has a lot of nuance. So let’s talk about…

Choosing Languages

I tried to write this post yesterday, but I didn’t like my approach there. Last night, I had a conversation with one of my best friends about it, and he encouraged me to write this, but in a different way. I think this way is better, so thanks, dude. The other day, Microsoft…

A Happy Day for Rust

A while back, I wrote A sad day for Rust about the Actix-web unsafe controversy. The short of it was, Actix-web was using some unsound unsafe code. When this was discovered, people responded pretty harshly, and the maintainer quit. Others picked up the work, but it still wasn’t…

When should I use String vs &str?

Rust has two main string types: String and &str . Sometimes, people argue that these two types make Rust code difficult to write, because you have to think about which one you should be using in a given situation. My experience of writing Rust is that I don’t really think about…

Against Names

There’s an old saying: There are only two hard things in Computer Science: cache invalidation and naming things. ― Phil Karlton I also appreciate the joke version that adds “and off by one errors.” Lately, I’ve been thinking about this saying, combined with another old joke: “The…

How Does BlueSky Work?

One of the reasons I am enthusiastic about BlueSky is because of the way that it works. So in this post, I am going to lay out some of the design and the principles behind this design, as I understand them. I am not on the BlueSky team, so these are my takes only. Let’s begin.…

Using the Oxide Console

A very, very long time ago, I was introduced to Gerrit . To be honest, I hated it. However, lately I have become interested in divesting from git and GitHub, and so have decided to re-visit various “forges” to see what’s out there. The “why” for this will come later, and I’m not…

Memory Safety is a Red Herring

TL;DR: I think that a focus on memory safe languages (MSLs) versus non memory-safe languages is a bit of a red herring. The actual distinction is slightly bigger than that: languages which have defined behavior by default, with a superset where undefined behavior is possible, vs…

Updating Buck

Hey there! A shorter post today, but I wanted to continue my series on Buck by going over some things that have changed since this series started. Updating Buck Lots of great stuff has been happening since the initial release of buck2, and we’d like to take advantage of that. If…

Using Crates.io with Buck

In a previous post , I laid out the basics of building a Rust project with buck2 . We compared and contrasted it with Cargo. But what about one of the biggest and best features that Cargo has to offer, the ability to use other Rust packages from crates.io? They don’t use buck, so…

Using buck to build Rust projects

A few days ago, Facebook/Meta/idk announced that buck2 is now open source . Buck2 is an extensible and performant build system written in Rust and designed to make your build experience faster and more efficient. As it just so happens, I have taken an increasing interest in build…

Rust's Golden Rule

I find myself thinking about a particular design principle of Rust today. I’m not sure I’ve ever seen it named specifically before, but it gets referred to from time to time, and I think it’s an under-rated but very important aspect of why Rust works so well. I was going to refer…

You're probably learning a technology in its seventh season, not its pilot

I first heard this adage in the Rails space. I don’t know who to attribute this to, but I also never wrote it down. So, time to write it down, and if you know of the origin of this aphorism, let me know and I’d love to put it here! I think that the first formulation of this…

Too many words about Rust's function syntax

There’s a famous quote by Eleanor Roosevelt: great minds discuss semantics, average minds discuss syntax and small minds discuss syntax of comments (Apologies, Phil Wadler.) I’d like to preface this post that I do not consider this to be an actual proposal to change Rust, even a…

Ten Years of Ru...ewriting my website

December 21 is the anniversary of when I first heard about Rust way back in 2012. I used to write yearly posts about it; the last time I did was in 2018 . That makes today ten years. I thought I’d have something big to say here, but… I just don’t. Part of that is because I…

Are out parameters idiomatic in Rust?

There is a pretty straightforward design pattern called “out parameters” that you may have heard of before. In short, the question is, does your function wear pants… err, I mean, does your function modify data like this: fn foo () -> i32 { // body elided } let x = foo (); or like…

The CXX Debate

Let’s talk about safe and unsafe in Rust. To review, Rust has a concept of “unsafe code.” Unsafe Rust is a superset of safe Rust, letting you do some extra things that are dangerous. It’s your job as a programmer to verify that your code is playing by the rules, because the…

Today is my first day at Oxide Computer Company

Today is my first day at Oxide Computer Company , where I will be doing engineering work. When Oxide introduced themselves to the world, I saw a lot of folks who were pretty confused. At its core, what Oxide is doing is very straightforward: you give Oxide money, and Oxide gives…

The next iteration of my blogs

I’ve had a few different blogs over the years. Every so often, I change things. One of the nice things about having your own site is that you can do whatever you want! So, I’m folding my old blogs’ content into my main website. I’m sick of adding new subdomains, and it all feels…

How often does Rust change?

I’ve been thinking a lot lately about how often Rust changes. There are some people that assert that Rust stays fairly static these days, and there are some people who say Rust is still changing far too much. In this blog post, I want to make a data driven analysis of this…

"C is how the computer works" is a dangerous mindset for C programmers

A long time ago, I wrote “Should you learn C to “learn how the computer works”?” . This was part 1 in a three part series. A year later, I got around to part 2, ““C is not how the computer works” can lead to inefficient code” . It’s been five more months. I don’t think I really…

A sad day for Rust

actix-web is dead. This situation is bad, from all sides. When Rust was a tiny, tiny community, I thought to myself, “wow, I wonder how long this will last? Probably 1.0 will kill it.” Sort of playing off of Eternal September , I assumed that over time, the community would grow,…

"C is not how the computer works" can lead to inefficient code

A little over a year ago, I wrote “Should you learn C to ‘learn how the computer works’” . It was a bit controversial. I had promised two follow-up posts. It’s taken me a year, but here’s the first one. In that post, I argued that C doesn’t “work like the computer”, but rather,…

Porting steveklabnik.com to Workers Sites and Zola

One fun thing about having a personal domain is that you can keep the contents the same forever, but take a few days every so often to port it to some new stack you want to try out. A while back, I had my site on GitHub Pages using Jekyll . This has long been the sort of default,…

The culture war at the heart of open source

There’s a war going on. When isn’t there a war going on? But I’m not talking about a physical war here: I’m talking about a war over meaning. This particular war is a fight over what “open source” means. Let’s take a few steps back. The Free Software Foundation People organize…

I'm joining Cloudflare

Yesterday, I signed an offer letter from Cloudflare. I’ll be the product manager of Storage, which is the part of the company that’s working on data storage products for the Cloudflare Workers platform. I’ll be starting at the end of the month. I think a lot of you will say “that…

What comes after open source

In a previous post , I discussed the history of open source, and ended with this claim: Today’s developers have never learned about this history, or don’t care about it, or actively think it’s irrelevant. … For the same reasons that “open source” came up with a new name, I think…

Rust has finally outgrown me

Today is a very interesting day. It’s giving me a lot of feels. Today is Rust Latam , a Rust conference in Montevideo. And I’m not there. This is significant because, as far as we know, I’m the only person who has been to every Rust conference in existence so far. I went to…

Learning Ada

I decided to try and learn Ada. I love programming languages. This post documents my attempt, and explains what I learned. This is pretty stream of consciousness and basically is a bunch of random notes, so if you hate that, better close the tab. I typed my thoughts up pretty…

What's next for SemVer

On December 18, 2009 1 , the Semantic Versioning specification was announced. More commonly known as SemVer, it provided guidance for developers regarding software versions: I propose a simple set of rules and requirements that dictate how version numbers are assigned and…

thank u, next

I started working at 15, when I took a job as a pizza cook. Over the next seven years, I moved up the ranks, to a driver, shift manager, and then as part of the “new store opening team.” The franchise was growing, and we needed to help new franchisees open their new stores. I’d…

Thoughts on Rust in 2019

Each year, we ask the community to write blog posts about what they want to see on Rust’s roadmap for the next year . This is my post for Rust in 2019. Rust 2021: Maturity This year is also a bit special; in 2018, we introduced “editions” to Rust, on a roughly three-year…

Six years with Rust

Today is six years since I first heard of Rust. I wrote a post last year about it. This past year was… intense. Rust 1.31 was basically Rust 2.0, at least in the marketing sense. I burned myself out getting the first edition of the book together for Rust 1.0, and I burned myself…

Why is Clojure so stable?

There’s been some Programming Language Discourse lately, and I have some thoughts. It’s mostly centered around a comment on the orange website : I would put it simply: Clojure was designed by a thinker, who creates when he is away from the keyboard, not in front of it. When one…

Borrow checking, escape analysis, and the generational hypothesis

There’s a fairly common argument that pops up on programming forums, and it’s about the nature of what “garbage collection” means. In the research world, this is what GC means: Garbage collection (GC), also known as automatic memory management, is the automatic recycling of…

Should you learn C to "learn how the computer works"?

I’ve often seen people suggest that you should learn C in order to learn how computers work. Is this a good idea? Is this accurate? I’m going to start with my conclusion right upfront, just to be crystal clear about what I’m saying here: C is not “how the computer works.” I don’t…