50 days of postmarketOS
We are fed up with Android's endless forks! Fifty days ago I have announced postmarketOS, a touch-optimized, pre-configured Alpine Linux , which can be installed on smartphones. It avoids Android's bad habit of forking software for every single device (!) entirely by going the other way around and unifying as much as…
At Scale, Rare Events Aren’t Rare
I’m a connoisseur of failure. I love reading about engineering failures of all forms and, unsurprisingly, I’m particularly interested in data center faults. It’s not that I delight in engineering failures. My interest is driven by believing that the more faults we all understand, the more likely we can engineer…
Building a Distributed Log from Scratch: Data Replication
In part one of this series we introduced the idea of a message log, touched on why it’s useful, and discussed the storage mechanics behind it. In part two, we discuss data replication. We have our log. We know how to write data to it and read it back as well as how data is persisted. The caveat to this is, although we…
Can You Afford It? Real-World Web Performance Budgets
Performance budgets are an essential but under-appreciated part of product success and team health. Most partners we work with are not aware of the real-world operating environment and make inappropriate technology choices as a result. We set a time budget of less than 5 seconds first-load Time-to-Interactive and less…
Writing a Unix Shell – Part II
Building your own UNIX shell in parts. This post explains how to execute commands.
Reviving the 1973 Unix Programmer's Manual
The 1973 Fourth Edition of the Unix Programmer’s Manual doesn’t seem to be available online in typeset form. This is how I managed to recreate it from its source code.
Systemd Sucks, Long Live Systemd
systemd seems to be a dividing force in the Linux community. There doesn’t seem to be a middle ground to...
Curl doesn’t spew binary anymore
One of the least favorite habits of curl during all these years, I've been told, is when users forget to instruct the command line tool where to store the downloaded file and as a direct consequence, curl instead sends a lot of binary "gunk" to the terminal. The end result of that is at best … Continue reading curl…
Building a QNX 7 Desktop
Describes the process of building a QNX 7 x86_64 machine from (almost) scratch.
How Many X86-64 Instructions Are There Anyway?
Personal website of Stefan Heule
X: The First Fully Modular Software Disaster
X-Windows is the Iran-Contra of graphical user interfaces: a tragedy of political compromises, entangled alliances, marketing hype, and just plain greed. X-Windows is to memory as Ronald Reagan was to money. Years of "Voodoo Ergonomics" have resulted in an unprecedented memory deficit of gargantuan proportions…
V8: A Tale of TurboFan
Personal website of Benedikt Meurer, JavaScript Engine Hacker and Programming Language Enthusiast.
Distributed Consensus – How Shared Data Is Stored
If you don’t work in computers, you probably haven’t spent much time thinking about how data gets stored on computers or in the cloud. I’m…
Compiler Optimizations are Awesome
Another reason for optimizing compilers: It allows us to write simple and obvious code expecting that the compiler will do the optimization. This both reduces the initial defect count and makes the code more maintainable in the long-run. Note that these are also often the simplest optimizations (e.g. a calculation…
Bloaty McBloatface: a size profiler for binaries
I’m very excited to announce that today I’m open-sourcing atool I’ve been working on for several months at Google.It’s called Bloaty McBloatface, and it lets...
How quickly can you remove spaces from a string?
Sometimes programmers want to prune out characters from a string of characters. For example, maybe you want to remove all line-ending characters from a piece of text. Let me consider the problem where I want to remove all spaces (' ') and linefeed characters ('\n' and '\r'). How would you do it efficiently? size_t…
Go's work-stealing scheduler
Deep dive into how scheduler works
Hash indexes are faster than btree indexes?
PostgreSQL have supported Hash Index for a long time, but they are not much used in production mainly because they are not durable. Now, ...
An ode to pack: gzip’s forgotten decompressor
The latest 4.13.9 source release of the Linux kernel is 780MiB, but thanks to xz compression, the download is a much more managable 96 MiB (an 88% reduction)
Raw Linux Threads via System Calls (2015)
Linux has an elegant and beautiful design when it comes to threads: threads are nothing more than processes that share a virtual address space and file descriptor table. Threads spawned by a process are additional child processes of the main “thread’s” parent process. They’re manipulated through the same process…
A Bourne-style shell built from scratch in 35 minutes [video]
We build a shell in the style of the Bourne shell, Bash, zsh, etc. It supports (1) running commands with arbitrarily many arguments, (2) quoting those arguments, and (3) combining the commands into arbitrarily long pipelines where the output of one command becomes the input of the next. This requires writing a parser…
Using JDK 9 Memory Order Modes
This guide is mainly intended for expert programmers familiar with Java concurrency, but unfamiliar with the memory order modes available in JDK 9 provided by VarHandles. Mostly, it focuses on how to think about modes when developing parallel software. Feel free to first read the Summary .
What Happens to OO When Processors Are Free? (2015)
A while ago, I presented as a crazy thought experiment the idea of using Montecito's transistor budget for creating a chip with tens of tho...
Green Threads Explained
A short and self contained explanation that will guide you through an implementation of user threads.