20 comments

[ 3.1 ms ] story [ 41.2 ms ] thread
Thanks that the OSS value is $12 trillion, but only packagers, security experts and SaaS companies get any of that.

Rebuilt to Last? It is a Google project, so I give it two years.

At first I thought this might be promising, given

without burden on upstream maintainers

Then I see

This is not an officially supported Google product

on https://github.com/google/oss-rebuild

And then I also see

oss-rebuild uses a public Cloud KMS key to validate attestation signatures. Anonymous authentication is not supported so an ADC credential must be present.

    $ gcloud init
    $ gcloud auth application-default login
I would not use this with a dependency on Google Cloud, or the gcloud command line tool.

Mainly because Google has horrible customer support.

It would be more interesting if they came up with something hosted on third party infrastructure. Last I heard, Google Cloud is run by Oracle executives

---

e.g. in particular the Unisuper incident led me to believe that a lot of operational stuff is being outsourced, and is of poor quality

UniSuper members go a week with no account access after Google Cloud misconfig

https://hn.algolia.com/?dateRange=all&page=0&prefix=false&qu...

Google accidentally deleted a $125 billion pension fund's account

https://qz.com/google-cloud-pension-fund-unisuper-1851472990

I would not say this is unrelated, because operations in the underlying cloud can be a weak link in security

Although I'd certainly be interested in an argument otherwise

nixpkgs already has 107158 packaged libraries/executables. Nix has infrastructure to support arbitrary build systems and can create docker images. I fail to see any advantages of creating a more narrow version of it that has fewer uses and has to start from scratch
oss-rebuild is for independent verification, which cache.nixos.org doesn't have yet. I'm still waiting for https://github.com/nix-community/trustix to become a thing.

Until then they are still behind Debian and Arch Linux, which do in fact implement this with rebuilderd and debrebuild/archlinux-repro.

Not everyone uses Nix, and there are other operating systems used in the world.
Advantages: potentially useful/extant/readable documentation.
Obligatory xkcd: Dependency https://xkcd.com/2347/

This fit in somewhere here?

Author here!

OSS Rebuild should give that Nebraskan the peace of mind to continue their everyday heroism without being pulled away to set up security configs or debug release CI. The rest of the blocks on top can contribute the support to assure themselves and the community that those critical builds are trustworthy.

So this seems to be a build definition and some form of attestation system? Does this require builds are done via CI systems instead of on adhoc developer machines?

I find that for many npm packages, I don't know how builds were actually published to the registry and for some projects that I rebuilt myself in docker, I got vastly different sizes of distribution artifacts.

Also, it seems like this is targeting pypi, npm, and crates at first - what about packages in linux distro repositories (debian, etc.)?

Author here!

> Does this require builds are done via CI

Nope! One use for OSS Rebuild would be providing maintainers that have idiosyncratic release processes with an option for providing strong build integrity assurances to their downstream users. This wouldn't force them into any particular workflow, just require their process be reproducible in a container.

> for some projects that I rebuilt myself in docker, I got vastly different sizes of distribution artifacts.

Absolutely. OSS Rebuild can serve to identify cases where there may be discrepancies (e.g. accidentally included test or development files) and publicize that information so end-users can confidently understand, reproduce, and customize their dependencies.

> what about packages in linux distro repositories (debian, etc.)

OSS Rebuild actually does have experimental support for Debian rebuilds, not to mention work towards JVM and Ruby support, although no attestations have been published yet. There is also no practical impediment to supporting additional ecosystems. The existing support is more reflective of the size of the current team rather than the scope of the project.

For packages in Linux distributions you probably want one of:

- https://reproducible.archlinux.org/ (since 2020)

- https://reproduce.debian.net/ (since 2024)

There's arch-repro-status and debian-repro-status respectively to show the status of the packages you have installed, but since it's not yet possible to make an opensource computer out of reproducible-only software, there isn't really any tooling to enforces this through policy.

IMO you need an immutable appliance-like OS that is deterministic and full source bootstrapped to do reproductions with minimized trusting-trust attack risk.

We built ReprOS to solve this problem: https://codeberg.org/stagex/repros

"Git push" to it and it will do a build in a throw-away VM then have the host sign the artifact results and push signatures to the same or a different repo.

This is a great idea. Less boil the ocean than getting everything into Nix. Are any notable projects using this?
Love this project; thanks for letting us know about it. I have been voted "Least likely to succeed in Web Hosting Security" by HN for 13 years in a row, so apologies if this is irrelevant. But being able to know precisely what software you're running would be a great way to run a web server, no? Or is it not efficient enough running in a container or what?
Hm that looks pretty nice and useful

But I'd also say another way to do it is to build / cross compile on two totally different machines, say Linux and OS X, or Linux and FreeBSD, or even a modern Debian and some Linux VM from 2005

If the results are exactly the same, then I think it can be trusted

I guess that's like Diverse Double-Compiling, but extended to the whole machine:

https://dwheeler.com/trusting-trust/

(comment deleted)
I'm very excited about this project, but it could really do with a web UI of some sort! Having to build a Go CLI tool in order to access it is a massive amount of friction.

I reverse-engineered it a tiny bit, looks like you can get a list of all builds so far like this:

  gsutil ls -r 'gs://google-rebuild-attestations/**'
I ran that and got back 9,507 - here's that list as a Gist: https://gist.github.com/simonw/9287de5900d5b76969e331d9b4ad9...
So this seems like a bit of a half measure in the sense that it doesn't provide client side build?

With guix I can bit for bit reproduce with my client machine the upstream binaries.

This seems flawed to assume that google's servers are uncompromised, its vastly better to have distributed ability to reproduce.

https://guix.gnu.org/manual/en/html_node/Invoking-guix-chall...

I'm curious how the system detects "unusual build patterns".

I.e. how would the xz backdoor be identified? Does the system have logic like "the build should not us binary bits already in the repo"? Or it's even more specific , like "all build files must come from a single directory? If it's more generic, how does it work?