News for hackers. Stuff that matters.
Re:Hypermodern Python by ed25519FUUU on Thursday May 28, 2020 @11:54AM (#23338757)
Can you really make it self contained? For example, does the host need a tz package? What about libssl or libcrypto?

As far as I know the only language making static binaries easily is Go, but it was a first class language design principle.

For everybody else it’s a jenky 1000 line Makefile. And don’t get me started on cross-compiling!

Re:Hypermodern Python by cbarrick on Thursday May 28, 2020 @12:38PM (#23339332)
> As far as I know the only language making static binaries easily is Go, but it was a first class language design principle.

Rust does this as well.

The official high level build tool, `cargo`, uses a declarative TOML file for dependency management and supports lock files for deterministic builds. The default output is a single, statically linked binary.

Rust does depend on libc (like Go) which brings in dynamic linking on some platforms. But Cargo supports easy cross-compilation, and the `x86_64-unknown-linux-musl` target will produce a fully static binary.

Re:Hypermodern Python by tastyminerals on Thursday May 28, 2020 @01:02PM (#23339651)
D, Rust -- just what first springs to mind.
Re:Hypermodern Python by thethimble on Thursday May 28, 2020 @12:09PM (#23338939)
> Binaries produced with PyOxidizer are highly portable and can work on nearly every system without any special requirements like containers, FUSE filesystems, or even temporary directory access. On Linux, PyOxidizer can produce executables that are fully statically linked and don’t even support dynamic loading.

https://pyoxidizer.readthedocs.io/en/stable/overview.html

Re:Hypermodern Python by slaman on Thursday May 28, 2020 @01:26PM (#23339970)
I've found PyOxidizer immature in comparison to pyInstaller. https://www.pyinstaller.org/

Your milage might vary, but I think the former is still very much a work in progress.

Re:Hypermodern Python by cle on Thursday May 28, 2020 @12:52PM (#23339513)
It can statically link Linux executables, including musl libc, libssl, libcrypto, and other libs that are usually dynamically linked.

It can't do this for non-Linux executables (e.g. Windows, Mac). On those OSs, the executables are dynamically linked with system libraries.

Re:Hypermodern Python by toby on Thursday May 28, 2020 @12:04PM (#23338872)
Rust?
Re:Hypermodern Python by ed25519FUUU on Thursday May 28, 2020 @12:41PM (#23339386)
Rust can definitely do it, but there still are a lot of gotchas. Many languages can do it, but there are so many pitfalls. For example, a host tz package.
Re:Hypermodern Python by jzoch on Thursday May 28, 2020 @12:49PM (#23339476)
I would argue rust does it much better than go. When you have to resort to hacks like cgo that subtly change the performance and functional characteristics of your program i wouldnt call it "first class". Its good, dont get me wrong, I like how go cross-compiles most things. I wouldn't say its the gold-standard as long as cgo continues to be a thing

Edit: I mention cgo as many who want to cross-compile a statically linked binary may want to interface with other libs via FFI and this is a huge gotcha. It is a bit tangential to strict "static linking binary building".