this post was submitted on 26 Mar 2025
48 points (92.9% liked)
Open Source
35421 readers
218 users here now
All about open source! Feel free to ask questions, and share news, and interesting stuff!
Useful Links
- Open Source Initiative
- Free Software Foundation
- Electronic Frontier Foundation
- Software Freedom Conservancy
- It's FOSS
- Android FOSS Apps Megathread
Rules
- Posts must be relevant to the open source ideology
- No NSFW content
- No hate speech, bigotry, etc
Related Communities
Community icon from opensource.org, but we are not affiliated with them.
founded 5 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
Yes, that is true. And yet, there are C++ LGPL libraries which as you say do in principle have the same problem. It should be safe if you're careful about not using generics in the library's public interface, or at least only generic code that is essentially just stubs calling the real logic. (I haven't actually tried this myself tbh.)
In general any kind of inlined code is always a problem when doing this, even C can have this with macros, or "static final" integer constants in Java.
I should have definitely mentioned this and Rust's ABI stability though, yeah. As for that, keeping the same compiler version is generally not a problem since all of them are available.
IIRC Same compiler version doesn't mean the ABI will be the same. Each compilation may produce different representation of data structures in the binary. Depending on the optimization and other things.
Ugh, that would complicate things. If that’s the case, all I can say is that’s really negligent (and goes into what I originally said about lack of stable ABI really ruining Rust for me — technically I said static linking but that’s really the core issue)
Yeah, and there's no plan to stabilize the ABI because it's developing.
You can use C ABI for some data formats, but you're limited on what you can use (mostly primitives). There's a crate stable-abi or abi-stable that provides a way to do things to keep it stable, but since it's external crate it has limitations.
I know it's frustrating because I am writing something in rust that loads functions in runtime. I thought it'd be easy because programs written in C do it all the time. Rust gives a lot of advantages but working on dynamic loading hasn't been fun. And there aren't a lot of resources about this either.