A quick look at OS/2's builtin virtualization
A while ago, someone on the fediverse mentioned "OS/2's virtualization features" to me. I don't remember who it was, sorry. I had the chance to take a look at this today.
A while ago, someone on the fediverse mentioned "OS/2's virtualization features" to me. I don't remember who it was, sorry. I had the chance to take a look at this today.
This blog post is meant to an iteration on the tutorial and introduction to garbage collection implementation presented in this classic blog post . We are still working with simple garbage collectors, but this time another one with a bit more complexity.
Digital audio processing is a complex yet fascinating subject. Getting a deeper understanding requires knowledge in multiple technical disciplines, including physics, electrical/electronical engineering, and some software engineering when it comes to parts of the Linux ecosystem. This article aims to demystify the…
Recently, I've been working on a new approximate nearest neighbor search algorithm called RaBitQ . The author has already provided a C++ implementation that runs quite fast. I tried to rewrite it in Rust (yet another RiiR). But I found that my implementation is much slower than the original one. Here is how I improve…
For a lark I made an ext4 file system with a billion empty files. https://gitlab.com/larswirzenius/create-empty-files has the program I wrote for this. I've done this before , but this time I made it a little simpler for me to do it again: everything in one Rust program rather than clunky scripts.
“Summing ASCII Encoded Integers on Haswell at the Speed of memcpy” turned out more popular than I expected, which inspired me to take on another challenge on HighLoad: Counting uint8s . I’m currently only #13 on the leaderboard, ~7% behind #1, but I have already learned some interesting things. In this post I’ll…
Why do I do this to myself? I have no idea. Anyway, let's learn how to eat disk space.
A large contributor to the "feel" of an Operating System comes from the software it chooses to include by default. There are entire linux distributions that differentiate themselves just based on the default configured software. There is room for so many options of base software because there are in general many…
TDOA Sound Localization is determining the source of a sound when all you know is the differences in the time of arrival of the sound event…
C. J. Date's Sigmod 1983 keynote, "Database Usability", was prescient. Usability is the most important thing to the customers. They care les...
Despite all of its warts, I like working in Linux. I've used it for 15 years and I've never been as productive in another environment. Most people claim that it's the configurability of Linux that keep the users coming. That may have attracted me at first, but what attracts me now is its programmability.
When I look inside a chip from the popular 7400 series, I know what to expect: a fairly simple die, implemented in a straightforward, cost-e...
What is QUIC protocol and how does it work ?
Thoughts on how compiler and database optimizers should evolve in the future, focusing on predictability and guarantees instead of smarts and heroics
In this blog post, you will learn different methods to harden your OpenBSD system, and in which situation they are useful
Windows paths have been WTF-16 -encoded for decades, but module names in the import tables of Portable Executable are octets. If a name contains values beyond ASCII — technically out of spec — then the dynamic linker must somehow decode those octets into Unicode in order to construct a lookup path. There are multiple…
This post is meant to guide you through some of the lessons I’ve learned while working with multi-terabyte datasets. The lessons shared are focused on what someone may face as the size of the…
Updated in 2025-09. The ELF object file format is adopted by many UNIX-like operating systems. While I've previously delved into the control structures of ELF and its predecessors, tracing the historical evolution of ELF and its relationship with the System V ABI can be interesting in itself. The format consists of…
I wanted to explore different ways of communicating between different processes executing on the same machine, and doing so as fast as possible. We're focussing on high speed inter-process communication (IPC), but some of these approaches can be extended across a network. We'll do this exploration in Rust.
One of the most common reasons for opening Activity Monitor is to check the % CPU of processes that might be running out of control. How accurate are those figures, though, and should you believe t…
XNU kernel buffer overflow, introduced in macOS 14.0 and fixed in macOS 14.5.
A tour on how DOS was able to use most of the 1 MB address space of the 8086
Cores are the new megahertz, at least for enterprise servers. We've gone quickly from 32, to 64, to 80, to 128, and now to 192-cores on a single CPU socket! Amazon built Graviton 4, Google built Axiom, but if you want your own massive Arm server, Ampere's the only game in town. And fastest Arm CPU in the world is…
Overview I’ve decided to start a series of blog posts to cover some details about scx_rustland , my little Linux scheduler written in Rust ...
This is the second part of a series of interactive articles on the x86-64 architecture. This part will focus on the first assembly instructions, visualizing the way data moves in memory when they are executed.
This article was supposed to be published all at once on July 30'th. But because of the staggered launch delay into August 8 and 15, some sections of this article were redacted until August 14th.
TAI times are identified by year, month, day, hour, minute, and second. There are exactly 86400 TAI seconds in every TAI day. TAI days are labelled by the Gregorian calendar.
I recently picked up an embedded project in which I needed to build a highly customized full system image with minimal boot times and NetBSD was the best choice for it. Let's look at why its build system helps.
I am a minimalist, and I tend to always keep it as small as I can, so I try to use all I have in base (if it fits), plus of course some other tools needed.
In absolute terms they don’t have much overhead – think sub-microsecond for most uses. Which makes them perfectly acceptable when they’re used sporadically (e.g. only a few times per second).