Live data from Hacker News

GNU Mes 0.17: towards bootstrappable builds for GuixSD

lists.gnu.org

11–15 of 15 posts

Re: GNU Mes 0.17: towards bootstrappable builds for GuixSD

#11
post #4
post #2

This seems to me like a necessary complement to the efforts around making packages build reproducibly. It has long been accepted that if a piece of software requires a non-Free compiler to build it, then that piece of software is de facto non-Free too. Taking that to its logical extreme, a piece of software isn't Free unless it can be built by a compiler whose recursive sequence of meta-compilers leads back to a mini…

Assuming that you can trust the computers it's running on.

This is basically the argument made in "Reflections on Trusting Trust", the Turing Award Lecture of Ken Thompson.

Re: GNU Mes 0.17: towards bootstrappable builds for GuixSD

#12

This seems like a really neat idea! I think it would be cool to use plain source code to completely bootstrap a system. But, at the same time, this sounds like a maintenance nightmare! Maintaining older or smaller versions of software just to avoid self-hosting is bound to hit all kinds of bugs - big and small. At the same time, I'm not convinced this completely solves the problem. Maybe you can trust your C compiler…

> This seems like a really neat idea! I think it would be cool to use > plain source code to completely bootstrap a system.

Technically that's what we are working towards. Idealogically, we are working towards moving awarenes in our communities from `neat idea' to `unbelievable that in 2018 we still used and trusted computers that had no bootstrappable audit trail!'

> But, at the same time, this sounds like a maintenance nightmare! > Maintaining older or smaller versions of software just to avoid > self-hosting is bound to hit all kinds of bugs - big and small.

You are not suggesting that we stop our efforts because it will require work and may contain bugs, rigth? ;-)

Until now, this has been the effort of a very small team. The choice for tcc-0.9.26 and gcc-2.95.3 was a pragmatic one. We hope that when awareness of bootstrappable software rises we can make some better choices.

I would love for the TinyCC and GNU GCC developers (any software developers, really) to take the lead in creating their own bootstrappable stories; we just showed it can be done.

> At the same time, I'm not convinced this completely solves the > problem. Maybe you can trust your C compiler now, but can you trust > your Bash interpreter, or your sed command?

Right, doing only part of the work does not solve the problem. The solution will be built from a number of such steps. One of those steps may involve hardware; I'm sure it's a long path.

> What stops them from injecting things into your C compiler while > it's building. At the end of the day, you have to trust some > software, why not include your C compiler in this list?

Some of us have decided that is just not good enough, that we would like our softwares not only reproducible but also bootstrappable, and are we working towards that.

There is Stage0 and M2-Planet to take care of what's below Mes.

We have also started work on a Bash replacement in Scheme (using GNU Guile initially) that comes with a minimal implementation of coreutils, grep, sed, tar. I have managed to build GNU make and Bash using that: https://twitter.com/janneke_gnu/status/1070434782973063168

> Anyway, I am much more concerned about much higher places in free > software bootstrapping. Lots of software has switched from Autotools > to Meson without thinking about how we will bootstrap this > stuff. Meson requires you to have Ninja to work, but how can I > bootstrap Ninja without Python?

Surely that the technical part of that problem can be solved quite easily once the respective developers of those projects are becoming aware of bootstrapping and reproducibility and decide to give it priority?

Happy hacking! janneke

Re: GNU Mes 0.17: towards bootstrappable builds for GuixSD

#13

This seems like a really neat idea! I think it would be cool to use plain source code to completely bootstrap a system. But, at the same time, this sounds like a maintenance nightmare! Maintaining older or smaller versions of software just to avoid self-hosting is bound to hit all kinds of bugs - big and small. At the same time, I'm not convinced this completely solves the problem. Maybe you can trust your C compiler…

Well you could have an initial stage in the bootstrapping that is pure machine code, but is short and simple enough that it can be read and understood. Then that could implement a very simple assembler. You'd write a complex assembler in the simple assembly language. Then write a few steps of increasingly complicated compilers.

Still need to trust the hardware though.

Re: GNU Mes 0.17: towards bootstrappable builds for GuixSD

#14
post #9
post #8

> It consists of a mutual self-hosting Scheme interpreter written in ~5,000 LOC of simple C and a Nyacc-based C compiler written in Scheme. I’m trying to understand how important this part is. Is there a fundamental reason this needed to be a C compiler and Scheme interpreter that each can compile or interpret the other? Or is it just that they needed to support those two languages to bootstrap this particular softwa…

Ultimately, the goal is to compile a trusted copy of the gcc source code with a trusted compiler. This means that you need a trustworthy c compiler binary. In order for the compiler binary to be trustworthy, you have to either: 1. read and understand the machine code of the compiler's binary, or 2. have an observable compiler that can compile itself and also gcc (or at least better compilers that can compile gcc). Th…

Nice explanation, thanks.

"Trusting Trust" makes my head hurt.

Has anyone considered bootstrapping on completely different stacks and then diffing the results?

Maybe even using cross compilers.

I can imagine hostile actors compromising various Intel, AMD, ARM chips. But I can't imagine those compromised targets all behaving the same way. Or going back in time to port their compromises to obsolete architectures.

Re: GNU Mes 0.17: towards bootstrappable builds for GuixSD

#15
post #9

Earlier quoted context omitted.

Ultimately, the goal is to compile a trusted copy of the gcc source code with a trusted compiler. This means that you need a trustworthy c compiler binary. In order for the compiler binary to be trustworthy, you have to either: 1. read and understand the machine code of the compiler's binary, or 2. have an observable compiler that can compile itself and also gcc (or at least better compilers that can compile gcc). Th…

Nice explanation, thanks. "Trusting Trust" makes my head hurt. Has anyone considered bootstrapping on completely different stacks and then diffing the results? Maybe even using cross compilers. I can imagine hostile actors compromising various Intel, AMD, ARM chips. But I can't imagine those compromised targets all behaving the same way. Or going back in time to port their compromises to obsolete architectures.

> Has anyone considered bootstrapping on completely different stacks and then diffing the results?

Yes.

[1] https://news.ycombinator.com/item?id=12666923

Post reply on HN