Learning Systems and Security
A curated collection of learning resources for systems programming, security, cryptography, and related topics.
DAG-based consensus (Narwhal/Tusk from Sui, Mysticeti) represents the most significant architectural shift in distributed systems consensus since PBFT. By separating data availability from consensus ordering using directed acyclic graphs, these protocols achieve dramatically higher throughput while maintaining safety -- Mysticeti achieves sub-second finality. The CRDT evolution continues with Fugue (a new approach to collaborative text editing that avoids the interleaving anomalies of older CRDTs) and Loro (a practical Rust implementation). On the compilers/languages side, MLIR (Multi-Level Intermediate Representation) from LLVM is becoming the backbone for domain-specific compiler stacks, especially for ML accelerators.
The security/verification entries show convergence: Verus (verified Rust using SMT solvers), Asterinas (verified OS kernel), and LLM4Decompile (using LLMs to decompile binary code) all point toward a future where formal methods and AI assistants make verified systems more practical.
Table of Contents
Assembly
- Programming in assembly language tutorial - Step-by-step tutorial for learning x86 assembly language programming from scratch
- Learning Assembly - Personal notes and examples for learning assembly language on multiple architectures
- Nand2Tetris: Build a Modern Computer from First Principles - Build a complete computer system from NAND gates through an OS, covering hardware and software layers
- x86 bare metal examples - Minimal runnable examples of x86 bare metal programming with no OS, bootloaders to VGA output
- SkullSecurity Assembly Wiki - Reference wiki covering x86 assembly fundamentals with a security-oriented perspective
- RPISEC MBE: Modern Binary Exploitation - RPI course materials covering reverse engineering, exploit development, and binary analysis
- OpenSecurityTraining: The Life of Binaries - Covers how binaries are compiled, linked, loaded, and executed at the OS level
- OpenSecurityTraining: Introductory Intel x86 - Free course teaching Intel x86 architecture, registers, instructions, and calling conventions
- x86 Assembly: Hello World! - John Hammond - Beginner walkthrough of writing and compiling a hello world program in x86 assembly
- Quick Tips For Learning Assembly and Reverse Engineering at The Same Time - OALabs - Practical tips for combining assembly learning with hands-on reverse engineering practice
- From 0x90 to 0x4c454554, a Journey into Reverse Engineering - myne-us - Personal narrative of learning reverse engineering from NOP sleds to reading raw hex
Books
Reverse Engineering
- Nightmare, intro to reverse engineering course based around ctf challenges - Structured RE course using real CTF challenges to teach binary analysis and exploitation
- Reverse Engineering - Free comprehensive book on reverse engineering for x86/x64 and ARM with real-world examples
- Reverse Engineering for Beginners - Community and resources by Dennis Yurichev for learning RE fundamentals and techniques
- Exploit development - Sam Bowne - College course covering buffer overflows, format strings, ROP chains, and modern exploit mitigations
- Binary Exploitation and Memory Corruption - LiveOverflow - Video series explaining stack overflows, heap exploitation, and memory corruption bugs
- Insecure Programming - Collection of intentionally vulnerable C programs for practicing exploit development
- Corelan: Exploit Development Tutorials - In-depth tutorials on Windows exploit development covering SEH, ROP, and heap spraying
- OpenSecurityTraining: Free courses with lots of content - Collection of free security courses covering x86, malware analysis, and exploit development
- SecurityTube Megaprimers - Video courses on penetration testing, exploit research, and security tool development
- Violent Python archive - Resources for using Python to build security tools, fuzzers, and exploit scripts
- A binary analysis: count me if you can - shell-storm - Walkthrough of analyzing a binary challenge using disassembly and static analysis techniques
- SkullSecurity Blog - Security research blog covering reverse engineering, CTF writeups, and vulnerability analysis
- Awesome Reversing - tylerha97 - Curated list of reverse engineering resources including tools, tutorials, and practice targets
- Best books, tutorials, and courses for exploit development - pentest.guru - Curated guide to the best learning paths for becoming an exploit developer
- Path to exploit developer - Reddit AskNetsec - Community-sourced roadmap for progressing from beginner to professional exploit developer
- SANS Advanced Exploit Development for Penetration Testers - Professional training on advanced heap exploitation, kernel bugs, and modern mitigations
- Smashing the Browser - demi6od - Browser exploitation research covering JavaScript engine bugs and renderer vulnerabilities
- HackerSploit - YouTube channel with tutorials on penetration testing, ethical hacking, and security tools
- BinExp - r0hi7 - Linux binary exploitation learning path with progressive challenges from basic to advanced
- PortSwigger Web Security Academy - Free interactive labs teaching web vulnerabilities like SQL injection, XSS, and SSRF
Exercises
Binary exploitation
Books
Wargames
- Over The Wire - Progressive wargames teaching Linux command line, networking, and binary exploitation skills
- Smash the stack - Network-based wargame focused on memory corruption and binary exploitation challenges
- Exploit exercises - VMs with escalating privilege escalation and exploit development challenges
- PwnAdventure - Intentionally vulnerable 3D MMO game designed for practicing game hacking and reverse engineering
- PwnAdventure Sourcery - Source-code-level hacking challenges set in the PwnAdventure game universe
- ROP Emporium - Progressive challenges specifically designed to teach return-oriented programming techniques
- 0x0539 - Hacking challenge site with levels covering web, crypto, and binary exploitation
- Pwnable.xyz - Binary exploitation wargame with challenges ranging from basic stack overflows to advanced heap attacks
- HackTheBox - Online platform with vulnerable machines for practicing penetration testing and exploitation
- SkullSecurity CTFs - CTF writeups and challenge archives for learning offensive security techniques
Books
- Hacking, the Art of Exploitation - Jon Erikson - Teaches C programming, networking, and exploitation from first principles with hands-on examples
- The Shellcoders Handbook - Anley, Heasman, Lindner and Richarte - Comprehensive guide to finding and exploiting security holes across platforms and architectures
- Gray Hat Hacking The Ethical Hacker's Handbook - Covers vulnerability discovery, reverse engineering, and exploit development for ethical hackers
- The Art of Software Security Assessment: Identifying and Preventing Software Vulnerabilities - Exhaustive guide to auditing source code for security flaws in C/C++ and web applications
- The IDA Pro Book: The Unofficial Guide to the World's Most Popular Disassembler - Chris Eagle - Complete guide to using IDA Pro for disassembly, scripting, and reverse engineering workflows
- A Bug Hunter's Diary: A Guided Tour Through the Wilds of Software Security - Tobias Klein - Real stories of finding bugs in VLC, Solaris kernel, iOS, and other major software
Fuzzing
- FuzzySecurity - Tutorials on exploit development, fuzzing techniques, and Windows privilege escalation
- LibFuzzer Workshop - Hands-on workshop for learning coverage-guided fuzzing with LLVM's LibFuzzer
Operating Systems
Software Engineering
Embedded Systems
Game Programming
- COMP4300 - Dave Churchill - University course building a 2D game engine from scratch using C++ and SFML
- GamesWithGabe - Video series on building game engines and games in Java and C++ from the ground up
Distributed Systems
Basics
Courses
- CS6213 Special Topics in Distributed Computing - Graduate course on distributed algorithms with formal verification using separation logic
- CS 425 Distributed Systems - UIUC course covering gossip protocols, consensus, distributed file systems, and key-value stores
- Aphyr's class - Outline and exercises from Kyle Kingsbury's distributed systems class covering linearizability and Jepsen
- MIT 6.824 - Reading list and lab assignments for MIT's distributed systems course including Raft and sharded KV stores
- The System Design Primer - Study guide for large-scale system design interviews covering caching, load balancing, and databases
Papers
- Readings in Distributed Systems - Christopher Meiklejohn - Annotated bibliography of essential distributed systems papers organized by topic
- A Note on Distributed Computing - Jim Waldo et al. - Classic paper arguing that local and remote computing are fundamentally different and cannot be unified
- MapReduce: Simplified Data Processing on Large Clusters - Google's seminal paper on the MapReduce programming model for parallel data processing
- Dynamo - Amazon's paper on a highly available key-value store using consistent hashing, vector clocks, and quorums
- An overview of clock synchronization - Survey of clock synchronization algorithms and their correctness guarantees in distributed systems
- Impossibility of Distributed Consensus with One Faulty Process - The FLP impossibility result proving consensus is unsolvable in asynchronous systems with one crash failure
- Harvest, Yield and Scalable Tolerant Systems - Introduces harvest/yield tradeoffs as a practical alternative to the strict CAP theorem
- Unreliable Failure Detectors for Reliable Distributed Systems - Foundational paper defining failure detector abstractions that make consensus solvable in asynchronous systems
- Survey on Scalable Failure Detectors - Overview of failure detection approaches that scale to large distributed systems
- Life beyond distributed transactions - Pat Helland's influential paper on building scalable systems without distributed transactions
- Two phase commit - Clear explanation of the 2PC atomic commit protocol, its guarantees, and its blocking failure mode
- Three phase commit - Explains how 3PC avoids 2PC's blocking problem by adding a pre-commit phase
- Paxos - Accessible explanation of the Paxos consensus algorithm and its correctness properties
- Chubby - Google's distributed lock service built on Paxos, used for leader election and metadata storage
- ZooKeeper: Wait-free coordination for Internet-scale systems - Apache's coordination service for distributed applications providing configuration, naming, and locks
- A Quorum-based Commit Protocol - Proposes using quorum-based voting instead of unanimous agreement for distributed commit
- Bully algorithm - Simple leader election algorithm where the process with the highest ID becomes coordinator
- How to Build a Highly Available System Using Consensus - Practical guide to using consensus protocols for building fault-tolerant replicated state machines
- Distributed Snapshots: Determining Global States of a Distributed System - Chandy-Lamport algorithm for recording consistent global snapshots without stopping the system
- Atomic broadcast - Defines total order broadcast and proves its equivalence to consensus
- Gossip - Xerox PARC paper on epidemic algorithms for efficient replicated database maintenance
- Chain Replication for Supporting High Throughput and Availability - Replication protocol that achieves high throughput by chaining updates through an ordered sequence of servers
- The Part-Time Parliament - Leslie Lamport - Lamport's original Paxos paper describing consensus through the metaphor of a Greek parliament
- Viewstamped Replication: A New Primary Copy Method to Support Highly-Available Distributed Systems - Introduces view-change-based replication as an alternative to Paxos for state machine replication
- Fast Paxos - Leslie Lamport - Extends classic Paxos to reduce message delays by allowing clients to send directly to acceptors
- Paxos Made Moderately Complex - Robbert van Renesse, Deniz Altinbuken - Step-by-step description of a complete, implementable Paxos-based replicated state machine
- Distributed Snapshots: Determining Global States of Distributed Systems - Chandy, Lamport - The Chandy-Lamport snapshot algorithm for capturing consistent global state in a distributed system
- Forward and Backward Simulations Part I: Untimed Systems - Lynch, Vaandrager - Formal framework for proving correctness of concurrent systems using simulation relations
- An Axiomatic Proof Technique for Parallel Programs I - Owicki, Gries - Foundational work on Owicki-Gries method for verifying shared-variable parallel programs
- Proving Liveness Properties of Concurrent Programs - Owicki, Lamport - Techniques for proving that concurrent programs eventually make progress using well-founded orderings
Exercises
- Toydb - Distributed SQL database built from scratch in Rust with Raft consensus and MVCC transactions
- pea2pea - Lightweight Rust library for creating peer-to-peer networking nodes with minimal boilerplate
- geohot/minikeyvalue - Minimal distributed key-value store in under 1000 lines demonstrating core distributed storage concepts
TLA+
Raft
Data Structures
- Distributed Hash Tables - Introduction to DHT concepts including consistent hashing and peer-to-peer lookup protocols
Real Systems
- GFS - Google File System paper on a scalable distributed file system for large-scale data-intensive applications
- Spanner - Google's globally-distributed database using TrueTime for external consistency across datacenters
- F1 - Google's distributed relational database built on Spanner for the AdWords system
- Chubby - Google's distributed lock service providing coarse-grained locking and reliable small-file storage
- BigTable - Google's distributed storage system for managing structured data at petabyte scale
- MillWheel - Google's fault-tolerant stream processing framework with exactly-once delivery guarantees
- Omega - Google's shared-state cluster scheduler using optimistic concurrency control for flexible scheduling
- Dapper - Google's large-scale distributed systems tracing infrastructure for diagnosing performance issues
- Paxos Made Live - Engineering lessons from implementing Paxos in Google's Chubby lock service
- The Tail At Scale - Jeff Dean's paper on techniques for reducing latency variability in large-scale distributed systems
- Dryad - Microsoft's general-purpose distributed execution engine for coarse-grained data-parallel applications
- Cassandra - Facebook's distributed NoSQL database combining Dynamo's partitioning with BigTable's data model
- Ceph - Distributed object store and file system designed for performance, reliability, and scalability
- RAMCloud - Stanford's low-latency storage system keeping all data in DRAM across a datacenter cluster
- HyperDex - Distributed key-value store using hyperspace hashing for efficient multi-attribute search
- PNUTS - Yahoo's globally distributed data serving system with per-record timeline consistency
- Azure Data Lake Store - Microsoft's hyperscale distributed file store optimized for big data analytics workloads
Blog Posts & Talks
Other
Books
Compilers
- CS143 Compilers - Stanford - Stanford's compiler course covering lexing, parsing, semantic analysis, and code generation
- Tiger: Toy compiler implementation in OCaml - Implementation of the Tiger language compiler from Appel's textbook in OCaml
- Types and Programming Languages - Benjamin C. Pierce - Foundational textbook on type theory covering lambda calculus, subtyping, and polymorphism
- lambda_calculus: Untyped lambda calculus in Rust - Rust implementation of untyped lambda calculus with multiple reduction strategies
- How I wrote my own "proper" programming language - Mukul Rathi - Blog series walking through building a concurrent language with type inference and LLVM backend
- coollang-2020-fs: Compiler for a small Scala subset in F# - F# implementation of a compiler for a Scala-like language with classes and type checking
- Toy Compiler Using Ocamllex, Menhir, and LLVM - Daniel Volya - Tutorial on building a compiler with OCaml's lexer/parser generators targeting LLVM IR
- OCaml Programming: Type Checking chapter - Cornell CS 3110 - Explains how to implement type checking for a simple language in OCaml
- Introduction to Compilers and Language Design - Douglas Thain - Free textbook covering scanner, parser, AST, type checking, and code generation for a C-like language
- Beautiful Racket - Matthew Flatt - Teaches language-oriented programming by building domain-specific languages in Racket
- Crafting interpreters - Robert Nystrom - Build two complete interpreters (tree-walk in Java, bytecode VM in C) for the Lox language
- Engineering a Compiler - Keith D. Cooper, Linda Torczon - Textbook covering intermediate representations, optimization, instruction selection, and register allocation
- The Programming Languages Zoo - Andrej Bauer - Collection of small language implementations demonstrating different PL concepts and type systems
Project Ideas
- Lambda calculus
- Compiler targeting QBE / LLVM
- Hindley-Milner type system / W Algorithm
- BitTorrent client
- DHT
- Trees: Merkle tree, LSM
- Consensus algorithms: Raft
- CRDTs
- SNARKs / STARKs
- American Fuzzy Lop
- Symbolic execution
- TLA+
Blockchain
Introduction
- Foundations of Blockchains - Tim Roughgarden's course covering consensus protocols, mechanism design, and blockchain theory
- DeFi MOOC - University-level course covering decentralized finance protocols, AMMs, lending, and oracles
Pre-requisites
Cultural
- Nic Carter: Bitcoin Core Values, Layered Scaling, and Blocksize Debates - Discussion of Bitcoin's philosophical foundations and the scaling war history
- Balaji Srinivasan - Bitcoin and Ethereum, Crypto Oracles, and More - Wide-ranging conversation on crypto's role in technology, governance, and the network state
- Raoul Pal Discusses with Punk6529: NFTs, IP Rights & The Metaverse - Discussion on digital ownership, NFT intellectual property, and metaverse economies
- Michael Saylor: Bitcoin, Inflation, and the Future of Money - Deep dive into Bitcoin as a store of value and its monetary policy implications
- The Networked State - Balaji Srinivasan - Vision for building new digital-first communities and nations using blockchain technology
- Cancelled Nickel Trades on the LME - Patrick Boyle - Analysis of the 2022 LME nickel short squeeze and how centralized exchanges can reverse trades
Basics
Courses
Solidity
Contracts
Ethereum Internals
Ethereum Security
Vulnerabilities
MEV
Zero Knowledge Proofs
Basics
ZK SNARKs
- What are zk-SNARKs? - Zcash's explanation of succinct non-interactive arguments of knowledge and their use in private transactions
- Intro to zk-SNARKs - Howard Wu - Podcast episode providing an accessible introduction to zk-SNARK construction and applications
- Zcash Ceremony - Documentary on Zcash's trusted setup ceremony and why it was necessary for the SNARK parameters
ZK STARKs
Advanced topics
Examples with code
R1CS/Circuits
- Circom tutorial - Tutorial on writing arithmetic circuits in Circom for building a simple rollup
- R1CS programing workshop - Hands-on workshop on writing rank-1 constraint systems for zero-knowledge proof circuits
Papers
Cryptography
Exercises
- amrayn/mine - Minimal C++ encryption library for learning AES, RSA, and Base64 implementations
- mimoo/disco-c - C implementation of the Disco protocol combining Noise framework with Strobe for secure handshakes
- LoupVaillant/Monocypher - Small, portable C cryptography library for studying implementations of Curve25519, ChaCha20, and Blake2b
Blogs
- Trail of Bits - Security research blog covering cryptography audits, vulnerability research, and tool development
Books
Elliptic Curves
Discrete Logarithm problem
Pairings
CTF
- CTF Cryptography for Beginners - Guide to common crypto CTF challenge types including RSA, XOR, and classical ciphers
- Cryptohack - Interactive platform for learning cryptography through progressive challenges from basics to advanced
- Cryptopals - Famous set of 48 practical cryptography exercises covering attacks on real-world crypto systems
- Krypton - OverTheWire wargame teaching classical cipher breaking from Caesar to Vigenere and beyond
- Cryptanalysis - Cryptanalysis challenges ranging from basic encoding to breaking modern crypto implementations
- CyberChef - Web-based tool for encoding, decoding, encryption, compression, and data analysis operations
zk-SNARK
Languages
Proof systems
- Nova - Microsoft's recursive SNARK scheme using incrementally verifiable computation with minimal overhead
STARKs
Provers and verifiers
- Winterfell - Rust library for generating and verifying STARK proofs with a focus on performance and usability
Other
- Crypto Screencasts - David Wong - Short video explanations of cryptographic concepts including hash functions, MACs, and key exchange
- ZK docs - Community-maintained documentation hub for zero-knowledge proof systems and implementations
Entrepreneurship
Other Topics
Finance
- Bridgewater Associates - Videos from the world's largest hedge fund on macro investing, economic cycles, and risk parity
- DX Analytics - Python library for derivatives and risk analytics using Monte Carlo simulation
- Risk Management - Pasquale Cirillo - Lecture series covering VaR, expected shortfall, extreme value theory, and operational risk
- Economics of Money and Banking - Perry Mehrling - Course explaining the money view of the financial system, central banking, and the hierarchy of money
- Quantitative Risk Management - Pasquale Cirillo - Advanced course on modeling financial risk with copulas, heavy tails, and dependence structures
- Financial Mathematics - Pasquale Cirillo - Course covering interest rates, bond pricing, portfolio theory, and the Black-Scholes model
- Python for Computational Finance - Yves Hilpisch - Training program on using Python for financial modeling, algorithmic trading, and risk analytics
Papers
Volatility
- Rough volatility - Jim Gatheral - Lecture on how fractional Brownian motion with low Hurst parameter models realized volatility
- Fragile Markets - Understanding the dynamic of a Flash Crash - Harel Jacobson - Analysis of market microstructure breakdown and liquidity evaporation during flash crashes
- Liquidity, Volatility, and Information Asymmetry - Harel Jacobson - Explores the relationship between market maker behavior, information flow, and implied volatility
- So You Want to Trade Options - Volatility Trading 101 - Harel Jacobson - Introduction to options trading fundamentals including Greeks, vol surface, and basic strategies
- Delta Hedging made simple (sort of...) - Harel Jacobson - Practical explanation of delta hedging mechanics and P&L from gamma and theta
- Volatility Smile and Delta Hedging (Part 1) - Getting intimate with the vol surface - Harel Jacobson - Explains why the volatility smile exists and how it affects delta hedging strategies
- Turbocharging Derivatives - Variance, Convexity, and Everything in Between - Harel Jacobson - Deep dive into variance swaps, convexity adjustments, and higher-order Greeks
- Trading Volatility Roughness - Rethinking Statistical Arbitrage - Harel Jacobson - Applies rough volatility theory to design statistical arbitrage strategies on the vol surface
- A Brief History of Volatility Models - Harel Jacobson - Survey from Black-Scholes through local vol, stochastic vol, to rough volatility models
- A Story of Liquidity, Volatility, and Returns - Nope, it's Lily - Explains how options market maker hedging flows amplify or dampen equity market moves
Money and Monetarism
Geopolitics
Not yet reviewed
These resources were recently found and have not been reviewed yet. They will be organized into the appropriate sections after review.
Reverse Engineering & Security
Assembly & Low-Level
Distributed Systems
Compilers
Cryptography
Game Programming
Distributed Systems (New)
Compilers & Languages (New)
Security, Fuzzing & Reverse Engineering (New)
AI/ML Systems (New)
WebAssembly (New)