@hanno Right, that rationale actually make sense from the Unix-centric lens of "why should we bother making a config language when your OS provides one* "sufficient" for the task"?
* Except when it doesn't provide one, like anything not-Unix :P.
I've seen configure scripts from Softlanding Linux System. ./configure scripts weren't horrible in 1992. But feels like they got too unwieldy too quick :(.
@hanno That reminds me of how NixOS generates flakes.
I'm not a huge fan of Nix but that notion does seem to fix this issue at hand as far as I understand it.
@publicvoit @hanno currently the package (and any older, non-customized versions) will be pulled from cache (cache.nixos.org), so that shouldn’t be an immediate problem.
There is a mirror by the original maintainer that could be used in the future:
- https://github.com/NixOS/nixpkgs/pull/300028
- https://discourse.nixos.org/t/cve-2024-3094-malicious-code-in-xz-5-6-0-and-5-6-1-tarballs/42405/18
But yes, this seems to be a currently unsolved issue
@hanno there is https://slsa.dev/ to solve mostly exactly this, and we've integrated that in PrivateBin: https://github.com/PrivateBin/PrivateBin/blob/master/doc/Release.md
This only works, because the build process is super simple, "git archive" command essentially. And this is, what you also get with GitHub's source links, which is great as it can only remove files, not add ones and you have a valid source tarball, also referenced by a third-party (like SLSA aims at). #supplyChainSecurity /cc @elrido

SLSA is a security framework. It is a check-list of standards and controls to prevent tampering, improve integrity, and secure packages and infrastructure in your projects, businesses or enterprises. It’s how you get from safe enough to being as resilient as possible, at any link in the chain.
Note on all the #xz drama, there are some technical solutions for such #supplychainattack that can make such an attack way harder, at least to hide the code in tarballs etc. https://slsa.dev/ e.g. is a solution. Combined with reproducible builds, it ensures that a software artifact is built exactly from the source given in a source repository, with the possibility to prove that and no way for any maintainer to tamper with (in the highest level). #slsa #infosec #security #linux #backdoor
@hanno when it comes to autotools, the correct answer is always "stop doing that".
a build system that regularly fails at both backwards & forward compatibility? every developer must have specific version(s) of the build system installed (effectively system-wide) on their machines (and sometimes, different versions for different projects).
It's not super-popular, but one of waf's main selling points is that it is a part of your codebase, managed with the same tools as the source itself.
@hanno Thanks for sharing. Also:
https://twitter.com/behdadesfahbod/status/1774194363201114270
@hanno I believe Go does that.
You publish your code as a repo. But there is a specified, reproducible way to build a zip-file from a repo. And even if you download the module via git clone, the Go tool stores it on disk in the canonical form and builds from that. But most devs use a global caching proxy, which is paired with a certificate-transparency like tamper-evident ledger to verify the download.
IMO the Go module ecosystem does all of this really well.
@hanno One caveat is, that it's also possible *not* to build from a repo, but instead distribute your module directly as a (well-formed) zip file, on your own web server.
I don't know anyone who does that, but in that case, you don't get a clear audit-trail, of course.
@Merovius @hanno see e.g. https://go.dev/blog/module-mirror-launch
The Go compiler/build system is supposed to act like a function -- same inputs, yield same outputs, always. https://go.dev/blog/rebuild
Go build/install also does not run arbitrary other programs (especially if you avoid cgo, that is, calling out to foreign code).
It's not bulletproof, and someone can write obfuscated Go, same as any other language, but (in my opinion) it's not nearly as easy a target as C and its infrastructure.
@alexmurray @hanno while fuzzy on details I only started tagging because packagers said distro required it. Been too long but I want to say fedora asked. Maybe arch but don't remember. The point being reproducible builds based on a specific git commit.
Waiting to hear from packagers, now I'm curious. Lintian by FAR strictest packaging guidelines so doubtful any other pm will be more strict
I do #tinycore package for #inxi and they don't use that method at all.