Change-Id: I72b25680e7167c3a55477111c28b1d4936c60e2c Reviewed-on: https://cl.tvl.fyi/c/depot/+/606 Reviewed-by: tazjin <mail@tazj.in>
		
			
				
	
	
		
			89 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			Org Mode
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			Org Mode
		
	
	
	
	
	
#+TITLE: Bootstrapping, reproducibility, etc.
 | 
						|
#+AUTHOR: Vincent Ambo
 | 
						|
#+DATE: <2018-03-10 Sat>
 | 
						|
 | 
						|
* Compiler bootstrapping
 | 
						|
  This section contains notes about compiler bootstrapping, the
 | 
						|
  history thereof, which compilers need it - and so on:
 | 
						|
 | 
						|
** C
 | 
						|
 | 
						|
** Haskell
 | 
						|
   - self-hosted compiler (GHC)
 | 
						|
 | 
						|
** Common Lisp
 | 
						|
   CL is fairly interesting in this space because it is a language
 | 
						|
   that is defined via an ANSI standard that compiler implementations
 | 
						|
   normally actually follow!
 | 
						|
 | 
						|
   CL has several ecosystem components that focus on making
 | 
						|
   abstracting away implementation-specific calls and if a self-hosted
 | 
						|
   compiler is written in CL using those components it can be
 | 
						|
   cross-bootstrapped.
 | 
						|
 | 
						|
** Python
 | 
						|
 | 
						|
* A note on runtimes
 | 
						|
  Sometimes the compiler just isn't enough ...
 | 
						|
 | 
						|
** LLVM
 | 
						|
** JVM
 | 
						|
 | 
						|
* References
 | 
						|
  https://github.com/mame/quine-relay
 | 
						|
  https://manishearth.github.io/blog/2016/12/02/reflections-on-rusting-trust/
 | 
						|
  https://tests.reproducible-builds.org/debian/reproducible.html
 | 
						|
 | 
						|
* Slide thoughts:
 | 
						|
  1. Hardware trust has been discussed here a bunch, most recently
 | 
						|
     during the puri.sm talk. Hardware trust is important, as we see
 | 
						|
     with IME, but it's striking that people often take a leap to "I'm
 | 
						|
     now on my trusted Debian with free software".
 | 
						|
 | 
						|
     Unless you built it yourself from scratch (Spoiler: you haven't)
 | 
						|
     you're placing trust in what is basically foreign binary blobs.
 | 
						|
 | 
						|
     Agenda: Implications/attack vectors of this, state of the chicken
 | 
						|
     & egg, the topic of reproducibility, what can you do? (Nix!)
 | 
						|
 | 
						|
  2. Chicken-and-egg issue
 | 
						|
 | 
						|
     It's an important milestone for a language to become self-hosted:
 | 
						|
     You begin doing a kind of dogfeeding, you begin to enforce
 | 
						|
     reliability & consistency guarantees to avoid having to redo your
 | 
						|
     own codebase constantly and so on.
 | 
						|
 | 
						|
     However, the implication is now that you need your own compiler
 | 
						|
     to compile itself.
 | 
						|
 | 
						|
     Common examples:
 | 
						|
     - C/C++ compilers needed to build C/C++ compilers:
 | 
						|
 | 
						|
       GCC 4.7 was the last version of GCC that could be built with a
 | 
						|
       standard C-compiler, nowadays it is mostly written in C++.
 | 
						|
 | 
						|
       Certain versions of GCC can be built with LLVM/Clang.
 | 
						|
 | 
						|
       Clang/LLVM can be compiled by itself and also GCC.
 | 
						|
 | 
						|
     - Rust was originally written in OCAML but moved to being
 | 
						|
       self-hosted in 2011. Currently rustc-releases are always built
 | 
						|
       with a copy of the previous release.
 | 
						|
 | 
						|
       It's relatively new so we can build the chain all the way.
 | 
						|
 | 
						|
     Notable exceptions: Some popular languages are not self-hosted,
 | 
						|
     for example Clojure. Languages also have runtimes, which may be
 | 
						|
     written in something else (e.g. Haskell -> C runtime)
 | 
						|
* How to help:
 | 
						|
  Most of this advice is about reproducible builds, not bootstrapping,
 | 
						|
  as that is a much harder project.
 | 
						|
 | 
						|
  - fix reproducibility issues listed in Debian's issue tracker (focus
 | 
						|
    on non-Debian specific ones though)
 | 
						|
  - experiment with NixOS / GuixSD to get a better grasp on the
 | 
						|
    problem space of reproducibility
 | 
						|
 | 
						|
  If you want to contribute to bootstrapping, look at
 | 
						|
  bootstrappable.org and their wiki. Several initiatives such as MES
 | 
						|
  could need help!
 |