• TCB13@lemmy.world
    link
    fedilink
    English
    arrow-up
    0
    ·
    2 years ago

    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@programming.dev
      link
      fedilink
      English
      arrow-up
      1
      ·
      edit-2
      2 years ago

      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.

      • TCB13@lemmy.world
        link
        fedilink
        English
        arrow-up
        0
        arrow-down
        1
        ·
        2 years ago

        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.