Programming Language

The kernel is written in the C programming language[c-language].More precisely, the kernel is typically compiled withgcc[gcc]under-std=gnu11[gcc-c-dialect-options]: the GNU dialect of ISO C11.clang[clang] is also supported, see docs onBuilding Linux with Clang/LLVM.

This dialect contains many extensions to the language[gnu-extensions],and many of them are used within the kernel as a matter of course.

Attributes

One of the common extensions used throughout the kernel are attributes[gcc-attribute-syntax]. Attributes allow to introduceimplementation-defined semantics to language entities (like variables,functions or types) without having to make significant syntactic changesto the language (e.g. adding a new keyword)[n2049].

In some cases, attributes are optional (i.e. a compiler not supporting themshould still produce proper code, even if it is slower or does not performas many compile-time checks/diagnostics).

The kernel defines pseudo-keywords (e.g.__pure) instead of usingdirectly the GNU attribute syntax (e.g.__attribute__((__pure__)))in order to feature detect which ones can be used and/or to shorten the code.

Please refer toinclude/linux/compiler_attributes.h for more information.

Rust

The kernel has experimental support for the Rust programming language[rust-language] underCONFIG_RUST. It is compiled withrustc[rustc]under--edition=2021[rust-editions]. Editions are a way to introducesmall changes to the language that are not backwards compatible.

On top of that, some unstable features[rust-unstable-features] are used inthe kernel. Unstable features may change in the future, thus it is an importantgoal to reach a point where only stable features are used.

Please refer toRust for more information.