Ubuntu's 'Rust-ification' Hits New Milestone: Coreutils Migration is Complete (itsfoss.com) 158
"Ubuntu has managed to do away with GNU Core Utilities in its default stack," reports the blog It's FOSS.
The last three utilities — cp, mv and rm — have been moved to versions from the uutils project (which reimplements utilities in Rust). Everything else, from ls and cat to chmod and du, made that jump in earlier releases... Canonical started "oxidizing" Ubuntu last year, and Ubuntu 25.10 became the first release to ship [ the uutils project's] coreutils as the default. That release also made sudo-rs the default privilege tool, replacing a command that had been in place for decades.
26.04 was the release where the plan did slow down quite a bit, as Canonical kept cp, mv, and rm on their GNU versions due to a bunch of TOCTOU issues that were blocking the full implementation. These were caught during an audit, when Canonical commissioned Zellic for two rounds between December 2025 and March 2026, focusing on the most security-sensitive utilities first. Across both rounds, Zellic raised 113 issues, and 44 of them were assigned CVEs. Canonical says the vast majority have been resolved.
Getting here has had its ups and downs, and the last stretch was not clean. In July, uutils cp went back into the archive and came straight out again after it broke live image builds. The fix was quick; as the developers marked it "Critical," the fix went upstream, and the migration landed in time for 26.10.
When typing commands, nothing changes for you on the surface. uutils coreutils is designed to be a drop-in replacement for essential GNU tools, and the project treats any divergence from GNU as a bug, further pointing out that some options may still be missing or behave differently. So if you prefer staying on the GNU version, you have the option to install the coreutils-from-gnu package that houses all the required components.
The last three utilities — cp, mv and rm — have been moved to versions from the uutils project (which reimplements utilities in Rust). Everything else, from ls and cat to chmod and du, made that jump in earlier releases... Canonical started "oxidizing" Ubuntu last year, and Ubuntu 25.10 became the first release to ship [ the uutils project's] coreutils as the default. That release also made sudo-rs the default privilege tool, replacing a command that had been in place for decades.
26.04 was the release where the plan did slow down quite a bit, as Canonical kept cp, mv, and rm on their GNU versions due to a bunch of TOCTOU issues that were blocking the full implementation. These were caught during an audit, when Canonical commissioned Zellic for two rounds between December 2025 and March 2026, focusing on the most security-sensitive utilities first. Across both rounds, Zellic raised 113 issues, and 44 of them were assigned CVEs. Canonical says the vast majority have been resolved.
Getting here has had its ups and downs, and the last stretch was not clean. In July, uutils cp went back into the archive and came straight out again after it broke live image builds. The fix was quick; as the developers marked it "Critical," the fix went upstream, and the migration landed in time for 26.10.
When typing commands, nothing changes for you on the surface. uutils coreutils is designed to be a drop-in replacement for essential GNU tools, and the project treats any divergence from GNU as a bug, further pointing out that some options may still be missing or behave differently. So if you prefer staying on the GNU version, you have the option to install the coreutils-from-gnu package that houses all the required components.
Nothing of value was added (Score:4, Informative)
They might as well have rewritten SystemD in Rust and made again zero impact.
Re: Nothing of value was added (Score:5, Insightful)
Re: Nothing of value was added (Score:5, Insightful)
Which is in no way surprising. Re-implementing well-working, _old_ tools is just dumb.
So dumb that coreutils did it (Score:4, Funny)
My only complaint with Canonical's approach was pushing half and half into an Ubuntu LTS, which was clearly a terrible idea to anyone watching, but now they're stuck with it, I'm sure they'll learn from it.
Re: (Score:2)
That is why I wrote "well working". Seriously, what is it with people unable to understand compact and clear language?
Re: (Score:2)
This IS the Rust community you're talking about, after all.
While Rust is a fine language, the community tends to be a bit fanatical and irrational. Pair that with a generally shallow technical aptitude depth and a lack of experience, and vibe coding, and therein lies the problem. There seems to be a high intersection between them and the systemd, so that's not a surprise.
And that's without getting into questionable mental health practices that are common in that community.
Re: Nothing of value was added (Score:5, Informative)
Did you overlook that the Rust implementation for some of these was subject to a TOUTOC vulnerability that the Rust compiler did not catch and that the GNU versions did not have? Your "Period." sounds pretty dumb now, doesn't it? Especially because that problem got referenced in the story...
Rust is not magic. Stop believing it is. You may also want to think about what "well working" could mean in the context of this story.
Re: (Score:2)
No one said rust is magic. But but attempting to claim that whole world of memory safety issues being resolved is somehow countered by a single vulnerability is not just dumb, it's mindbogglingly stupid.
Rust isn't perfect. But claiming the old tools were is just spectacularly ignorant, especially given the recent history of CVEs related to those "well-working, _old_ tools".
Rather than your dumb fucking US vs THEM approach, how about you advocate for both sides to improve their code?
Re: Nothing of value was added (Score:5, Interesting)
That said, rewriting code always carries risk and uutils has its own set of bugs which have been uncovered and need fixing. There is a "if it isn't broke don't fix it" mantra but I suppose it depends on the definition of broke - if development is moribund then that could be considered an issue too.
It's worth noting that coreutils have derived benefit from the exercise too. The extensive test suite for uutils has uncovered bugs in coreutils and improved the overall code coverage. So even if people don't want to switch (even though they're functionally interchangeable), the existing package has derived benefit too.
Re: Nothing of value was added (Score:4, Insightful)
Re: Nothing of value was added (Score:5, Insightful)
History shows that developers cannot write safe code. Especially when there is a lot of code, developed over a long time with many people working on it. Rust at least offers to provide memory safety, which is a huge win, but not safety from all manner of other logical errors.
Of course if you have a lot of "unsafe" blocks in your Rust code because you are trying to make it do what C did in the same way C did it then you are not gaining anything much. I would not like to see that released until the "unsafe" had been reduced substantially.
Re: Nothing of value was added (Score:3)
Re: Nothing of value was added (Score:5, Insightful)
Yes of course when there is a skill and no standards of training, some people are bad at it
This. Most companies don't follow best practices when it comes to good code (for example, they have a bug tracker that is always growing, never empty). They don't try to write secure code, they don't have trainings in secure code, they don't penalize insecure code (although they should in a lot of cases). That is why most corporate programmers can't write secure code.
Re: (Score:3)
The funny thing is that this has happened before in other engineering disciplines. It is always as cheap as possible and often cheaper than possible until some major catastrophe. For a nice instructive example, look up "San Francis Dam". Or "Titanic". Or countless others. There are tons of nice entries in the history of engineering failure.
What always helped in the end is liability, qualification requirements and enforceable quality standards. We will get these in IT as well, as the industry is fundamentall
Re: Nothing of value was added (Score:2)
Re: Nothing of value was added (Score:5, Insightful)
How do we get the right things codified is the question.
Re: Nothing of value was added (Score:2)
Re: (Score:2)
Note however "will be", not "is". It's not there yet. ...
Then you have the problem of getting the right standards.
Then you have the problem of getting the right specs.
Then you have the problem of getting the right problem.
There's probably an end to this somewhere, but I doubt that it will be in perfection.
Re: Nothing of value was added (Score:2)
Re: (Score:2)
That one is stupid and has been removed from any actual IT security standards AFAIK. Most advise against it in the supplemental materials. SOX is entirely the wrong place for something like that in addition.
This does illustrate another problem with IT security: Meaningless and sometimes harmful rituals instead of things that help.
Re: (Score:2)
They only happen after those large, visible and obviously stupid catastrophes. Not before. We will get them, but it may still take a while.
Re: Nothing of value was added (Score:2)
AI is capable of fucking ANYTHING up because of the random numbers and lack of sanity checks. Given the exact same input ten times it might do the right thing nine times and still fuck it up once.
Re: Nothing of value was added (Score:2)
Re: (Score:2)
That's why you test it before putting it into production.
OK, as long as your response is to throw it away when you realize it can never be reliable because no matter what test you devise, the LLM will fail it sometimes.
Re: Nothing of value was added (Score:2)
Re: (Score:2)
there is a skill
I've never met a highly skilled person who is perfect. Neither have you, you may just pretend you have.
Re: Nothing of value was added (Score:2)
Re: Nothing of value was added (Score:2)
Re: (Score:3, Insightful)
History shows that developers cannot write safe code
History shows that incompetent developers cannot write safe code. There are examples of programmers writing safe code.
People who make excuses for unsafe code are usually crappy developers, and that is what I think of you. You're a crappy developer if you can code at all.
Re: (Score:3)
History shows that incompetent developers cannot write safe code. There are examples of programmers writing safe code.
This is only really a useful observation if you can tell me ahead of time which developers are competent and which ones are incompetent. If you can't, then the safe thing to do is to assume that all developers are "incompetent" (by your definition) and use tools like memory-safe languages to mitigate that risk.
Re: (Score:2)
The correct approach is to train them to be competent, and set standards.
You've got an approach to training and a set of standards that, when implemented, produces developers who never write unsafe code? To the degree that you don't see value in further risk mitigation through choice of language?
Security vulnerabilities happen in every language. Anyone who thinks the language will make them safe is an idiot.
Read what I wrote. This is about risk mitigation, not elimination.
What I mean is, you are an idiot, cmseagle 1195671.
You here to debate approaches to security, or to be an ass to strangers on the internet? Happy to engage in the former but the latter is a childish waste of everyone's time.
Re: (Score:2)
Nobody can write safe code. People, can, however, test the code they write, and if there is a comprehensive test suite, fix it so that it works safely. Debugging is mandatory!
Re: (Score:2)
Re: Nothing of value was added (Score:4)
Secondly, no Rust is not going to stop programmers making all bugs. But it will stop a whole raft of bugs caused by using C (and C++) that are easy to find in the CVE database. And nobody uses "unsafe" everywhere. But even if they did Rust's unsafe mode is still safer than C. The unsafe keyword unlocks some mutation and pointer functions but the compiler is still doing lifetime and borrowing checks. In fact, the only reason someone would use "unsafe" is interact with C, the OS or metal. There is literally no reason to use it when Rust is talking to Rust. It's a pain in the ass to use and very conspicuous which is the whole point.
Re: Nothing of value was added (Score:4, Insightful)
I think Ubuntu (and other's desire) to remove coreutils is precisely because coreutils is old, brittle and written in an unsafe language.
They aren't brittle. I've looked at them. The code is fine, but it uses an older style that is annoying to newbies.
If I were going to rewrite something in Rust, I would look at Firefox, not Coreutils which I would consider a waste of time.
Re: Nothing of value was added (Score:5, Interesting)
If you think Rust provides "Proven because the compiler validates every individual unit." you are seriously uninformed about what Rust's memory safety guarantees are, what they are safe against and what they are not safe against.
Rust prevents sill memory use errors, like out of bounds array access, use of after free, dereferencing null or invalid pointers etc, etc. It also provides a great type checking system.
Of course catching such silly mistakes in a huge thing, a great benefit and will of course prevent any security vulnerabilities and other bugs that such mistakes give rise to.
However it does not prevent you from making logical mistakes in your code. You can still make an infinite number of other bugs. The it comes to security there are many ways to leave holes and vulnerabilities even if your code uses memory perfectly.
Re: Nothing of value was added (Score:4, Informative)
Rust provides a safety net for amateurs who would fall in every trap the professional coder fell when they were an amateur. That's a great thing and enables people to learn programming faster, but you won't want coreutils implemented by amateurs anyway. The persons who are able to write good coreutils also don't fall into memory safety traps.
Re: (Score:3)
Also, Rust is more complex to use than C, so a small program is much better in C. And a large program is probably better in either C++ or Python(with a lot of library calls).
I don't like Rust, so I'm probably not being fair to it, but I struggle to identify a good use case. (Personally, I'd rather use Forth than Rust.)
Re: (Score:2)
That is why I wrote "well working". That obviously includes maintenance, support team, etc. Do you have trouble with text comprehension?
Re: (Score:2)
Unfortunately auto correct sabotaged your original post. Until this post I was wondering what you meant by "sill working."
Re: (Score:2)
You read with autocorrect? Ok, in that case my apologies. "Well working" is a critical part of that statement. Badly working old things should definitely be replaced.
Re: Nothing of value was added (Score:5, Informative)
Mysql was forked as Mariadb.. for no good reason it seems, seeing as Oracle didn't break anything in the 15 years since.
Do not underestimate the dark lord of Lanai. MariaDB is likely the only reason MySQL didn't join Solaris.
T
Re: (Score:2)
Mysql was forked as Mariadb.. for no good reason it seems, seeing as Oracle didn't break anything in the 15 years since.
No good reason if you ignore what happened to OpenSolaris and Java, I guess.
Re: Nothing of value was added (Score:2)
OpenSolaris was doomed from the start. It had insufficient reason to exist and a lack of interest. In theory not having ZFS in the Linux kernel is a problem, in practice it isn't. So can you really build a community around one feature (Zones)? Answer, apparently not.
Re: Nothing of value was added (Score:5, Interesting)
Re: Nothing of value was added (Score:4)
The coreutils are surprisingly complex.
Yes. That TOCTOU problem is a dead giveaway that the Rust coders involved are pretty incompetent regarding the task they are trying to do. I will let this age a few years before I will even consider using it.
Re: Nothing of value was added (Score:2)
If you could, you'd be using Debian and not its rusted version.
Re: (Score:3)
People who use commercial software on Linux are often on Ubuntu because it's what corps choose as the only thing "supported."
It may even be the majority of the user base.
Re: Nothing of value was added (Score:2)
I switched a system from pop os to Ubuntu to get help with a problem with steam. They refused to help me anyway. Now I'm on Devuan. Much better.
Re: (Score:2)
No, that is not measurable. Unless you solved all the problems with testing code that have plagued the industry since its very existence? I am also dying to know how you want to measure the existence of not yet found security problems.
Re: Nothing of value was added (Score:5, Funny)
I am also dying to know how you want to measure the existence of not yet found security problems.
It was easy. I asked, "ChatGPT, are there any security bugs in this code?"
My code is now proven secure, get with the program.
Re: (Score:2)
Looks like I am totally obsolete. Of course you are perfectly right!
In other news, be afraid, be very afraid. Dumb people with nuclear weapons (figuratively or literally) are the new normal.
Re: (Score:2)
In the next x months, how many security issues of what level are found in the old code using tool y vs How many are found in the new code.
Re: (Score:2)
A nice example of "lies, damned lies, and bad metrics". This one is so bad I would consider using it as an example of how to never do a security metric.
Re: Nothing of value was added (Score:2)
What percentage of new code is written in rust?
Next to zero? Neat.
Re: (Score:2)
I remove sudo. The whole idea is fundamentally broken and I doubt it can even be made secure the way it is done. If you need root, be root.
Re: (Score:2)
You can still use "sudo -s" and "sudo -i", so you don't have to share a single root password with different users.
Re: (Score:2)
Hmm. Well, if your permission arrangement is this badly broken (root can spy on passwords getting typed in ...) maybe sudo is a way.
Re: (Score:2)
I remove sudo. The whole idea is fundamentally broken and I doubt it can even be made secure the way it is done. If you need root, be root.
On a single user system, I mostly agree. But on a multi-user system, especially one where someone else also needs root for some action, sudo is a damned fine solution. You can lock it down to specific commands with specific arguments for specific users on specific machines, AND you get the logging as well (you are doing secure logging to a centralized system/cluster,right?).
A simple real world example: you've got a cluster of web servers and a support team that needs to be able to restart them.
Of course, th
Different license (Score:5, Informative)
The Rust version is licensed under the MIT license, in case anyone was wondering. The Ubuntu Discourse post says the change is not about licensing, but about security. What it does not provide is any kind of statistic on security issues related to coreutils.
Re:Different license (Score:5, Funny)
Yeah this project has nothing to do with security... it's just the Ubuntu developers are REALLY REALLY tired of hearing the FSF folks say "it's GNU Linux" every time they turn around.
Re: (Score:3)
Yeah this project has nothing to do with security... it's just the Ubuntu developers are REALLY REALLY tired of hearing the FSF folks say "it's GNU Linux" every time they turn around.
Not sure if I should mod that insightful or funny so I'll leave it to others to decide. Seems a little of both.
Re: (Score:2)
We're sick of GNU Linux. We're making NEW Linux.
Re: (Score:2)
I predict they'll go right on saying it. It's been many years since GNU code made up more than a tiny sliver of the code in most Linux distros. That didn't stop them. I doubt this will either.
Re: Different license (Score:2)
Yeah, the kernel, libc, compiler, and the majority of the userland is all that's left, that's basically nothing! You could rewrite that in a day!
Ok, but⦠(Score:4, Funny)
Re: Ok, but⦠(Score:4, Interesting)
From what little experience I have with rust, the ideology of the language is rather different from c, so while the full set of use cases across all those supported OSes is largely analogous, the implementation has little potential for copypasta, especially where those subtle differences exist.
Re: (Score:2)
Re: (Score:2)
LOL.
Re:Ok, but (Score:2)
There's versions available in every language, as far as I can tell...
Re:Ok, but⦠(Score:5, Insightful)
Literally every one of the coreutils tools have some odd edge cases - some that make sense, some that do not. But at some point that behavior is something that callers expect, and when a replacement does not behave that way... You know the rest. "#define bad" etc.
Re: Ok, but⦠(Score:2, Funny)
Re: Ok, but⦠(Score:2)
Re: Ok, but⦠(Score:2)
Re: Ok, but⦠(Score:2)
Re: (Score:2)
Yes. Same thing as if you do "rm -f" on the file, that is of you have aliased rm to normally ask. For some things you just have to know to be careful. If you do not, that is on you. It is not the fault of the tool.
Re: Ok, but⦠(Score:3)
Re: (Score:2)
Ah, I see. You do not know how file opening works on Linux. ">" opens files with O_TRUNC. Absolute standard c-library functionality. Nobody is out to get you.
Re: Ok, but⦠(Score:2)
Re: Ok, but⦠(Score:2)
That is wrong. That was never how it worked. You don't even know how it works! Every time you post this shit you prove to the whole world that you have no idea what you are on about. Linux has always done it the same way Unix has always done it, and it's the opposite of how you think.
Redirection is handled by the shell, I posted an article about that, you can just go read that to see how clueless you are and how it actually works.
Re: (Score:2)
I am talking about a specific circumstance where there used to be a way out
No, you aren't.
This is how redirection [dev.to] has worked in UNIX and Unixlikes ever since it was invented.
You are imagining that the system used to work the way you wanted when it never did.
Re: Ok, but⦠(Score:2)
Re: Ok, but⦠(Score:2)
It has done so since the seventies.
Re: Ok, but⦠(Score:4, Interesting)
That works as intended. The problem is on your side.
From the bash man-page: "If the file does not exist it is created; if it does exist it is truncated to zero size."
If you really want this to work differently, modify or write your own shell.
Re: Ok, but⦠(Score:3)
Yes that is what it is supposed to do. You opened a pipe to a file destructively, it did what you asked. Don't ask for that if you don't want it. Once you do that the original file is gone. Either append with >> or write to a temp file next time.
Re: (Score:2)
> One thing I noticed about modern Linux is if you "cat > file" and then press CTRL-C it overwrites with a blank file
That maybe a shell-ism. In bash if you ' >file ' with nothing else, you end up blanking the file (and updating the date/time on it) without ^C even being involved.
Re: (Score:2)
You are correct. That is indeed handled by the shell, not the program run from the command line.
Re: (Score:2)
It's worth noting that busybox replicates many of them, and it has its own oddities.
Re: (Score:2)
I think for a general purpose Linux dist you'd definitely need coreutils or a drop-in replacement. I think coreutils has a lot of very esoteric features, which uutils have copied so even so, there is merit in examining these and depr
Re: (Score:2)
It's worth noting that busybox replicates many of them, and it has its own oddities.
Likewise with *BSD.
Re:Ok, but (Score:2)
It's one git clone and a couple of Claude prompts. What could it cost? 10M tokens?
Re:Ok, but⦠(Score:5, Insightful)
Considerably more difficult than you imagine. Between them, they have almost 70 command-line options or flags. Taking into account that many of those behave differently depending on the presence or absence of other flags, there's a couple hundred different code paths. Then you need to handle directories, files, sparse files, sym- and hard-links, on and across different filesystems, not to mention the various file-like things scattered around (pipes, streams, etc.)
It's not rocket science, but neither is it trivial.
Re: (Score:3)
To do basic functionality? Not hard. Busybox and toybox implement the "90%" use cases of those utilities inside them.
To achieve POSIX compliance requires more work - you're adding stuff that handles edge cases and little used functionality.
To achieve GNU coreutils functionality with GNU extensions is a bit more work on top of that.
Uutils though
In reality all about the license? (Score:3)
MIT is _much_ more permissible than GPLv3. I can entirely understand Ubuntu jumping on a change of software, which does the exact same thing, but under a license which is more favorable for corporations.
That uutils is written in rust, is all a happy coincidence. Security issues aside, with MIT code they can do whatever they want, GPLv3 has all kinds of inconvenient consequences when they work on it. Some of them, I think, a company would be _very_ unhappy with.
I wouldn't be amazed if Canonical wants to be rid of everything GNU from their core OS somewhere in the future, simply because of the license.
That something is written in rust, doesn't automatically mean it's better. Also, as older does not automatically mean better, so does newer not automatically mean better.
Re: In reality all about the license? (Score:2)
I use Linux specifically because of the license. Linux succeeded because of the license. If Ubuntu wants to change what made Linux successful then the obvious thing to do is to change to not using Ubuntu.
Re: (Score:2)
This whole discussion has been fascinating. Sadly, the majority of it is over my head. Right now I'm just wondering if this is the moment in history where Mint starts to abandon Ubuntu and goes all in on LMDE.
Less folks? (Score:2)
Re: (Score:2)
If things were to otherwise stay the same, then it would. They won't. Some descendant of "vibe coding" will become the dominant mode within 20 years. Probably a *lot* sooner. Next year wouldn't really surprise me.
The Rust Cult Cheers (Score:2)
WTAF? (Score:2)
1. GNU coreutils is ancient as is sudo. There's bound to be a metric ton of legacy code in there for all sorts of bizarre edge cases encountered across many platforms and systems over decades. Duplicating all the C code into RUST is a nightmare and the evidence is found in the delays with the uutils being deployed.
2. This is not about security it's about hijacking the GNU General Public License.
I was going to upgrade an LTS server to this new release but now I am seriously considering making a different Li