I’m writing this while I’m pondering whether a project of mine is ready for its first release, 0.1. I don’t like to rush things out, even though I do believe in Release early, release often, so I’ve been thinking about whether it is time or not… and that led me to a different train of thought I wanted to share with you, especially people out there who, like me, are amateurs with little experience and who only write small projects.
Posts for: #My Stories
S2idle and the Nature of Laptops
You tell your laptop to “suspend to RAM.” Are you really sure that’s what your system just did? I was utterly surprised, when I purchased my current laptop (a model of the HP 15 series that was released in 2024), that things had changed since the last laptop I had bought back in 2013.1 Power management has changed, and things smell a lot of “mobile convergence” these days.
It’s funny because using Linux shields you from one day discovering that your 10 years old PC doesn’t work anymore. Linux supports old systems by philosophy, where MacOS and Windows are picky about how old your laptop, especially laptops, is. Microsoft is more lenient on the software side of things, such that only until recently you still could run old Win16 software on modern Windows versions. When it comes to hardware, though, good luck if your system doesn’t come with UEFI and “certified” hardware, and good luck in a couple of years.
Managing Complexity in a Linux System
This story begins with me innocently wanting to try out virt-manager, a graphical frontend to libvirt, which in turn is a tool to manage virtualized systems, with support for various hypervisors. In my case, my hypervisor of choice has been QEMU for many, many years. Little did I know when I started my testing what virt-manager was going to do to my setup.
The way I use QEMU reflects the reason why I use it in the first place. I keep a FreeBSD VM and an OpenBSD VM to test the portability of my code when I’m writing a project. The reason why I do so is because on Linux testing against MUSL is trivial and substituting Clang/LLVM for GCC is also a trivial thing to do. However, when it comes to POSIX portability, one might get funny results when dealing with syscalls or with UNIX commands. Even though neither of both BSD systems mentioned is 100% POSIX compliant, stepping outside the Linux bubble is important to ensure that your code is more portable than what you might think from only reading the Standards section of manpages on Linux. So, these two VMs are two very simple systems, without any graphical environment, and that I fire up every once in a while on my desktop. I don’t keep them up for more than half an hour when I use them. So, accordingly, I’m used to fire them up via a simple shell script that is just one single line: