Top posts
Every blog post that took off on Hacker News, ranked by the votes of its best submission. 4,390 posts.
IDIV DoS (INT_MIN / -1)
A little fun for the last day of 2012: how to crash a program via division? x86’s IDIV instruction traps not only on division by zero, but also on INT_MIN / -1 (signed integer overflow).
X86 boot sector written in C (2010)
Writing an MS-DOS-compatible boot sector in C: parsing the FAT BIOS parameter block, finding IO.SYS, and loading it via BIOS INT 13h in real mode.
Accessing a DRM Framebuffer to display an image
To test if a display interface works we often don't want to use a huge framework like GTK or Qt. This article shows an easy way on how we can use a framebuffer directly on a DRM graphics driver under Linux.
Using strace to figure out how Git push over SSH works
Yesterday I was curious about how git push works over SSH. I’m getting more used to using strace to figure this kind of thing out, so I gave it a shot. If I strace pushing to this site’s repository, this shows up:
Decoding UTF8 with parallel extract
As a side-quest I recently decided to write a branchless utf8 decoder utilizing the pext or "parallel extract" instruction. It's compliant with rfc-3629 , meaning that it doesn't just naively decode the code-point but also checks for overlong encoding, surrogate pairs and such. Compiled with gcc -O3 -march=x86-64-v3…
Modern Text Rendering with Linux
Introduction
Igniting the GPU: From Kernel Plumbing to 3D Rendering on RISC-V
How I enabled the PowerVR GPU on the TH1520 SoC by writing the missing kernel drivers.
Fuzix on a Raspberry Pi Pico
Because your $5 microcontroller needed to run UNIX
Traceroute Lies: A Typical Misinterpretation Of Output
Traceroute can points to a link having terrible latency, but despite what it appears, it's easy to misread the output and jump to the wrong conclusion.
Readings in distributed systems
This post is a work in progress.Inspired by a recent purchase of the Red Book, which providesa curated list of important papers around database systems, I’ve decidedto begin assembling a list of im...
A Unikernel Firewall for QubesOS
QubesOS provides a desktop operating system made up of multiple virtual machines, running under Xen. To protect against buggy network drivers, the …
Rust Performance: A story featuring perf and flamegraph on Linux
ramblings by Adam Perry
Parallel Index Scans in PostgreSQL
There is a lot to say about parallelism in PostgreSQL. We have come a long way since I wrote my first post on this topic ( Parallel Sequen...
In defense of Unix
While there may be some situations in which DOS has a better command, Unix works better overall.
Revisiting How We Put Together Linux Systems
Posts and writings by Lennart Poettering
RISC-V is currently slow compared to modern CPUs
RISC-V is currently quite slow compared to modern CPUs in 2024.
Remote Attestation
If it quacks like a duck...
What's wrong with systemd
So many weird little demands on time, mostly spinning out of the Signal groups set up to counter ICE and now being used for general community stuff.
The Taos Operating System (1991)
{This material originally appeared in the March, 1991 International Edition of Byte magazine, a McGraw-Hill publication} To describe TAOS (pronounced 'dowse' as in the oriental religion Daoism) as an innovatory operating system would be a profound understatement. It has so few points of
Please stop writing new serialization protocols
It seems that every day, some computer monkey comes up with a new and more groovy serialization protocol. In the beginning, there was ASN.1 and XDR, and it was good. I think ASN.1 came first, and l…
The Law of Leaky Abstractions (2002)
There’s a key piece of magic in the engineering of the Internet which you rely on every single day. It happens in the TCP protocol, one of the fundamental building blocks of the Internet. TCP…
How does lossless compression in Fuji RAF files work? (2020)
I spent 3 weeks earlier this year digging in to and reimplementing the lossless compression algorithm in Fuji’s RAF Camera RAW files. This post discusses the fundamentals of how it works.
On Cache Invalidation: Why Is It Hard? (2018)
Many people must have heard this quote (by Phil Karlton) many times: There are only two hard things in Computer Science: cache invalidation and naming things. Two days ago, Nick Tierney mentioned it …
Rethinking Files
In Unix, everything is a file. This is often viewed as a positive, but it's often a poor abstraction for many things. This discussion goes into some of the issues.
Transcoding Unicode with AVX-512: AMD Zen 4 vs. Intel Ice Lake
Most systems today rely on Unicode strings. However, we have two popular Unicode formats: UTF-8 and UTF-16. We often need to convert from one format to the other. For example, you might have a database formatted with UTF-16, but you need to produce JSON documents using UTF-8. This conversion is often called…
Tokio internals: Understanding Rust's async I/O framework
Tokio is a Rust framework for developing applications which perform asynchronous I/O — an event-driven approach that can often achieve better …
Reassessing Wayland
So a bit under 3 years ago, I made my infamous Wayland rant post that is likely the most read post on this blog by miles. I should really actually write about music again one of these days, but that's a topic for another time. The language was perhaps a bit inflammatory, but I felt the criticisms I made at the time…