Why C Dominates Operating System Development: From Unix to Linux
This article traces how C's design — pointers, portability, and a minimal abstraction layer — made it the ideal language for OS kernels, from Unix's 1973 rewrite through Linux's adoption, cementing its dominance despite newer systems languages.
Unix's Development Dilemma and the Birth of C
In 1969, Ken Thompson and Dennis Ritchie at Bell Labs faced a critical tooling gap while developing Unix on a PDP-7. Assembly language development was slow and unportable, while existing high-level languages (FORTRAN, COBOL) targeted scientific and business computing and lacked low-level hardware control required for OS kernels.
Thompson initially tried B, a simplified BCPL derivative, for Unix tools, but B could not directly manipulate memory addresses — a fatal flaw for kernel development. This led them to create C, adding a type system, pointers, and structs while retaining B's simplicity. C became a "portable assembly language" that could precisely control hardware yet run across architectures.
C's Design Philosophy Aligned with OS Requirements
C's pointer mechanism enabled efficient memory management, device driver implementation, and interrupt handling without assembly's verbosity. A core design goal was portability: Thompson and Ritchie wanted Unix to run on different hardware without massive rewrites. C was designed as an "abstract assembly language" providing enough abstraction to mask hardware differences while retaining low-level control, creating a co-evolutionary relationship between Unix and C.
1973 Milestone: Unix Rewritten in C
In 1973, Unix was rewritten in C, proving a portable OS kernel was practical. This milestone demonstrated that a high-level language could handle all kernel responsibilities including memory management, device drivers, and interrupt handling.
Ecosystem Expansion: Academic and Commercial Paths
Academic dissemination: Bell Labs licensed Unix to universities at minimal or zero cost, making Unix a core CS education tool. Graduates carried Unix and C knowledge into industry.
Commercial adoption: Industry deployment by graduates further expanded the ecosystem.
Standardization: POSIX and ANSI C Mutual Reinforcement
In the 1980s, two standardization efforts reinforced each other:
IEEE POSIX (Portable Operating System Interface) defined OS interfaces using C as the interface definition language.
ANSI C standardized the language and incorporated system-call interfaces into its standard library.
This "mutual endorsement" cemented C as the lingua franca of system interfaces.
Linux and C: Continued Dominance
When Linus Torvalds began Linux in 1991, he chose C over C++, stating:
"C++ is a horrible language. It's made more horrible by the fact that a lot of substandard programmers use it, to the point where it's much much easier to generate total and utter crap with it. Quite frankly, even if the choice of C were to do nothing but keep the C++ programmers out, that in itself would be a huge reason to use C."
Linux's success further entrenched C in kernel development. As of the article's writing, major production kernels — Linux, Windows NT, macOS/iOS XNU, and Android's Linux variant — remain predominantly C, despite the emergence of Rust and Go for systems programming.
Code example
来源丨经授
权转自 码农的荒岛求生(ID:escape-it)
作者丨
码农的荒岛求生Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
IT Services Circle
Delivering cutting-edge internet insights and practical learning resources. We're a passionate and principled IT media platform.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
