3,553 karma · joined February 1, 2010
You know without doubt that the binary that you produced was built from the source code, because you built it.
I'm asking, why not stop there? You have a binary that you can safely consider "verified", what does it matter if it's bit-for-bit identical to any other binaries?
What did the reproducibility add?
It works well enough for me, I use it with mutt instead of ispell. Naturally, it's 100% offline.
I made a (terrible?) unboxing video a while ago: https://www.youtube.com/watch?v=6DMlaJ-ROXc
https://lock.cmpxchg8b.com/sha1/visualize.html
I read a paper at the time where someone described a tool they made to find a near-collision, they explained they were just flipping bits and visually observing the affects. That sounded kinda fun, but they didn't release it, so I tried to replicate it from their description!
I guess you could select the block, then maybe s/\>\s\</\=repeat(' ', 20 - col('.'))/g?
That doesn't feel like the right solution though... maybe a macro, something like qa^wi<Tab><Esc>q then visual select and :norm@a? I dunno.
It also has a persistent history, variables, functions, base conversion, etc. I guess it doesn't have unit conversion or a math library, but it's a great programmers calculator.
If however, you used the "bugdoor" method, you can plausibly deny any malicious intent and you will absolutely get away with it.
We think security updates don't break API/ABI because they're backported to all previous major versions that are still actively supported. This isn't "thoughts and prayers", it's work that the packagers and maintainers do. I can't tell you how useful being able to fix a vulnerability in every program is, just think of updating every application that uses libpng on your desktop, or every server application that uses OpenSSL.
I just can't imagine wanting to give that up, because of name mangling ABI issues!
I tried to fix it, adding these to yours seems to work okay:
youtube.com###related:upward(#secondary)
youtube.com##:root:not(:fullscreen) video:matches-css(left: 0px):style(object-fit: fill!important; width: 100%!important; height: auto!important;)I used this filter, it makes twitter links look like normal text:
##a[href*="twitter.com"]:style(pointer-events: none!important; text-decoration: inherit!important; color: inherit!important)It's simpler, and Lotus 1-2-3 doesn't have MATCH! :-)
I think something like this would work...
(income-@VLOOKUP(income,table,1))*@VLOOKUP(income,table,3)+@VLOOKUP(income,table,5)Thankfully no black vans or ominous packages in the mail (yet).
You do not need any external module on machines with fTPM/PTT support (i.e. if you bought it in the last few years).
There's a big difference here. When a vulnerability is found in the Linux kernel, that doesn't mean that you were compromised.
If a build was found to be malicious, then you definitely were compromised and it's little solace that it was discovered after the fact. This is why package managers check the deb/rpm signature before installing the software, not after.
They don't make any security claims about this, it's just for speeding up builds.
That's not how it works, you have to reproduce it before it becomes trusted.
> You can also have ten people on the internet verify the untrusted binary.
Sure, then we have to build a complex consensus system that introduces a bunch of unsolved problems. My opinion is that this just isn't worth it, there is practically nothing to gain and it's really really hard.
That makes sense! However, this is not a good argument for reproducible builds, because you can already do that today.
You already have to build a trusted binary locally for testing right? You're dreaming of being able to compare that against the untrusted binary so that you can make sure it's a trusted binary too - but you already have a trusted binary!
Okay - but it's a hassle, you don't want to have to do that, right? Too bad - reproducible builds only work if someone reproduces them. You're still going to have to replicate it somewhere you trust, so you gained practically nothing.
I'm pointing out how complex implementing reproducible builds is. It introduces a bunch of really hard unsolved problems that people are very handwavy about.
Who will do the reproducing? You say that users won't be able to do it. That makes sense, because if they could, then reproducible builds would be useless! However, you also say they will be able to check if a build server is compromised at any time. In order for both of those claims to be true we will have to design and build a complex consensus system operated by mutually untrusted volunteers. That's really hard, and seems like it provides a pretty negligible benefit.
It is literally the very first claim on the front page of https://reproducible-builds.org.
If you're saying "reproducible builds are reproducible", then that is obviously true, but the question is what is the benefit?
Some people claim that the benefit is that there will be less incentive to threaten developers with violence, and I'm saying that's nonsense. If you cut through the nonsense, there are some modest claims that are true, but doing reproducible builds properly is very complicated and the benefit is negligible.
That does require reproducible builds, but here is how to do it without reproducible builds:
Take the trusted source code, then compile it to make a trusted binary. Now put the untrusted binary in the trash, cause you already have a trusted binary :)
That depends, I think it's difficult and mostly still pointless. I wrote about this a bit in the blog post I linked to. It's a big trade off, for questionable benefit.
> Wouldn't reproducibility be necessary for those systems to work well most of the time?
Yes, there are definitely some good non-security reasons to want deterministic builds. My gripe is only with the security arguments, like claims it can reduce threats of violence against developers (!?!).
You can already verify that a toolchain wasn't backdoored today, reproducible builds aren't necessary for that.
Build servers rebelling was just an example of the additional complexities and attacks that it introduces, for very negligible benefit.