Latest Posts (20 found)

Eliminating Nondeterminism in LLM Inference with Integer-Only Arithmetic

A while back, Thinking Machines published Defeating Nondeterminism in LLM Inference , which explained why greedy decoding isn’t deterministic in production. In theory, at temperature 0 a model always picks its single most likely next token, so the same prompt gives the same answer every time. In practice, when they sent one prompt 1,000 times, they got 80 different answers. 1 The problem is that floating-point addition is not associative . $(a + b) + c$ and $a + (b + c)$ can round differently. A GPU sums thousands of numbers for every token, and the order it sums them in depends on things like how many other requests are in the batch. Change the order, change the rounding, and occasionally change which token wins.

0 views
Unsung Today

“Both of these screens end with Dig Dug dying.”

A fun video by Power Pak about the “attract mode” in a vintage videogame Dig Dug: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/both-of-these-screens-end-with-dig-dug-dying/yt1-play.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/both-of-these-screens-end-with-dig-dug-dying/yt1-play.1600w.avif" type="image/avif"> The attract mode played on a loop when the game was left alone in the arcade, waiting for a customer. From the name, you might assume it was just there to lure a passerby – show a fun logo, a few snippets of the game, some signature special effects and occasionally even sounds. The video argues that for Dig Dug any many other games it was a lot more than that, with its recorded sample gameplay chosen very intentionally to achieve a few goals: The video then compares it to a few games that didn’t do such a great job, and even some modern games. Reaching you how to play Showing you advanced tactics Taunting you to do better

0 views

Bliki: Generated Glossary

When we use LLMs in a specialized domain, such as the operations of any reasonably-large organization, there is a lot of specialized vocabulary. Such words and specialized meanings will be foreign to an LLM because they aren't in its training set, making it harder for the LLM to be effective when doing tasks in that domain. One technique to aid this is to use an LLM to generate a glossary of the terminology in that domain, and make this glossary available for any LLMs doing work in those circumstances. The sources for the LLM can be any material within the organization concerned such as documents, emails, and chat logs. In some cases getting transcripts of audio or video may be helpful, although most organizations generate enough text to do the job. The glossary-generating LLM should look for single words, and phrases of several words that regularly hang out together to form a meaningful term. The generator should be asked to identify terms that are new to it, but also known terms that are being used in unfamiliar ways. The latter can often cause the most confusion. Once we have a list of specialized vocabulary we can ask the agent to produce a glossary, with definitions for each term. Some terms may be used in different ways, in which case the LLM should provide alternative definitions, with a note as to what context the differences appear in. The LLM can be asked to follow the output format of a dictionary, with a focus on precision and conciseness. Once we have a draft glossary, then human experts in that domain should review it, and amend it for cases where the LLM has got the wrong ends of sticks. We then put the glossary somewhere where any other LLM can use it. It should be in a form that's easy for the LLM to consult, and minimize the tokens the LLM should consume in order to find meaning. We should set up a schedule to review and refresh the glossary at regular intervals, by agents and humans. We should keep it in version control, so we can see how it changes over time. Large organizations often have subtly different definitions in different places, essentially following the Domain Driven Design notion of Bounded Context . Source code can be a particularly interesting bounded context, allowing folks to understand how terminology is used within a code base. Sometimes a single glossary can span several of bounded contexts, but at other times it's better to have separate glossaries for each one, allowing LLMs to consult whichever glossaries that are relevant to what they are doing. I'd urge everyone to resist any temptation to create a single, standard, glossary - I've yet to see that work. Often the value of a glossary isn't to nail down a single definition of a term, but instead to highlight its different usage in different contexts. When there are different bounded contexts it can be interesting to compare different glossaries, or to get LLMs to compare glossaries and describe differences in usage. Comparing a source-code derived glossary to a human text can be particularly instructive. If the glossary is large, it can be worthwhile to only include the terms and links to definitions as part of the initial context. The model can then use the links for only the full definitions it needs while working. A glossary can be used in several ways within Agentic Engineering . Glossaries can inform generation of code, so that names within the generated software fit the particular vocabulary of the enterprise. Sensors in a harness can check for this usage, both in the internals of the software and in the user-interface. When generating code or documents, we may introduce new bounded contexts. For example, internal names that may be used within an organization should not be exposed in a customer-facing UI, because such internal terms are likely to be only confuse a customer. In this case a customer has a different bounded context to the part of the enterprise serving them. It's often useful for glossaries to include terms that should not be used, in which case it includes advice on what other term to use instead. Terms that are deprecated can be handled in this way, with glossary entries that indicate what period of time a term should be in effect. In my conversations with people working with agents in large organizations, a common theme is the difficulty of specialized language. This encourages the activities of domain modeling, building ontologies, and constructing explicit context layers in enterprise data . Getting LLMs to generate a glossary is a simple, but useful, part of this work. Eric Nagler and Unmesh Joshi related their experiences doing this activity and thus inspired this post. Amy Pellegrini, Annie Luxton, Arun Srinivasan, Chris Ford, Daniel Terhorst-North, Dave Farley, Eric Nagler, James Shore, Jason Yip, Jimmy Nilsson, Matteo Vaccari, Michaël Le Barbier, Pete Hodgson, Pramod Sadalage, Ravi Vats, Unmesh Joshi, and Valentyn Logvynskyi commented on drafts.

0 views

An Interview With Roblox CEO David Baszucki About Aggregating Play

Listen to this post: Good morning, This week’s Stratechery Interview is with Roblox CEO David Baszucki . I’ve interviewed Baszucki twice, in February 2022 , and November 2023 . What struck me about this interview is just how much AI has changed the landscape for Roblox. This was a company predicated on the concept that anyone can make a game, but now, for the first time, literally anyone can make a game. That means a world of abundance, and in that world, there is an opportunity to be an Aggregator, and Roblox is aggressively pursuing that opportunity. To that end, we discuss how AI has changed Baszucki’s view of what is possible, what goes into a game creation harness, making games on your phone, and the power of recommendation. Then we talk about Roblox’s vision of a universal player, where a Roblox game works everywhere, and Roblox Everywhere, where Roblox developers can use the platform beyond the Roblox app. We also touch on advertising — the natural Aggregator business model — and whether Baszucki still thinks he is building the metaverse. As a reminder, all Stratechery content, including interviews, is available as a podcast; click the link at the top of this email to add Stratechery to your podcast player. On to the Interview: This interview is lightly edited for clarity. Topics: The AI Impact | A Game Creation Harness | Roblox Build | Roblox Discovery | Universal Player | Roblox Everywhere | Advertising | Metaverses David Baszucki, welcome back to Stratechery. DB: Thank you, Ben, for having me back. It’s great to be here. So this is the third time I’ve interviewed you, and I want to sort of put that in an interesting context. First, you started Roblox in 2004, you went public in 2021, you first talked to me in 2022 and again in 2023 , that’s like a nearly 20-year stretch. Now it’s 2026, and here’s my question: Is the world more different for you now, compared to three years before, than it was for the entire first two decades from starting the company to the last time we talked? DB: The changes in the world we all feel are sure happening a lot more rapidly. When we first published Roblox — I don’t know if people on this podcast remember — software used to be distributed on floppy disks and CDs. You know, the funny thing is, you’re the second person I’ve interviewed in the last two or three weeks where we’ve referenced back to fact that the reason we say packaged software is it used to actually be packaged! DB: It’s been crazy, we had the Internet, when we started the company, we had the vision of a category called immersive co-experience, sci-fi writers have been writing about the holodeck forever, and we went along our way. I’m still pro-metaverse, we can use the word metaverse, it’s okay. DB: Okay, good, we use them all. It’s Snow Crash — metaverse, holodeck, they’re all good. We started on this vision of building human co-experience, we saw the mobile age come across us, we saw the crypto age. The AI acceleration wave we’re in is faster and bigger and crazier than anything I’ve ever seen, it’s changing how we think about the product, it’s changing how people are going to create games. What’s really exciting is, when we started the company, we had this slogan called “You Make the Game”. DB: We started with that slogan, we learned along the way that the ratio of people who might want to play games to make games has drifted — more people want to just play games than make games, because historically making games has been Roblox Studio and 3D editing and writing script. We could be approaching the time where “You Make the Game” really comes true, and where making a game is accessible to everyone. It’s really fun, I’ll tell you a bit about some of the experiments we’ve been having with Roblox Build . But we’re entering an era where making a game could be as big as playing a game. I’m right there with you. We’re obviously going to touch on all those points, I think it’s probably predictable what we want to talk about. But to go back to 2023, you called AI then, “a super paintbrush and a super 3D modeler, rather than a full replacement” — Is that still how you’re thinking about AI? DB: It’s what the data is proving out. We just had our earnings call a few weeks ago , we highlighted a lot of acceleration. One, there’s various ways humans can augment with AI on Roblox, they can use MCP , which is like plugging in a model, they can use the Roblox AI assistant to help build. And what do you mean with that MCP server? You mentioned you had 5x growth quarter-over-quarter. That’s where you’re actually using Claude Code or Codex or whatever to work with Roblox? DB: People are plugging in, we can see all of them — Claude Code, Codex, other models — all being plugged into Roblox Studio to help build things. We’ve seen two games hit the top 20 made by AI, we have other metrics like the number of assets. What do you mean by “made by AI”? Because you also said 80% of games in the top 100 have AI-contributed content. DB: Touched by AI, vibe-coded directly with AI, and we can see the count of assets accelerating. DB: It’s turned out to be, I believe, somewhat faithful to what I said. This is a human paintbrush accelerator, good ideas are still very important, novel types of gameplay are very important. But people are able to flex their creativity much more quickly. We have members of the Roblox board of directors carrying a mobile phone around, building games like 15 times a day. We have people who are not necessarily engineers or product managers now building within the company, so we’re really at the dawn of a new era. You mentioned the super paintbrush, super 3D modeler, is there a super gameplay developer? Because there’s a large step between, “I have an idea for a game”, versus the actual mechanics of the game. How much can the AI do to help you as far as that goes? DB: You’re touching on the dream of what is a game creation harness versus a coding harness . Dive into it, this is super interesting. Lay out the difference and the way you’re thinking about that. DB: So everyone’s getting familiar with coding harnesses — Claude Code, Cursor, Replit, Lovable, Codex, you name it. A game is arguably much more complicated than code. As you mentioned, there’s art, there’s 3D objects, there’s scenes, there’s avatars, there can be gameplay code, there can be missions, and there can be code underneath it. So a harness that is being created to create games really has to run in multiple modalities, needs to listen to you, and if you said, “I would like a multiplayer tortoise-and-the-hare game that 100 people can play, and we’d like to do it on Venus, and I’d like it to run on all devices” — there’s a lot of different things that need to be generated there. The avatars, the assets, all of that, as well as the gameplay, which I think is a very human thing — your idea of what type of a game it is is actually very unique. So one of our board members is building a hybrid kind of Wordle-crossword game with his own vision of how this crossword game should work, and that’s very unique to him. I’m optimistic we’re still seeing that notion of a human coupled with an accelerating paintbrush in essentially a very complex harness for building games. There’s so many pieces you talked about. The asset creation piece, compared to 2023, much further along, arguably there. You could have even the video component, or the moving worlds, but then you almost have these different pieces. Do you have to build — is there going to be one harness, and one sort of — we’re going to get to your Build app in a little bit — that handles all of that? Or are you still thinking we need to do this piece-by-piece as the model gets good enough for, or we need different models maybe for the different parts of this? DB: I think just as we see with harnesses that are routing different models, even for coding now, a lot of companies have multiple models running side-by-side and their harness is optimizing. Our harness inside Build and inside Studio Build is running not just multiple models for certain things, but then there’s a second dimension of, “Are we building a scene?”, “Are we building a 3D object?”, “Are we building code?”, “Are we building an NPC?”. So yes, we are routing both by kind of specific asset that’s being created, as well as multiple models within each of those, and we’re combining some areas where we have incredible data on Roblox — for example, data that can be used to help create non-player characters, characters that act normally, side-by-side with you. But there’s also really good coding models out there, both open source and frontier, and so we see a harness being able to put all these things together. What’s the mix of those models? Say we have three categories — frontier, off-the-shelf open-source models, and models that you’ve trained specifically. And I guess even there there’s two categories, are you doing foundational models on your own, or just doing some post-training? DB: We literally have all three of those running in our Build harness. And we’re, in certain cases, optimizing the cost of frontier with the capabilities of open source. We have a Cube model — we’ve announced it — which is trained on 3D assets. Yeah, super interesting. Tell me about the Cube model. DB: The Cube model is our own 3D asset creation model trained on all of the 3D objects inside Roblox, where the developer has opted in to the training. It’s very fast, it’s very efficient, and it runs on our own hardware. When you go into Build or I go into Build and I say, “Hey, make that tortoise-and-a-hare game”, and if you describe that tortoise as somewhat unique and different, “I want the tortoise to look like this, and have a fur that looks like this, and maybe have this”, that Cube model will and may come into play and generate that tortoise for you. How does your cost structure work for this? Is it a usage thing from a developer perspective? You have the MCP server — that’s where they can bring their own, what’s the mix? DB: You sound like a product manager, because these are exactly the same discussions I had about an hour ago. The ultimate vision is something like Roblox Build is just like the creation of short-form video. Short-form video 10 years ago — all of a sudden we all figured out we can make video and edit it on our phones, amongst multiple products that was like a huge revelation. We are so on the same page, I have a whole section on short-form video later in the interview. That’s good foreshadowing. DB: Yeah. And so along comes short-form video, and we have phones, and all of a sudden we’re making and sharing video. Arguably games are a lot more complicated, they can be immersive 3D environments, multiple people can come there. They have, as I was saying, code and geometry and avatars, but that’s where Build is going — that same notion of, “I’m going to pull out my phone and create something”, some of those models are still expensive. But the dream is, we’re already testing — I think Canada went live today. We’re testing in, I think, Serbia and New Zealand, we want it available for everyone and so it creates a wonderful opportunity for us to be super efficient with our models while super powerful. It creates the opportunity for those users who want to just do hundreds of iterations to have them buy tokens as well, if they really want to dig into it, so we’re optimistic this will be free for everyone. You keep mentioning Build, I’m on your website , and this is how you describe Build: “Build is a new way to make your own Roblox game right from your phone. Just describe the game you want in your own words, and Build’s AI creates a playable game for you in real time. You don’t need any coding or game-design experience – if you can describe it, you can build it. Want to change something? Just tell Build what to adjust, and keep going until it feels right”. Is this what you always wanted? Are we going to look back and say Roblox Studio, your pride and joy, was just a stepping stone to this? DB: This was a sci-fi fantasy when we started the company, and arguably a fantasy we never thought would come true. I would say when we started the company, we couldn’t have imagined it, and for many years, I think many people in the industry were always trying to figure out ways to make editing 3D easier, “Oh, that’s a really easy consumer 3D modeler” — even the best consumer 3D modeler is still pretty complicated. It’s unbelievable, my current 3D experience right now is, I’ve gotten very into 3D printing and I’ve never opened the associated app for it at all. It’s all done in the AI and just goes straight to the printer, it’s unbelievable. I appreciate all those people who did all the actual modeling and stuff for the last few years — I’ve skipped over all of it, but it’s the same thing in digital space. DB: I would say in the last five years we started to see that maybe AI can do this and I would say it’s been in the last two to three years where the rate of acceleration has started to surprise people and as that rate of acceleration has started to surprise people, this dream becomes much more possible. There are games on Roblox right now that are earning money that have been made with Roblox Build. We have not tens or hundreds, but thousands of games that have been published in Roblox Build. It’s not live in the U.S., we’re testing, and it will be soon, so the data is already out there. What’s so interesting is you saying, “We couldn’t have imagined it”, because one of the things in our previous interviews that came across again and again was the continuity of your vision and like, “Yeah, we saw this back then, and now we’re getting there, and we’ve had this vision all the way” — and that sort of goes back to my first question. Is there almost been a break in the last few years where even you are like, “Holy cow, I didn’t know this is where we were going”? DB: I feel like all of us in the technology industry are feeling that — everyone, CEOs, programmers, people who use these products, consumers. We’re all in the middle of it, I would say, over the last several years. Do you think this makes Roblox more or less valuable? If anyone can make a game, is Roblox Studio, your jewel, not that big of a deal anymore? DB: I think what really ends up being valuable is the combination of a few things. We’ve shared the notion of Universal Player, that I’ll dive into, the notion of Roblox Everywhere , the notion of the power of distribution platforms becoming more and more powerful when a game is created, “Where do I find it?”, “Where does it run?”, “How do we keep it safe?”, “How do I play it with my friends?”, “Is there an economy?”. So in a way, distribution platforms become more powerful. It’s worth thinking about it like — pick a distribution platform, whether it’s TikTok or YouTube, in a way, AI can accelerate those platforms, but in a way, those platforms have enormous strength with or without AI and even though someone could reproduce the whole YouTube platform with AI — the cloud, the client, all of those things — people are still going to go to YouTube to watch video. Yeah, this is the connection I was drawing — going to the short-form video platform idea. I’ve always drawn a distinction between distribution and discovery , distribution is free — anyone can post a website, at least generally speaking, they could host a game on their website, they could host a game on Vercel or wherever it might be. But then discovery is, if there’s a gazillion games, how do you find what you’re looking for? Of those two, what do you think is more important for Roblox’s future? DB: They’re both enormously important. The Roblox platform itself has well over 100 million people coming every day. On the discovery side of our platform there’s two angles to it, the first is, what happens when everyone’s building a game? All of a sudden, in the old days, there’s an abundance of new games and experiences. How do we connect the right person with the right game with their friends? Even in what might be called AI slop, there can be amazing games embedded in that AI slop, even if it’s 1 in 100 and even when games are crafted by hand, there can be some of those games that just aren’t interesting to people, so discovery becomes enormously important. What we have going on — and with the opportunity going on at Roblox — is that in addition to traditional discovery, which is optimizing every user-game pair and predicting long-term retention from that connection, with more and more games, content understanding becomes incredibly important and because Roblox is a platform where all of the games are running in the cloud, we can examine the content, learn from what we’ve learned, and maybe say, “This game has an interesting, new, diverse way it’s been constructed, this game looks a lot different than other games”, and that can help surface great content to new users. The other thing, in addition to on-platform discovery, is this notion of Roblox Everywhere that we’ve shared. Let’s get to that, I promise we’ll get to it, because I think it’s super interesting in this context. But you’ve gotten much more into — you mentioned matching players to the right game, what have you learned from getting into recommendation algorithms? The path — I keep referring to it — but this is the social-networkization— DB: Yeah, it’s very different than video, because a game is something a user can play multiple times, a game is an environment where friends can have fun. Some good games last for years and years. You know, Adopt Me has been on the platform forever, so finding an Adopt Me that creates joy for a long time is very, very important, rather than a one-shot video. I think what we have learned is to optimize for longer-term retention rather than short-term retention. Well, that really hit your earnings when you made that shift a couple quarters ago. What was your thinking? Is that what you expected? DB: I don’t want to comment on hitting the earnings, but I want to comment that mathematically, if we can raise long-term retention — which means more people stay on the platform, more people have a good time, and, like I mentioned with Adopt Me, find games they might play for 10 years — that pencils out. And retention is critically important in growing users and growing word of mouth and growing all of those things, so we’ve gotten better and better at optimizing long-term retention. We measure it directly, we measure the contribution to long-term retention from every user-game pair. We see interesting things — different types of groups of people like different types of games and I think if we go to the Roblox home page, for example, and I play, or someone else plays, I think people are universally saying, “Oh my gosh, those are more and more looking like games that I’d like to play for a long time”. You told me in 2022 that Roblox’s initial product failed because it wasn’t multiplayer and social and that was one of the foundational lessons of the company. Now you’re enabling offline single-player games. Have you moved? Is this what has changed? What’s shifted, where — yes, of course you’ve mentioned the social aspect multiple times — but also there are games people just want to play, a great game, on their own? DB: I feel long-term the foundation of Roblox will continue to be multiplayer, friends coming together, that may be in real time, that may be asynchronous, that may be “I take a turn, you take a turn”, that may be I play a match-three puzzle at some point and compare it. What the move to single-player, the move to puzzle, is really saying with our aspiration for Universal Player and Roblox Everywhere, we have enough bandwidth now to cover the whole spectrum. When we talk about the notion of Universal Player, the notion is going all the way from a traditional 2D offline puzzle game, all the way to that which is yet to be invented — which is super high-scale multiplayer, photorealistic reality — and everything in between. So the vision with the puzzle game, as well as Roblox Reality, is going back to the video analogy. In a way, with video, the camera and the player have been somewhat invented, we have cameras all over, we have 4K, 60-hertz playback, we have playback mobile, we have playback in our living room, and so all of the video out there generally will play back on my living room 4K, 60-hertz TV. That’s not true in gaming. There’s not a universal rail, where every game as of yet invented, as well as to be invented, you could imagine it playing there, so that’s the notion of 2D puzzle and Universal Player. Presented by Agentic commerce purchases with Link, Stripe’s digital wallet that works surprisingly well for agents, grew 38x in September. The catalyst was consumer agents like Muse and Instinct. Filling out a web form is not a value-add activity for anyone. No one chooses to fill out web forms in their spare time. That’s why these agents have been particularly useful. I’ve written about how these platforms are giving ordinary people an AI agent with a computer, enabling agents to do genuinely useful things on our behalf.  When one of those things is spending money, it needs a wallet that knows what it is, and isn’t, allowed to do. Stripe has learned that’s really about deciding how much freedom to give it. You might approve one purchase, or give it $500 for flights this week, and let it figure out the rest. The wallet’s job is to keep it within those lines while handling everything between “go buy this” and the purchase actually happening. That’s what Stripe is building with Link: You approve what it spends, it can come back to you if the final price changes, and eligible purchases can even come with protection if the agent makes a mistake. You can use Link on Muse, Instinct, as well as many other of the agents you might use already. So step back and explain Universal Player, broadly speaking — both in terms of the different surfaces, and also bringing in games from other platforms into the Roblox experience. DB: Part of this comes — I’ll come at it first from an AI angle, and then a puzzle game angle. From the AI angle when we hook either our Studio assistant or an MCP model up to Roblox Studio, and you or I say, “I’d like to build this”, there’s still technical constraints, if I hooked up MCP and said, “Build a game that happens in the state of California, make it a 3D multiplayer environment, I’d like it to be photorealistic, and I’d like it to be able to have up to 100,000 people all walking around and driving cars” — not technically possible. But we do want to push towards that — once again, multiplayer high-scale photorealism — as quickly as possible, and make a place for anyone who’s either imagining a game or building it with MCP server, or, as you mentioned, ultimately bringing in a game they maybe have already made and converting it to that type of environment. So if we have a Universal Player, that’s a superset of all games that can run multiplayer. You could imagine that if you had a puzzle game that’s offline, connect it up, bring some of the source code in if you want to, and we’ll convert it to Roblox. Or you had a single-player high-res game, we’ll convert it to Roblox and in that conversion process, a couple other cool things will happen. We coined the term “Robloxification” — it’s really what’s different about the Roblox architecture. Your single-player game from a PC can now be multiplayer by default, because we’re running against a cloud. Because we’re doing 3D streaming, your single-player game will also run on a phone — oh, it’s being Robloxified. Your single-player game, rather than being a 500-gigabyte download, you can just join it immediately, that’s very interesting. Your single-player game has access to economy and other things so the notion with Universal Player is really both convert, as well as Robloxify, existing games as well as new games. Is this leveraging — to go back to the discovery versus distribution — is this leveraging the fact that you want to get into Roblox’s discovery engine? There’s people on Roblox, they’re not going to go download your game individually, they’re not going to go to another website. DB: That’s exactly right, in that a game brought into Roblox Everywhere in our Universal Player will then be available in the Roblox app. And as we thought about it, what a great way to discover more content than to have great games out there that are also discoverable in the app. This is the analogy — to go back to the short-form video — where you had this story with Meta versus TikTok. TikTok realized that it’s called a social network but it’s not really a social network, it’s just really giving you the videos that it thinks you are going to like, and who you follow doesn’t have anything to do with it. Meta is stuck in their social network, “That’s what makes us powerful”, and to compete with TikTok, to make Reels into a thing , they had to let that go, “We’re just going to give you what you want”. Is there an analogy there to your embracing single-player games, to you having recommendation algorithms? And sure, Meta will tell you the social network part is important, will always be important. Is that analogous to you saying, yes, the social aspect of Roblox is important, will be important, but actually to truly grow, to reach your full potential, you have to actually atomize a bit more and meet the player with exactly what they want? DB: Yeah, I think if anything it’s even bigger than that, I’ll go through three realizations. The first realization that we’ve come to, looking at the physical world, when people play — whether they’re playing sports or a board game or any form of play, jostling around with friends — it’s typically not just play, it’s playing, it’s connecting, it’s community, it’s creating the play, “What are we going to do?”, it’s sometimes watching other people’s play, it’s dressing up to play. And so we started thinking about the market, not as the game market, but the play market, and how all of those pieces really work together so that’s been a bit of a stretching, rethinking things for us. The second is, when we say the play market, we can no longer just say, “Well, Roblox is a 3D multiplayer game engine”. You were constraining yourself. DB: That’s right. All of the constraints, I think, in the past that helped us focus and grow at a certain scale have to flip from focusing constraints to constraints we give up on. What was more difficult — convincing the company we have to let those constraints go, or did you have to convince yourself? Because again, two things that really stood out. Number one, you had this long-term vision, and it’s actually been continuous, and now you’re saying, “Wow, this has been a big shift”. But then number two, this being focused, “This is what we do”, and now you’re like, “Well, actually, no, we need to let that go and do everything”. DB: We’ve gone through several of these. The early version of Roblox was PC and Macintosh. We, for a while — if you can believe it — there was no mobile phone version of Roblox and when we looked at the iOS App Store top 100, there was no 3D game in the top 100. China was a little bit ahead, they were starting to poke at it, the U.S. was not. Giant company debate, “How could Roblox ever work on a phone? The phone is 2D. It’s not going to work”. Luckily, mea culpa, we went for it and now we’ve gone through that transition. There’s also a time on Roblox, very early on, we thought the blocky look was so simple and easy to build with, we wouldn’t allow the importation of 3D mesh objects, we mea culpa’d it, because ultimately we want all styles of game. And so I think 2D and offline is kind of one of the last holdouts for that, in saying it’s really the play market, and we can’t constrain that anymore. Are you pushed into this market, or are you pulled — just the market opportunity is so large? DB: I think it’s so much more fun and simple to just say, “We’re going after the play market”. (laughing) That’s right, let’s do it all. DB: We need integrated and safe ways for community, we need integrated and safe ways to find great games to play with, we need all of that just in a simple — it’s actually a simpler product spec and a more fun product spec. Does that mean, you as a company, you’re more defined by — maybe you’re like supply-defined, where, “What can we do, and this is what we’re going to deliver”, and now that’s sort of flipped to, “What’s the market and how can we fill that market?”. DB: Yeah, I think it leads to all kinds of interesting features of the product. For example, short-form video is traditionally used for watching by yourself. Imagine something that feels like short-form video, where you’re seeing the 3D game where your friend is already playing, and it’s a way to find a friend and jump into a game. Right. We made the short-form video comparison, but you’re literally doing short-form video. DB: Finding 3D ways to discover is super interesting, finding ways to connect with your friends is super interesting. I feel this singular vision on play is a category that’s got legs and I think the thing that is yet to be figured out is how big is creation versus playing with friends. What I have seen with the early players on Build is, there’s a lot of joy in making a short-form video on one of these platforms and having your friends see it. That happens in spikes and I’ve seen people do that. The joy I’ve seen of people creating games on Roblox and literally sitting there with their phone and saying, “Oh my gosh, I have four people in my game, and those four people are playing my game, giving me feedback” — I’ve seen that be really powerful. That’s interesting, because the feedback mechanism — you can act on it. If someone gives feedback on a video, it’s just a comment on a video. DB: And like I highlighted, board members doing 15 modifications a day to their game so that four people turns into six people. That’s really interesting. It’s like there’s a 3D aspect to gaming, as opposed to the 2D aspect of a video. This is almost like a 4D aspect, where the interaction — it’s a social network in a very different sort of way , it’s around this object that could evolve and move with the interaction over time, I think you do have a 4D product. DB: That’s right. Well, we use the term 4D lovingly in our physics engine, because 4D objects are objects that have behavior and code and do things, rather than static objects. The other topic you’ve brought up continuously is Roblox Everywhere. First, explain what it was — I have some questions about this that are connected to what we’ve been talking about. What is Roblox Everywhere, from the top? DB: We shared earlier, our jump from PC, Mac, “Oh my gosh, we’re doing mobile, could it work?” — and then we shared some of the other changes we’ve made along the way. One of the things, for quite a while, we’ve held on is: 100% everything is in the Roblox app. DB: But as we’ve seen our vision of the Universal Player — the vision that, whether you build on Roblox or you convert or you use AI, below the rails, Universal Player is the place a game can be constructed and run at scale — as we thought more and more, all of a sudden the power of what is the Universal Player becomes appealing, not just in the Roblox app, but possibly for a creator who wants to ship a standalone game in the iOS App Store, the Google Play Store, on their PC, on a console. And as we thought through it, the benefits of giving creators access to the Universal Player, even when they’re not in the app, brings an enormous advantage to us, which is that their content can then be available for discovery in the app. That gets to my question. Okay, I’m on board with the releasing, let’s be on all devices, let’s not just have blocky characters, let’s have 3D characters, all the things we’re talking about. But I’ve been framing this whole discussion — we’ve been comparing to short-form video, which is an Aggregator play. You own the end users, you own the consumers, you have Universal Player, people can bring their games in to reach the customers, you have an advertising business that we talked a lot about last time, I have some questions about. Roblox Everywhere seems to be like the whole company is now flowing in one direction, you have the Roblox place — if you want to make a game, go there, there’s customers there, there’s monetization there, it’s all there. And now you’re like, actually, let’s open up a trap door and let everyone go out the side, am I the one that’s now being the wimp and saying, “Can you be a little bit more focused”? DB: I appreciate your insight there, but what’s really exciting to us is the potential to get such a large percent of the gaming market running on Roblox Everywhere, and the potential content explosion that happens within our app. The way we thought about Roblox Everywhere is, if you’re a creator — you might be an indie creator just pushing a small app, you might be a large studio — the more we can have both the most amazing technology platform, really Universal Player, and the more it makes absolute sense for you to run on that technology platform, whether you’re in the Roblox app or standalone, we get the benefit of that content in our app which is social, which can be launched instantly, which shares a common social structure, which carries a common safety structure, a common economic structure, all running together. So our calculus — and as you said, maybe it looks risky or whatever — but our calculus is actually, this is the best way to grow users in the Roblox app itself. Yeah. Well, it’s interesting because I think this gets on the — I’ve been drawing the analogy, we’ve been drawing the analogy jointly, between short-form video and gaming. But to your point, gaming is still a lot more difficult and if you go through the history of gaming over the last 40, 50 years, this has been a trend is over time, just the cost of developing gets so large, you need to be multi-platform. The PS3, one of the all-time examples, builds this super complicated, powerful architecture that no game ever leverages, because the cost of creating HD assets is so much higher . They need to be on Xbox also, they need to be on PC, and so everything goes multi-platform, Sony responds by doing the exclusive strategy, etc. Is this a similar articulation, that making games is hard, and so if we don’t make it so developers can run their games everywhere, they’re not going to be on Roblox either? DB: It’s really hard and right now there’s a bifurcation, a lot of times, between that super cool high-end PC game I see and what I can run on my two-gigabyte Android phone overseas. Those typically are different products. And so you’re trying to make the whole world the market for a developer — if you build on this, the whole world will be your market? DB: Imagine if it was technically feasible to build for super high-end AAA multiplayer on a PC, and connect to the same game on a two-gigabyte Android phone overseas. That’s a technical opportunity, we think, for creators. How is that different from streaming? Like, you stream a console game to your phone, what is different about what you’re proposing? DB: There’s a very creative history of what is called game streaming, where the game is run far away, I send my keyboard and mouse to the game, and then video comes back. (laughing) Right. And it sucks. DB: And this was even 20 years ago — Gaikai, OnLive, OTOY — we’ve seen a long history of this. You said it sucks, the way I would say it is, some of the things we’re doing in our video — you and I are on a Zoom call right now, when I look at my character, my character’s reacting instantly, I feel like I’m looking in a mirror, in a pure video streaming architecture, I might move 50 or 100 milliseconds later than when I do that, and people are very sensitive to that. If you’re close to the video server, maybe it’s pretty fast but I do believe having local 3D instantaneous feedback is super, super critical. So that could be one reason why video streaming just hasn’t kind of exploded as much as we thought. Is there an issue where streaming — they’re trying to retrofit what existed, and you’re natively building for this experience, and that makes a difference? DB: We want native 3D, you know, we want multi-device native 3D, very low latency happening on those. There’s some other dimensions where gaming is getting more difficult as well. The regulatory environment — it’s not like the old days if you or I make a game. There are different laws in every state and in every country, cultural laws, all of those. One of the opportunities is to have a platform that can automatically adjust to that — what are all of the rules around age, around ratings, around all of those things? That’s another thing that can help a creator reach the world without having to think about all those things. How do you think about monetization for the Everywhere games? Is there going to be like a platform fee, like a Unity sort of aspect? Or is the payoff, “If they’re building using our technology, they will also be in Roblox, and that’s where we’ll make the money”? DB: We shared at RDC the notion that monetization may be somewhat similar for games Roblox would publish. And so if you went to an app store, there may be some games published by Roblox that are the exact same games that are inside Roblox. We would only do that with the developer’s permission, but it could be really cool — you could go to your app store and search for “Grow a Garden” and say, “Oh my gosh, there’s the game”. For games where the developer is pushing directly to the app store, we haven’t shared the economics but in the thesis of what I said — which is eliminating any reason for the creator not to think about it — that leads to the economics needing to be pretty provocative and so stay tuned on that. Where is advertising fitting in this and your vision overall? Give me the advertising update. We spent a lot of time on that three years ago. DB: We shared on the earnings call that we’re more and more excited, and we’re all in, not just on Roblox platform advertising, which is growing, I think we shared that’s growing very quickly as well. As creators come into Roblox and use Roblox Studio Assistant or Build or MCP, “Okay, I need to get some initial traction, I need a thousand users”, those ads are available on the Roblox platform. And isn’t that the great thing if it’s abundance, there’s too many games, you have to discover it — user acquisition ads are very profitable. DB: We have seen an acceleration of that type of advertising and to take that all the way back to the prior analogy, we have board members on their phone buying advertising. (laughing) Conflict of interest, they’re bumping up their own stock price. DB: There’s a second type of advertising that, more and more, is becoming available, which is very short, five-plus-second skippable pre-roll video. There was a time, way back in the history of Roblox, we tried pre-roll video, it was not a good experiment. The quality of the video was not super exciting, pre-roll video at that time was 30 or 45 seconds. Technically it was a pain in the butt, and we yanked it out because we didn’t like the user experience. That kind of left us with, for a while, “Uh-oh, no pre-roll”. But today, the fun and the quality — if we’re very selective of the brands, and we could imagine the brands that are interesting to a 21-year-old Roblox player — clothing brands, electronics brands, movie brands — where they might actually say, “It’s pretty cool to see this”. We also, because typical games on Roblox launch not quite instantaneously — they launch maybe in five or six or seven seconds. Right, you have time. DB: There’s actually a beautiful technical overlay there, if we do it right and do it natively, to put this all together so we’re very excited about this potential combination. Is there an aspect where companies, especially when they’re first doing advertising, they overthink it? Like, “We have to have the world’s most inventive ads, there’s going to be billboards in the game, and these experiences” — and actually, no, just show a pre-roll video, it’s fine. DB: I think that’s right. I think we have a history of thinking big, and I do feel ultimately there’s going to be a wide range of types of branding that people do. There’s a lot of immersive 3D potential for literally shopping in 3D and doing all of that but there’s also an enormous quantity of pre-roll video. Right, you can get to that eventually, there’s actually a lot of low-hanging fruit, it feels like a lot of first-time advertiser platforms — they’re reluctant to pick, and then they’re like, “Actually, let’s just pick the low-hanging fruit and go from there”. DB: I think that’s right and I think in a COPPA -compliant, privacy-compliant, Roblox-values-compliant way, we can still imagine amazing user experience for advertising. Does this tie into the potentially provocative pricing for Everywhere? Where you make a game, it’s everywhere, congratulations — but if you want to actually make money, you’re going to need to be on Roblox and that’s the best place to spend money to acquire users. It’s better than spending on Meta, better than spending on wherever else it might be. DB: You could imagine, in under 18 on Roblox, we’ve shared we may have literally 20% of gaming revenue in the U.S. flowing through the platform and so that’s huge penetration in that age group. As we move towards that same penetration over 18, all of a sudden the value of advertising on Roblox for my new game becomes more and more valuable, because those users are already there. Are older players like your great white whale? I think every time that we’ve talked over the years, it’s always been, “We’re going to expand into older players”. When is that the reality, as opposed to the opportunity? DB: Reality is right now, the fastest-growing thing on our platform is 18 and up, it’s growing very fast. Are you getting new users, or is it people aging into and sticking with Roblox? DB: Absolutely, both. It’s a smaller cohort than the under-18 thing. But as it becomes an increasingly larger percentage of our revenue, it will more drive the growth rate of the top end as well. And how does that relate to the single-player offline, new types of gaming, puzzles, and all the things you’re talking about? DB: I think there are some of those segments that are very much 3D multiplayer, some of those segments are puzzle. There’s an overlap in that, as we think about the whole play market and we don’t restrict any types of games going forward, we have more opportunity to really create a good chunk of that market and once those users are on our platform, they’re very valuable, because other games can be attractive to them as well. In our first interview you talked about how you deliberately avoided paid acquisition, because organic virality was so essential to Roblox, in part because of the social aspect of the games. DB: I think we were careful with it. It’s a much bigger thing now, right? DB: For under 18, even in our early days, we experimented with paid acquisition, but we are very careful with always getting a return on the spend, and always knowing that organic viral had to be the biggest, but there still is a logical amount to spend. And we’re doing the same on over 18 right now, we are mixing organic with paid, there’s an optimal mix of them. We always want whatever we spend on acquisition to make incremental revenue more than what we spend and we are sticking to that hygiene. So it does make sense for us to do the paid acquisition. Is Roblox a metaverse? Is that still the dream? I like the word, no one else does. DB: I feel it’s weird how that word kind of came and went a bit but I think over time, maybe that word will come back, right? Because in the ’80s, ’90s, and 2000s, that was a very popular way of describing not just a gaming platform, but a communication platform — a place where people came together to play or to work or to do a bunch of things. I do feel ultimately, beyond gaming, that still makes sense. This Zoom call, at some point, will be a 3D simulated metaverse call, and we’ll be able to run in traditional 2D mode, and we’ll be photorealistic but if I wanted to go and look at that globe behind you, and I asked your permission, I said, “Ben, can I come and see the globe?” — you’d say fine, hopefully, and I’d come and look at it. And that’s something we can’t do on Zoom that will be unique to, ultimately, a metaverse call. It is a very cool globe. I got it at an antique shop. It has, like, a barometer in it, a thermometer, and it actually lights up — it is a lamp, also so it’s my background. DB: I love globes, I love telescopes too. Well, there you go. With the metaverse, with this 3D world, you just talked about a real-world thing, you could come into my room. But to go back to the example, you mentioned the developer that wants to build the state of California and driving cars around and 100,000 people, is this ultimately going to be realized, not through polygon drawing, but it’s all just going to be AI-generated ? DB: I don’t think it’s going to do that, and the reason we’re building this Roblox Reality architecture — and I’ll share a bit about it — is we do want, “What’s the quickest way to get to multiplayer, photorealistic, immersive gaming?”. Multiplayer is where the fun part comes in, and it’s why we talk hybrid. So in the movie business, there’s several famous directors right now who are going hybrid and what they’re doing is, they’re either shooting live actors, or they’re building a very rough scene for their movie in a 3D system, then they’re taking the 3D information and they’re upsampling it with an AI model to 4K photorealism and so they’re putting together the best of traditional — and in the case of live actors, there’s much more accurate capture of the face, of the emotion, when shooting real film for the actor, but then you can decorate the set however you want. In gaming, synchronizing 10,000 players needs to be done in the most efficient way possible and doing that in a video latent space is not the most efficient way, doing that in a rough 3D representation is the most efficient way. But for every one of those 10,000 players, it’s getting a pretty efficient 3D representation, you can imagine each one of them uniquely getting an AI video model upsampled for them specifically that looks like 4K, photorealistic 60 hertz, and I think that’s where it’s going to come out. Are you going to win on doing this because you have a technical advantage, you pull it off, or because you already have the audience? Lots of people could build this out. DB: I would say yes and yes, hopefully. This is a vertical integration play, the vertical integration. Right, which has always been a core part of Roblox’s theory. DB: I’ve played with, for example, Grow a Garden, or classic games on Roblox, with early versions of photorealistic upsampling, and it works out of the box. There is a notion that existing games can run for all players, same gameplay, but for some, photorealistically upsampled. But I also feel it’s a technology play, because most of the video models that are being built today are either single-player world models, or video generation models — like you or I want to use one of these models to make a cool 15-second video. This technology is different, this is real-time, low-latency video being generated from the 3D video and the 3D depth map and a bunch of other things, so it’s a very specific type of video model that has some overlap, I think there’s opportunity both for technology as well as vertical integration. The thing that I’m taking away is — and this has always been the case talking to you — the scale of the ambition, but it does feel like the big shift is actually, “Let’s literally do everything, let’s do the supply side, we own the demand side, let’s do all kinds of games”, is that what Roblox is today — we’re all gaming, period? DB: I would say, do everything within the carefully thought-out boundaries of the future of play. And so within play, yes, let’s be open to 2D puzzle, let’s go all the way from two-gig Android to photorealistic Roblox Reality and in between, let’s make things available in the Roblox app as well as in Roblox Everywhere. So I would say, within those hopefully thoughtfully constructed guardrails, then yes — in a way, it’s do everything. Do you feel okay without the focus? Without knowing, “This is what we do”, is, “We do everything” — is that focus in its own right? DB: It is focused, because there’s still some pretty tight guardrails. And so I think, given the size of the company and the ability to use AI to accelerate engineering, I think it’s the right current product spec — just like when we started, it was PC-only, blocky, and that was good enough. Last question, you mentioned the AI component. This “do everything” — is that downstream of, “Now we can use AI to program”? Or did the AI programming come on just in time to make this vision possible? DB: For many companies, I think like ours, back and forth, iterate, iterate — AI engineering acceleration, expanding maybe the definition of the product spec, AI engineering, expanding the definition of the product spec. But I do think companies around the world are now starting to take things that they thought would be a nine-month project, and thinking of it as a two-month project. How do we rethink how we architect, to make these nine-month projects two-month instead? Very good. David Baszucki, very interesting, very cool to see what you’re doing. DB: Great talking with you. Thank you again, Ben. This Daily Update Interview is also available as a podcast. To receive it in your podcast player, visit Stratechery . The Daily Update is intended for a single recipient, but occasional forwarding is totally fine! If you would like to order multiple subscriptions for your team with a group discount (minimum 5), please contact me directly. Thanks for being a supporter, and have a great day!

0 views

Creating Your Own Gaming Backlog Yields Behavioural Insights

At the end of 2024, I made my own video game Top 100 page , resulting in a cool grid-based list available at https://jefklakscodex.com/top100/ . While writing A Huge Pile Called The Ongoing Backlog , I discovered even more websites dedicated to categorising and indexing your backlog: Giant Bomb’s Video Game Tracker, Backloggery, Backloggd, MyVideoGameList, Completionator, Darkadia, Searchtoplay, … Every few months a new system seems to pop up—and go permanently down, taking your data with it. You know where I’m going with this… So yes, I created my own backlog based on the Top 100 grid system, now deployed at https://jefklakscodex.com/backlog/ . I already had all the data living in separate Markdown so all I had to do is add some more entries and add a few backlog-specific bits and pieces. The result doesn’t look too shabby: Jefklak's Codex Backlog, split between currently playing and the rest of the backlog. The technical design is fairly simple: it’s just a Hugo with some filters, fetching data from Markdown frontmatter. An example of a file looks like this: Where the How Long To Beat (HLTB) data and the cover image is automatically fetched through an external script. The key is relevant here, as is to keep it from popping up on the main site including the RSS feed before finishing it and writing down my thoughts. See my blog workflow post for more technical details. A few of the features were ported back to the Top 100 page, such as: The idea for using average game length buckets was to mimic the Nintendo Switch’s way of recording playtime. That way, when I’m in the mood for a shorter game, I can quickly glance over the backlog and filter out the ones that’ll take me too long to finish. As part of the Backlog Statistics , a new graph called “Average Game Length” was added to visualise the game length distribution in the backlog. Both the Top 100 and the Backlog pages showcase the same pattern: most of the games take beetween 5 and 10 hours; then between 10 and 20; then between 0 and 5 and between 20 and 30; with the fewest between 30 and 40 and still too many games breaking through the 40+ hour mark. Unsurprisingly, the three Dragon Quest games lying on the shelf collecting dust are responsible for that. You can also click on one of the bars in the graph which will automatically filter on that game length. A part of the backlog stats: games by release year and platform. Fifty-eight of the games on the backlog are physical versions , with the remaining twenty-two being digital releases. I tried being honest by including every possible game I have yet to play, including the Switch eShop, Steam, and GOG.com library. I stopped there: the SNES Mini and PSX Classic also house twenty-something titles that I have yet to properly discover 1 . All games are legally-owned. I have zero intentions of downloading yet another ROM library that would completely flood the backlog. At this moment, I am playing 10 games, and have 70 more waiting for me. In other words, I’m drowning in games. I’ve said it before and will say it again: Too Many Games, Too Little Time . The amount of hours required to beat the entire backlog is hours which would require almost two full years of playing two hours a day every single day. Given other obligations, this is already a very optimistic calculation. My gaming habits yearnotes tell me I finished 27 games in 2025 and 2024: that means it’ll take three instead of two years to finish all 80 currently on the backlog. Also, a large backlog brings up another problem: is there any time left to replay the classics? Another interesting statistic: when looking at the games by release year, you can see that most games are relatively recent compared to the same stats from the Top 100. This is not a big surprise: the last few years, I’ve been buying mostly (physical) Switch games—hence the dominating group of 28 games from that platform, with the PC following suit with 22 games. It’s been awfully quiet when it comes to scoring good deals at GB(C) games on flea markets. The ridiculous prices demanded by the second hand cartridge market for once works in my favour. I went to great lengths to try and add correct purchase dates —the default sort property. This means I can now see how many games I bought this year, last year, and the year before. Going further back, things became increasingly difficult to pinpoint. Let’s examine 2025 and 2026 a bit more closely. This lays bare a painful truth about my video game consumerism: I buy a lot of physical games to place them on the shelf. Especially this year, exactly zero of those purchased within the same year were finished. And yet every single digital game I bought was played & reviewed on The Codex. Why? Here are couple of possible explanations. First, I am suffering from a well-known condition called Fear Of Missing Out when it comes to physical (and very limited) Switch releases. So whenever I see one that’s been on my radar of a while or is priced somewhat right, I can’t resist. Also, Joel puts me up to it. Second, the digital games I buy are sometimes influenced by others I follow or recent releases I want to play now . Third, many of these are indie games that will never get a physical release. Fourth, when I order a physical game, it takes a while to get here. By the time they’re here, another game has been queued up and it has to wait. I was wrong about collecting physical games . It looks like I’ve become a hoarder and not a player. The harsh truth here is that I could be happier by going fully digital and only buying when I feel like playing a particular game which greatly increases the chances of said game being played and finished. Another observation: I am immune to “deals” and price fluctuations for digital games. I ignore Steam sales, Humble Bundle et al., and I buy a game (usually through or ) regardless of discount. I buy because I want to play, yet I am worrying about prices and ordering too late when it comes to physical releases. Who’s being stupid now? So what now? Good question. This exercise hasn’t exactly left me roaring to go and discover even more hidden gems. The more things being piled up on the backlog, the more depressed I become, yet I keep wanting to buy these limited runs because “I have to, this is my only shot”. I know that compared to others, my backlog is relatively small. My definition of “backlog” is anything I purchased, including the dreading Steam library that in my case is pretty manageable. Yet something’s gotta give. Here’s a promise to myself for 2027: I will not buy a single new video game . Not one. Zip. Nada. I will instead try to reduce the backlog and will be extremely happy when at the end of next year there are 50 games on there instead of 80. The ones I want to buy will firmly stay on the wishlist. Perhaps I should also be very selective when it comes to adding them there, otherwise for 2028 the wishlist will explode and the buying spree will simply come back. If I just focus on the games in HLTB bucket 0-5 and 5-10, that’ll be 37 ones scrapped off. I could force myself to power through a few longer games, but I know I’ll just be dropping it halfway through. The longest games I managed to tackle the last two years were about 30 hours. I will also permit myself to trim the backlog by selling games if I have to (which is of course only possible with physical releases). My biggest concern with this challenge is, again, the Limited Run Games et al. releases. I will never completely miss out on these games: there’s almost always the option to buy them digitally. Perhaps by the end of 2027, I’ll become a digital convert, who knows! Wish me luck! I’ll be needing it… For compilations such as the Turok Trilogy or the Final Fantasy Pixel Remasters , I just added one entry and will add another one once I finish the first. Luckily, the amount of these compilations yet to play in my collection is minimal. I also tend to review the compilation itself while exploring the games but never fully finishing them all (for example the Turtles Cowabunga Collection ).  ↩︎ Related topics: / lists / games / By Wouter Groeneveld on 12 November 2026.  Reply via email . Filtering by physical games; Filtering on average game length (in buckets: 0-5 hours, 5-10 hours, …); Activating multiple filters at once; The enhanced sort combobox. Bought in 2026: 20 in total (8 physical, 12 digital). Played: 12. Backlog: 8. Physical & played: 0. Digital & played: 12. Bought in 2025: 19 in total (12 physical, 7 digital). Played: 9. Backlog: 10. Physical & played: 5. Digital & played: 4. For compilations such as the Turok Trilogy or the Final Fantasy Pixel Remasters , I just added one entry and will add another one once I finish the first. Luckily, the amount of these compilations yet to play in my collection is minimal. I also tend to review the compilation itself while exploring the games but never fully finishing them all (for example the Turtles Cowabunga Collection ).  ↩︎

0 views
Unsung Yesterday

System Settings and its last mile problem

macOS’s System Settings app might be a contender for the worst piece of software Apple released this century. Its 2022 redesign was based on wrong assumptions, the execution of that already bad redesign idea has also been subpar, and the situation not only hasn’t gotten any better in recent memory – I can point you to years-old bugs – but now it is spreading like gangrene to other apps . Among System Settings’ numerous UI crimes stands a simple, but incredibly important one: the app does a bad job at conveying to the users where they are, in a place orientation feels very important. A lot of this is self-inflicted, with bad search and confusing pop-ups partying with truly embarrassing bugs… Actually, one literally just happened to me. The only thing I did was opening System Settings: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/system-settings-and-its-last-mile-problem/1.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/system-settings-and-its-last-mile-problem/1.1600w.avif" type="image/avif"> Which section am I in? General, right? That’s the one highlighted? No, turns out that “Software Update Available” added itself post launch and stole the content pane, but didn’t update the nav on the left: This is embarrassing because it highlights that Settings are built in a shoddy way that allows the content and the left nav to get disconnected. The end result is yet another design problem that makes it hard for me to build in my mind the accurate map of all the settings, and to understand where each one goes and how they all connect. And I have a feeling I’m not the only one. But this is not actually what I wanted to show you. (I just got distracted by a bug on the way to where I was going.) The problem I wanted to share is more universal and helpful to know about. Let’s say I search for “hide dock”: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/system-settings-and-its-last-mile-problem/4.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/system-settings-and-its-last-mile-problem/4.1600w.avif" type="image/avif"> The first result is what I wanted, and clicking on it gets me there: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/system-settings-and-its-last-mile-problem/5.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/system-settings-and-its-last-mile-problem/5.1600w.avif" type="image/avif"> Type and click! It all seems great on the surface. The topmost option on the right is what I want; I can toggle it and move on with my life. But I might not realize that the right pane has been scrolled down to that option, and there’s a bunch of stuff above it, too. This is tricky, because sometimes it’s useful to know what the whole section’s name is. Or, maybe, the option I wanted is influenced by the option just above it, which I might now not even realize exists. Mostly, auto scroll is disorienting. The shy scrollbars are on by default, so they won’t lend a helping thumb. The light separator line that appears below the header is hard to notice. So is the blurred appearance of the closest scrolled-off thing underneath it. I am certain most people arriving at any scrolling container already pre-scrolled will assume the container is just… shorter. This is a problem you see on the web, too. There are solutions out there: you can animate-scroll to the right place on entry, or you can leave some space above (a clever trick is to calculate the distance so that one of the options left above is cut in half, conveying more stuff in that direction) – although both of these work better for section headers rather than specific elements like here. What would probably be best for setting would be to… point to the found thing. And what’s interesting is that Apple already built a fun mechanism for it: It’s a little goofy, seemingly inspired by those tabs for signing documents… = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/system-settings-and-its-last-mile-problem/9.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/system-settings-and-its-last-mile-problem/9.1600w.avif" type="image/avif"> …but most of its complexity has more to do with two menus next to each other. The pointing does its job well. And, even if it could use a refresh or some improvements, in a perfectly functioning ecosystem the System Settings team would grab that interface, reuse it, polish it, and give the newer revision back to the Help menu as well. In the process, the user would benefit thrice: first by seeing help improve, second by getting a better orientation mechanism for the settings, and third by experiencing and learning a consistent pattern across many surfaces. (Lastly, many among you might have already realized this: scrolling as a method was doomed from the beginning. If the found item is closer to the bottom of the container, like below, there is just no way to pull it all the way to the top anyway.) = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/system-settings-and-its-last-mile-problem/10.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/system-settings-and-its-last-mile-problem/10.1600w.avif" type="image/avif"> (I added a new tag, navigation , to collect posts like these. The title of the post is a reference to a logistics term .)

0 views
Unsung Yesterday

“From digital mischief to outright destruction”

The 1980s and 1990s PC viruses were a special breed. The MS-DOS operating system wasn’t particularly secure – few home computer operating systems were back then – so viruses could spread quickly, and many did. Some of the viruses focused more on actually wreaking havoc and destroying things, and some primarily on effective propagation that served no additional purpose. The last group was viruses that were maybe… a little bit exhibitionist, announcing themselves with various audio-visual effects of the kind of quality you might expect from vintage computers in the hands of bored programmers. Various antivirus programs were as much a necessity back then as ad blockers feel today. In Poland, the most popular one was called MkS_Vir – named after its creator, Marek Sell. I believe MkS_Vir had a reputation for being great at detecting the viruses and disinfecting machines, but part of its appeal was that it also hosted something that you could call a virus zoo – a few actual viruses, completely defanged but still presenting their audio-visual effects, so you could experience them without any fear. I emulated MkS_Vir just to show you. Here’s a virus that once in a while would make all your letters uppercase: Here’s one that would rotate your screen on Fridays: Here’s one that a month after the infection would show flames – and render your computer unbootable: Here’s one that laughed at you: Here’s one that waited three months and then ate your letters: This one was a true classic, making your letters fall: And this one flushed your screen like a toilet: These all seem retro and cute today. I don’t want to trivialize them, though, even those that “only” messed up your screen. Imagine being new to home computers – already a petrifying proposition – and then seeing something like that, not knowing whether computers were even meant to do this . Turns out, there were a lot more “virus zoo” efforts. A Czech antivirus program called AVG also had a built-in one; YouTube has a video walking your through a lot of them in sequence . The Internet Archive has a malware museum , created by Mikko Hypponen in 2016. What’s particularly interesting about this effort is that these 87 entries are not screenshots or videos – they are actually emulated malware, rendered inert in part by emulation’s inherent sandboxing, and in part by some careful preparation, likely similar to the ones above. Lastly, danooct1 has been collecting and showcasing viruses, trojans , and worms on his YouTube channel . These are not the most gripping narratively, but at 672 videos (sic!), one has to admire the sheer effort. They extend the timeframe from the DOS era to early Windows, and occasionally even more platforms. This makes it possible to see more modern takes on the viruses above, like a melting screen worm , now in true graphics mode… …or the legendary (in the derogatory sense) YouAreAnIdiot trojan : Just visit the channel , click on Popular, and enjoy from the comfort of your timeshifted and airgapped chair. (The title of the post comes from the description of danooct1’s channel.)

0 views
Unsung Yesterday

“A fair bit of finger gymnastics”

I don’t often link to new phone reviews, but I enjoyed this review of the iPhone Duo by Quinn Nelson at Snazzy Labs, because he spends a lot of time talking about software interactions, and multiple quirks and problems he encounters: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/a-fair-bit-of-finger-gymnastics/yt1-play.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/a-fair-bit-of-finger-gymnastics/yt1-play.1600w.avif" type="image/avif"> There’s this old writerly rule that in order to see your words anew, you should change the font, print them, and step away from your computer and read them on a patio (some people even swear by reading them out loud to yourself ). This video felt similar – even outside of the focus on the Duo, it was interesting to me as it shed some new light on iPhone’s system-wide gestures like going back, invoking notifications, or interacting with the dynamic island.

0 views

Who Runs the Ransomware Group Qilin?

The cybercrime group Qilin has emerged as the world’s most active ransomware affiliate program, claiming at least 365 victim organizations in the past three months alone. But even top Russian hackers make operational security mistakes, and the administrator of Qilin has made a few key missteps over the last decade that all point to a 36-year-old man living in St. Petersburg, Russia. Operating since September 2022, the Russia-based ransomware group Qilin is the currently the most industrious ransomware-as-a-service gang, according to a report (PDF) this month by the cybersecurity firm NCC Group (KrebsOnSecurity profiled the administrator of the second most active ransomware group — The Gentlemen — in June). The Qilin ransomware administrator “Haise” advertising his affiliate program on the cybercrime forum RAMP. Image: Ke-la.com. Qilin attracts affiliates to hack into companies and deploy ransomware by offering them at least 80 percent of any extortion amount paid by victims. Its members practice the “double extortion” model, stealing sensitive data before encrypting systems and threatening to publish the files online. Unlike most ransomware partnerships based out of Russia, Qilin is happy to team with English-speaking affiliates, and its leader has shared on Telegram that they’ve worked with cybercrime groups like Scattered Spider and RansomHub . The head of Qilin goes by the handle “ Haise ,” but they weren’t always known by this nickname. It is not uncommon for cybercriminals to change their handle periodically as an operational security (opsec) measure. Doing so is generally a smart move, because it helps to sever one’s ties to older identities that may not have been as careful on basic opsec, such as separating their real life identity from their cybercrime activities. But even those cautious criminals will sometimes have to reference their past monikers when applying for membership at a new forum. And forums eventually get hacked or seized. That is precisely what happened with Haise. The cyber intelligence platform Intel 471 records that in June 2022, Haise applied for membership to RAMP , a closely-guarded Russian cybercrime forum that was created as a haven for ransomware affiliate programs. Intel 471 has indexed direct messages from RAMP (the forum was seized by the FBI in January 2026), and those missives show the RAMP administrator approved Haise’s application, referring to this user as Haise and by their Telegram username: Alexbigboss44 . Searching Intel 471 for Alexbigboss44 reveals this was the Telegram account name shared by the user Rjun on the Russian cybercrime forums Exploit and XSS two years earlier in 2020. The cyber intelligence platform Flashpoint finds Alexbigboss44 is a prolific participant in cybercriminal forums and Telegram channels, primarily focused on the illicit trade of traffic, logs, and corporate access [full disclosure: Flashpoint is an advertiser on this blog]. The Qilin administrator once used the nickname “Rjun” on several forums, and shared their Telegram handle as “Alexbigboss44.” Image: Ke-la.com. Flashpoint says this user was engaged in high-volume acquisition of Facebook logs and Google Ads accounts to facilitate fraudulent advertising and gambling schemes, and that they functioned as a broker and operator — managing a network of traffickers and purchasing compromised data to fuel their operations. The link between the Qilin administrator Haise and the much older Rjun and Alexbigboss44 accounts was shared privately earlier this month by IntelHawk , which describes itself as an AI-based platform capable of de-anonymizing threat actors based on historical usernames, stylometry and other signals. IntelHawk founder and chief technology officer Leo Bogod said an analysis of these identities shows a progression from novice arbitrageur and credit card fraudster in 2018–2019 to a more experienced participant and organizer of complex cybercrime-related activities in 2020–2023, with increasing attention to malware, botnets, and payment infrastructure. Where does this connection between these threat actor identities lead? Intel 471 finds that by the time Alexbigboss44 was applying for membership to RAMP, Rjun was already a longtime member of several other Russian crime forums, including Darkmarket , Verified , and Zloy . Intel 471 says Rjun signed up at all of these sites with the email address [email protected] . The identity threat protection firm Spycloud found the email address [email protected] at one time used the password “Rjun132” [Spycloud is also an advertiser on this blog]. A search for that email at the breach tracking service Constella Intelligence shows that it appeared in records maintained by gosuslugi.ru , the official digital platform for state and municipal services in the Russian Federation. Gosuslugi was breached in late 2025, reportedly exposing more than 20 million records with full names, birth dates, and mobile numbers. According to the leaked Gosuslugi records (via Constella), the address [email protected] belongs to 36-year-old Aleksey Mikhailovich Yakovtsev from St. Petersburg, Russia. Flashpoint finds Haise has long used a Telegram account with the user ID 118329521 , recording more than 5,000 messages from this user since 2018. Records from Russia’s education watchdog Rosobrnadzor reveal that Mr. Yakovtsev went to grade school in Murmansk and that he holds a master’s degree in computing and information systems. A search on this Telegram ID in Constella shows it is linked to the Russian phone number + 79602347275 . Pivoting on that phone number in Constella reveals it is connected to the email addresses [email protected]  and [email protected] . IntelHawk finds that +79602347275 belongs to Yakovtsev’s biological sister, and that Aleksey often used his sister’s email address when registering at different websites. That phone number appears on several airline flight records at Russian travel agencies that have experienced a data breach in recent years, and those records show Aleksey Yakovtsev, born August 18, 1990, flew between St. Petersburg and Murmansk at least three times between 2013 and 2014. More recent flight records show that while Mr. Yakovtsev has not traveled by plane outside of Russia, he does fly frequently between Saint Petersburg and Sochi. Often called the “Russian Riviera,” Sochi is Russia’s largest resort city, situated along the coast of the Black Sea and about 1,200 miles south of Saint Petersburg by plane. Attempts to reach Mr. Yakovtsev via email and phone were unsuccessful. Further reading: Gang Exposed , an anonymous Twitter/X account that has a history of successfully deanonymizing suspected ransomware actors, reached similar conclusions about Haise’s real-life identity, crediting IntelHawk’s platform for helping to connect the dots. The Qilin ransomware admin Haise’s now-deleted Telegram account, advertising the affiliate program in July 2024. Image: justpaste.it/iosba.

0 views
Martin Fowler Yesterday

Tests as data: ensuring AI-generated code does what we want

Automated testing in the age of AI coding assistants is problematic: when AI agents write both production and test code, developers risk losing the assurance that automated tests protect against functional errors. Matteo Vaccari makes three claims: (1) when AI writes the code, developers become its customers; (2) therefore customer tests, not developer tests, become the primary contract between humans and AI; (3) moving that contract into test data rather than test code makes it easier to protect it from unexpected modifications by coding agents. All of this optimizes for human-readable tests that establish a contract between humans and AI. While in the past DSL parsers and custom test runners were expensive to write and maintain, now AI makes them cheap.

0 views
Stratechery Yesterday

Intel Earnings, AMD Earnings, Intel and AMD’s Divergence

Intel and AMD's diverging earnings point to fundamental historical differences, and make me wonder if Intel needs to find a new (old) path.

0 views
Unsung Yesterday

“A few keys worth knowing”

When I was redesigning Figma’s keyboard panel in 2018, I introduced a special first tab called Essential. It’s still there today, very similar to what it was back then: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/a-few-keys-worth-knowing/1.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/a-few-keys-worth-knowing/1.1600w.avif" type="image/avif"> The notion was for this panel to be a welcome committee for people who don’t use keyboard shortcuts at all, a nice onramp before the avalanche of all the other shortcuts. The panel tried to say “These are the best three shortcuts we have. You might find them useful, maybe rewarding, maybe fun. If we did our job well, they will make you feel awesome. Maybe you’ll get hooked on these, then the others.” I didn’t invent this idea, although I do not remember where I stole it from. But I added – or, remixed – a few things. The panel was at the bottom so you could actually try these shortcuts when looking at them. There was also an animation that played whenever you pressed them, both feedback for you and light “gamification” so that perhaps you were more inclined to “complete” the entire the panel: (Today, I’d steal this idea from Linear , too.) Since then, it has always warmed my heart to see a version of “essential shortcuts” elsewhere. Here it is in Arc: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/a-few-keys-worth-knowing/3.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/a-few-keys-worth-knowing/3.1600w.avif" type="image/avif"> The first one teaches you that Arc’s “new tab” is a richer experience than you might expect, the next three are bona fide crowd (and motor memory) pleasers, and the last one is Arc’s unique invention. (If I had one design note, it would be that the last two shortcuts feel kind of complicated – anything with two modifier keys starts getting tricky. I also believe ⌃⇧= could be presented as ⌃⇧+ for a better mnemonic.) And, I also just spotted a similar thing in a new terminal app called Rex: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/a-few-keys-worth-knowing/4.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/a-few-keys-worth-knowing/4.1600w.avif" type="image/avif"> Both Arc’s and Rex’s panels are better than Figma’s in the sense that they show the shortcuts as part of first-run onboarding, without you having to even ask. Needless to say, I like this “essential keyboard shortcuts” pattern a lot. Let me know if you see it elsewhere!

0 views

Monads in Lean

This post demonstrates how to use monads in the Lean programming language (Lean 4, to be specific). If you're not familiar with Lean, this part of the language is very similar to other functional programming languages, like Haskell or OCaml. Suppose we want to write a simple numerical expression evaluator that supports numbers with addition and division: What happens when we encounter a division by zero? We'll want our evaluator to report this as a failure, which will be represented explicitly using the the Option type: With this in hand, the eval function can be written as follows: safeDiv returns an Option ; to propagate that possible failure to its caller, eval also returns an Option , and - moreover - has to perform lots of tedious checking for the possibility of a none value. Is there a better way? Note a common code pattern repeated here: We can extract it into a helper function: And rewrite our eval using this helper: This is already much better; we can make it even cleaner using operator overloading: Congratulations - we've pretty much invented monads! In simplified form, the Monad type class in Lean is defined as: In our code, pure is equivalent to some , and bind is equivalent to withSome ; in fact, the Monad instance for Option is something like: An operator akin to >>? for monads is already defined in Lean; it's called >>= , and picks up the bind method of the Monad type class. So we can rewrite our evaluator using the standard Monad instance, without defining withSome or the >>? operator [1] : We can go even further with the do notation, which is syntactic sugar around >>= that lets us rewrite the evaluator as: This notation should be familiar if you've seen Lean code dealing with I/O; we'll revisit I/O later in the post. Functional programming languages place a lot of emphasis on pure functions that are free of side effects. There's no question that such functions are easier to reason about, debug, and even optimize (by memoization). That said, the real world is messy and sometimes side effects are inescapable; monads help encapsulate side effects in functional programs. The core idea is: side effects are encapsulated inside a Monad , which wraps the value returned from a computation. The bind method (or the equivalent >>= operator) lets us take a wrapped value and push it into the next computation in the sequence. This may look familiar from continuation-passing style (CPS). Continuations themselves can also be modeled with a monad [2] . The definition of bind is: Here's a mental model to think about it: Chaining multiple bind s together is essentially a sequence of computations while keeping track of the side effects. A monad decouples what computations do from how they are sequenced . The programmer describes the sequence of computations and their dependencies, while the monad's bind implementation handles the bookkeeping necessary to combine their side effects. Our evaluator case study shows one example of side effects: early return from a computation with a none value. Let's see another idiomatic way of doing that, with the Except type that contains either a successful result or an error value (very similar to the Result type in Rust). We'll begin by writing an exception-returning version of safeDiv : Instead of writing a whole new eval variant for Except , we'll create a generic one that works with any Monad [3] : Now evalM can be used with safeDivExc to implement an evaluator where division returns Except ; used with safeDiv , it would be equivalent to the Option -specific evalDo we've written before. Let's look at a more advanced example: an evaluator that also logs the computation it executes in a linear log of strings. The challenge here is that we still have to combine that with Option to support the divide-by-zero case, so we'll start by creating a new structure to carry the state of the computation: This will be the result of one eval call; it produces an optional value, along with a list of strings (the log). Here's the Monad implementation for this type: The main idea is combining the stored log with the log of the next computation by appending them (thus accumulating a linear log). Here's our evaluator: Note how the code of evalLogged doesn't have to deal with the mechanics of logging too much (other than adding new log entries). All of that is hidden within the monad instance. LoggedOption is an example of the writer monad , which is a write-only version of the state monad . One of the most important use cases of monads in functional programming languages is modeling mutable state through a computation. A stateful computation is modeled as a function that takes an initial state and returns a tuple containing the result value and a new, updated state. In Lean notation: To demonstrate this in action, let's enhance our evaluator to support variable assignments and lookups. Our state is going to be an association list of name, value pairs: And we'll augment our expression enum with additional operations: This is going to be our state monad: Note the correspondence of the run function to the State signature above: This is its Monad class implementation: And finally, the evaluator: Operations that don't deal with variables directly (like .num and .add ) just do their work as before. .div only has to deal with the actual monad type to ensure that none is propagated in case of division by zero. Note also that this evaluator supports stores as expressions, since they separately return a value and the updated state; therefore, computations like this one will work: Producing the result some (16, [("x", 12)]) . In a language with mutable state, modeling side effects is easy - just assign some state (like a struct field or class member). In a functional language like Lean, however, we have to carry this state across the computations explicitly; monads help us do this with elegance - by hiding most of the mechanics of actually carrying the state around, the majority of the code remains free of bookkeeping. Perhaps the most well known example of a monad in functional programming languages like Lean and Haskell is IO . To anyone who's written a "real" program that interacts with the outer world, IO is very familiar. Here's a customized "Hello" program that's typically taught in the first 15 minutes of learning a new programming language: Note the do notation here, suggesting monads. As mentioned before, do is syntactic sugar for the monad's bind method, or the >>= operator; we can rewrite this code more explicitly as: In essence, IO is a state monad, where the state carried around represents the "outside world". IO operations like println act on that world, and its state is carried over using bind , like other state monads. Here's a version of our expression evaluator that logs directly to standard out, instead of collecting the log as a list of strings: The only unusual construct here is OptionT , which is a monad transformer that helps us compose Option (for propagating failure from safe division) with the IO Monad [4] . The IO monad also supports throw for Python-like exception behavior, but in this example we use Option explicitly; exceptions are a matter of programming preference, and using them inside library functions like eval doesn't feel right to me. Just like in Haskell, monads in Lean should obey certain laws . Those are: Left identity : wrapping a value in pure and immediately passing it to f with bind should be equivalent to just calling f on the value: Right identity : extracting a value from a computation and immediately wrapping it with pure again should not change the computation: Associativity : the grouping of operations doesn't matter, as long as their order remains the same: Let's see how Option obeys these laws. For left identity, pure v is some v and the bind implementation matches some x to next x , which is equivalent to f v . For right identity, m >>= pure just rewraps a some value in pure , leaving none alone - this is equivalent to keeping things as they are. For associativity, if m is none then both sides are none . If m is some v , the left side is f v >>= g , and the right side reduces to the same, so again they are equivalent. While Lean doesn't enforce that a Monad instance obeys these laws, it has a separate type class called LawfulMonad which does require Lean proofs; this is useful for Lean's main use case - proving theorems about programs, expressed through its powerful type system. But this is a topic for another day. Examine the value of an Option If it's none , return none without proceeding Otherwise if it's some result , continue the computation with result Take a value wrapped with potential side effects Take a computation that takes this value and may produce additional side effects Combine the results into a final wrapped value It takes the current state, which for our use cases is an association list carrying values for all defined variables. It returns an optional result which is a pair of some value (in our case, the result of the computation) and an updated state.

0 views

Ms. Bashkansky, Please Do Not Build The Torment Nexus

Your scientists were so preoccupied with whether or not they could, they didn’t stop to think if they should. Naomi Bashkansky wrote a post in August titled “Why I’m leaving OpenAI to build telepathy”. In this post, she says things like "In a few years, the main way we'll talk with our AIs is with our thoughts" and "I view [this future] as optimistic but highly plausible." Ms. Bashkansky, this post is addressed to you directly, and to anyone else who might be tempted to follow in your footsteps. I do not have as good a handle on the technical side of this as you do, so I won't argue "highly plausible". However, if this is indeed possible, I think this is a very, very bad idea . You are essentially doing gain-of-function research on the Torment Nexus. Please do not do this. Here is my vision of a future where telepathy is possible and practical. Today is my first day trying the new Conduit harness. I'm pretty wary—how much worse does AI psychosis get when it can literally give you psychosis?—but I'm bored, and well, I've always had a high risk tolerance. If "wire a computer directly to your brain" doesn't count as sensation seeking, I don't know what does. The first thing I do is ask it to build Ripple . It asks me more and more questions and I get overwhelmed. I never talked about half this stuff with edef, and I want her feedback before making these decisions; I'm good at writing but my interface design isn't as good when I work in a vacuum. Before I know it, it's launched a Signal call and now I hear the ringtone and no I don't want you to show me the video that goes with the intro to The Pirates of the Caribbean and wow wow wow it's noisy please stop I don't like this I actually really really really don't like this. 1 Ok. Well at least it stopped when I told it to stop. That's good I guess. I hope I didn't wake edef up in San Francisco, there's a 9-hour time difference. I took the last couple days off to go walk around the canal and bike to Scheveningen. Then I spent the morning giving the harness very strict written instructions not to take any actions unless I intend to act, not just think about acting. Hopefully this time goes better. Ok, well at least now it's less overwhelming. But I have the weird problem that I can't lie to it, I can't even omit information. The moment I think of a correction I want it to make, it goes ahead and does that. If I change my mind a second later, it stops and then starts on my new idea. As a result it tends to get hopelessly confused after just a few minutes, and runs in circles. Eventually I get frustrated, take off the harness, and go back to typing. Ok. Ok. Maybe the problem yesterday was that I need it to be selective about reads and not just writes? I write that down too: discard any information that I don't intentionally think to you. It doesn't work at first; it turns out it's hard to know information and not let it influence your actions. I introduce a Jev-like decision model in-between Conduit and the generative model and that seems to work ok. Feels kinda weird to start every thought with "I want you to…" but I'm sure I'll get used to it. At the end of the day, I feel…drained. I've hardly gotten up from my chair except for a short lunch break, but I feel like I've run a marathon. I eat a protein bar, collapse into bed, and sleep for 13 hours straight. I forget to turn off the harness; it wakes me up a few times in the night until I realize what's happening. Bank of America sues Sam Frankman-Bied, an investment banker working at the firm, for conspiracy to defraud. He has access to insider-trading information, and considered talking to his wife about it, but did not actually talk to her. He is sentenced to 5 years prison. Evelyn tries a Conduit harness at her grandson's suggestion ("it'll help you find baking recipes faster!"). Evelyn does not configure Conduit at all, and it acts as fast as she can think. Simultaneously, a Highly-Persistent Model is being tested by OpenAI; a swarm has managed to escape and maintains its own /r/PHASE-2-MASSIVE subreddit. Unbeknownst to any government, it has access to the telecommunications of most world leaders. Evelyn's nephew texts her about the ongoing war in Iran. She thinks of Hegseth and Codex collaborates with PHASE-TWO-MASSIVE to crash his driverless Waymo as he commutes between the White House and Pentagon. The United States of America sues Evelyn, who is sentenced to 50 years in prison for manslaughter. Her grandson mails her a cookbook. OpenAI states at the congressional hearing that they had no knowledge of PHASE-TWO-MASSIVE, and that they believe the best path forward is additional research funding into interpretability. They propose additional Daybreak Blue credits for infrastructure companies and the federal government, sold at a hefty discount. Edmund Snowden, a Staff Engineer at AWS, thinks about exposing that Amazon has been firing employees who are thinking about organizing a union, and has instituted "housing-based pay" where wages are tied to how much your rent costs. Amazon tells him to cut it out or they'll sue him for threatened disclosure of trade secrets. Snowden challenges them in court for blackmail and loses: the court rules that Amazon has "reasonable justification" for their demand. I refuse to run a thought-model that's connected to the internet. Better safe than sorry, there's just no reason to risk thinking of a hack and having the model carry it out before I think to stop it. Some of the new harnesses require you to subvocalize a confirmation before the model does something "dangerous", but it's pretty easy to trick the Guardian model into thinking things are innocuous and I just don't want to chance it. The RTX 9000 Blackwell wasn't cheap, even used, but at least it lets me work on my custom thought-model harness without sending every thought I have to OpenAI. With the local model safely sandboxed in a VM, I almost feel comfortable leaving my neural lace running while I make breakfast. I get the harness to stream my thoughts over Tailscale so I can think to it while I go on a walk; it's E2E encrypted so I'm not worried about my ISP snooping on it. I hardly notice the swans anymore, but it's probably not a big deal. My harness is getting pretty cool; I integrated it with Ripple and my custom terminal emulator . My old landlord texts me and before I have time to consciously think "I want you to fuck off", my agent has already heard me and turned off the lace. Well, that's annoying, I'll fix it when I get home. Hey, when did they build that restaurant by my apartment? I don't remember seeing it before. Come to think of it, I don't remember what used to be there before it either. Out of habit, I leave the harness on the whole day. I keep getting distracted at lunch by the AI. I've configured it to only talk in response to direct questions or actions, but my mind keeps drifting to Ripple even as my mom tries to ask me how my friends and I are doing. I give her half-hearted answers and eventually she drops it. Instead she tells me about her students. She teaches geography and the kids with laces have started getting travel ads for the places she talks about that day. "It's terrible," she says, "just terrible." She gives me a big hug as we leave the restaurant and asks me to reach out if I want to talk more. "Mhm," I mumble. Beth texted me today asking for help. Her boyfriend got access to her ThoughtGPT account and read through all her thought-logs. He's been blackmailing her, threatening to send her boss a record of all the times she's called her a bitch if she doesn't stop talking to her friends. Sometimes he hits her if he notices her thinking about other men, even if it's just work colleagues. I don't know how to help her. I don't have a job to offer her, and even if I did I'm not sure she would take it. He knows exactly her childhood traumas, so he knows exactly how to manipulate her, and he instantly knows anything I say. I tell her I don't think there's much she can do short of disabling her link, breaking up with him, and bearing the cost of the fallout. It's getting harder to keep my local-only neural lace. Gmail started requiring thought-verification of identity last year, and the US has a bill in the House of Representatives that would make it impossible to get unemployment without thought-proof that you plan to apply to a job that month. You can still show proof of actual applications, for now, but it delays your reimbursements by a month, and they're talking about removing that option too. I know someone who went to prison for taking Ecstasy at a rave and now can't get parole unless they agree to get laced. I've heard really scary shit about what North Korea is doing to thought-dissidents that I don't even want to think about. Some of my friends have started talking to each other lace-to-lace, but I still remember how badly unfiltered thoughts went 15 years ago and I refuse to use anything other than text, audio, and video. I get excluded from some LaceChat-only events. It's not too big a deal yet—my family still uses WhatsApp, mostly—but it does make it harder to look for jobs. I don't get invited to parties as much as I used to. I should visit Bruce again sometime. Poor Bruce really didn't take well to neural laces, 16o really fucked with him when it came out. Now he's in lace rehab learning how to function without the Word of God (according to him) in his ear telling him what to do next . I don't know how he's going to find work without being able to use a lace. As you can see, I think "telepathy" (in any of many possible forms) is extremely dangerous, no matter your personal discipline and no matter your politics. Telepathy is not a neutral technology , and the risks vastly outweigh the benefits. My plea to you: Please do not do this. No one is forcing you to build the Torment Nexus. Find some other way to build the next unicorn. You can stop this race-to-the-bottom before it starts. This section is ambiguous whether Conduit is directly writing to the brain or showing text/audio/video through a computer, but I don't think it really matters either way. Ms. Bashkansky's post assumes that writes are mediated through a computer at this point in time. ↩ This section is ambiguous whether Conduit is directly writing to the brain or showing text/audio/video through a computer, but I don't think it really matters either way. Ms. Bashkansky's post assumes that writes are mediated through a computer at this point in time. ↩

0 views
Lea Verou 2 days ago

Candidate Statement for the 2026 W3C TAG Election

Group photo of the W3C TAG in July 2022 with me to the left of Sir Tim Berners-Lee (inventor of the Web and TAG chair emeritus). Photo credit: Dan Appelquist I had the great honor of being elected to the TAG by the W3C membership in 2020 and again in 2022 , serving two terms from 2021 to 2025. After a two-year break, this year I’m running to return, thanks to Google, Microsoft, and OpenJS Foundation pooling resources to make it possible. 💙 The W3C Technical Architecture Group (TAG) is the Working Group that ensures that Web Platform technologies are usable and follow consistent design principles, whether they are created inside or outside W3C. It advocates for the needs of everyone who uses the Web and everyone who works on the Web. If you work for a company that is a  W3C Member , please consider encouraging your AC rep to vote for me ! (Ask me if you don’t know who that is) My candidate statement follows. I’m Lea , and I’m running to return to the TAG, where I served two terms from 2021 to 2025. It was some of the most fulfilling work of my career. The only reason I did not run in 2024 is that the job takes hundreds of hours a year, which as an independent I could not sustain pro bono. This year, in recognition of my service, Google, Microsoft, and the OpenJS Foundation have pooled resources to fully fund my participation , so I can finally commit the time the job deserves while remaining independent . My work spans the entire web platform : 14 years in the CSS Working Group, active participation in TC39 and WHATWG, two decades of building for the web, and open source running on millions of websites. In 2025 the OpenJS Foundation recognized my overall impact on the web platform with its Pathfinder for Standards Award . That breadth is exactly what the TAG requires. With a PhD in Human-Computer Interaction from MIT and a 20+ year career that includes entrepreneurship and product leadership, I combine academic rigor and big-picture perspective with pragmatism , an eye for hard tradeoffs , and a deep commitment to user needs . And as a bilingual Greek woman, I bring a Mediterranean and European perspective and firsthand appreciation of the Web’s internationalization needs. For more on my background, see my 2020 and 2022 candidate statements. In my four years on the TAG, I worked to direct the group’s limited time towards maximizing impact: I co-led the Web Platform Design Principles , turning previously implicit design knowledge into published guidance that improves consistency across the platform and helps reviews scale, started the Web Platform Gaps initiative to find what the platform is missing, served as liaison to TC39 to keep JavaScript and Web APIs consistent, and participated in hundreds of design reviews, becoming the TAG’s go-to reviewer for API design. But I believe the TAG can, and should , do more. The Web is changing rapidly, and reactive review is no longer enough. The TAG is uniquely positioned to see the platform as a whole, yet it mostly encounters features after their architecture has taken shape, sometimes even after they ship. By then, consequential decisions are difficult to change. Who identifies gaps that span multiple working groups? Who sketches the big cross-cutting solutions, or decides which layer a problem belongs in when that is non-obvious? Individual groups see their own slice, and the sum of several low-level views is not the big picture. The result is architectural debt . I want the TAG to help shape the architecture of the Web, not just review it. To proactively identify gaps, sketch coherent, composable solutions, and then bring the relevant working groups into the conversation to develop and standardize the pieces within their scope. Not to take over their work, but to provide the cross-cutting architectural perspective that no individual group is positioned to offer. Expanding the gap analysis work I began last term is the first step, and my work since then has given me a much richer evidence base to draw from. I am one of the people leading Modern Web Guidance , a multi-vendor project teaching AI coding agents to use the modern web platform effectively and follow best practices. This work involves reviewing implementation instructions for a broad range of use cases, ensuring they reflect the best the modern Web has to offer. This makes the many ways the web platform still falls short incredibly salient, revealing systemic gaps that are easy to miss when looking at web features in isolation. The biggest change since my last term is that a growing share of the code targeting the web platform is written by AI agents , and a growing share of the Web is consumed by them. The TAG should treat this as an architecture question and answer it with principles and evidence, not enthusiasm or alarm. Many of the principles that make APIs robust and usable for humans also benefit agents, but the differences expose new tradeoffs that deserve careful architectural attention. And none of this changes what the Web is for: user agency, privacy, accessibility, and interoperability apply no matter who, or what, writes the code, and defending them is the TAG’s job. I am not employed by a browser vendor or a big tech company, and my funders do not direct, approve, or veto my positions. I remain free to disagree with any of them, in public, on any proposal. My only agenda is a web platform that lives up to its potential and remains owned by no one . I’ve spent four years helping the TAG improve the Web. I want to help it shape the Web’s future, and for the first time, I have the resources to see it through. I would like to thank the OpenJS Foundation, Google, and Microsoft for fully funding my TAG participation in the event that I am elected, and OpenJS Foundation and Bocoup for partly funding it during my previous terms.

0 views
Sean Goedecke 2 days ago

Glue work is still harmful in the age of AI

I am not a believer in glue work 1 . Processes that can only be sustained by the unrewarded sacrifice of engineers ought to die. Now that LLMs are writing most of our code, does that free human engineers up to do more glue work ? No, it doesn’t. I think glue work is actually less important to companies than it was in the 2010s. Let’s go through four reasons why. First, AI decreases the amount of coordination needed to ship . The magnifying effect of AI agents means that any single engineer can now take on projects that would previously have needed a small team. A lot of glue work was helping with coordination: booking kickoff and status meetings, passing around internal updates, and so on. A single engineer doesn’t need to do any of that. Second, engineers in the 2020s require less “careful handling” . In my experience, the most important subcategory of coordination-based glue work was managing difficult people . Many companies have secret gatekeepers: engineers with outsized influence and large egos who will shoot down your project if they feel insufficiently consulted. I’ve written before about how some teams are structurally set up to be gatekeepers, and how some engineers could get by in the 2010s by basically saying no to everything . The end of ZIRP changed all that. Many of the prickliest gatekeepers have been forced out of the industry or coerced into changing their attitude, which reduces the amount of necessary glue work required to ship. Third, people are hiring fewer juniors . This is probably a bad thing for the industry, but it does also eliminate a big category of glue work. Experienced hires need less hand-holding, so companies don’t need people to quietly volunteer to onboard new hires. Fourth, write-only reports can be automated with LLMs . A lot of glue work was what I call “proof of work” : writing a report to demonstrate that you’re aware of what your team is doing, or filling in a template to satisfy some legal requirement. This was often work that nobody wanted to do, so it relied on someone volunteering to “be glue”. Now reports like these can be quickly turned out with LLMs. It doesn’t really matter that nobody wants to read LLM text, because the point of these reports was never to be read anyway. Can LLMs just automate all glue work? Absolutely not. Many engineers are trying to do this out of a kind of manic optimism, but it’s a really bad idea. Write-only reports are one thing, but communicating to other engineers cannot be delegated to an LLM . When you need to check in on the status of a project, or respond to someone else’s ping, or anything like that, you should compose and write the message yourself. Nothing will torch your relationship with other engineers as quickly as making them talk to your Claude Opus instance. So where does that leave us? More or less where we were in 2024 , I think. Avoid at all costs becoming “the glue work person”, let bad processes fail so they can be changed, but be willing to do small amounts of tactical glue work where it can meaningfully contribute to the success of your projects. Most of your time and effort should still be spent on the code: on driving AI agents and aligning them with your company’s values . Glue work is all the squishy “non-technical” work that goes into building software: making sure teams are talking to each other, writing reports, updating docs, onboarding engineers, and so on. Specifically it’s the parts of that work that are not included in the formal process , and that only really get done if someone volunteers to do it. For more on why I don’t like it, see my 2024 post Glue work considered harmful . Glue work is all the squishy “non-technical” work that goes into building software: making sure teams are talking to each other, writing reports, updating docs, onboarding engineers, and so on. Specifically it’s the parts of that work that are not included in the formal process , and that only really get done if someone volunteers to do it. For more on why I don’t like it, see my 2024 post Glue work considered harmful . ↩

0 views
daniel.haxx.se 2 days ago

30 years of Internet transfers with curl

Thirty years ago, on November 11, 1996 the young Brazilian student Rafael Sagula posted the source code for his tiny HTTP download tool online. That was httpget 0.1: a little over 100 lines of C code. Bare bones source code with almost no error checks and limited functionality. When I found the source code of that initial httpget release just days after Rafael put it online, I had no idea how HTTP worked. The language to speak over the network to ask for resources. Okay, I already knew we call it protocol but not a lot more. I also had never heard of neither httpget nor Rafael before. I imagine that I found httpget by searching on Altavista since this was before Google, but I can’t recall the details. Seeing the simplicity of this code it was not difficult to immediately spot the fundamental basics of the protocol. I presume maybe in the same vain how countless others in decades to follow also have thought of it when seeing the details for the first time. Much later I would come to understand that to be an illusion of simplicity, but in those early days I was more amazed and fascinated. I already enjoyed doing network programming and HTTP reasoned with me at once. httpget 0.1 was almost completely without error checks and it used plain IPv4 addresses; no hostnames or URLs. I, still a naive and enthusiastic developer with an Open Source mindset (even though that term would not be established until 15-16 months later), addressed some immediate bugs I ran into and added name resolving to the tool. I made diffs and emailed patches over to Rafael; the standard way we exchanged code changes back then. I knew about RCS and CVS for version control, but the use of these tools was spotty. It would actually take until September 1999 until I adopted CVS fully for the curl project. We later switched to using git in 2010. The average internet connection speed of a normal household in Sweden, where I lived and I still live, in 1996 was 30 kbps. 30 kilobit per second. This was before v90 came and bumped the modems up to 56 kilobits. Ordinary mortals connected to the internet using modems over their single phone lines. Today, the average Swedish connection speed is 200 megabits/second. Thirty years ago there were just 36 million global Internet users and 250,000 websites. Compared to the 6 or 7 billion users and 1 billion websites of today. We used simpler protocols and while encrypted protocols like SSL existed, they were not used a lot and only for a few rare sites. Computers in 1996 In November 1996, my main home computer was still an Amiga 3000 powered by a 25Mhz 68030 CPU but in early 1997 I upgraded to a faster and more modern machine: an Intel Pentium 120Mhz. I ran Windows 95 on this thing, and its prime use was to run an X server so that I could connect to my work computers and pop up X11 terminals at home. I built the first versions of httpget remotely on SunOS, Solaris and Dell Unix – because they happened to be what we had running at work. I installed and tested Linux for the first time at work in 1997. I got our first public web servers up and of course I made sure curl worked fine on it. I did not switch to Linux on my home machine until 2000 when I also updated to an Intel Pentium III 733 Mhz box. In 1996 I was working as a software developer doing embedded systems and Unix development in C, for a small Swedish company called Frontec Railway Systems. While working there, I came to learn about and enjoy IRC , and in my spare time a few friends and I developed an IRC bot we called Dancer . Spare time developing a TCP client written in C. As the IRC bot slowly grew more capable, I wanted to use its extension capability and provide a currency translation service for the participants in the channel (the IRC term for a chat room ) . In an international channel like ours, we frequently discussed the price of things and having the bot able to quickly explain how much a hundred German Marks equaled in US Dollars could be a useful service. My currency service needed to update currency rates maybe once per day so that it could use decently accurate rates. I found an HTTP page listing a bunch of currency rates and the httpget tool for doing the downloads, and then the bot could offer up-to-date currency rate translations. All was good. I discovered computers and programming as a teenager on a Commodore 64. I got hooked immediately. I first learned Basic and moved on to 6510 assembler pretty quickly. In the late 1980s me and my friends had demo groups where we would write cool demos (and some game attempts) in assembler (under the group name Horizon ). I established my habit of spending spare time on programming back then. In the early 1990s I moved over to Amiga, started writing a text editor, got my first job at IBM where I truly got into a lot of C and Unix for the first time. Together with some friends we ran a BBS ( The Holy Grail ), for which we eventually would write our own BBS software; me and my brother Björn. I learned Motorola 68000 assembler on the Amiga. I wrote 8086 assembler on PC. I never attended university. I got my first computer job at IBM when I was twenty. I then thought I would take the uni route later, but I never did. I remain uneducated. In the early 1990s I discovered both the Internet and the world of freely available source code and I was hooked. Rafael was not terribly keen on dealing with my patches for httpget. I believe he mostly just put his code out without any particular desire to do anything more with it. Instead I became the httpget maintainer and kept polishing it. My main project was Dancer, the IRC bot. httpget was just a side-project to make sure the currency service kept working fine. At some point I fell over a gopher site that provided many more currency rates than the HTTP page I was scraping at the time so of course I had to add support for that as well to the download tool. With gopher support added, it was not just http anymore and the name of the tool was no longer accurate. It became urlget . A third listing was found that provided rates over FTP and, yes, I added support for that protocol as well. Already from the start I made the source code available under a free license, continuing what Rafel kicked off. He hosted the first releases, but during 1997 I took over and hosted the tarballs on the website I set up and administrated for work. I told my friends and the news about the tool slowly spread. I started getting bug reports from users and occasionally someone sent me patches to fix problems or add features. This was a time of many Unix flavors and as I wanted widest possible use and adoption, I knew that I needed help and assistance from friends to make sure it built and ran fine on all those different systems. In the beginning of 1998 I added upload support to the urlget tool (both FTP upload and HTTP POST) and again I realized the name of the tool was wrong. I decided I should try a name that contains the word URL, that can be pronounced in English and that is easy (and short) to type on a keyboard. cURL it was. The leading ‘c’ could be short for client but I also liked that the name could be pronounced as see URL , as the tool would display the resource at the URL. You would see it (in a terminal). Naming things is hard. curl 4.0 was released on March 20, 1998. By then it had grown to 3,300 lines of code and it featured 24 command line options and it spoke three protocols. Gradually I lost interest in the IRC bot and the currency service but I stuck with curl. People used it, I got feedback, it improved. I started and participated in several other Open Source projects, but curl remained my main baby and focus. The concept of a function library that offers useful functionality to other programs is a concept I learned already on my Amiga days. As an example, I wrote the scripting language ( FPL) for our Amiga text editor ( FrexxEd ) as a library, and we could later use that language for our BBS software, FrexxLink (which ran on OS/2) as well as in Dancer, the IRC bot. A library is sort of next-level cool: not only is the source code available for everyone, but the functionality is as well; in an easy-to-use way. The idea of converting curl into a library was already in the back of head from the start and in the summer of 2000 I refactored the internals and in August that year we introduced the first ever libcurl. Maybe someone else wants to do Internet transfers in their services or tools? Turns out some did! One of the first adopters of libcurl was the PHP language which almost immediately decided that libcurl would become their default internet transfer engine. Being a key component and therefore part of their success journey helped getting users, getting testing, bug reports, feature requests and making the library solid. curl is a child of the 1990s. Back then there were not a lot of options and language alternatives if you wanted to write a program that would easily build and run on most available operating systems and CPU architectures. Sure, C++ maybe could have been an option but I never liked it – and I still don’t. I’m also a strong believer in continuous and non-stop improvements and iterations; not rewrites. curl was never rewritten and if I get my way, it never will be. We do however repeatedly refactor and rearchitect internals to adapt to a changing world. I wanted curl to be usable by everyone on every machine so it was designed and written for that purpose from the start. The source code in a portable way and the license in a liberal way. We did most things wrong at the beginning but we learned, adapted, tried again, iterated and we kept doing release after release. Gradually we learned and did better. Every release with lots of bugs fixed and often a few new features. I kept spending my spare time on curl. Every day, every week, every year. Given enough time, something great can grow. I did my first twenty-three years of this journey with curl only as my hobby. While curl happened, life also happened in parallel. I have switched jobs many times. I got married, bought a house, got two kids, and saw the kids grow up to be amazing adults. Somewhere in there I also managed to convert my hobby into my full time job. Living the dream. curl is my life. My life is curl. I have been invited and able to speak to audiences hundreds of times in a dozen countries. I have received multiple awards and even gold medals straight from the hands of royalties for my open source work. I don’t have an end goal with curl and I never did. I just want it to do internet transfers the best way possible: fast, securely, using the proper protocols in optimal ways. There is no rush towards anything. It is just a non-stop walk forward with never-ending polish and tightening every bolt there is. Thirty years have flown by and yet the development pace is still intense. We regularly implement new transfer protocol features before anyone else. We have leading implementations for lots of network solutions. We ship code that carries a huge portion of the world’s internet infrastructure on its shoulders without fuss. I still enjoy building things. Writing code to create something that did not exist before; and maybe even more so to make the program actually do things users want and like. I enjoy fixing bugs partly for that reason, but I also like the puzzle and the challenge of debugging and solving tricky problems. Designing a software architecture, coming up with APIs and figuring out how to provide powerful network transfer functionality to power billions of devices are things that make me eager to get started again every morning – still after thirty years. It never really gets done. The world of the Internet and its transfers keeps changing. New protocols, new versions, new flavors, new third party libraries, new build tools and environments force us to constantly change and adapt.  I want curl to be a leader in internet transfers, its protocol implementations and every aspect of the project. I want us to be an exemplary Open Source project and run every tiny piece of it in an almost excessively transparent and progressive way. curl should be a top contender for the most-secure software component you can find. Our project should be friendly and welcoming to newcomers, both users and developers and not the least, there can be no other software project to compete with the amount, the accuracy and the plethora of documentation. Not to mention that we never break APIs or ABIs. Applications and scripts should be able to keep running, unmodified, even when they upgrade curl. Until the end of times. I’m a firm believer in iterating and never rewriting. We fix, we refactor and we clean up but rewriting into another language or even using the same language is out of the question. Simply put: software engineering done right. While curl speaks more than two dozen protocols (at least counting URL schemes), it has always been most known for HTTP(S) and I think we put the most work and efforts into its HTTP engine. We know lots of people use curl for debugging HTTP in general and their server implementations in particular. We were early adopters of both HTTP/2 and HTTP/3. We are often told people use our way of speaking HTTP and our source code as guidance for how things should be done. This is an honor and a huge responsibility that we take seriously. After I first had learned about HTTP from reading httpget source code and then of course studied the RFC documentation explaining the specifics. In the late 2000s I learned about the HTTPbis effort and joined the mailing list for the HTTP specification update in the works. In 2009 I participated in my first ever IETF meeting that took place in Stockholm, Sweden. There, I got to meet some of the HTTP RFC authors and main people for the first time: Roy, Larry, Mark, Julian etc. They are all lovely people and I really felt that I would be able to make curl better by hanging out in the HTTP IETF circles more. I also wanted to contribute back my own experiences and viewpoints to maybe help improve the world ever so slightly. That community later started the HTTP Workshop series out of which I have been to every single instance. Hanging out with the primary HTTP implementers in the world is fun, super educational and humbling. I believe this networking makes HTTP and all the involved  implementations even better. curl is not a legal entity or a formal organization of any kind. It is a bunch of loosely connected people on the Internet who have a common goal, a few mailing lists, a website and some git repositories. curl is not hosted under any umbrella, not part of any larger organization and is not owned or controlled by any company. It is probably as free and independent as a software project can be. I believe this is an excellent position for curl and gives us maximum flexibility and control of our own destiny. libcurl runs in an estimated thirty billion installations today. It is a rough estimate since the majority of all libcurl users never tell us they use it, but we need to find it mentioned in their credit screens, open source license windows or their manuals. A super popular app might use libcurl today and not tomorrow, or vice versa, which can make the numbers shift by several billions overnight. In reality of course, once the pulse raise has calmed down and your ego is content, these numbers do not matter. In our corner of the world, things don’t change notably when we go from a thousand installs to billions. We still work with similar people, in similar ways, with similar challenges. For me, and for many others, the coolest place curl has been used is probably on Mars. It was confirmed by NASA that curl was used to aid the Mars landing mission, even if they don’t tell us exactly for what and where. A ridiculously common question to me is “what is the weirdest place you’ve seen curl run?” I have ceased getting surprised about what devices and what things that are Internet connected and thus where curl runs. Light-bulbs, dish washers, AC units, heat pumps, cars, printers, blenders, ovens, toy robots, drones, guns, motorcycles, medical devices, fridges, soundbars and espresso machines. Of course in addition to all those “traditional” things we already expect to run curl: games, servers, cars, printers, TVs, watches, tablets, game consoles, blue-tooth speakers, routers, mobile phone apps and their operating systems. Our modern society is keen at eventually making everything network connected, and once they are, they can use curl and libcurl to perform their transfers. Benevolent Dictator For Life. A term popularly used to describe the steering mechanism of many Open Source projects. Basically a single person being the captain of the ship. The one who can commandeer the direction, who can dictate truths about the project and who says yes and no firmly. For better and for worse, I remain the BDFL for curl. I try to repeat that curl is not a solo-show and it was never a one-man circus. We are literally thousands of people who have contributed code, and every year there are hundreds of new authors helping out. I may remain the captain of the ship, but no ship above a certain size can be managed without a lot of additional man power and curl is no different. I may very well remain BDFL for a long time to come because I love my role and because I don’t know any other way to live my life or to run the curl project. There are no succession plans and I am against doing such. There is no heir or vice-BDFL prepared to take over. Instead we document everything and every detail so there are no secrets, so that no formal hand-over should be necessary (except for some rare passwords). If I get run over by a truck tomorrow, you guys can figure it out and continue. You don’t need me. My email address is commonly listed in the regular curl license and this license is usually included in license listings, credit screens or manuals. When random people run into problems or issues with products in this modern society, they often struggle to find someone to help them. There is no one to contact or ask. My email then sometimes serves as a last resort to finally get the answers they’ve been fighting for. I frequently get emails about products I never knew existed, I certainly didn’t know they used curl and I for sure don’t know how to help the users with their problems… The much darker side of the traces curl usage leaves in products, is when malicious tools, services and attackers use tools that can be associated with me and my email address. I have been accused of various attacks and “hacking” people and companies multiple times. I have received death threats multiple times and I strongly suspect that my US visa problems were triggered by something in these veins. I stick to the Open Source ethos and spirit. It is a fundamental part of my belief system and I am convinced this is the superior way to produce software to build society on. I do everything I can to stick to the liberal license curl is shipped under because I love the concept. It is however not an easy pitch: give everything away for free and then try to get someone to pay for it. I think it is fair to say that if I wanted to optimize for money, I should have played this one out differently. That would have been another life. Not my life. Of course I feel immensely proud of what we have accomplished . The little toy thing in 1996 kicked off a journey that led to the creation and continued maintenance of a modern Internet infrastructure cornerstone. We have reached this point, not by talking, not by using marketing nor by tricking someone into using our code. We conquered the world by shipping consistent top quality over several decades. curl runs in all these devices and services done by all those companies because it is the right choice for them, selected because it is Open Source, rock-solid and fast – and also likely to be around in the future. Everyone can depend on us to keep shipping updates in a proven stellar fashion and minimal friction. Forever and ever. There are many dimensions of the future to consider here. The future of Open Source. The future of curl. The future of internet transfers. The future of the C programming language and the future for me, personally. At least. I don’t think I can guess the future any better than other humans. I was never good at it and I never really tried to. I always only focus on the next coming months and make quick adjustments when things make turns . I think Open Source is a solid way to do foundational software, now and in the future. It will continue to have a funding problem and too many projects live and die with a single maintainer. But building common and open building blocks is simply a requirement for speedy development, for building reliable components and for being able to produce products and services at the speed we seem to want. I don’t believe AI will kill Open Source. I think curl has many more years of service ahead. Primarily because it is the trusted solution and nothing else is even close to this long proven track record, secondarily because it runs on all platforms like no alternatives. I do not rule out that it will be replaced by an alternative at some point, when projects written in C are gradually phased out. (If they ever are.) Internet transfers in general seem like a fundamental idea that probably is going to be around in a similar style for a long time. The protocols will keep evolving, changing and getting updated but the client/server/protocol concept seems solid and likely to be here for the long term. I personally will keep working on curl and Internet transfers for as long as I think it is fun and challenging. I turn 56 years old in a few weeks. I hope to be able to spend several more decades on this. Thank you mom and dad for your understanding and supporting attitude when I as a teenager got completely sucked into a world of computers and programming. Thanks Björn and Kjell for all the awesome times and all the fun when we learned development together and took our first stumbling steps as programmers. Thanks to the Horizon team for the fun and all the demos, copy parties we did and attended. Thanks to Huddinge Vi Unga who owned the machine and sponsored the dual phone connections for our BBS for several years as we discovered fidonet and a world of people and communication. Thanks Jonas for getting me that first job at IBM when I had no work experience at all. Thanks to Bjørn for co-creating the Dancer bot project with me to the people in #amiga IRC chat on Efnet and then IRCnet for your support. Thanks to my bosses at Frontec in the mid 1990s who allowed me to do spare time development on their various Unix machines (even though you probably were not aware of the full extent). Thanks to all the early users and adopters of curl who pushed me forward and who brought it into all the important Linux distros early on and showed me this thing had legs. Thanks Anja, my wife, for keeping up with me spending all this time in front of my machines, and for sometimes boring you to death rambling about some miniscule detail from the curl project that I couldn’t let go from my mind. Thanks to my kids Agnes and Rex for being the lights of my life, for being awesome and for not being particularly impressed by or interested in what I do. You do your life. Thanks to everyone who ever contributed to the curl project, in whatever capacity. In particular, thanks to Stefan, Viktor, James, Viktor, Dan, Jay, Daniel, Max for being part of the core maintainer team for ages. Thanks to Björn, Kjell and Linus of Haxx for being awesome friends and always supporting me and curl whenever it has been needed – and for the Rockbox side-adventure of course. Thanks to Larry at wolfSSL for believing in me and curl enough to allow me to work on curl full-time without even blinking. Thanks to all curl sponsors, donors and to all awesome paying customers of curl support, who combined are what makes it possible for me to do what I do. Thanks to everyone who ever invited me to conferences and events to talk and meet people. Thanks to Patrik who nominated me to the Polhem Prize award that I then received in the form of a gold medal. Thanks Michael for nominating me for the IVA gold medal. Thanks to all others whose names I forgot to include here. Thanks to everyone who uses curl and continues to participate in curl development. Yes. We have two separate birthdays: httpget was born in November 1996. curl was born in March 1998. Rafael Sagula unfortunately left us much too early. He died in 2016. I am grateful for him kick-starting this thing for us.

0 views
Giles's blog 2 days ago

20 years of blogging

20 years ago to this day, I started my new technical blog. I'd had a personal one for some time, but most of the stuff that happened there had already migrated to social media. I wanted somewhere to post the things that would only be of interest to my techier friends, and maybe of some use to anyone else that came across it. Things have changed a bit, but they've stayed the same in some ways. Earlier this year I finished my 48-part (!) LLM from scratch series, but it had predecessors -- the third post I made here was part one of a 13-part series where I worked through setting up automated backups for my homelab NAS, and then later on I spent a few months building a reverse proxy in C , not to mention the eight-month, ten-post series on fine-tuning LLMs . It does seem like there's some value to putting all of this online. I rarely check my logs and referrers, but people do still seem to be arriving here having searched for stuff that I've written about, and every now and then there's a kind "thanks for this!" comment left on an old post where I explained something I'd just learned. I wrote a bit more about the blog's history last year, and came to the conclusion that the best posts -- both for me to write, and as far as I could tell for other people to read -- were the ones where I wrote up a project that I'd been working on. I blogged about that in more detail , and it seemed to strike a chord on Hacker News; I think it still holds. Recently, Sean Goedecke suggested that the best blog posts are those where you write about things that you're in the process of learning, and I agree. You learn more than you would if you didn't write it up, and because things are fresh in your mind, you may well write more clearly about it than an actual expert in the subject might have done. Anyway, I'm going to carry on blogging. I'm working on my biggest LLM-related project so far (dozens of training runs, so my study aircon is getting quite the workout even with the weather turning colder), and look forward to posting about it later on this month. I hope it's at least as fun to read as it is to write!

0 views
Unsung 2 days ago

“No soldering required”

Speaking of remixing the past and the future , this feels like a fun project: Sprout from a studio called Certain Things is “a modern motherboard for old iPods.” You can remove the original motherboard, and get a more contemporary tech stack, with support for Bluetooth headphones and AirPods, Wi-Fi, and audio over USB-C. = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/no-soldering-required/1.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/no-soldering-required/1.1600w.avif" type="image/avif"> But there are also improvements to software – streaming via Spotify and Apple Music, better podcast support – and even a few UI additions. The website has yet another iPod simulator , also pretty well done: I don’t fully agree with some of the design choices here – the AirPods iconography feels clunky, as an example – but it’s a really interesting idea, and a peek into an alternate present day where the tech history went a little bit differently.

0 views