|
|
Subscribe / Log in / New account

Defining the Rust 2024 edition

Defining the Rust 2024 edition

Posted Jan 30, 2024 13:07 UTC (Tue) by LtWorf (subscriber, #124958)
In reply to: Defining the Rust 2024 edition by khim
Parent article: Defining the Rust 2024 edition

Do you not use a distribution?

Do you think there are many gnu/linux users who do not use distributions?

Isn't a distribution a common enough use-case that we should keep it into account? Since it accounts for roughly 100% of the users.


to post comments

Defining the Rust 2024 edition

Posted Jan 30, 2024 13:35 UTC (Tue) by khim (subscriber, #9252) [Link] (29 responses)

> Do you not use a distribution?

Sure. It's not as if I have a choice: C/C++ world have never managed to create useful enough packaging tool (there are Vcpkg and Conan but there are just way too many packages that are not available in either of them and, worse, many C/C++ libraries developers don't like when you use these).

But these days I tend to just import the majority of libraries via git submodule approach.

> Isn't a distribution a common enough use-case that we should keep it into account?

Why should we? C and C++ are weird exception, most other, more-or-less modern languages have much better alternatives. At least they don't force you to learn different commands for the exact same thing if you develop for different platforms.

> Since it accounts for roughly 100% of the users.

What kind of joke is that? The majority of development happens on Windows and any solution that doesn't adequately work on Windows is just simply non-starter. And MacOS support is nice to have, too.

That's why even C/C++ world dropped autotools and switched to CMake. Which is also awful (in some sense even more awful, that autotools), but at least it's cross-platform.

Cargo is also cross-platform and I don't see how people would go from there to distros (except when forced by some rules in government contract or something like that).

Tomorrow… tomorrow situation maybe different. Who knows, maybe supernova explosion would make half the Earth sterile and thus would halt Windows development. Then distributions may become more impoertant and would even gain 100% of users.

But today… today it's Windows, MacOS, Linux. In that order. And Linux, for the majority, is WSL.

Defining the Rust 2024 edition

Posted Jan 30, 2024 16:08 UTC (Tue) by bluca (subscriber, #118303) [Link] (6 responses)

"Don't use Rust on Linux, it's a Windows/Mac only ecosystem" would also be a fine statement to make. But AFAIK not only it's not made, but it's touted as a first-class citizen in terms of support.

Defining the Rust 2024 edition

Posted Jan 30, 2024 17:07 UTC (Tue) by khim (subscriber, #9252) [Link] (5 responses)

> But AFAIK not only it's not made, but it's touted as a first-class citizen in terms of support.

Sure. Linux (x86-64 and arm) is Tier1 target. But so are Windows 7+ and MacOS 10.12+.

> "Don't use Rust on Linux, it's a Windows/Mac only ecosystem" would also be a fine statement to make.

Why would they they do that? You only would need to do that if Linux would be demoted to Tier2 (or Tier3).

But to make that ploy with distributions work you have to remove Tier1 status from Windows/MacOS and that would be bad idea.

Autotools tried that and are now considered “legacy” by most C/C++ developers.

Defining the Rust 2024 edition

Posted Jan 30, 2024 20:12 UTC (Tue) by bluca (subscriber, #118303) [Link] (4 responses)

Would would first-class support need to be removed from other platforms?

Defining the Rust 2024 edition

Posted Jan 30, 2024 20:47 UTC (Tue) by khim (subscriber, #9252) [Link] (3 responses)

You either support all Tier1 platforms identically (which, actually, makes them Tier1 platforms) or you embrace the differences and then one of them becomes Tier1 and all others become Tier1.1 or Tier1.5.

And, well… Linux distros…

All other popular platforms offer an SDK and the ability to install binary, compiled with the use of said SDK, but in case of Linux “wget | bash” is the closest thing to that (note that there are not sudo, BTW).

And, well… if there are no better options then this one would be chosen. It's as simple as that.

Defining the Rust 2024 edition

Posted Jan 31, 2024 11:35 UTC (Wed) by bluca (subscriber, #118303) [Link] (2 responses)

That's a non-sequitur. There's actual no reason why first-class support requires the exact same identical thing to be done everywhere.

Defining the Rust 2024 edition

Posted Jan 31, 2024 12:04 UTC (Wed) by khim (subscriber, #9252) [Link] (1 responses)

> There's actual no reason why first-class support requires the exact same identical thing to be done everywhere.

How may it work, otherwise? Support tier is quite literally defined by the set of things guaranteed to work on a given platform. Here are the rules.

If different platforms are treated differently then how may you even claim they all are “first class”? What does “first class support” even mean if you provide different guarantees for different “first class” targets? How can you justify calling that “first class support” if things are not treated the same?

Defining the Rust 2024 edition

Posted Jan 31, 2024 16:43 UTC (Wed) by Wol (subscriber, #4433) [Link]

> How can you justify calling that “first class support” if things are not treated the same?

Because all platforms are not the same?

Women and men do not like being treated "the same" - treat a woman like a man and you'll get the cold shoulder or a slap round the face!

First class support means they are treated FAIRLY. If two platforms provide different support TO YOU, you cannot treat them THE SAME back. It's just not possible. But you can still treat them fairly.

We know what you're trying to say. But arguing "ad extremis" just hurts your own cause!

Cheers,
Wol

Defining the Rust 2024 edition

Posted Jan 30, 2024 22:40 UTC (Tue) by LtWorf (subscriber, #124958) [Link] (21 responses)

git submodule???

You want to make me believe that 99% of the software present on your computer doesn't come from distribution packages?

For people who aren't yourself, your software isn't any more important than all the other software they use. Possibly it is even less important. They don't want to manually update your software specifically. They want autoupdates, default configurations, and so on.

You are quite uninformed about autotools. The whole point of it is to have portability. cmake covers a lot of common cases, but you might be in a situation where cmake lacks some features that autotools have. I've never encountered a feature that cmake has and autotool doesn't have.

People like repositories… what they don't like is to treat every single program as a special butterfly. In that case they will just not use it, unless it's needed for work, in which case they will put up with the pain.

Defining the Rust 2024 edition

Posted Jan 30, 2024 23:17 UTC (Tue) by Cyberax (✭ supporter ✭, #52523) [Link] (13 responses)

> You are quite uninformed about autotools. The whole point of it is to have portability

Autotools don't work on native Windows and barely work on macOS. But yeah, they would allow you to run your application on HP-UX from 1995!

Defining the Rust 2024 edition

Posted Jan 31, 2024 10:16 UTC (Wed) by LtWorf (subscriber, #124958) [Link] (12 responses)

atutools work on 2024 osx, 2024 bsd…

Defining the Rust 2024 edition

Posted Jan 31, 2024 15:41 UTC (Wed) by Cyberax (✭ supporter ✭, #52523) [Link] (11 responses)

Autotools don't work with Swift, which you need for any GUI application. Even coercing autotools to simply compile a library properly for iOS is not trivial, requiring multiple obscure command line options.

Defining the Rust 2024 edition

Posted Jan 31, 2024 17:48 UTC (Wed) by LtWorf (subscriber, #124958) [Link] (10 responses)

I mentioned osx, not ios.

If you develop for ios using native stuff, you are not doing anything that will ever be portable, so why would you use autotools, a tool aimed at portability?

Defining the Rust 2024 edition

Posted Jan 31, 2024 17:51 UTC (Wed) by Cyberax (✭ supporter ✭, #52523) [Link] (9 responses)

> I mentioned osx, not ios.

Both have similar issues, especially when you want fat binaries to natively support x86_64 and arm64.

> so why would you use autotools, a tool aimed at portability?

I'm sorry, but do you understand the word "portable"? Autotools is supposed to make projects portable, so they can be used in all kinds of environments.

Yet they fail miserably for the most commonly used operating systems.

Defining the Rust 2024 edition

Posted Jan 31, 2024 18:56 UTC (Wed) by LtWorf (subscriber, #124958) [Link] (5 responses)

> I'm sorry, but do you understand the word "portable"?

I understand perfectly, but I'm sure you know very well that autotools isn't magic and if you link 25 libraries that are unique to ios, your application isn't going anywhere else anyway. So why would you want to use a tool for portability while writing an intrinsically non-portable application?

Ah yes, to make "gotcha, i'm so clever" comments.

Defining the Rust 2024 edition

Posted Jan 31, 2024 19:27 UTC (Wed) by Cyberax (✭ supporter ✭, #52523) [Link] (4 responses)

> So why would you want to use a tool for portability while writing an intrinsically non-portable application?

No. I'm not talking about making an iOS app portable. I'm talking about simply _consuming_ third-party libraries that use autotools in an iOS application. You know, the whole reason for the existence of autotools.

Yet they fail even with this very basic functionality.

Meanwhile, using Rust with Cargo is seamless, even for more complicated scenarios.

Defining the Rust 2024 edition

Posted Jan 31, 2024 19:44 UTC (Wed) by pizza (subscriber, #46) [Link] (3 responses)

> No. I'm not talking about making an iOS app portable. I'm talking about simply _consuming_ third-party libraries that use autotools in an iOS application. You know, the whole reason for the existence of autotools.

Please enlighten us how one can build an iOS application or library using anything other than XCode.

Defining the Rust 2024 edition

Posted Jan 31, 2024 19:49 UTC (Wed) by Cyberax (✭ supporter ✭, #52523) [Link] (2 responses)

Have you used CMake?

You write CMakeFiles to describe your library and deps, and then generate an XCode project from it. On Windows, you can generate an MSVS project.

Defining the Rust 2024 edition

Posted Feb 4, 2024 14:01 UTC (Sun) by pizza (subscriber, #46) [Link] (1 responses)

> You write CMakeFiles to describe your library and deps, and then generate an XCode project from it. On Windows, you can generate an MSVS project.

But.. that's still using XCode/MSVS?

If the complaint is that the full autotools suite doesn't generate anything other than pure makefiles, that's a technical problem that can be rectified by someone willing to put the work into said feature. [1]

FWIW, a quick bit of googling shows several folks successfully generating iOS libraries for autotools-based projects -- It's effectively just another cross-compile target. But each (major) iOS/etc version (and sometimes hardware family on top of that) requires a different target tuple and toolchain options that are not easily discoverable, and you need to rinse and repeat multiple times to generate all of the variations that XCode needs. Which is a real PITA.

[1] Granted, it's unlikely that folks with high levels of autotools know-how are motivated to add support for probably the most FOSS-hostile platform widely deployed today. And adding Windows support requires a _lot_ more work than just changing the build system.

Defining the Rust 2024 edition

Posted Feb 4, 2024 14:52 UTC (Sun) by Cyberax (✭ supporter ✭, #52523) [Link]

> But.. that's still using XCode/MSVS?

Not quite. The build description remains in CMake. XCode/MSVS are used to work with the code.

> If the complaint is that the full autotools suite doesn't generate anything other than pure makefiles, that's a technical problem that can be rectified by someone willing to put the work into said feature. [1]

No. It can't be reasonably done in autotools without making them into CMake. It's possible in the same sense as all Turing-complete languages can emulate each other.

> FWIW, a quick bit of googling shows several folks successfully generating iOS libraries for autotools-based projects

Try it for real. It JustDoesntWork without tons of fiddling.

Defining the Rust 2024 edition

Posted Jan 31, 2024 19:13 UTC (Wed) by pizza (subscriber, #46) [Link] (2 responses)

> I'm sorry, but do you understand the word "portable"? Autotools is supposed to make projects portable, so they can be used in all kinds of environments.

You're being facetious.

Windows code isn't portable or reusable with anything else. MacOS code isn't portable [1]. iOS anything isn't portable. Ditto Android. Every one of those platforms has a bajillion bespoke quirks and [mis]features, including mutally incompatible toolchains and build environments. The only "portable" code possible is stuff that is purely computational; everything else has to have some sort of bespoke interface to the specific platform being targeted, or you target a metaplatform (eg SDL, QT, or Unreal Engine 5) that abstracts away those platform differences for you. Even then, you're still nearly always stuck with a separate "project" for each target platform's bespoke build/toolchains.

Autotools only ever covered UNIX-ish platforms [2], which at least nominally attempted to adhere to a common specification. And autotools itself didn't magically handle those platform differences for you; all it could do is detect what was or wasn't available and adjust the build (or fail) accordingly. It was always incumbent upon to the software author to actually write non-trivial platform-specific code for themselves.

In other news, Cars can't drive on water, and trains can't fly. More than once, anyway.

[1] The GUI stuff was never portable; pure cmdline stuff is in theory, but it's grown more difficult in practice with each successive release.
[2] These days, most of the flexibility Autotools provides has been mooted due to the nearly-complete relegation of proprietary UNIXes to the dustbin of history.

Defining the Rust 2024 edition

Posted Jan 31, 2024 19:48 UTC (Wed) by Cyberax (✭ supporter ✭, #52523) [Link]

> You're being facetious.

No. I'm not. I'm saying that the traditional C-based infrastructure (C + autotools) is failing at the very basic level: it can't even be used on the most common OSes.

My personal most recent autohell-related nightmare was with building libtiff for iOS.

> The only "portable" code possible is stuff that is purely computational

Yet autotools fail even with that.

> The only "portable" code possible is stuff that is purely computational; everything else has to have some sort of bespoke interface to the specific platform being targeted, or you target a metaplatform (eg SDL, QT, or Unreal Engine 5) that abstracts away those platform differences for you. Even then, you're still nearly always stuck with a separate "project" for each target platform's bespoke build/toolchains.

But somehow, we can make that work with CMake. Not without issues, but it works, and I can use normal native toolchains (XCode/MSVS) with them.

Defining the Rust 2024 edition

Posted Feb 1, 2024 23:54 UTC (Thu) by dankamongmen (subscriber, #35141) [Link]

it required some effort (and, to be fair, our windows builder is currently reporting failure), but i was able to get Notcurses building on Windows and OSX using cmake and portable c. admittedly, it's not using GUI toolkits, but it's definitely a nontrivial, unix-first, non-pure-computational library.

Defining the Rust 2024 edition

Posted Jan 31, 2024 1:09 UTC (Wed) by khim (subscriber, #9252) [Link] (2 responses)

> You want to make me believe that 99% of the software present on your computer doesn't come from distribution packages?

Why would it come from distribution packages? They don't support Windows and don't support macOS, either. So neither my game rig nor work computer have that many distribution packages.

Sure, ditribution-provided packages are important for WSL viability and use with docker image on macOS that I need to develop some software, but in the grand scheme of things I don't need that many distro-provided packages for that.

And if I want only to use some software then I can, finally, use the version of LibreOffice I like and version of GIMP I like without thinking about crazy dilemma of whether it's a good idea to upgrade every single app just to get that new feature in one of them.

You just have to accept that Linux on desktop have arrived — only it arrived in a form WSL. And it's now merely a tool for software development for various non-desktop platforms. That changes dynamics significantly.

> People like repositories… what they don't like is to treat every single program as a special butterfly. In that case they will just not use it, unless it's needed for work, in which case they will put up with the pain.

The only problem with that reasoning is that Linux distros today, for the majority of people are firmly in the something needed for work, which you have to use despite all the pain it causes.

Distros were born in times when Internet was expensive to solve the problem which haven't existed for decade or more: how to efficiently distribute software that software maker couldn't send from their web site. Hence the name.

Today they are no longer needed and just cause needless friction and pain (although if you have to develop software using GNU-based tools they are often indispensable): they impede delivery of apps from developer to your system, they tie various software packages into one huge bundle (kinda-sorta solvable if you use Gentoo, but even there it's quite painful to update one single package), they are very much a solution in a search of a problem.

> I've never encountered a feature that cmake has and autotool doesn't have.

Seriously? Show me how can I can create a trivial “Hello world” program and we'll go from there. Assume I'm typical developer and thus pick platforms to support from this list. Which means I have to support Android, Windows, iOS, OS X before I would think about supporting Linux.

And if I'm typical developer then I would, of course, use Visual Studio Code or maybe CLion, or, perhaps, even Visual Studio proper (although Visual Studio Code is more popular novadays).

CMake support all the things that matter (but fails in 1% of fringe cases), autotools solve perfectly lots of fringe cases that I don't care about while ignoring 90% if not 99% of cases which people actually care about.

Defining the Rust 2024 edition

Posted Jan 31, 2024 10:16 UTC (Wed) by LtWorf (subscriber, #124958) [Link] (1 responses)

> So neither my game rig nor work computer have that many distribution packages.

You went from using a distribution one comment above to not using one. Anyway brew and WSL are/use distributions.

Also, if you use the apple app store you are using a (non-free) distribution.

Also, I'm sure your work uses gaming rigs and osx for servers right?

You are argumenting for the sake of argumenting, knowing fully well that what you are saying makes no sense.

Users want distributions. They don't want to install your special PGP key for your special archive for your special software, of which you will proceed to lose the private key breaking automatic updates for everyone. They want the whole system to just do its thing and keep working.

> Show me how can I can create a trivial “Hello world” program

Why not a "return 0" directly if we want to make useless examples?

> autotools solve perfectly lots of fringe cases that I don't care about

if your software has the complexity of "hello world", yes I agree that you should not use autotools. But you should probably also abstain from giving advice trying to pass as an expert in portable software, when in reality you only develop trivial software for one single platform.

In the end, it seems you will argue anything and its opposite just to argue, and I have the feeling you've even forgotten what you were arguing for, so I'll stop this futile exchange.

Defining the Rust 2024 edition

Posted Jan 31, 2024 11:54 UTC (Wed) by khim (subscriber, #9252) [Link]

> In the end, it seems you will argue anything and its opposite just to argue, and I have the feeling you've even forgotten what you were arguing for, so I'll stop this futile exchange.

It's always your choice, but no, I haven't forgottten (if, maybe, you did). Let's do quick summary, shell we?

  1. bluca: Why don't Rust drop everything and provide tools they don't need for fringe use-case they don't even want to support?
  2. tialaramex: Rust offers tools for someone who wants to spend time doing that useless work, it just doesn't impose them on everyone
  3. pizza: Hey, that work is not entirely useless and if we would impose it on everyone, then there would be some benefits, too!
  4. Cyberax: But there would be nasty side-effects, too!
  5. gspr: We just want the benefits, they are cool!
  6. me: But who would pay the costs?
  7. you: Don't you benefit from these features, too?
  8. me: Sure, I benefit from these, when I actually use distros that are built on top of these. But I don't use these kinds all that much.
  9. you: You lie! You have to use these, you jave have to!
  10. me: Nope, I don't lie. I really don't use classic distros which rely of shared libraries and stable ABI all that much.
  11. you: Let me play with words to try to save the face!

And here we have bunch of half-truths that you use to try to derail the discussion

> They want the whole system to just do its thing and keep working.

While 100% truth on the surface in reality it doesn't support you cause. Yes, the majority of people only want the whole system to just do its thing and keep working… but no, they don't want to see shared libraries (or anything else) being silently upgraded behind their backs! Internet is full of tutorials which people are using to stop these updates that developers and OS makers shove down their throats. And most user never upgrade anything unless forced or unless they know what they get after update (not much these days, times when new versions were sold for money and actually had to demonstrate some kind of viability are gone)

You don't need shared libraries or stable ABI to never upgrade. Here's typical story from the “what real users want”. They just want things that work. Nothing less, nothing more.

> But you should probably also abstain from giving advice trying to pass as an expert in portable software, when in reality you only develop trivial software for one single platform.

Who said I only develop trivial software for one single platform? Software I develop actually is used on most platforms: Windows, MacOS, Android, ChromeOS, even Linux! It's not used on iOS, which makes me a bit atypical (most developers would care about iOS before they would think about ChromeOS), but not too much.

You, on the other hand, are trying, repeatedly, to ignore with prejudice 99% of the picture (most popular OSes and most users) and only concentrate on one, very fringe, case.

> Users want distributions. They don't want to install your special PGP key for your special archive for your special software, of which you will proceed to lose the private key breaking automatic updates for everyone. They want the whole system to just do its thing and keep working.

You say it with such an extreme conviction like just sprouting these words would make them true. But most users don/t even know what PGP key is and would definitely not try to install it even if told.

They know how to click on link and select the checkbox, though. That's what they expect and that's what they get in the majority of use cases.

> Also, if you use the apple app store you are using a (non-free) distribution.

Another truth designed the muddle the water: yes, Windows store and Apple's App Store may be classified as “distributions”, if you squint just right, but they don't need shared libraries (and they actually provide stable ABI to app developers while the majority of Linux distros still refuse to do that).

> Anyway brew and WSL are/use distributions.

True, but, most of the time, in modern world, they are glorified package managers for C and C++ packages. It's entirely not clear why some other language which, unlike C or C++, already have a standard package manager should deal with them.

Sure, if someone wants/need to merge Rust packages and compiler into these distros then they can do that. It's free world and licenses permit that. But it's entirely not clear why Rust developers should spend time and money supporting something they don't need or want.

Defining the Rust 2024 edition

Posted Feb 2, 2024 13:01 UTC (Fri) by mathstuf (subscriber, #69389) [Link] (3 responses)

> I've never encountered a feature that cmake has and autotool doesn't have.

Supporting MSVC as a compiler[1]? C++ modules support is also something I'm interested to see how autotools will support (I implemented it in CMake; there are things that really need proper modelling that autoconf doesn't provide AFAIK).

FD: CMake developer

[1] The FAQ still has this as a TODO at least: https://www.gnu.org/software/automake/faq/autotools-faq.h...

Defining the Rust 2024 edition

Posted Feb 2, 2024 13:02 UTC (Fri) by mathstuf (subscriber, #69389) [Link] (1 responses)

Oh, and generating `build.ninja` files is a quite nice build perf bost that is easily attainable with CMake. I'm sure auto*conf* could be coaxed into doing this, but I have no idea how one would automatically port any auto*make* usage to it.

Defining the Rust 2024 edition

Posted Feb 2, 2024 16:44 UTC (Fri) by khim (subscriber, #9252) [Link]

> I'm sure auto*conf* could be coaxed into doing this, but I have no idea how one would automatically port any auto*make* usage to it.

With Kati this should be possible, someone just need to intergrate it into all that automake machinery to teach it to properly rebuild ninja files when that's needed.

Not sure if anyone have ever done that or not, though.

Defining the Rust 2024 edition

Posted Feb 2, 2024 15:52 UTC (Fri) by Cyberax (✭ supporter ✭, #52523) [Link]

Thank you for CMake!

All C++ build tools suck, but CMake at least works properly. And the backwards compatibility is great.


Copyright © 2025, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds