Rust in the kernel is no longer experimental
Posted by rascul 4 hours ago
Comments
Comment by dcrazy 2 hours ago
Comment by markus_zhang 3 hours ago
Comment by biorach 34 seconds ago
For these cases you could always use Zig instead of C
Comment by jcranmer 3 hours ago
Furthermore, in terms of extensions to the language to support more obtuse architecture, Rust has made a couple of decisions that make it hard for some of those architectures to be supported well. For example, Rust has decided that the array index type, the object size type, and the pointer size type are all the same type, which is not the case for a couple of architectures; it's also the case that things like segmented pointers don't really work in Rust (of course, they barely work in C, but barely is more than nothing).
Comment by vlovich123 23 minutes ago
Comment by ZeWaka 5 minutes ago
Comment by raggi 3 hours ago
Bitfield packing rules get pretty wild. Sure the user facing API in the language is convenient, but the ABI it produces is terrible (particularly in evolution).
Comment by mjevans 2 hours ago
Comment by kbolino 2 hours ago
Comment by jcranmer 1 hour ago
Rust worded in its initial guarantee that usize was sufficient to roundtrip a pointer (making it effectively uptr), and there remains concern among several of the maintainers about breaking that guarantee, despite the fact that people on the only target that would be affected basically saying they'd rather see that guarantee broken. Sort of the more fundamental problem is that many crates are perfectly happy opting out of compiling for weirder platform--I've designed some stuff that relies on 64-bit system properties, and I'd rather like to have the ability to say "no compile for you on platform where usize-is-not-u64" and get impl From<usize> for u64 and impl From<u64> for usize. If you've got something like that, it also provides a neat way to say "I don't want to opt out of [or into] compiling for usize≠uptr" and keeping backwards compatibility.
If you want to see some long, gory debates on the topic, https://internals.rust-lang.org/t/pre-rfc-usize-is-not-size-... is a good starting point.
Comment by aw1621107 2 hours ago
Assuming I'm reading these blog posts [0, 1] correctly, it seems that the size_of::<usize>() == size_of::<*mut u8>() assumption is changeable across editions.
Or at the very least, if that change (or a similarly workable one) isn't possible, both blog posts do a pretty good job of pointedly not saying so.
[0]: https://faultlore.com/blah/fix-rust-pointers/#redefining-usi...
[1]: https://tratt.net/laurie/blog/2022/making_rust_a_better_fit_...
Comment by dataflow 3 hours ago
Comment by jcranmer 2 hours ago
There was one accelerator architecture we were working that discussed making the entire datapath be 32-bit (taking less space) and having a 32-bit index type with a 64-bit pointer size, but this was eventually rejected as too hard to get working.
Comment by mmooss 3 hours ago
Obviously not. When will that happen? 15 years? Maybe it's generational: How long before developers 'born' into to memory-safe languages as serious choices will be substantially in charge of software development?
Comment by buster 33 minutes ago
Comment by sho_hn 2 hours ago
Comment by mmooss 2 hours ago
I can think of possible reasons: Early in life, in school and early career, much of what you work on is inevitably new to you, and also authorities (professor, boss) compel you to learn whatever they choose. You become accustomed to and skilled at adapting new things. Later, when you have power to make the choice, you are less likely to make yourself change (and more likely to make the junior people change, when there's a trade-off). Power corrupts, even on that small scale.
There's also a good argument for being stubborn and jaded: You have 30 years perfecting the skills, tools, efficiencies, etc. of C++. For the new project, even if C++ isn't as good a fit as Rust, are you going to be more efficient using Rust? How about in a year? Two years? ... It might not be worth learning Rust at all; ROI might be higher continuing to invest in additional elite C++ skills. Certainly that has more appeal to someone who knows C++ intimately - continue to refine this beautiful machine, or bang your head against the wall?
For someone without that investment, Rust might have higher ROI; that's fine, let them learn it. We still need C++ developers. Morbid but true, to a degree: 'Progress happens one funeral at a time.'
Comment by sho_hn 2 hours ago
Comment by mmooss 2 hours ago
Comment by lmm 2 hours ago
Is it obvious? I haven't heard of new projects in non-memory-safe languages lately, and I would think they would struggle to attract contributors.
Comment by jandrewrogers 30 minutes ago
It is easy to forget that the state-of-the-art implementations of a lot of systems software is not open source. They don’t struggle to attract contributors because of language choices, being on the bleeding edge of computer science is selling point enough.
Comment by ottah 2 hours ago
Comment by lmm 1 hour ago
Comment by vlovich123 22 minutes ago
Comment by mmooss 2 hours ago
Comment by drnick1 3 hours ago
Comment by brokencode 3 hours ago
I have no doubt C will be around for a long time, but I think Rust also has a lot of staying power and won’t soon be replaced.
Comment by ottah 2 hours ago
Comment by littlestymaar 1 hour ago
Rust is different because it both:
- significantly improve the security of the kernel by removing the nastiest class of security vulnerabilities.
- And reduce cognitive burden for contributors by allowing to encode in thr typesystem the invariants that must be upheld.
That doesn't mean Zig is a bad language for a particular project, just that it's not worth adding to an already massive project like the Linux kernel. (Especially a project that already have two languages, C and now Rust).
Comment by sayamqazi 52 minutes ago
Comment by vlovich123 18 minutes ago
So aside from being like 1-5% unsafe code vs 100% unsafe for C, it’s also more difficult to misuse existing abstractions than it was in the kernel (not to mention that in addition to memory safety you also get all sorts of thread safety protections).
In essence it’s about an order of magnitude fewer defects of the kind that are particularly exploitable (based on research in other projects like Android)
Comment by littlestymaar 40 minutes ago
So while there could definitely be an exploitable memory bug in the unsafe part of the kernel, expect those to be at least two orders of magnitude less frequent than with C (as an anecdotal evidence, the Android team found memory defects to be between 3 and 4 orders of magnitude less in practice over the past few years).
Comment by mustache_kimono 1 hour ago
This is still the worst possible argument for C. If C persists in places no one uses, then who cares?
Comment by johncolanduoni 48 minutes ago
That said, only a handful of those architectures are actually so weird that they would be hard to write a LLVM backend for. I understand why the project hasn’t established a stable backend plugin API, but it would help support these ancillary architectures that nobody wants to have to actively maintain as part of the LLVM project. Right now, you usually need to use a fork of the whole LLVM project when using experimental backends.
Comment by mustache_kimono 39 minutes ago
This is exactly what I'm saying. Do you think HW drives SW or the other way around? When Rust is in the Linux kernel, my guess is it will be very hard to find new HW worth using, which doesn't have some Rust support.
Comment by jazzyjackson 56 minutes ago
C will continue to be used because it always has been and always will be available everywhere, not only places no one uses :/
Comment by mustache_kimono 10 minutes ago
Yes, you can use it everywhere. Is that what you consider a success?
Comment by jcranmer 2 hours ago
I do firmly expect that we're less than a decade out from seeing some reference algorithm be implemented in Rust rather than C, probably a cryptographic algorithm or a media codec. Although you might argue that the egg library for e-graphs already qualifies.
Comment by qalmakka 23 minutes ago
Comment by tormeh 15 minutes ago
Comment by vlovich123 3 hours ago
Comment by phire 2 hours ago
It's "embedded programming" where you often start to run into weird platforms (or sub-platforms) that only have a c compiler, or the rust compiler that does exist is somewhat borderline. We are sometimes talking about devices which don't even have a gcc port (or the port is based on a very old version of gcc). Which is a shame, because IMO, rust actually excels as an embedded programming language.
Linux is a bit marginal, as it crosses the boundary and is often used as a kernel for embedded devices (especially ones that need to do networking). The 68k people have been hit quite hard by this, linux on 68k is still a semi-common usecase, and while there is a prototype rust back end, it's still not production ready.
Comment by vlovich123 54 minutes ago
Comment by MobiusHorizons 2 hours ago
Comment by vlovich123 55 minutes ago
Comment by thayne 3 hours ago
That isn't always the case. Slow compilations are usually because of procedural macros and/or heavy use of generics. And even then compile times are often comparable to languages like typescript and scala.
Comment by Yiin 23 minutes ago
Comment by blintz 2 hours ago
Comment by loeg 28 minutes ago
Comment by aw1621107 1 hour ago
Even then, there are still some systems that will support C but won't support Rust any time soon. Systems with old compilers/compiler forks, systems with unusual data types which violate Rust's assumptions (like 8 bit bytes IIRC)
Comment by QuiEgo 1 hour ago
Comment by keyle 39 minutes ago
It's a bit like asking with the new mustang on the market, with airbags and traction control, why would you ever want to drive a classic mustang?
Comment by stingraycharles 3 hours ago
I wouldn’t say it’s inevitable that everything will be rewritten in Rust, at the very least this will this decades. C has been with us for more than half a century and is the foundation of pretty much everything, it will take a long time to migrate all that.
More likely is that they will live next to each other for a very, very long time.
Comment by 0xbadcafebee 37 minutes ago
There's already applications out there for the "old thing" that need to be maintained, and they're way too old for anyone to bother with re-creating it with the "new thing". And the "old thing" has some advantages the "new thing" doesn't have. So some very specific applications will keep using the "old thing". Other applications will use the "new thing" as it is convenient.
To answer your second question, nothing is inevitable, except death, taxes, and the obsolescence of machines. Rust is the new kid on the block now, but in 20 years, everybody will be rewriting all the Rust software in something else (if we even have source code in the future; anyone you know read machine code or punch cards?). C'est la vie.
Comment by obviouslynotme 1 hour ago
There will be small niches leftover:
* Embedded - This will always be C. No memory allocation means no Rust benefits. Rust is also too complex for smaller systems to write compilers.
* OS / Kernel - Nearly all of the relevant code is unsafe. There aren't many real benefits. It will happen anyways due to grant funding requirements. This will take decades, maybe a century. A better alternative would be a verified kernel with formal methods and a Linux compatibility layer, but that is pie in the sky.
* Game Engines - Rust screwed up its standard library by not putting custom allocation at the center of it. Until we get a Rust version of the EASTL, adoption will be slow at best.
* High Frequency Traders - They would care about the standard library except they are moving on from C++ to VHDL for their time-sensitive stuff. I would bet they move to a garbage-collected language for everything else, either Java or Go.
* Browsers - Despite being born in a browser, Rust is unlikely to make any inroads. Mozilla lost their ability to make effective change and already killed their Rust project once. Google has probably the largest C++ codebase in the world. Migrating to Rust would be so expensive that the board would squash it.
* High-Throughput Services - This is where I see the bulk of Rust adoption. I would be surprised if major rewrites aren't already underway.
Comment by aw1621107 1 hour ago
This isn't really true; otherwise, there would be no reason for no_std to exist. Data race safety is independent of whether you allocate or not, lifetimes can be handy even for fixed-size arenas, you still get bounds checks, you still get other niceties like sum types/an expressive type system, etc.
> OS / Kernel - Nearly all of the relevant code is unsafe.
I think that characterization is rather exaggerated. IIRC the proportion of unsafe code in Redox OS is somewhere around 10%, and Steve Klabnik said that Oxide's Hubris has a similarly small proportion of unsafe code (~3% as of a year or two ago) [0]
> Browsers - Despite being born in a browser, Rust is unlikely to make any inroads.
Technically speaking, Rust already has. There has been Rust in Firefox for quite a while now, and Chromium has started allowing Rust for third-party components.
[0]: https://news.ycombinator.com/item?id=42312699
[1]: https://old.reddit.com/r/rust/comments/bhtuah/production_dep...
Comment by jitl 24 minutes ago
Comment by saghm 4 minutes ago
There are memory safety issues that literally only apply to memory on the stack, like returning dangling pointers to local variables. Not touching the heap doesn't magically avoid all of the potential issues in C.
Comment by johncolanduoni 30 minutes ago
Google is transitioning large parts of Android to Rust and there is now first-party code in Chromium and V8 in Rust. I’m sure they’ll continue to write new C++ code for a good while, but they’ve made substantial investments to enable using Rust in these projects going forward.
Also, if you’re imagining the board of a multi-trillion dollar market cap company is making direct decisions about what languages get used, you may want to check what else in this list you are imagining.
Comment by throwaway2037 23 minutes ago
> Rust is also too complex for smaller systems to write compilers.
I am not a compiler engineer, but I want to tease apart this statement. As I understand, the main Rust compiler uses LLVM framework which uses an intermediate language that is somewhat like platform independent assembly code. As long as you can write a lexer/parser to generate the intermediate language, there will be a separate backend to generate machine code from the intermediate language. In my (non-compiler-engineer) mind, separates the concern of front-end language (Rust) from target platform (embedded). Do you agree? Or do I misunderstand?Comment by scq 1 hour ago
Comment by qalmakka 25 minutes ago
Modern embedded isn't your grandpa's embedded anymore. Modern embedded chips have multiple KiB of ram, some even above 1MiB and have been like that for almost a decade (look at ESP32 for instance). I once worked on embedded projects based on ESP32 that used full C++, with allocators, exceptions, ... using SPI RAM and worked great. There's a fantastic port of ESP-IDF on Rust that Espressif themselves is maintaining nowadays, too.
Comment by Aurornis 1 hour ago
Memory safety applies to all memory. Not just heap allocated memory.
This is a strange claim because it's so obviously false. Was this comment supposed to be satire and I just missed it?
Anyway, Rust has benefits beyond memory safety.
> Rust is also too complex for smaller systems to write compilers.
Rust uses LLVM as the compiler backend.
There are already a lot of embedded targets for Rust and a growing number of libraries. Some vendors have started adopting it with first-class support. Again, it's weird to make this claim.
> Nearly all of the relevant code is unsafe. There aren't many real benefits.
Unsafe sections do not make the entire usage of Rust unsafe. That's a common misconception from people who don't know much about Rust, but it's not like the unsafe keyword instantly obliterates any Rust advantages, or even all of its safety guarantees.
It's also strange to see this claim under an article about the kernel developers choosing to move forward with Rust.
> High Frequency Traders - They would care about the standard library except they are moving on from C++ to VHDL for their time-sensitive stuff. I would bet they move to a garbage-collected language for everything else, either Java or Go.
C++ and VHDL aren't interchangeable. They serve different purposes for different layers of the system. They aren't moving everything to FPGAs.
Betting on a garbage collected language is strange. Tail latencies matter a lot.
This entire comment is so weird and misinformed that I had to re-read it to make sure it wasn't satire or something.
Comment by j16sdiz 1 hour ago
only in interpreter mode.
Comment by tayo42 1 hour ago
It's like saying python is complex becasue you have metaclasses, but you'll never need to reach for them.
Comment by s_ting765 10 minutes ago
Comment by QuiEgo 2 hours ago
Comment by greesil 1 hour ago
Comment by littlestymaar 1 hour ago
Comment by scottyah 3 hours ago
Comment by nibman 2 hours ago
Comment by heddelt 3 hours ago
Comment by vbezhenar 1 hour ago
For my work code, it all comes down to SDKs and stuff. For example I'm going to write firmware for Nordic ARM chip. Nordic SDK uses C, so I'm not going to jump through infinite number of hoops and incomplete rust ports, I'll just use official SDK and C. If it would be the opposite, I would be using Rust, but I don't think that would happen in the next 10 years.
Just like C++ never killed C, despite being perfect replacement for it, I don't believe that Rust would kill C, or C++, because it's even less convenient replacement. It'll dilute the market, for sure.
Comment by epohs 3 hours ago
Comment by shmerl 2 hours ago
Comment by m00dy 2 hours ago
Comment by sho_hn 2 hours ago
Comment by arilotter 3 hours ago
Comment by sho_hn 3 hours ago
Speaking as a subscriber of about two decades who perhaps wouldn't have a career without the enormous amount of high-quality education provided by LWN content, or at least a far lesser one: Let's forgive.
Comment by zengid 2 hours ago
Comment by DrammBA 2 hours ago
It was unintentional as per author
> Ouch. That is what I get for pushing something out during a meeting, I guess. That was not my point; the experiment is done, and it was a success. I meant no more than that.
Comment by DANmode 1 hour ago
Has anyone found them to be inaccurate, or fluffy to the point it degraded the content?
I haven’t - but then again, probably predominantly reading the best posts being shared on aggregators.
Comment by IshKebab 10 minutes ago
Comment by b33j0r 2 hours ago
Comment by nailer 3 hours ago
Comment by raggi 3 hours ago
Comment by joshdavham 2 hours ago
(I do agree it's clickbait-y though)
Comment by airstrike 1 hour ago
> Otherwise please use the original title, unless it is misleading or linkbait; don't editorialize.
Comment by Archelaos 2 hours ago
Comment by goku12 29 minutes ago
Comment by not2b 2 hours ago
Comment by zengid 2 hours ago
Comment by onedognight 3 hours ago
Comment by ModernMech 3 hours ago
The topic of the Rust experiment was just discussed at the annual Maintainers Summit. The consensus among the assembled developers is that Rust in the kernel is no longer experimental — it is now a core part of the kernel and is here to stay. So the "experimental" tag will be coming off. Congratulations are in order for all of the Rust-for-Linux team.Comment by testdelacc1 5 minutes ago
Comment by Redster 3 hours ago
Comment by Aldipower 19 minutes ago
Comment by huflungdung 17 minutes ago
Comment by CrankyBear 1 hour ago
Comment by panzi 3 hours ago
Comment by heddelt 3 hours ago
Comment by wewewedxfgdf 2 hours ago
Comment by dralley 2 hours ago
Comment by JuniperMesos 2 hours ago
Comment by J_Shelby_J 1 hour ago
Comment by mrtesthah 1 hour ago
Comment by anotherhue 3 hours ago
Comment by userbinator 1 hour ago
Comment by lomase 3 hours ago
Comment by scuff3d 1 hour ago
A lot of software was written in C and C++ because they were the only option for decades. If you couldn't afford garbage collection and needed direct control of the hardware there wasn't much of a choice. Had their been "safer" alternatives, it's possible those would have been used instead.
It's only been in the last few years we've seen languages emerge that could actually replace C/C++ with projects like Rust, Zig and Odin. I'm not saying they will, or they should, but just that we actually have alternatives now.
Comment by vbezhenar 1 hour ago
Comment by vardump 3 hours ago
Comment by checker659 2 hours ago
Comment by lmm 2 hours ago
Web browsers have been written in restricted subsets of C/C++ with significant additional tooling for decades at this point, and are already beginning to move to Rust.
Comment by drnick1 2 hours ago
Comment by lmm 1 hour ago
Comment by vbezhenar 1 hour ago
https://github.com/mozilla-firefox/firefox : JavaScript 28.9%, C++ 27.9%, HTML 21.8%, C 10.4%, Python 2.9%, Kotlin 2.7%, Other 5.4%
How significant?
Comment by estebank 37 minutes ago
I would love an updated version of https://docs.google.com/spreadsheets/d/1flUGg6Ut4bjtyWdyH_9e... (which stops in 2020).
For Chrome, I don't know if anyone has compiled the stats, but navigating from https://chromium.googlesource.com/chromium/src/+/refs/heads/... I see at least a bunch of vendored crates, so there's some use, which makes sense since in 2023 they announced that they would support it.
Comment by RealityVoid 47 minutes ago
So, written in C/C++? It seems to me you're trying to make a point that reality doesn't agree with but you stubbornly keep pushing it.
Comment by lmm 28 minutes ago
Not in the sense that people who are advocating writing new code in C/C++ generally mean. If someone is advocating following the same development process as Chrome does, then that's a defensible position. But if someone is advocating developing in C/C++ without any feature restrictions or additional tooling and arguing "it's fine because Chrome uses C/C++", no, it isn't.
Comment by lawn 21 minutes ago
Comment by RustSupremacist 3 hours ago
Comment by nibman 3 hours ago
Comment by andersmurphy 1 hour ago
Comment by ggm 27 minutes ago
Comment by p0w3n3d 1 hour ago
Comment by semiinfinitely 1 hour ago
Comment by Simplita 50 minutes ago
Comment by javawizard 45 minutes ago
(Spoiler alert: Rust graduated to a full, first-class part of the kernel; it isn't being removed.)
Comment by silisili 47 minutes ago
Comment by javawizard 43 minutes ago
(Of course, that's not what's happening at all.)
Comment by silisili 41 minutes ago