this post was submitted on 15 Sep 2025
83 points (97.7% liked)

Linux

9868 readers
389 users here now

A community for everything relating to the GNU/Linux operating system (except the memes!)

Also, check out:

Original icon base courtesy of lewing@isc.tamu.edu and The GIMP

founded 2 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
[–] trevor@lemmy.blahaj.zone 11 points 1 month ago (21 children)

I have no idea how. I write better Rust than I do C πŸ€·β€β™‚οΈ

Rust and C are basically identical in terms of performance (more or less). Idk where the myth that Rust is somehow less performant than C came from.

[–] possiblylinux127@lemmy.zip -1 points 1 month ago (20 children)

It depends on what you are counting as "performance"

Good C code is way better than mediocre Rust code. C also has much smaller binaries.

[–] BatmanAoD@programming.dev 6 points 1 month ago* (last edited 1 month ago) (15 children)

If your goal is small binaries, it's possible to get them with Rust, too: https://github.com/johnthagen/min-sized-rust

There are a variety of reasons why Rust binaries tend to be bigger unless you follow some of those guidelines, but the biggest one (and actually not something those guidelines recommend changing!) is that C is generally dynamically linked against a system version of the C standard library, whereas Rust binaries are statically linked by default, meaning that the binary is actually self-contained.

[–] Samueru_sama@programming.dev 0 points 1 month ago (1 children)

whereas Rust binaries are statically linked by default, meaning that the binary is actually self-contained.

rust still produces larger binaries even if you compare it to static C binaries.

Take for example busybox, you can compile all of it as a single 1.2 MiB static binary that provides 395 utilities including wget.

Meanwhile the uutils static musl binary is 12 MiB and only provides 115 utilities.

[–] BatmanAoD@programming.dev 3 points 1 month ago (1 children)

That's not a fair comparison at all. Busybox is specifically optimized for size, and to accomplish that, leaves out a large number of GNU compatibility features; uutils is designed to mimic GNU as closely as possible, and I'm assuming that the binary you're looking at is not the "small-release" build. Just to see what that looks like, I've built it that way now and that puts it under 7 MiB; still much larger than busybox, but it shows how much the optimization choices matter.

[–] Samueru_sama@programming.dev -2 points 1 month ago* (last edited 1 month ago) (1 children)

That’s not a fair comparison at all. Busybox is specifically optimized for size, and to accomplish that, leaves out a large number of GNU compatibility features

Such as? busybox provides a nice interactive shell, awk, bc, wget and much more. I know GNU awk has a lot more features than posix awk but awk is not part of the uutils anyways.

busybox also implements [[ from bash, none of this is provided by uutils or coreutils.

EDIT: busybox also provides grep while the uutils/coreutils don't.

I’ve built it that way now and that puts it under 7 MiB; still much larger than busybox, but it shows how much the optimization choices matter.

I'm assuming this uses -Os which means performance hit, (iirc busybox also uses -Os so it is fair comparison), still we are looking at 7x larger binary.

[–] BatmanAoD@programming.dev 3 points 1 month ago (1 children)

From the busybox "about" page:

The utilities in BusyBox generally have fewer options than their full-featured GNU cousins; however, the options that are included provide the expected functionality and behave very much like their GNU counterparts.... BusyBox has been written with size-optimization and limited resources in mind.

Neither of these is true for uutils, which is specifically targeting perfect GNU compatibility. I don't think there is a comparable Rust project for minimized utilities.

[–] Samueru_sama@programming.dev 0 points 1 month ago (1 children)

The utilities in BusyBox generally have fewer options than their full-featured GNU cousins

Note: GNU cousins, not GNU coreutils.

GNU awk, GNU grep, bash, wget, etc will give you a lot more features than the busybox equivalents. However the uutils nor coreutils implement those features at all.

If anything the comparison is not being fair to busybox because busybox implements a lot more utilities.

[–] BatmanAoD@programming.dev 3 points 1 month ago (1 children)

Busybox ls has 26 flags. GNU ls has 60.

[–] Samueru_sama@programming.dev 0 points 1 month ago (1 children)

fair, in that case the comparison is even since busybox provides a shell, awk, grep, wget among other 395 utils, uutils it is 115.

[–] BatmanAoD@programming.dev 3 points 1 month ago (1 children)

I really don't think these are clearly comparable. I would rather see two more similar projects with comparable functionality that are both attempting to optimize for program binary size.

[–] Samueru_sama@programming.dev 2 points 1 month ago

Well if you still insist. Just went to check how big is the GNU coreutils as a single static binary, it is 2.3 MiB in size

check it out: https://pkgs.pkgforge.dev/repo/bincache/x86_64-linux/coreutils/nixpkgs/coreutils/

load more comments (13 replies)
load more comments (17 replies)
load more comments (17 replies)