systems
systems copied to clipboard
Resources for learning systems programming.
What is systems programming?
Broadly, developing software that is:
- Relied upon for correctness and security by other software.
- Constrained by physical resources of its execution environments.
What are some resources to learn about systems programming?
General
Data Structures & Algorithms
Keywords: asymptotic complexity, array, queue, hash table, search tree, linked list, heap, sorting, binary search, backtracking, graph search, divide and conquer, memoization, string matching
- "Open Data Structures"
- Thomas Cormen, Charles Leiserson, Ronald Rivest, Clifford Stein "Introduction to Algorithms"
- E-Maxx "Competitive Programming Algorithms"
Programming Languages
- Robert Seacord "Effective C: An Introduction to Professional C Programming"
- Cliff Biffle "Prefer Rust to C/C++ for new code."
- Cliff Biffle "Learn Rust the Dangerous Way"
- Ginger Bill "The Fatal Flaw of Ownership Semantics"
- Alexis King "No, dynamic type systems are not inherently more open"
- Amos (fasterthanlime) "Aiming for correctness with types"
- Jon Gjengset "Crust of Rust: Lifetime Annotations"
- Jon Gjengset "Crust of Rust: Subtyping and Variance"
- Jon Gjengset "Crust of Rust: Smart Pointers and Interior Mutability"
Computer Architecture
Keywords: von Neumann architecture, instruction set architecture, memory hierarchy, endianness, pipelining, branch prediction, out-of-order execution, cache coherence, trap
- John Paul Shen, Mikko H. Lipasti "Modern Processor Design: Fundamentals of Superscalar Processors"
- Vijay Nagarajan, Daniel Sorin, Mark Hill, David Wood "A Primer on Memory Consistency and Cache Coherence"
- David A. Patterson, John L. Hennessy "Computer Organization and Design RISC-V Edition"
- David A. Patterson, John L. Hennessy "Computer Organization and Design ARM Edition"
- John L. Hennessy, David A. Patterson "Computer Architecture: A Quantitative Approach"
Compilers, Linkers, Loaders and Runtimes
- Matt Godbolt "The Bits Between the Bits: How We Get to main()"
- Matt Godbolt "What Has My Compiler Done for Me Lately? Unbolting the Compiler's Lid"
- JF Bastien "No Sane Compiler Would Optimize Atomics"
- JF Bastien "Just-in-Time Compilation"
- Bob Steagall "The Structure of a Program"
- Amos (fasterthanlime) "Making our own executable packer"
- Miguel Young de la Sota "Everything You Never Wanted To Know About Linker Script"
Abstract Machine
Keywords: undefined behavior, memory model, pointer provenance, implementation-defined behavior, Rust ownership/lifetimes, memory safety, strict aliasing, C/C++ volatile
- Bob Steagall "The Abstract Machine"
- Patrice Roy "Which Machine Am I Coding To?"
- Niall Douglas "Elsewhere Memory (C++20 Abstract Machine) + Virtual Memory"
- Chandler Carruth "Garbage In, Garbage Out: Arguing about Undefined Behavior..."
- Ralf Jung ""What The Hardware Does" is not What Your Program Does: Uninitialized Memory"
- Ralf Jung "Pointers Are Complicated II, or: We need better language specs"
- Ralf Jung "Two Kinds of Invariants: Safety and Validity"
- Miguel Young de la Sota "The Taxonomy of Pointers"
- Ulrich Drepper "What Every Programmer Should Know About Memory"
- CopperSpice "C++ Memory Model"
- Herb Sutter "atomic Weapons: The C++ Memory Model and Modern Hardware"
- Hans Boehm "Using weakly ordered C++ atomics correctly"
- Paul McKenney "C++ Atomics: The Sad Story of memory_order_consume: A Happy Ending At Last?"
- Russ Cox "Memory Models"
Security/Cryptography
Keywords: threat model, principle of least priviledge, Kerckhoffs's principle, confidentiality, data integrity, authentication, non-repudiation, computational hardness, vulnerabilities, buffer overflow, side-channel attack
- Chandler Carruth "Spectre: Secrets, Side-Channels, Sandboxes, and Security"
- LiveOverflow "Binary Exploitation / Memory Corruption
- Arun Thomas "Building Secure Systems using RISC V and Rust"
Performance
Keywords: cache locality, zero-copy, data oriented design, benchmarking, SIMD
- Emery Berger "Performance Matters"
- Daniel Lemire's blog
- Game Programming Patterns "Data Locality"
- Andrei Alexandrescu "Speed Is Found In The Minds of People"
- Jason Turner "Practical Performance Practices"
- Chandler Carruth "High Performance Code 201: Hybrid Data Structures"
- Chandler Carruth "Efficiency with Algorithms, Performance with Data Structures"
- Chandler Carruth "There Are No Zero-cost Abstractions"
- Chandler Carruth "Going Nowhere Faster"
- Chandler Carruth "Tuning C++: Benchmarks, and CPUs, and Compilers! Oh My!"
- Andrei Alexandrescu "Optimization Tips - Mo' Hustle Mo' Problems"
- Timur Doumler "Want fast C++? Know your hardware!"
- Alan Talbot "Moving Faster: Everyday efficiency in modern C++"
- Matt Kulukundis "Designing a Fast, Efficient, Cache-friendly Hash Table, Step by Step"
- Malte Skarupke "You Can Do Better than std::unordered_map"
- Malte Skarupke "I wrote the fastest hashtable"
- Malte Skarupke "A new fast hash table in response to Google’s new fast hash table"
- Malte Skarupke "Fibonacci Hashing: The Optimization that the World Forgot"
- Joshua Liebow-Feeser "Move fast and don't break things: High-performance networking in Rust"
- Richard Fabian "Data-Oriented Design"
- Dawid Ciężarkiewicz "The faster you unlearn OOP, the better for you and your software"
- Stoyan Nikolov "OOP Is Dead, Long Live Data-oriented Design"
- Mike Acton "Data-Oriented Design and C++"
- Mike Acton "Building a Data-Oriented Future"
- Marek Majkowski "Kernel Bypass"
- Nick Fitzgerald "Always Bump Downwards"
Scalability
Concurrency & Asynchrony
Keywords: multithreading, race condition, synchronization, deadlock, starvation, linearizability, memory ordering, shared mutable state, fiber, coroutine, async/await
- Ulrich Drepper "Futexes Are Tricky"
- Filip Pizlo "Locking in WebKit"
- Jon Gjengset "A Cool Concurrency Primitive in Rust"
- Dale Weiler "Fibers, Oh My!"
- Samy Al Bahra "Concurrency Kit"
- libuv Team "libuv"
- Austin Clements "Proposal: Non-cooperative goroutine preemption"
- Aleksey Kladov "Spinlocks Considered Harmful"
- Alain Kägi, Doug Burger, and James R. Goodman "Efficient Synchronization: Let Them Eat QOLB"
Functional Programming
Keywords: referential transparency, algebraic datatypes, lambda expression, recursion, higher order function, persistent data structure, lazy evaluation, category theory
- Bartosz Milewski "Category Theory for Programmers"
- Borislav Stanimirov "No Touchy! A Case Study of Software Architecture with Immutable Objects"
- Alexis King "Parse, don't validate"
Distributed Systems
Keywords: CAP theorem, consensus, clock synchronization, logical clock, redundancy, fault tolerance, ACID, eventual consistency, MapReduce
- Tim Berglund "Distributed Systems in One Lesson"
- Cory Benfield "Building Protocol Libraries The Right Way"
- Jerome Saltzer, David Reeed, David Clark "End-to-End Arguments in System Design"
Operating Systems
Keywords: scheduling, preemption, context switch, address space, virtual memory, file system, device driver, IPC, virtualization, networking
- MIT CSAIL "xv6: a simple, Unix-like teaching operating system"
- UW-Madison "Operating Systems: Three Easy Pieces"
- Marshall McKusick, George Neville-Neil, Robert Watson "Design and Implementation of the FreeBSD Operating System"
- OSDev wiki
- Philipp Oppermann "Writing an OS in Rust"
- Bryan Cantrill "Is It Time to Rewrite the Operating System in Rust?"
- Geoffrey Lee, Charles Gray "L4/Darwin: Evolving UNIX"
- Alexander van der Grinten "Managarm: A Fully Asynchronous OS Based on Modern C++"
- Daniel Bittman, Peter Alvaro, Pankaj Mehra, Darrell D. E. Long, Ethan L. Miller "Twizzler: a Data-Centric OS for Non-Volatile Memory"
- Hubertus Franke, Rusty Russell, Matthew Kirkwood "Fuss, Futexes and Furwocks: Fast Userlevel Locking in Linux"
- Kevin Boos, Namitha Liyanage, Ramla Ijaz, Lin Zhong "Theseus: an Experiment in Operating System Structure and State Management"
- Vikram Narayanan, Tianjiao Huang, David Detweiler, Dan Appel, Zhaofeng Li, Gerd Zellweger, Anton Burtsev "RedLeaf: Isolation and Communication in a Safe Operating System"
- Pekka Enberg, Ashwin Rao, Sasu Tarkoma "I/O Is Faster Than the CPU – Let’s Partition Resources and Eliminate (Most) OS Abstractions"
- Irene Zhang, Jing Liu, Amanda Austin, Michael Lowell Roberts, Anirudh Badam "I’m Not Dead Yet! The Role of the Operating System in a Kernel-Bypass Era"
- Dawson R. Engler, M. Frans Kaashoek, James O’Toole Jr. "Exokernel: An Operating System Architecture for Application-Level Resource Management"
- Simon Peter, Jialin Li, Irene Zhang, Dan R. K. Ports, Doug Woos, Arvind Krishnamurthy, Thomas Anderson, Timothy Roscoe "Arrakis: The Operating System is the Control Plane"
- NICTA, UNSW, Open Kernel Labs, ANU "seL4: Formal Verification of an OS Kernel"
- Andrew Tanenbaum "MINIX 3: a Modular, Self-Healing POSIX-compatible Operating System"
- Andrew Baumann, Jonathan Appavoo, Orran Krieger "A fork() in the road"
- Amit Levy, Bradford Campbell, Branden Ghena, Daniel B. Giffin, Pat Pannuto, Prabal Dutta, Philip Levis "Multiprogramming a 64 kB Computer Safely and Efficiently"
- Kevin Elphinstone, Gernot Heiser "From L3 to seL4 what have we learnt in 20 years of L4 microkernels?"