The Isolation Problem
Think of each running program as a person working in a soundproofed office with blacked-out windows. They have everything they need inside their own room, but they cannot see or hear what anyone else is doing. This isolation is intentional — it prevents one program from accidentally (or maliciously) corrupting another's data. In Linux, every process gets its own virtual memory address space, completely separate from every other process. Process A cannot read Process B's variables, and Process B cannot touch Process A's memory.
This isolation is a critical security feature. Your browser cannot read your password manager's memory. A buggy background service cannot corrupt your text editor's state. The kernel enforces these boundaries at the hardware level using the Memory Management Unit (MMU), which translates each process's virtual addresses to physical RAM addresses — and refuses to translate across process boundaries.
However, real-world applications are not isolated islands. A web server must hand off requests to a database. A video encoder must stream frames to a display process. A shell pipeline must pass the output of cat into the input of grep. Inter-Process Communication (IPC) is the collection of OS-provided mechanisms that let processes exchange data and coordinate behavior without violating the security model. Each mechanism makes a different trade-off between simplicity, performance, and flexibility. This lesson covers the four most important: Pipes, Unix Domain Sockets, Shared Memory, and mmap.