The Ur Project

Documenting the craft of stacking things so they remain stacked. For a very long time.

How I'm doing this

I spent 19 years building Linux distros. All of it was painstakingly hard. None of it was as easy as opening up the tap and voila, water flows out. But times change and we're all human beings. There's very little value in reading websites for a living to see if there's an update for GNOME. It doesn't pay the bills. So back in - gosh - 2013 or so we hacked together a thingy that just did the scraping of websites for us. It worked pretty well. So instead of endless browsing the web we just "opened the tap" and voila, 95% of the packages in Clear Linux OS were monitored for available updates.

At some point when Clear Linux OS became a little more serious, we had to start collecting all licenses we were ingesting, and thus emitting. That wasn't as easy as some basic curl scripting, so, someone brilliant (Arjan) came up with the idea to train an LLM to read the license texts for us. Well, in reality it was mostly for me, because I ended up reviewing the output of this LLM and stamping it. Once a week I'd scrub the list. This was a major win for productivity. We'd still review it, but instead of having to read thousands of files, we'd just mostly have to look at the 1% or less that it had a hard time classifying.

This was well over 10 years ago. Today we'd call each other out if we'd spend our times editing package updates by hand. Calling curl and piping through a checksum program, and then pushing it into some text file. None of that makes much sense anymore. We built scripts upon scripts to make these things easier, faster, less error prone, more reliable. But nowadays, none of those scripts are worth anything anymore. I didn't collect any of them. Most just went out the window. Never committed to git. Never published to a repo or a collection. Gone.

But these things still have value, since they automate the thing that is tedious and useful. If these things get it wrong, a human still reviews 100% of what makes it into the actual builds. We just skip the parts that are boring. I think it's pretty obvious where this is going, but, if you're still dubious: yes, it's LLMs. We don't do much manual packaging anymore. I sure don't. Builds are automated machinery so there's no LLM in that part. There's no LLM in your distro content. But the stuff that writes tests, the thing that implements how e.g. perl packages are built, the thing that publishes repositories - those are things that LLMs have written. With strong requirements of course on how it's designed, what it should do and what should not, how well it's tested and put to the strictest test, which is me, using it for months and throwing everything at it.

I've drawn a line in the sand to make sure what I'm building isn't becoming dependent on AI. At any point in time, the system doesn't require agents to be present for it to function, and in many ways I've gone out of my way to avoid most opportunities to plug in MCPs, but for ordinary packaging work it's not worth my time. Packaging by hand isn't worth the time. The hard parts are how you build the code based on the promise that it can be repeated bit for bit later, so that can't be nondeterministic. Thus, the build system itself is entirely a classical build system with scheduling. Full stop. The distro content itself similarly is just a classic distro style thing. Nothing fancy or bizarre. Mundane even. As it should be.

Testing and validation are the hard steps. Fortunately we can use LLMs to write and explore testing for us these days, but it still needs explicit steering to keep up test quality and coverage. Functional testing is still hard. This is where a lot of the work will end up going. You don't really know if it will work until it actually does. Dogfooding is still the best thing out there.

Fortunately I'm making something for myself here. I'm my biggest critic and I will not accept most of the rough edges. It has to become polished and usable without knowing the ins and outs. It must just work out of the box. There's so many decent distributions that take all the hard steps away from installation, for instance. And that's when people get to know whether what you made for them is good or trash. It'd be a waste to hand out trash. So the work shifts towards testing, either automated or LLM driven or just humans.

--sofar (aka Auke)