• collinfunk 3 days ago |
    I really don't understand why Canonical rushes this. If 'rm' can't remove all possible directory entries, that is a big issue:

      $ podman run --rm -it ubuntu:26.10
      $ apt update -y; apt upgrade -y
      $ rm --version
      rm (uutils coreutils) 0.10.0
      $ gnumkdir -p $(yes a/ | head -n $((32 * 1024)) | tr -d '\n')
      $ rm -rf a
      Segmentation fault (core dumped) rm -rf a
      $ ls a
      a
      $ gnurm -rf a
      $ ls a
      ls: cannot access 'a': No such file or directory
    • teekert 3 days ago |
      Rush? This is an interim release (95% or so only tracks LTS's) that is not even out yet... Go file a bug reports if you have some time.
      • collinfunk 3 days ago |
        I have. It has been an open bug upstream for years as well.
      • jeffbee 3 days ago |
        Reporting bugs before Ubuntu releases has never worked for me. They always land a bunch of major changes after the supposed "freeze" then they ignore all feedback because of the freeze. It's infuriating.
        • collinfunk 3 days ago |
          Glad to hear that I am not alone. I feel like launchpad is totally ignored most of the time.

          To get a response on a buggy GNU coreutils patch of theirs [1], I had to mention it in a rust-coreutils bug months later...

          [1] https://bugs.launchpad.net/ubuntu/+source/coreutils/+bug/215...

          • jabl 2 days ago |
            I've been a Ubuntu user for about 20 years, and I file bugs every now and then on launchpad. I don't recall any of them ever being fixed.

            Maybe the bugs get traction if you have a service contract?

            Best to file bugs directly to upstream, but that of course means you should try it on the latest upstream version and not whatever version ubuntu ships, so it's more friction.

            • b112 2 days ago |
              Upstream for much is Debian, but of course Ubuntu forks from testing, and then modifies...

              But if you can identify it as a bug in a version in Debian, that's a good place to file, as Ubuntu will get the fix eventually.

        • gdevenyi 2 days ago |
          Reporting bugs _at all_ in Ubuntu has never worked for me.
      • mixmastamyk 3 days ago |
        I did, and the original dev of the component fixed it within a few days. It was straightforward, a backwards reading of a spec, reordered.

        The fix is still sitting unmerged many months later.

        This surprised me since I thought the project was in heavy bugfix/compat mode. I won’t touch it until I see some velocity on open bugs.

        • baq 2 days ago |
          Fork Ubuntu and threaten their business model, that’ll get their attention.

          Only half joking.

          • yjftsjthsd-h 2 days ago |
            Ubuntu is the fork; just use Debian.
          • tjoff 2 days ago |
            There are plenty of Ubuntu forks?
          • geokon 2 days ago |
            There's very little incentive to switch. When people release for Linux they almost always first/only test it works on Ubuntu - hence it's going to be the least buggy. (ex: GOG only seemingly tested games on Ubuntu)

            So the switching cost is buggy software. You'd need something radically different that brings enough new features to the table to make it worth it the switch and dealing with bad/non-existant support.

            I think something like Nix/Guix but with stable library versions that matches Ubuntu/Debian LTS ones 1-to-1 could get traction

            • drdexebtjl 2 days ago |
              Then you would have to embrace their bad decisions, such as this one, and if you do, what’s the point?

              Everything just needs to run from a container with their expected runtime environment.

            • pessimizer 2 days ago |
              [flagged]
              • genxy 2 days ago |
                If you still have toes, take some morphine and reload.
          • jeltz 2 days ago |
            My solution was to stop using Ubuntu and move to Debian.
            • liamgm 2 days ago |
              And in that debian install rust unix coreutils as default
      • LtWorf 2 days ago |
        My experience is that filing bug reports to ubuntu is a complete waste of time. Not sure if it's different for paying users.
      • Symbiote 2 days ago |
        The bug report I filed several months ago hasn't been looked at. Many of these utilities were released and made the default for Ubuntu 26.04 LTS!

        There's a whole load of basic bugs reported and ignored:

        https://bugs.launchpad.net/ubuntu/+source/rust-coreutils

      • oefrha 2 days ago |
        This is certainly not just affecting interim releases. Ubuntu 26.04.1 has been released but is currently held back from do-release-upgrade for the LTS channel (which IIRC is unusual for a LTS's .1 release) due to rust-coreutils issue:

        > Users of Ubuntu 24.04 LTS will be offered an automatic upgrade to 26.04.1 LTS via Update Manager a couple of weeks following this release after some planned backports to address regressions in a recent version of rust-coreutils.

        https://discourse.ubuntu.com/t/ubuntu-26-04-1-lts-released/8...

      • mort96 2 days ago |
        This is what made me move away from Ubuntu. Use LTS and encounter issues with outdated packages? "Well duh, you're supposed to upgrade to interim releases if you need remotely up to date software". Use interim releases and encounter bugs? "Well duh, it's an interim release. Of course it's a buggy mess, nobody uses those"

        Every Fedora release is intended to be solid and they come out twice a year.

        • here_to_learn 2 days ago |
          I moved to Fedora from Ubuntu about a year ago for my laptop. My main motivation was not be defaulted to snap packages. I have had a great experience i.e it gets out of the way and it doesn't fall apart when I update stuff. I was worried about SELinux but find Fedoras defaults just fine and intuitive.
        • dirtikiti 11 hours ago |
          Keep using it, there's tons of bugs for you to find in Fedora.

          My favorite was a system-upgrade that installed broken video drivers, as recently as late 30x releases.

      • mkj a day ago |
        The 26.04.01 upgrade LTS is delayed from it too, not just interim releases.

        https://lists.ubuntu.com/archives/ubuntu-announce/2026-Augus...

        > Users of Ubuntu 24.04 LTS will be offered an automatic upgrade to 26.04.1 LTS via Update Manager a couple of weeks following this release after some planned backports to address regressions in a recent version of rust-coreutils.

    • amelius 3 days ago |
      Let them first fix Snap.
      • 0x696C6961 3 days ago |
        They need to kill snap ...
        • cute_boi 2 days ago |
          Yes, please. Linux distros is better with macos approach. And making appimage first class makes a lot of sense.
          • petre 2 days ago |
            I'll avoid it at this point anyway. The Rust coreutils is another reason for that. Snap, monetizing updates, telemetry, enough is enough.
            • voakbasda 2 days ago |
              Yup. After almost 20 years, I have had enough of their crap. All of my new machines are getting Debian. Can’t wait until I am free of Ubuntu.
          • tancop 2 days ago |
            Appimages are bloated and unreliable. You can't guarantee that your app will run on any machine because it might depend on different system libraries.

            Flatpak uses shared stable runtimes that are the same everywhere and don't take up space more than once. It also comes with a native update system and sandboxing. Snap is the same thing but worse.

            • ChocolateGod 2 days ago |
              > Snap is the same thing but worse

              IIRC Snap relies heavily on AppArmor for sandboxing, so on anything non-Ubuntu the sandboxing is non-existent.

            • suby 2 days ago |
              My problem with flatpak is that the underlying runtime has a limited lifespan. I used the Sublime Text 3 flatpak for many years, and it was deprecated a few months ago because the runtime it was using was no longer supported. This caused people to update the flatpak to Sublime 4, which is good, but I only have a license for 3. In the end I just downloaded the binary for 3 from their website, and it still just worked. Flatpak still doesn't save you from bitrot.
            • novafunc 2 days ago |
              There's a project called "anylinux appimages" that aims to make the most compatible appimages. They also use DwarFS for faster opening and smaller file sizes.

              See: https://pkgforge-dev.github.io/Anylinux-AppImages/

            • Samueru 4 hours ago |
              > Flatpak uses shared stable runtimes that are the same everywhere and don't take up space more than once.

              https://pkgforge-dev.github.io/Anylinux-AppImages/disk-usage...

              Also flatpak runtimes are NOT stable, they do nonsense like this: https://www.reddit.com/r/linuxquestions/comments/1pwgdwb/gpu...

          • ChocolateGod 2 days ago |
            AppImages do not work anywhere close to how macOSs .apps do, and even if they did the approach isn't correct for how things work on Linux.
        • LtWorf 2 days ago |
          I think ubuntu wants to kill desktop linux. No other explaination of why they push firefox inside snap, which then proceeds to constantly crash, when firefox used normally works completely fine.

          I haven't tried chromium but I presume it's the same issue.

          At work I'm forced to use ubuntu and I placed snapd on hold and added mozilla's own apt repository to my configuration to get firefox.

          At least in the past few months the dbus crashes (been using systemd on debian for several years just fine, this never happened) that render the system unusable and un-rebootable have stopped… I guess when my company will decide to upgrade to 26.04 there will be more instability and problems.

          • zelphirkalt 2 days ago |
            Firefox installed as a snap feels sluggish to me. When I install a Ubuntu system, the first thing I do is to uninstall any snap and install the apt versions of things, possibly adding official PPAs or using Guix to install software.
            • mrheosuper 2 days ago |
              why bother with ubuntu at all ? If you want ubuntu but without snap out of the box, Zorin is 1 option. Or if you also hate gnome, linux mint.
              • zelphirkalt 2 days ago |
                Indeed. Thought not in all cases I can decide what OS to use. An employer might prescribe which one to use. And any distro will be better than being forced to use Windows.
          • IlikeMadison 2 days ago |
            sandboxing a browser makes total sense. my firefox and chromium running as snaps never crashed a single time for as long as I can remember, and I use both every day, at the same time.
            • mhluongo 2 days ago |
              Both have performance issues when installed as snaps across my 24.04 and 26.04 machines.
            • LtWorf 2 days ago |
              I sandbox with firejail. There is no reason to use snaps. Also in firejail I never experienced a crash.

              > never crashed a single time

              I'm very happy for you. How does that help the people who do encounter issues?

            • dirtikiti 11 hours ago |
              Browsers literally sandbox their own tabs.

              And the entire Linux user space is already sandboxed by design. This is why you type sudo.

              If os and software developers actually designed with the Linux filesystem in mind, there would be no need for Flatpaks and Snaps and AppImages.

              There's a whole directory for user applications and their libraries.

              /usr

          • fn-mote 2 days ago |
            > I haven't tried chromium but I presume it's the same issue

            No issues with snap Chromium.

          • wafflemaker a day ago |
            Thanks to snap I've learned of Librewolf. Couldn't install non snap Firefox, so just got ff fork instead.

            Also, after a system update all PPAs (including Librewolf) got turned off, so I went like a year without updating the browser. Fun stuff.

            Also, snap is now partially fixed. It used to take all your drive space with old versions of snaps. You needed a special script to remove them automatically.

            Now there's no more than 2(?) old versions of snaps anytime. Progress!

            But not to complain too much, Ubuntu still kind of works. I moved my laptop to Fedora, and almost did it with the desktop, but learned of Librewolf. Should probably remove the fedora root and home at some point. Don't remember any issues that were not caused by me (other than snaps). Compared to Windows with it's auto updates when you need PC for sth critical, ads everywhere and this annoying way of installing software not from terminal and having to update it manually separate from system updates. Ubuntu did a lot for Linux, maybe more it's community than canonical, but it will always have a place in my heart.

        • pjmlp a day ago |
          It is a good idea, unfortunately poorly executed.
      • tjoff 2 days ago |
        There is no reason for anyone on any distro to use snap.

        It will die so just leave it alone.

    • dark-star 3 days ago |
      yeah, this is a bug. And yes, it should be fixed. But I don't think it will affect many users, I mean who has a 32000 -evels deep directory on their system?
      • secondcoming 3 days ago |
        That way of thinking just means it'll never be fixed
        • gpm 3 days ago |
          Nah, people should (and do) fix small issues as well as big issues. Lying about the scale of issues and calling them "big" when they aren't just leads to no ability to prioritize or evaluate.

          Incidentally someone submitted a PR for this issue about 3 hours before the first comment about it in this thread - https://github.com/uutils/coreutils/pull/14554 (and 2 hours before this link was submitted to HN)

        • abirch 3 days ago |
          "The Linux philosophy is 'Laugh in the face of danger'. Oops. Wrong One. 'Do it yourself'. Yes, that's it." Linus Torvalds
          • dfox 3 days ago |
            The problem there is that this is exactly the class of bug that does not exist in GNU coreutils because of philosophy of that project. Non-existence of such bugs proves that the impementation is not copied from AT&T code.
          • LtWorf 2 days ago |
            It's complicated to do it yourself when upstream won't accept your code.
        • 7bit 3 days ago |
          What approach would you suggest for priorisation of tickets?
          • secondcoming 3 days ago |
            Ideally there should have been no tickets at all if all that's happening is a program being ported to another language.
            • gpm 3 days ago |
              This isn't a port - it's a re-implementation without any use of the original source.

              That's also not all that's happening. It's also making improvements like better internalization support, better error messages, and a small handful of other extensions.

              • collinfunk 3 days ago |
                I have had to tell them repeatedly to stop copying tests verbatim, including the original comments from GNU coreutils. So I doubt this is true, which is frustrating.
                • leni536 2 days ago |
                  What's wrong with them using the coreutils tests?
                  • RichardLake 2 days ago |
                    If they followed the license nothing. My uninformed knowledge is that the rust based rewrite is MIT, the originals are GPL, and you can't include GPL code in a MIT licensed project without making it GPL.
                    • leni536 2 days ago |
                      > and you can't include GPL code in a MIT licensed project without making it GPL.

                      Why is that? The tests are not linked to the distributed binaries. You can also distribute project sources with mixed licenses.

                    • heinrich5991 2 days ago |
                      But you should be able to use a GPL test suite on an MIT-licensed program (or even a proprietary one, without the program needing to be under the GPL.
                      • gpm 2 days ago |
                        Ehh... Technically yes but when you don't own the copyright on the tests you need to be very careful against creating derivative works, and you need to preserve both licenses in the distributed source.
          • mrkdkirlwkfkf 2 days ago |
            Capitalism.
      • tosti 3 days ago |
        What programmer or programming language can't iterate a loop more than 32000 times?!
        • IshKebab 3 days ago |
          It's a stack overflow which means it's using recursion and for historical reasons that don't make sense any more, stacks are teeny tiny on 64-bit Linux - apparently only 8 MB on Linux! I'm not sure why they don't raise it to something reasonable like 4 GB. I guess because they want consistency with 32-bit? Maybe we can finally change it if/when they phase out support for 32-bit Linux. Apparently it might not be that far away:

          https://lwn.net/Articles/1035727/

          • tosti 3 days ago |
            OIC. Rust doesn't guarantee optimizing tail recursion. How unfortunate for a language that's getting widespread adoption.
            • gpm 3 days ago |
              For what it's worth there's reasonably active [1] work on implementing opt-in guaranteed tail calls - but it's not particularly fast going. LLVM (the backend rust uses) needs better support for musttail (e.g. some architectures just don't support it [2]).

              [1] https://github.com/rust-lang/rust/issues/112788

              [2] https://github.com/rust-lang/rust/issues/153827

              By-default guaranteed tail calls really isn't rust's style, because it means subtle changes (introducing a destructor, re-ordering code, etc) can change semantics without you realizing it. If you want to guarantee that a call can't allocate a new stack frame you should have to say it.

              • lioeters 3 days ago |
                Not so familiar with this area, but isn't the existing behavior of implicitly creating new stacks more of a problem than implicit tail-call elimination? Seems the latter is a kind of compiler-level optimization, of which there are already many (I think) that change the semantics internally but guarantee the outward behavior stays the same.

                But I can understand the preference for an explicit opt-in, to make clear that it is enforced and not assumed.

                • gpm 3 days ago |
                  > implicitly creating new stacks

                  I'd argue that it's explicit - that's what a function call does and you don't have implicit function calls in rust.

                  > Seems the latter is a kind of compiler-level optimization, of which there are already many (I think) that change the semantics internally but guarantee the outward behavior stays the same.

                  What you're asking for here already exists. Tail calls might be optimized into not allocating extra stack frames, the rust compiler just doesn't guarantee that it will perform that optimization (and almost certainly won't when code is compiled without optimizations... for instance).

                  What people want is the semantic guarantee that the stack frame won't be allocated. Not just a compiler that often performs the optimization. Otherwise you can't be sure that your code will keep working with new compiler flags/versions/architectures/... You could say "whenever the code is the right shape we'll guarantee the optimization" (C++ famously did this for things like copy elision)... but now the shape of code comes with non-obvious semantic guarantees and that's not rust's style. Hence the proposal for a keyword instead.

                  • lioeters 3 days ago |
                    I see it, certain algorithms need guaranteed tail-call elimination, otherwise they are too inefficient and must be manually unrolled or rewritten to avoid blowing the stack. So a compiler optimization that is "nice to have" is not good enough.
                    • clhodapp 2 days ago |
                      No algorithm requires tail-call elimination in a general-purpose language with imperative mutability. It's just another way to express iteration.
                      • spider-mario 2 days ago |
                        Sure, but mutual recursion might require `goto` for example. Or an explicit state machine.
                        • clhodapp 2 days ago |
                          I can see how it might require an explicit state machine (keep a mutable state number and switch over the inlined bodies of what could be functions), but I'm not seeing how it could require `goto`.

                          Are there more-complex relationships that might require it?

                          • spider-mario 2 days ago |
                            I meant it more in the sense that “you need one or the other” rather than “some cases require one and some other cases require the other”.
              • jmalicki 3 days ago |
                > because it means subtle changes (introducing a destructor, re-ordering code, etc) can change semantics without you realizing it.

                No, it won't change semantics - if you say @musttail or similar, it will simply fail to compile if you, say, introduce a destructor - the semantics will not subtly change.

                • gpm 3 days ago |
                  Uh, yes, if you guarantee the semantics only when the code explicitly opts in and not by default then semantics will not subtly change, that is the point of my comment
                  • jmalicki 2 days ago |
                    It's not a change in semantics of compiled code. It is only a change of whether or not the code will compile.
                    • gpm 2 days ago |
                      Guaranteeing an optimization that otherwise only might run is a change in semantics. The attribute doesn't allow (in any sensible language) the code to simply not compile because the optimizer doesn't feel like it today (or you compiled with -O0), it forces the compiler to not allocate a stack frame wherever the code fits the structure that makes that definitely possible and fails to compile wherever it doesn't (even if after other optimization passes it happens to fit a structure that makes it possible).
                • afdbcreid 2 days ago |
                  Incorrect. `become` does change drop order - https://play.rust-lang.org/?version=nightly&mode=debug&editi....
                  • jmalicki 2 days ago |
                    That's not implementing tail calls breaks things, that's bad design of implementing tail calls breaking things.

                    The whole idea of "let's change semantics to make it easier" is dumb.

                    If you want guaranteed tail calls, change your code until it works.

            • IshKebab 3 days ago |
              Do any widely used languages guarantee tail call optimization? It's a pretty niche feature.
              • gpm 3 days ago |
                Scala, ocaml, racket, clojure, zig.

                For recursion only kotlin.

                (For most of these only with syntax specifying it)

                • lioeters 2 days ago |
                  How interesting. I'd seen LISP(y) implementations like Scheme guarantee tail-call since recursion is a very common technique in that language family. But I didn't know Zig supported it.

                  https://ziglang.org/documentation/master/#call

                  They have an @call built-in that guarantees: always/never tail, as well as always/never inline. That's neat, I can see how that would be useful in various situations.

                • chuckadams a day ago |
                  JavaScript too, but only implemented in JavaScriptCore, so basically just Safari and Bun.
              • pjmlp 2 days ago |
                Depends on how widely we consider Scheme and Raket adoption in CS curriculum.
            • shiomiru 2 days ago |
              I don't think that's related? The bug alluded to looks something like

                  function rm(node) {
                      for (const child of ls(node))
                          rm(child);
                      unlink(node);
                  }
              
              and no amount of tail call optimization will save you here, because this isn't tail recursion. Of course you could rewrite it using an explicit stack + tail recursion, but then you might as well be using a while loop.
              • tosti a day ago |
                So it's enumerating all the subdirectories first and unlinks the tree afterwards?

                I get that this isn't transactional and inherently prone to race conditions, but if this is indeed the problem, it's rediculous. A single while loop could do the job correctly and use less RAM. It'd probably also be faster. But that wouldn't be a rusty thing to do?

                I look at code from the heirloom project and, despite its warts, I think we've lost something in the past 45 years or so.

                • shiomiru 2 hours ago |
                  > A single while loop could do the job correctly and use less RAM. It'd probably also be faster. But that wouldn't be a rusty thing to do?

                  No, the "single while loop" is just harder to implement than a naive recursion, because recursion is a natural way to implement tree traversal. With a while loop, you need an explicit stack, which is more complex.

                  (A stackless traversal seems unrealistic here, as getting the succeeding node would be too expensive. Not that I've tried...)

                  > I look at code from the heirloom project and, despite its warts, I think we've lost something in the past 45 years or so.

                  I've just tried and heirloom rm segfaults on the same test too. Which is no wonder, seeing how that code also recurses.

                  (It's mentioned somewhere else in the thread, but this is exactly the reason why GNU had to specify "no hard limits" as a policy. Unix used to be full of such bugs.)

          • ploxiln 2 days ago |
            8MB is the default per-thread stack size from glibc, also seems to be the default "ulimit" from pam or the kernel, I'm not sure. So for the main/default thread (or if not using threads) the process can use setrlimit() and for threads it can use pthread_attr_setstacksize() to get bigger stacks if it knows it may need them.

            8MB is pretty huge though; musl libc is famous for defaulting to much smaller per-thread stack size of 128KB (to avoid over-committing lots of memory when there are many threads - the main dev is really principled/opinionated on this topic, but again there are a few ways for applications to explicitly size their stacks as large as they need). Linux kernel threads get a bit less than 16KB!

            • IshKebab 2 days ago |
              8MB is huge compared to the stacks we used to have when address spaces were 32-bit, but it's tiny compared to how much memory we can actually make use of now. The only real argument I can think of for having such a small stack is that large stack usage is often indicative of an infinite recursion bug and it catches them earlier.

              But I don't really buy that for the same reason most programming languages don't limit loops to 8 million iterations (or whatever) by default - it would make catching infinite loop bugs easier!

              I say most, because I know of at least one language that did do that - QuakeC! It made lots of sense in that context though.

        • Ygg2 3 days ago |
          When triaging an issue you have to prioritise. Do you fix a problem that affects 2-3 people or one that may affect thousands?
          • nh2 2 days ago |
            The point is that such bugs shouldn't exist in the first place.

            Using recursion on unbounded inputs on a programming language that doesn't support that (which are most) is an extremely classical mistake that really should be known to all programmers, especially those of low level languages that care about safety.

            Every time you call something recursively you should be thinking "how deep is this?".

            • Ygg2 2 days ago |
              > The point is that such bugs shouldn't exist in the first place.

              That's true of every bug, but you don't have infinite time or manpower, so how do you prioritise?

          • BHSPitMonkey 2 days ago |
            By that logic, why even spend effort migrating from a known-working implementation to one which is known to have outstanding bugs that there isn't enough bandwidth to fix?
            • dboreham 2 days ago |
              Fashion.
            • Ygg2 2 days ago |
              Hard to say, but there are legitimate reasons. One of which being they think Rust is growing while C is a shrinking language. Other could be safety (yes, yes the audit did surface bugs). Or even that having a single lib work seamlessly on Windows/Linux/MacOS/Redux/Web.
        • hulitu 2 days ago |
          Rust ? Because of ... memory safety. /s
      • geokon 2 days ago |
        It's less about the specific issue and more indicative of bad/insufficient test coverage
      • throw0101a 2 days ago |
        > But I don't think it will affect many users, I mean who has a 32000 -evels deep directory on their system?

        When the GNU coreutils version doesn't have this bug and thus affects zero users, why should I bother with the Rust version?

        • liamgm 2 days ago |
          AI agent needs , rust memory safety , wasm , parralel task
      • monegator 2 days ago |
        from a ground-up rewrite, in a memory safe language i expect at the very least

        - A meaningful error

        - not a segfault

    • IshKebab 3 days ago |
      I mean, that should work... but you can see why that would be considered low priority right?
    • lynx97 2 days ago |
      Wow! Memory safety and such... Reminds me when a friend of mine wrote in IRC long time ago: "Hmm, tail just segfaulted." When I asked "Are you on Hurd?" he just replied "Yes."
    • froh 2 days ago |
      to enable GPL free embedded Ubuntu, field tested on all platforms (because it happens to be the default).
    • barbarkaragul 2 days ago |
      Hi, this is not a one bug.when the change app flags not working or not happening. I was measured with bsd and busybox.
    • znpy 2 days ago |
      And that’s why i keep ubuntu far from my computers…
    • monegator 2 days ago |
      but it segfaulted in a memory safe way.
      • m00dy 2 days ago |
        sarcasm detected here :D
        • stevefan1999 a day ago |
          I don't think this is a sarcasm, as a long standing Rust user myself, I don't think the community should preach out by "memory safety" -- rather the structural change in coding mindset and new ideas such as ADT and generic programming, while retaining mostly zero-cost like C++ without the bearing of C++ complexity (that includes a compiler that spits out 300 lines of compiler error just because I missed one <).

          Memory safety is just what Rust inherited from C++ smart pointers with a stronger linear/affine type system twist, especially regarding move semantics, cloning and borrowing rules. What makes it powerful is the various language features it also incorporated from Cilk/C#/OCaml/Haskell.

          Right now Rust and Zig is my two favourite middle ground. It is sad that Zig went completely sod-off-to-LLM mode but the most devastating aspect of Zig is that it is way too Linux focused. A lot of the code in Zig I cannot compile on Windows, plus the major changes to IO interface and the colorless function fiasco is really making me question the stability of Zig.

          This recent event led me to displace Zig and replaced it with Nim, which emits C code instead and having a really powerful algebraic language system, while getting some benefits of Rust such as scoped smart pointer (I think they call it ORC), or using simple mark and sweep arena collector or even full-blown Boehm GC.

          Right now I'm trying to create a distribution of Nim in a single binary (with musl and mingw packed together) and using tcc as the backend, all in a single binary with Rust and an internal project to convert wasm 3.0 and wasi proposal 1 modules into Rust code, which the Nim compiler and TCC are both compiled to WASIp1 first, then term-rewritten/transpiled to Rust (think w2c2 or wasm2c, but targets Rust, I found some nice structuralism of Rust and wasm lately)

    • maxhou 2 days ago |
      I tried switching a buildroot based CI server to the 26.04

      One Makefile statement triggered a bug in rust ln:

        src/%:
            @ln -sfn $(DIR)/foo src
      
      In parallel build, we would get random failure:

        ln: Already exists
      
      Rewrote that Makefile to work-around it, and ended up with the same kind of bugs with parallel $(INSTALL) -D ...

      Tried latest ubuntu 26.10 which supposedly fixes a lot of TOCTOU races in rust coreutils, but no better.

      Gave up and switched back to original coreutils.

    • PunchyHamster 2 days ago |
      It's entirely aisine and makes me avoid Ubuntu every time it is possible. And it is repeated offence, Ubuntu always tried to push the envelope in worst place and way possible
    • Perepiska 2 days ago |
      It can fail blazingly fast!
      • ganelonhb a day ago |
        Am I the only one cynical enough to feel physical pain when I see “blazing fast” in a README? It’s like a dog whistle for “hey everybody, I’m kinda annoying!”
    • nottorp 2 days ago |
      But this is totally not a memory ownership bug! It's some other kind of bug!
    • HackerThemAll 2 days ago |
      While I supported that idea of Rust coreutils, this your experiment showed me how bad it is. My results are totally different, but not what I expected (edited out long strings of "a/a/a" for brevity). I wouldn't call it stable...

        root@71a8c5a6c5e3:/# mkdir -p $(yes a/ | head -n $((32 * 1024)) | tr -d '\n')
        mkdir: File name too long
        root@71a8c5a6c5e3:/# gnumkdir -p $(yes a/ | head -n $((32 * 1024)) | tr -d '\n')
        gnumkdir: cannot create directory 'a/a/a/.../a/a': File name too long
        root@71a8c5a6c5e3:/# gnumkdir -p $(yes a/ | head -n $((3 * 1024)) | tr -d '\n')
        root@71a8c5a6c5e3:/# rm -rf a
        rm: cannot remove 'a/a/a/.../a/a/a': Directory not empty
        root@71a8c5a6c5e3:/# gnurm -rf a
        root@71a8c5a6c5e3:/# rm -rf a
        root@71a8c5a6c5e3:/#
      
      And then they plan to move to a new Rust-based NTP. No comment...
      • kd913 2 days ago |
        I wouldn’t judge the ntpd-rs move from this. Have been running it for 9 months or so with a nts pool in ntp server mode on my pi5. Been rock solid.
    • flossly 2 days ago |
      Ubuntu is free. But Canonical is for profit. In these cases "if you are not paying for the product, you are the product" applies.

      Ubuntu users will test this. Once the problems are ironed out, other distros will follow.

    • tored 2 days ago |
      It is Year of the Linux Desktop, not Year of the Linux Cli.
    • ganelonhb a day ago |
      Their strategy is basically adopt now, hey now we’re forced to fix it! And it’s disgusting. Frankly, I don’t know how any enterprise users on Ubuntu will be able to forgive this. Well, many businesses are on RHEL and not Ubuntu anyways…
  • asrk-qlwu 3 days ago |
    From the company that distributed Amazon spyware (https://www.fsf.org/blogs/rms/ubuntu-spyware-what-to-do) and now turns Debian into Slopian. No thanks.
  • Malakun 3 days ago |
    You can use coreutils-from-gnu instead uutils. However since 26.04 build-essential depends on coreutils-from-uutils, it cannot be upgraded while coreutils-from-gnu is installed.

    https://bugs.launchpad.net/ubuntu/+source/build-essential/+b...

    • collinfunk 3 days ago |
      You can use equivs to create a dummy coreutils-from-uutils package, as mentioned in the responses to that report.

      It is frustrating that Canonical has no interest in fixing it, though. It makes it hard to take their claims seriously that you can still use GNU coreutils if you want.

      • dwattttt 2 days ago |
        You're specifically frustrated about unbounded stack recursion exhausting the stack, triggered by multiple thousands of directories? It doesn't sound like this is about multi-thousand-deep directory structures, it sounds like it's about something else.

        Because even diving into it, I would agree with a prioritisation decision that puts this bug down the bottom of a priority list.

        • LtWorf 2 days ago |
          This isn't the first issue with uutils.

          Canonical is just rushing the switch because they want to get rid of software with GPLv3 license, not because there is any technical merit for doing so.

          • throw0101a 2 days ago |
            If they want the default to be non-GPLv3 Rust-based that's fine, but some of us don't care (and want the same behaviour everywhere, like on RH-based systems we may also have) and they should leave the GNU as an option. Potentially both could be installed at the same time (it's what update-alternatives is for after all).
            • LtWorf 2 days ago |
              That would work, but they also don't want everybody to switch to the better alternative and nullify their effort.
          • dwattttt 2 days ago |
            That's a better thing to discuss, and I'd expect there to be better bugs to talk about to go with it. Stack exhaustion in an unrealistic environment should be fixed, but a "stop everything" bug it ain't.
    • egorfine 3 days ago |
      For now you can list dependent packages manually in apt-get install: https://packages.ubuntu.com/resolute/build-essential

      But it's clear that Ubuntu will remove coreutils, genuine sudo and other tools from the future versions. It's the direction, it's ideological and thus nor merit nor our feedback will change anything here.

  • hk1337 3 days ago |
    Was there something wrong with how they are currently written or do they just want the badge that says they converted to Rust?
    • 01HNNWZ0MV43FF 3 days ago |
      License. GNU is copyleft and the new thing is permissive.

      We might see a fracture open slowly. For me, even AGPL is not enough

      • zahlman 2 days ago |
        Once they have a more permissive license, cui bono?
        • pjmlp 2 days ago |
          Businesses.

          There is a reason all FOSS OS alternatives for embedded systems like Zephyr, NuttX, FreeRTOS, IDF, Arduino,... are not GPL based, while Google has purged Android and ChromeOS from it, with the Linux kernel being the only GPL piece left.

          • 1718627440 2 days ago |
            > Arduino,... are not GPL based

            Arduino is "just" repacked gcc in a nutshell, so it is GPL-based.

            • pjmlp 2 days ago |
              You need more than a compiler, so it is complicated, and not pure GPL,

              https://support.arduino.cc/hc/en-us/articles/4415094490770-L...

              • 1718627440 2 days ago |
                I was only thinking about the software, yes. Also a lot of the "Arduino" libraries are not really owned by Arduino, even if they like to attach themself to it, so while it is true what they write about different licenses of the libraries, this what not what I considered to be part of Arduino itself. I was only thinking of the buildtools they release. While these are board specific, these are often "just" a fork of gcc, board-specific linker/image builders, a flasher and the Arduino-build system. Only the latter is what they actually created (arguable not even that: https://arduinohistory.github.io/).
    • Flimm 2 days ago |
      Neither. They basically see Rust as the future. They want to be able to attract young contributors and to hire young employees who are excited about Rust and who want the safety features. Bear in mind, the average age of the Linux developer is increasing. They also see technical benefits in Rust. And they are increasing test coverage of both the Rust tools and the tools written in C, IIRC.

      My source is this interview with the VP of Engineering at Canonical on this topic: https://corrode.dev/podcast/s05e05-canonical/

      • uecker 2 days ago |
        In reality, I think it much more about taking more control over parts of the ecosystem - the license change is part of it, but also getting rid of the old stubborn communities and maintainers.
      • pjmlp 2 days ago |
        Interestingly enough, young developers have no issues writing C or C++ when it comes to game development, Pebble, Arduino or ESP-32 coding.
        • nottorp 2 days ago |
          Those are more expensive!
          • pjmlp 2 days ago |
            Seriously doubt it, given that there is enough FOSS on those domains as well.
      • collinfunk 2 days ago |
        Canonical hasn't contributed anything to GNU coreutils in the time since the switch was announced, just to be clear.
  • Arcuru 3 days ago |
    Has the code quality in that repo gotten to a good point then? I haven't followed it much, but last I looked[1] (which was a few years ago) almost every tool I looked at in detail had pretty bad performance or correctness issues.

    [1] https://jackson.dev/post/rust-coreutils-dd/

    • egorfine 3 days ago |
      The reason for existence of uutils is ideological, not technical. Thus code quality is of no use for the objective.
      • stouset 3 days ago |
        I’m a huge proponent of Rust and generally lean a lot closer to the RIIR mentality than most, but this effort seems to be such a waste of effort and resources.

        There have been a dozen CVEs reported against all of coreutils in the past twenty years. The most recent audit of uutils-coreutils turned up forty-four CVEs.

        By all appearances they’re replacing battle-tested and fundamental tooling which hasn’t been a problem with extremely amateurish Rust. The threading highlighted in the linked post above seems pretty egregious.

        • egorfine 3 days ago |
          Same here. Love Rust. Hate rust rewrites.
          • noosphr 2 days ago |
            The worst thing about rust are the people using it.
            • LtWorf 2 days ago |
              My impression is that go developers moved to rust.
              • pjmlp 2 days ago |
                I doubt it, as Rust approach to language design is the antithesis of Go's culture.

                I would appreciate Go much more otherwise.

          • pjmlp 2 days ago |
            Can vouch for the sentiment, hence why regardless of the ranting, I am quite supportive of whatever helps to improve C and C++ security story.

            Also for Rust based rewrites, they could start by bootstraping Rust compiler itself, dependent on C++ to start it.

            They don't do it, because even though LLVM and GCC are written in C++, a pure Rust compiler would not scale to the same level of contributions, and existing capabilities.

        • pantalaimon 2 days ago |
          I think this is more about the licence, the Rust rewrite just makes it easier to swallow/gain contributors.
        • torginus 2 days ago |
          Yes, these proclamations of Rust devs that 'the future belongs to us', aren't getting any new fans for the language. Here's my rebuttal:

          YOU have proclaimed the language to be as fast as C while being safe. YOU need to prove it. Think of this as an OPPORTUNITY to PROVE that Rust can walk the walk, and you can make Rust coreutils as fast as the C one. Think hard about how you can model low level Linux constructs safely. Fix your libs. Fix the compiler. This is the yardstick you need to meet. You are making free software, and the thing about it is users are free to choose otherwise. YOU need to prove that Rust is just as fast and lightweight as C, and once you do, we'll be happy to adopt.

          Right now, dear Rust devs, what you are doing is the same as AI companies are doing - you're trying to usurp power based on extremely nebulous conjured threats. Nobody likes being threatened.

      • tcfhgj 3 days ago |
        I bet you don't know the reason for existence
      • timcobb 2 days ago |
        > The reason for existence of uutils is ideological, not technical.

        which ideology? Are people saying that there's an ideology of pushing rust for things without concern for quality? Sincere question, because I'm seeing that on this thread and I wasn't aware that that was a thing beyond the "re-write it in Rust" meme.

        • pessimizer 2 days ago |
          Rewrite it in anything that isn't GPL.
          • timcobb 2 days ago |
            With the motivation of then being able to use it in closed or non-GPL products down the line?
        • jeltz 2 days ago |
          > Are people saying that there's an ideology of pushing rust for things without concern for quality?

          Yes, there is. There are people who genuinely think quality does not matter as log as it is written in Rust as Rust is memory safe.

          • timcobb 2 days ago |
            > There are people who genuinely think quality does not matter as log as it is written in Rust as Rust is memory safe.

            Is this hyperbolic? Such people are in leadership places?

        • steveklabnik 2 days ago |
          The original authors of uutils do not particularly care about licensing, and the Rust ecosystem defaults to MIT/Apache2. So they chose that.

          Many people have decided that this decision supposedly specifically about licensing ideology.

          You can make up your mind about which of the two you believe.

          See also, for Ubuntu's take on this: https://news.ycombinator.com/item?id=49707948

          • collinfunk 2 days ago |
            As I have told the authors privately, I find it quite difficult to take their claim that they "don't care about licensing" seriously. 13/14 of the projects under uutils are relicensing GNU or GPL'd software. The other one, shadow-rs, is totally vibe-coded, and the README mistakenly says the original shadow is GNU software under the GPL, which is neither true. If 14/14 are relicensing, or in that one case, what is thought to be relicensing, the simple explanation is that it is an explicit goal of the project.
        • wannabe44 21 hours ago |
          Beside the license thing mentioned, rust folks are obsessed with an idea of memory safety to an extent of discarding every other value in programming. To the extent of considering other choices "immoral". This manifests in their disproportionate initiatives of rewriting otherwise fine programs. Of course this doesn't include copious amounts of unsafe in popular libraries because can't leave any benchmarks defeated. But somehow Go is sinful because multiword data races are theoretically memory unsafe (a property which has led to zero (0) CVEs). This may also be the result of jealousy that something plebian like Go became more popular than their perfectly designed language.

          Let's not mention other aspects of security, such as the recent supply chain issue, or the old story of the serde maintainer shipping a binary blob just because...

          • steveklabnik 19 hours ago |
            > To the extent of considering other choices "immoral".

            This is literally an /r/pcj meme.

            • wannabe44 6 hours ago |
              What is /r/pcj? In any case, memes start due to real world examples.
    • estebank 3 days ago |
      > last I looked[1] (which was a few years ago)

      You weren't kidding: it was exactly 4 years ago ("September 13, 2022").

    • Freaky 2 days ago |
      Neat. I touched this code about 8 months later to avoid the per-block elapsed() call: https://github.com/uutils/coreutils/commit/cf7b90bbe7cb87099...

      Mirrored the way I implemented status=progress in FreeBSD dd, though there the flag was set by a SIGALRM timer: https://freshbsd.org/freebsd/src/commit/4767c42c1146459eb751...

      It would appear GNU dd 9.9 still does a call for every block. Low-hanging fruit if anyone fancies it:

           dd if=/dev/zero of=/dev/null count=100000000 status=progress
          51200000000 bytes transferred in 18.644004 secs (2746191200 bytes/sec)
      
           target/release/dd if=/dev/zero of=/dev/null count=100000000 status=progress
          51200000000 bytes (51 GB, 48 GiB) copied, 20.8772 s, 2.5 GB/s
      
           gdd if=/dev/zero of=/dev/null count=100000000 status=progress
          51200000000 bytes (51 GB, 48 GiB) copied, 23.6744 s, 2.2 GB/s
  • dsign 2 days ago |
    Hmm, this doesn’t make sense. You simply don’t replace utilities with many decades of maturity and that “just work” with something that is not as mature. It will open all users of the distro to all sorts of subtle and not so subtle bugs. I for one don’t want to find myself staring at a mysterious segfault when I want to build the latest version of nodejs or flash a microcontroller. It’s such a pity; I have used Ubuntu for close to 23 years.
    • someothherguyy 2 days ago |
      then install the other tool. no one is holding a gun to your head. it isn't windows.
      • nairboon 2 days ago |
        Like how one can easily not use snap on Ubuntu? /s
    • overfeed 2 days ago |
      on the other hand, Rust is memory safe!
      • rurban 2 days ago |
        Almost, but not really
  • arjie 2 days ago |
    Everything online reminds of when Ubuntu switched to dash for init scripts or something. Good times.
  • SubiculumCode 2 days ago |
    So what is the way forward for Linux to have sandboxi g as strong as Android? Appimage everything? I know it's possible now hacking together things, but I mean by default and integrated.
    • uecker 2 days ago |
      Maybe we could develop trustworthy free-software applications again, instead of trying to establish a commercial apps ecosystem on top of Linux?
    • bayindirh 2 days ago |
      Amutable. Building an immutable and image based system which even the installer can't modify, a-la macOS.

      One systemd patch at a time.

      • 1718627440 2 days ago |
        This is actually already required to be supported by complying to the FHS.
      • LelouBil a day ago |
        Immutable OSs are great, I'm running a custom image based on Bazzite for a couple of years now.

        But that doesn't solve the user sandboxing problem, flatpaks and xdg portals does.

        Still, a lot of portals are still missing or not fully implemented, but it's getting there !

        • bayindirh a day ago |
          At the end of the day, a sandbox is a slice/cgroup. i.e.: Kernel's ability to create a complete bubble around a process or set of processes.

          My beef is not with immutable OSes or sandboxes or else. They all have use cases and reasons.

          My primary beef is being locked out of my own system without my consent. I want to own my personal (esp. Linux) systems, that's all. I'm also against erosion of Free Software ecosystem for something looking open, yet non-buildable or modifiable by the end user. This is why I don't like permissive licenses and essential software to be licensed-washed from Free to Open.

    • hexfish 2 days ago |
      AppImage is not a sandbox
    • pjmlp 2 days ago |
      Note that the sandbox also relies on the fact that most userspace is managed, the Android team is very clear on what they see as supported use cases for the NDK.
    • LelouBil a day ago |
      Do you mean flatpak ? (Or directly using bubblewrap, the actual sandbox ?).

      Appimages are not sandboxed

  • t0duf0du 2 days ago |
    • werdl 2 days ago |
      I don't understand - I thought sudo-rs was supposed to be a drop-in replacement? If it implements a subset of features how can this be the case?
      • collinfunk 2 days ago |
        I don't think sudo-rs ever advertised itself as a drop in replacement. They seem pretty upfront that it isn't their goal. See this list:

        https://github.com/trifectatechfoundation/sudo-rs#difference...

        • t0duf0du 2 days ago |
          Its not that if they have advertised themselves as a drop-in replacement or not. What made me bummed that cannonical used it as drop-in replacement and it did break some of my installation scripts.
      • swiftcoder 2 days ago |
        the uutils project bills themselves as a drop-in replacement for coreutils. sudo-rs does not bill itself as a drop-in replacement for sudo
    • LelouBil a day ago |
      Is it just me or does anyone else have the impression that the "chlampel" user only posts LLM-generated messages
  • grougnax 2 days ago |
    Can’t wait for the whole Rust rewrite of Linux!
  • erminpour 2 days ago |
    Whether you like Rust or not, it's questionable as to why Canonical would push this so much and do it in such a cavalier way.

    Will this really make coreutils more secure? I doubt it, if anything there will be a river of new bugs.

    So, again, why are they pushing Rust so much? Having Microsoft make Rust a 'Tier-1' language also doesn't bode well.

    • pjmlp 2 days ago |
      Canonical has been pushing its own agenda for ages, how many examples do you need?

      Microsoft making Rust tier 1 is great, it means probably one day we get a VS proper support instead of VSCode only.

      If you head off to Microsoft official blogs, you will find out that Microsoft already has tier 1 support for Java (ironically), Python and Go, besides the usual .NET languages and C++.

      • torginus 2 days ago |
        Why does 'Ubuntu defaultism' still exist in the Linux world? Them replacing packages with shitty unworkable broken snap substitutes that can break the system when updating, and have a habit of reinstalling themselves...
        • pjmlp a day ago |
          Because of The Year of Linux Desktop and being the favoured distro among OEMs for their hardware.
        • tmtvl a day ago |
          They were for a long time the only big distro which made it easy to install non-free drivers.
    • pantalaimon 2 days ago |
      It removes a GPLv3 dependency that might stop some companies from adopting Ubuntu Core.
      • headsman771 2 days ago |
        Even more reason not to use it. Its clear that user freedom is under greater threat than it ever has been.
    • senfiaj 2 days ago |
      >> Will this really make coreutils more secure?

      In the long run yes. Sure, many logic bugs happen in Rust programs as well, but memory safety bugs are another level of hell. At least many classes of exploits will mostly be impossible. Also, Rust program failures tend to be more predictable. For example, in C/C++, if you do out of bound writes in an array or writes in a freed memory block, the behavior is undefined. The program might crash, the memory might be silently corrupted, or nothing might happen at all. In a normal (non unsafe) Rust code these kinds of issues are either prevented by static checks or become explicit runtime panics.

      While the migration could be done more gradually, 26.10 is not an LTS release and is not considered stabe enough. The next LTS is 28.04, so I hope there is 1.5+ years for things to stabilize.

      • aliceFish 2 days ago |
        new C++ STL standard makes it no more undefined.
        • senfiaj 2 days ago |
          In theory yes, but it requires enough discipline and knowledge. A language that makes it harder to write bad code still has an advantage over a language that doesn't care about bad code.
      • rshackleford1 2 days ago |
        Can you point to any outstanding, unfixable, memory safety bugs in the coreutils that justify such a rewrite? This is a cynical license issue, not a safety issue. I think there are much more severe security risks which come from behavior divergence of replacement tooling than memory safety bugs from 40 year old widely used/tested software.
        • erminpour 2 days ago |
          Rusty Shackelford :D
        • DeathMetal3000 20 minutes ago |
          The software world is littered with memory vulnerabilities and you’re here still asking for proof? You may not like Rust and that’s fine. But don’t continue propagating the attitude that got us here in the first place.
    • monegator 2 days ago |
      MIT License
  • Surac 2 days ago |
    Other distros are based of ununtu. Will the all ship with crippled coreutils from now on?
    • suby 2 days ago |
      Linux Mint mentioned on their blog that they would be using the Rust versions.
  • sehw 2 days ago |
    People still use ubuntu when Debian and Mint exist?
    • LtWorf 2 days ago |
      The power of marketing…

      Ubuntu does offer some certifications but only for paying customers, so everyone else should really steer clear.

    • pjmlp 2 days ago |
      Yes, proprietary hardware support out of the box, and pre-installed option by the few OEMs that sell GNU/Linux computers.
      • PunchyHamster 2 days ago |
        My nvidia GPU worked just fine. Debian has non-free repo you know...
        • pjmlp 2 days ago |
          I know how well it has worked in practice since the Walnut Creek CDROMs were a thing.
        • LtWorf 2 days ago |
          Nowadays the non-free-firmware repo is active by default, so the normal official debian image actually works.

          It used to be the case that the normal download from the homepage was often useless because it didn't support most networking hardware, but this is no longer the case now.

          • spider-mario 2 days ago |
            How long ago was that? I tried Debian about 15-20 years ago and I don’t recall encountering that issue.

            (The issue I do remember encountering was random kernel panics that I didn’t have with Ubuntu on the same machine.)

            • monegator 2 days ago |
              as soon as wifi became a widespread thing, you had to add the required package to the installer. It stopped being an issue with bookworm
          • LtWorf 2 days ago |
            Got to love this website :D Downvoted for completely true information with no ideological spin :D :D :D
    • Brendinooo 2 days ago |
      Why would I switch off of Ubuntu? It's what came with my system.
    • jcarrano 2 days ago |
      Debian packages are ancient, unless you use "testing", which will be broken. That being said, Ubuntu is horrible too. The problem comes when you have to use proprietary software made by incompetent vendors, and that only works in Ubuntu.
      • jillesvangurp 2 days ago |
        Ubuntu is basically a packages imported/synced from debian (I think they mostly cherry pick unstable) + ubuntu specific stuff.

        Debian Testing is pretty much what many Debian users use on a daily basis. They pretty much invented the notion of rolling releases. Debian stable is of course not cut that often. Ubuntu has a higher frequency of updates. But still, their LTS releases are spaced two years apart. 26.10 follows the recent LTS 26.04 release, so that gives them a good 1.5 years to work on stabilizing this. I've been using Ubuntu server LTS releases for the last ten years or so with generally no major issues. There are always some minor headaches between updates but generally nothing that worries me.

        The main criticism here seems to be that these packages need a bit more work or are still lacking certain important features. Getting them out in a non LTS release like this is how they get packages to be ready for LTS releases. If you need LTS now, 26.04 is what you should be using. By 28.04, this should be rock solid.

        For me what's risky here is deviating from what other distros are doing. Including Debian. Ubuntu has a history of being opinionated not everything they push through being adopted with great enthusiasm (e.g. Snap). You could make the point here that waiting for Debian to pick this up would be nicer. But you could also make the point that waiting for that is a very slow process.

      • monegator 2 days ago |
        > Debian packages are ancient

        ever used backports? no need to go to sid. Flatpack/Appimage/Compile from source for the rest (on my debian machine it's just kicad that is not installed from APT, well and the couple of softwares that don't do deb)

        Firmwares, that's another story, i have fedora on the laptop for that.

        > The problem comes when you have to use proprietary software made by incompetent vendors, and that only works in Ubuntu If i want to do FPGA development, either ubuntu or a distro old enough to package JDK 11 (sigh) and X. not XWayland. Debian 11 was the last one to have JDK 11 i think (talk about ancient..)

        Needless to say FPGA is done on the windows machine these days.

    • pessimizer 2 days ago |
      Mint is downstream from Ubuntu still afaik. They had/have LMDE as an escape hatch, maybe they should pull the ripcord (to mix metaphors.)

      Need a wider variety of people protecting Debian anyway, governance there is getting weird.

  • nalekberov 2 days ago |
    If you ask their motivation? "We want to make them safer"

    They worked pretty fine for decades, now, who needs these rewrites? Not saying it's useless, but in practice, what benefits did this bring?

    • froh 2 days ago |
      it's GPL free. which is good for embedded, the business side of it. like cars.
      • justincormack 2 days ago |
        The kernel is still GPL
        • rcxdude 2 days ago |
          but GPLv2
          • froh 2 days ago |
            and deliberately so, as it would be infinitely hard to upgrade the kernel license.

            alas, only GPL-3 gives the right to repair and modify the TV or car or refrigerator you own...

      • rwmj 2 days ago |
        Good for car manufacturers, not necessarily for cars or their owners. As a car owner I quite like manufacturers to be forced to produce source code.
        • LtWorf 2 days ago |
          Car manufacturers really really hate GPLv3 and the requirement that users need to be able to change the code.

          They claim it is for compliance but it's well known that user modifications to cars are no longer the responsibility of the car company. I think it's more on principle than any real legal concern.

        • froh 2 days ago |
          yes, exactly, that's the fliplside of it. the business loves GPL free embedded, gpl-3 was created to protect our freedom, the right to repair and modify, as far as GPL components are concerned. it was created as response to Tivo, who locked in their embedded system (a TV iirc).

          the trend to give software mit or bsd licenses instead ead of GPL is concerning.

        • wannabe44 21 hours ago |
          I wouldn't have any confidence on a car which invokes coreutils in any manner. Too much surface area for embedded systems.
  • WatchDog 2 days ago |
    Fil-C[0] can compile GNU coreutils, it has stronger* memory safety guarantees than rust, none of the compatibility issues that a wholesale rewrite has, and performance that seems to be within about a factor of two[1] compared to the normally compiled code..

    [0]: https://fil-c.org/.

    [1]: https://bannalia.blogspot.com/2025/11/comparing-run-time-per...

    * Guaranteed to crash rather than potentially grant arbitrary code execution.

    • quotemstr 2 days ago |
      "Stronger" is absolute bullshit. No data race prevention. No intra-object protection. Mandatory GC, and 5x the compute cost. Nothing like a statically safe language.
      • logicchains 2 days ago |
        It's coreutils, there shouldn't be any threads to be data racing.
        • tcfhgj 2 days ago |
          Haven't threads been one of the reason some core util got faster?
          • collinfunk 2 days ago |
            Only GNU sort uses threads. There is still some room for improvement there, if anyone wants to take a shot at it. :)
            • zamadatix 2 days ago |
              I think I saw the Rust based implementations sometimes used a separate thread for background tasks like statistics reporting. Not much additional in the way of "directly" using threads, but I wonder how many could actually be any faster with direct threading.
  • Alien1Being 2 days ago |
    Ubuntu continues on it's quixotic mission to kill Linux...
  • atoav 2 days ago |
    I would be very curious about a bit more concrete and substential criticism what is bad (or good) about how the both versions, that goes beyond general arguments like:

      Just because it is Rust, it is not safe!  
      
      It worked before, don't replace it!  
      
      etc.  
      
    Not that these are not valid points of criticism, but in my opinion if we have two core utils we can (and should) pick the better one after careful continous evaluation. And if the old one is the better one on the day of the release, so be it. Having two competing solutions can have benefits for everybody looking for the best core utils they can get in the long run.

    I had to reimplement and reverse engineer old tech myself as part of my dayjob and had those engineers seen my results it probably would have improved their work as well, since I usually found oddities that they probably did not intend to be that way. This means my work on their work could be seen as another pair of eyeballs, bullet-proofing their original work, instead of seeing me as a threat. That additional pair of eyeballs is crucial to open source software.

    This is why it is sad that too much about this whole discussion feels like yet another culture war, heated on the stove of social media figures looking to convert heat into ad revenue.

    Which is why I would love to have more concrete points of technical criticism of specific bits maybe even to specific lines in the code or specific reproducable behavior.

    If we go the culture-war route nobody wins, if we discuss both solutions on their merits, we all can win.

    • mrheosuper 2 days ago |
      > since I usually found oddities that they probably did not intend to be that way.

      Or it could be you don't have the context like they did. Maybe some hardware bug/quirk that happens on some exotic machine that you don't have.

    • rcxdude 2 days ago |
      I think a lot of the actual issues they're encountering are that the underlying POSIX APIs have a lot of sharp edges which the older versions of the tools have had enough time to work around, while the newer ones are generally running into the same rakes that have been there for decades. It takes a fair amount of time for those to be found and dealt with (though it also takes use, so it's a bit chicken-and-egg).
    • 1718627440 2 days ago |
      > we can (and should) pick the better one after careful continous evaluation

      The current complaint is that they pick the worse one after at the current evaluation.

  • 18Deepnar 2 days ago |
    how helpful is it for it to be transitioned to rust, how does it help?
  • ramon156 2 days ago |
    if the argument is "but bugs!" then that's a nothing burger. Your old code is more battle-tested, but that doesn't inherently make it better. I wish more companies thought like this.
    • 6031769 2 days ago |
      It may not inherently make it better (for some meanings of "better") but it certainly makes it more secure and more stable. Those are attributes which I would value very highly in coreutils.
  • gramakri2 2 days ago |
    We already had a problem with sudo-rs not handling all the options that previous sudo did. I am quite surprised sudo-rs is now the default even.
  • whatsakandr 2 days ago |
    They could just compile the core utils with fil C and call it a day.
  • INTPenis 2 days ago |
    They should do like Solaris did and offer multiple different core tools in different paths, until they're up to par at least. It's not that complex of a workaround.

    I don't use Ubuntu but this is huge, it's just as big as when FreeBSD switched to all BSD licensed user tools, I remember having to learn how tar worked again.

  • hermitShell 2 days ago |
    Manny comments I agree with - it's a mistake, it's a reason to leave the distro...

    I'd like to point out that Ubuntu/Canonical is now seemingly philosophically separate from the origins of GNU and Linux. If you're curious, read "Hackers" by Stephen Levy. They've lost the plot, so to speak, about the core spirit of open software and hardware, which is what gave the projects life in the first place. A philosophical understanding and unity between many, many top notch independent developers.

    Another note is how AI contributions to such libraries and programs is going to have an unknown effect on quality. It's almost like there's a business case to rip all the good FOSS written by humans out of the hands of github and apt, and curate all the best source code to ensure it remains in circulation, and extant copies are available that are not washed out by loose standards WRT AI contribs. Or if not a business case, perhaps a reasonable reaction and a good personal vendetta.

  • pessimizer 2 days ago |
    Next step, make them subtly incompatible with gnutils. Then make them a Ubuntu dependency, then a systemd/Gnome dependency. Then take Ubuntu closed source. Success, suckers!
  • linsomniac 2 days ago |
    ProTip: You can switch back to Gnu coreutils on 26.04 with:

    apt install coreutils-from-gnu coreutils-from-uutils- --allow-remove-essential

    And pin it so an upgrade doesn't flip it back with:

    printf 'Package: coreutils-from-uutils\nPin: release a=*\nPin-Priority: -10\n' \ | sudo tee /etc/apt/preferences.d/uutils > /dev/null

    • chris_st 2 days ago |
      Just curious, why the 'sudo tee {file} > /dev/null'?
      • c0balt 2 days ago |
        it writes to the file with elevated priviledges and doesn't write it back to the terminal, effectively a 'sudo sh -c '{cmd} > {file}''.

        sudo tee is a common way to work around priviledge restrictions in shell pipes (you can't easily 'sudo' a pipe), if /secure was 0600 and owned by root:

        "sudo echo "test" > /secure" or "sudo printf '' > /secure", would not work because your user's shell process can't write to /secure. However, "echo 'test' | sudo tee /secure" works because the elevated 'sudo tee' can write to the file.

        • chris_st a day ago |
          Cool, thanks!
  • linsomniac 2 days ago |
    Beware that rust coreutils on 26.04 currently has really bad performance with larger block sizes. Ganeti uses "dd bs=1M" as part of a disc image transfer pipeline, and with 26.04 performance dropped from ~350MB/sec to 30MB/sec, with the dd command CPU-bounded.

    The issue seems to be that it is operating on partial buffers and then having to copy remainder of that 1M buffer around as part is consumed. Coreutils 0.11 solves that but 26.04 is at v0.8.

    I've always used "bs=32k" because decades ago I did some testing and found that seemed to be large enough that it reduced the overhead while not being so large that it caused other problems, one of the most noticeable being scheduler issues where performance went into the toilet, especially on SD or USB thumb drives. Using this also seems to work better with rust coreutils dd.

    • dale_glass 2 days ago |
      Why are we still using dd?

      Seriously, it's a weird obtuse command. Weird syntax that doesn't match anything else, and the block size shouldn't be needed 99% of the time. A modern tool should figure out a good value on its own, either by interrogating the devices at both ends, or by benchmarking, or both.

      • dijit 2 days ago |
        I don’t know of a better tool that operates on raw blocks, maybe there is one.

        `dd` is a real power user command, I’d prefer that it isn’t doing “intelligent” things, especially not by default.

        • akdev1l 2 days ago |

              cp file.iso /dev/sda
          • ewy1 2 days ago |
            this works great but in my experience sometimes you should add

              && sync
            
            not sure why it's necessary only sometimes!
            • rascul 2 days ago |
              The kernel has a cache used for block devices.

              If you want to be more targeted:

                  blockdev --flushbufs /dev/sda
          • WhyNotHugo 2 days ago |
            This isn't portable though, it's a GNU-specific "smart" things. Elsewhere, this overwrites the target device file.
            • jasomill 2 days ago |
              Redirection doesn't overwrite device files, so

                cat foo.img > /dev/sda
              
              works and should be portable. No control over the buffer size, though.
              • LtWorf a day ago |
                And no printing of progress either.
            • akdev1l 2 days ago |
              How exactly is cp not portable?

              Whatever behaviour you’re describing is not how POSIX mandates cp to work. In fact you can do this with busybox too.

              cp will open("/dev/sda", O_WRONLY | O_TRUNC) and simply start writing to that file descriptor.

        • dale_glass 2 days ago |
          How about bmaptool? It can work on sparse images.

          In general, I don't see the point in manually specifying block sizes most of the time. What I want nearly always the maximum performance, and that should be possible to derive from the hardware, and/or benchmarking.

          What about uses like say, skipping data? seek= and skip= are in block sizes, that may not be ideal for performance.

          A smart tool should be able to write in 1 MB blocks and yet still skip 512 bytes.

      • JdeBP a day ago |
        The 'wierd syntax' has finally been getopt-ified. On the C GNU coreutils 'dd', and in a couple of the BSDs 'dd's.

        * https://jdebp.uk/Softwares/dd-with-getopt.html

        It only took 52 years. My prediction stands, by the way. (-:

    • torginus 2 days ago |
      How can a command which was explicitly designed to do nothing but read and write disk become CPU bound?
      • JdeBP a day ago |
        That's is famously not what 'dd' was designed to do. Its description in the original Unix 6th Edition manual was 'convert and copy a file'. It's infamous for people mis-remembering it as a disc copier when it was actually a file transcoding utility that understood EBCDIC and could re-block things.
        • torginus a day ago |
          I think we are saying the same thing. By disk, i meant disk I/O which is the main practical purpose of the tool. Of course, Linux being Unix, a raw disk is a file, so is /dev/null.

          Of course a file can be everything, which is a kind of the point of Linux. But that doesn't change the fact that 'dd' is for disk (or file) I/O. Also please don't argue semantics, it leads nowhere.

          But that's not the main point. The main point is the Rust coreutils version of dd is slow. I highly doubt it's impossible to write an implementation in Rust that's as fast as the C one. But the Rust community needs to invest time and energy into finding why that's the case and fixing it. Until that happens the broader Linux community is right to push back on adopting it.

          • linsomniac a day ago |
            >But the Rust community needs to invest time and energy into finding why that's the case and fixing it.

            As I said in my post, the rust coreutils team HAS fixed this in 0.11. It's just that Ubuntu 26.04 is stuck on the older one.

            Shipping a coreutils that is version 0.8 in an LTS release seems like an interesting choice.

            • torginus a day ago |
              Sorry I didn't see your post.

              But I guess that shows another weakness of Ubuntu's model of versioning. You can't fix a bug if they don't merge. They have their own bugtracker (and so does every distro?) so you, Mr Dev have to deal with angry users not only on your Github Issues page, but on every distro's own bugtracker as well, and will have to perpetually support whatever old version they decided to shit (times X distro).

              Does that mean BTW that they'll keep shipping the same broken dd for the next 2(4) years?

  • lrvick 2 days ago |
    Meanwhile I just booted stagex on AWS without any C code at all other than the kernel and libc.

    In a dev branch we now have rust ssh, dhcp, init, job management, etc. Rust all the things. Very soon will be able to swap the kernel for Asterinas and drop the last couple libc dependencies to have a complete rust OS that is Linux binary compatible.

    I wonder how many other distros will rustmax.

  • synergy20 2 days ago |
    one more reason back to Debian
  • hwc 2 days ago |
    I had no idea they were doing this; good for them!

    1. What fraction of the core OS can be switched over? Can they oxidize systemd?

    2. Are other distros going to switch over (e.g. Debian, which I think of as the ur-distro)?

  • t43562 2 days ago |
    I had a go at making an Ubuntu package recently - and to setup a PPA for it. That was a nightmare from hell that I gave up on (from ambiguous documentation, to 100s of how-tos that don't quite work for my case to making a package build in their system). To me it seems odd that coreutils is worth footling with when other problems seem to stand out to me.
  • 1saadcodes 2 days ago |
    I'm struggling to see the upside of replacing working coreutils when the replacement still has bugs that the old implementation doesn't. Rust being safer is nice, but that doesn't help much if the new rm segfaults
  • rurban 2 days ago |
    How can you undo that. Is `sudo apt install coreutils` enough?
  • xemdetia 2 days ago |
    One thing that was sneaky was that how the rust coreutils are laid out invalidated a bunch of AppArmor.
  • foresto 2 days ago |
    I wonder about the dependency graphs of all these replacement utilities.

    The vast majority of Rust projects I've seen pull in hundreds, sometimes even thousands, of external projects. If Ubuntu's rusty tools do the same, any memory safety gained would come with a greatly increased supply chain risk.

    Doesn't attack surface matter?

  • puskavi a day ago |
    i love uncircular wheels my new car came with