mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 01:24:47 +01:00
The Rust support was merged in v6.1 into mainline in order to help determine whether Rust as a language was suitable for the kernel, i.e. worth the tradeoffs, technically, procedurally and socially. At the 2025 Linux Kernel Maintainers Summit, the experiment has just been deemed concluded [1]. Thus remove the section -- it was not fully true already anyway, since there are already uses of Rust in production out there, some well-known Linux distributions enable it and it is already in millions of devices via Android. Obviously, this does not mean that everything works for every kernel configuration, architecture, toolchain etc., or that there won't be new issues. There is still a ton of work to do in all areas, from the kernel to upstream Rust, GCC and other projects. And, in fact, certain combinations (such as the mixed GCC+LLVM builds and the upcoming GCC support) are still quite experimental but getting there. But the experiment is done, i.e. Rust is here to stay. I hope this signals commitment from the kernel to companies and other entities to invest more into it, e.g. into giving time to their kernel developers to train themselves in Rust. Thanks to the many kernel maintainers that gave the project their support and patience throughout these years, and to the many other developers, whether in the kernel or in other projects, that have made this possible. I had a long list of 173 names in the credits of the original pull that merged the support into the kernel [2], and now such a list would be way longer, so I will not even try to compose one, but again, thanks a lot, everybody. Link: https://lwn.net/Articles/1050174/ [1] Link: https://git.kernel.org/linus/8aebac82933f [2] Reviewed-by: Gary Guo <gary@garyguo.net> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Acked-by: Benno Lossin <lossin@kernel.org> Acked-by: Andreas Hindborg <a.hindborg@kernel.org> Acked-by: Danilo Krummrich <dakr@kernel.org> Reviewed-by: Boqun Feng <boqun.feng@gmail.com> Link: https://patch.msgid.link/20251213000042.23072-1-ojeda@kernel.org Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
58 lines
2.6 KiB
ReStructuredText
58 lines
2.6 KiB
ReStructuredText
.. _programming_language:
|
|
|
|
Programming Language
|
|
====================
|
|
|
|
The kernel is written in the C programming language [c-language]_.
|
|
More precisely, the kernel is typically compiled with ``gcc`` [gcc]_
|
|
under ``-std=gnu11`` [gcc-c-dialect-options]_: the GNU dialect of ISO C11.
|
|
``clang`` [clang]_ is also supported, see docs on
|
|
:ref:`Building Linux with Clang/LLVM <kbuild_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 introduce
|
|
implementation-defined semantics to language entities (like variables,
|
|
functions or types) without having to make significant syntactic changes
|
|
to the language (e.g. adding a new keyword) [n2049]_.
|
|
|
|
In some cases, attributes are optional (i.e. a compiler not supporting them
|
|
should still produce proper code, even if it is slower or does not perform
|
|
as many compile-time checks/diagnostics).
|
|
|
|
The kernel defines pseudo-keywords (e.g. ``__pure``) instead of using
|
|
directly 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 to ``include/linux/compiler_attributes.h`` for more information.
|
|
|
|
Rust
|
|
----
|
|
|
|
The kernel has support for the Rust programming language
|
|
[rust-language]_ under ``CONFIG_RUST``. It is compiled with ``rustc`` [rustc]_
|
|
under ``--edition=2021`` [rust-editions]_. Editions are a way to introduce
|
|
small changes to the language that are not backwards compatible.
|
|
|
|
On top of that, some unstable features [rust-unstable-features]_ are used in
|
|
the kernel. Unstable features may change in the future, thus it is an important
|
|
goal to reach a point where only stable features are used.
|
|
|
|
Please refer to Documentation/rust/index.rst for more information.
|
|
|
|
.. [c-language] http://www.open-std.org/jtc1/sc22/wg14/www/standards
|
|
.. [gcc] https://gcc.gnu.org
|
|
.. [clang] https://clang.llvm.org
|
|
.. [gcc-c-dialect-options] https://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html
|
|
.. [gnu-extensions] https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html
|
|
.. [gcc-attribute-syntax] https://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.html
|
|
.. [n2049] http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2049.pdf
|
|
.. [rust-language] https://www.rust-lang.org
|
|
.. [rustc] https://doc.rust-lang.org/rustc/
|
|
.. [rust-editions] https://doc.rust-lang.org/edition-guide/editions/
|
|
.. [rust-unstable-features] https://github.com/Rust-for-Linux/linux/issues/2
|