Newsletter January 2025: Inspired and Motivated by New Laptop and Reading
New Laptop
I got a new laptop this month. It was almost 10 years since I bought my previous one. I mainly needed a new one to be able to smoothly browse certain websites and for better performance when editing videos.
When installing the latest version of Fedora on it, I took the time to clean up my dotfiles. Since I jumped quite many Fedora versions, my often used tool rlselect had stopped working. I figured out the problem and documented the fix in Replacing Ctrl-R in Bash without TIOCSTI.
That blog post came naturally to me. I was trying to find a solution to a problem. I found other people having the same problem. When I found a solution, I felt the need to share it to contribute to the discussion and hopefully help someone else. I even wrote a custom version of the blog post tailored to an issue on GitHub.
Bootstrapping
I came across Bootstrappable Builds. Bootstrapping is an interesting problem that I’ve mainly come across in my work on RLMeta. They write that
To gain trust in our computing platforms, we need to be able to tell how each part was produced from source.
I started thinking how this would apply to RLMeta. The RLMeta “binary” is a Python file. So it needs Python to bootstrap itself. I’m not sure if that qualifies as a problem according to Bootstrappable.
The “binary” is not really human readable, so it is not feasible to inspect it. On the other hand, the source code says exactly how it is produced, and we can verify that it produces itself.
One way to figure out if this is a problem or not is to see if it is vulnerable to the “Trusting Trust” attack. The article Reflections on Rusting Trust talks about how to make this attack in the Rust compiler. I don’t fully understand it, but it could be interesting to try with RLMeta.
XXIIVV
I came across XXIIVV. There are so many things in there that interest me.
One of those things is the idea that in order to be able to run our software many, many years from now, we need to target a small virtual machine that we can re-implement in a weekend. You can find more on this in devlog and the transcript of the talk Weathering Software Winter.
One thing that cause our software to break is when the things that it depend on change or go away. For that reason, I’m reluctant to pull in third party dependencies when building software. But what if the language our software is written in disappears? That is less likely than third party dependencies changing, but there is still a risk. Especially in the long run.
But if we can not depend on third party software or languages, we have to implement the whole software stack ourselves. That is a lot of work. There is probably a balance where the trade-off of depending on something is worth it. And that balance differs depending on our goals with the software. However, my feeling is that many things that we pull in third party dependencies for, we can quite easily implement ourselves. And get rid of the bloat of the 80% of the third party dependency that we don’t use. In addition to getting rid of bloat, it also increases understandability. We don’t need to figure out how a third party dependency work, we just need to figure out how a much smaller set of our code works.
Another area where preserving software is of interest to me is my website. About half a year ago, I moved to Micro.blog. Some of my posts now only exists there. The platform gives me some things that I like such as ease of posting and interaction with others. But what if Micro.blog goes away? What happens to my words? I think I need to go back to having the source code for my website in a git repo. Then I should be able to compile my website for different targets. One for publishing online. It might be an export to Micro.blog so that I can continue to use some of its features. But it might also be a pdf export. That way I can print the pdf and have my whole website preserved as a physical book in my bookshelf. That will most likely live for much longer than any technology. And of course, compiling my website should depend on as few dependencies as possible. Perhaps even target a small VM as XXIIVV does it?
A Note on Reading
I was able to read and write about the topics above partly because of a realization that I had earlier this month:
Today’s realization is that you can get important things done by consistently working on them for 15 minutes at the start of every day.
By doing it at the start of the day, you ensure that it gets done. And the rest of the day you don’t need to be stressed about not working on your important thing, because you already have.
I want to read more. But it is easier to just scroll through my feeds and read headlines. What I’ve tried now is to bookmark things that look interesting. Then I spend some time in the mornings to carefully read those pieces. It’s been a quite positive experience for me. I’ve also used that trick to get more boring tasks done. It might not work if you are a night person though.