langwhy

C

Systems· stable, mature, slow change· since 1972 · Dennis Ritchie

Programming language for operating systems and other code that has to work close to the hardware.

Draft from 2026-10-30, not yet checked claim by claim against its sources. Help verify it.

Born from

In 1969 Ken Thompson created the B language at Bell Labs, and B had no types. The PDP-11's byte addressing exposed B's limits, so Dennis Ritchie added types, int and char, and wrote C, and in 1973 the Unix kernel was rewritten in it.

What it trades away

manual memorymemory
static typestypes
compiles to native coderuns as
threadsconcurrency

Cost: No bounds checks and no memory ownership rules, so buffer overflows and use-after-free bugs are the programmer's job, and undefined behaviour often compiles without an error.

Where it fits

SlotFit
systems●●●
embedded●●●
server●●○
cli●●○
wasm●●○
browser○○○Only through WebAssembly, not as a browser language.

Why it exists

In 1969 Ken Thompson created the B language at Bell Labs. B was BCPL “squeezed into 8K bytes of memory and filtered through Thompson’s brain”, and it had no types. The PDP-11 exposed its limits. Dennis Ritchie wrote that the machine’s byte addressing “exposed several inadequacies of B’s semantic model”, and that “a typing scheme was necessary to cope with characters and byte addressing” (Ritchie, The Development of the C Language). C added the types int and char, with arrays and pointers to them, and in 1973 the Unix kernel was rewritten in it.

What it trades away

C gives the programmer the machine with almost nothing in between. It has no runtime bounds checks and no rules about who owns a piece of memory, so buffer overflows and use-after-free bugs are the programmer’s job to prevent. The compiler may accept code with undefined behaviour without an error, and the standard leaves many details to each implementation, so the same code can behave differently on different compilers. The ISO working group still revises the language and adopted C23 in 2024 (WG14).

Where it won

The Linux kernel is written in the C programming language, and its documentation says it is typically compiled with gcc in the GNU dialect of ISO C11 (Linux kernel docs). Unix followed the same path. Ritchie’s account says that “writing the Unix kernel in C had given us enough confidence” in the language, and the kernel for the PDP-11 was rewritten in C in 1973 (Ritchie).

Named wins

Evolution

Reacts to: b, bcpl

Led to: C++, Go, PHP, Python, Zig

Weigh it against: C++, Rust, Zig

Timeline

Links

website · PLDB

Sources

  1. https://csapp.cs.cmu.edu/2e/docs/chistory.html
  2. https://docs.kernel.org/process/programming-language.html
  3. https://www.open-std.org/jtc1/sc22/wg14/
  4. https://pldb.io/concepts/c.html

Unverified draft, 2026-10-30.Edit the facts · edit the story · JSON · Markdown