this post was submitted on 16 Jun 2023
34 points (100.0% liked)

Programming

17489 readers
58 users here now

Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!

Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.

Hope you enjoy the instance!

Rules

Rules

  • Follow the programming.dev instance rules
  • Keep content related to programming in some way
  • If you're posting long videos try to add in some form of tldr for those who don't want to watch videos

Wormhole

Follow the wormhole through a path of communities [email protected]



founded 1 year ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 5 points 1 year ago (7 children)

The question is, how good is NativeAOT comparable to a static binary from C++ or Go? As we both know Microsoft has a very poor track record when it comes to static builds / "self-contained" stuff. My question was mostly satire but I still would like to know how "self-containted" are those applications.

Does it effectively output a single binary? Does it create some kind of clusterf*k and awkward packaging formats like other MS solutions such as UWP? Will it actually be deployable to a random fresh install of Debian 12 or Windows 10? What about compatibility with older systems?

[–] Spyros 7 points 1 year ago* (last edited 1 year ago) (5 children)

Does it effectively output a single binary?

Yes, that's one of the points of NativeAOT, a self-contained single binary, exactly as Go does it.

Does it create some kind of clusterf*k and awkward packaging formats like other MS solutions such as UWP?

No, you can create .exe files.

Will it actually be deployable to a random fresh install of Debian 12 or Windows 10?

Yes, NativeAOT supports Windows, Linux and MacOS, x64 and Arm64.

What about compatibility with older systems?

Not sure about that, I suppose it depends on the targets each .NET version support. For example, .NET 8 will drop RHEL 7 and only RHEL 8 and later.

And to play devil's advocate: this won't work for all existing .NET applications. If you use reflection (which is AOT unfriendly), chances are that you will have to rework a ton of stuff in order to get to a point where NativeAOT works. There's a middle solution though, called ReadyToRun, which has some advantages compared to running fully with the JIT compiler.

[–] [email protected] -2 points 1 year ago (4 children)

Thank you for the link, so --self-contained will results in "a folder that has our exe and everything that is required to run it (...) a little over 200 files" while /p:PublishSingleFile=true will result in a 70MB file for a simple hello world. This kind of confirms my cheap satire :D it is nice this is an option now but the mess and size is crazy. Statically built Qt programs for Windows, with a GUI, are usually around 10MB for a simple app.

[–] Spyros 5 points 1 year ago

My bad, the link I sent was not about NativeAOT, just bundling all the dependencies together (also, it's 4 years old). After a quick search, here's a recent SO question that mentions that you can build .exe files

As for the filesize... please recheck the post under which we are commenting. :D

load more comments (3 replies)
load more comments (3 replies)
load more comments (4 replies)