URL: https://linuxfr.org/users/serge_ss_paille/journaux/bootstrap-binary-seed Title: Bootstrap Binary seed Authors: serge_sans_paille Date: 2019年02月04日T11:38:43+01:00 License: CC By-SA Tags: bootstrap, compilation, compilateur, ken_thompson et fosdem Score: 60 Demat'iNal, J'ai été frappé (ouille) par [cet exposé](https://fosdem.org/2019/schedule/event/gnumes/) au FOSDEM 2019. Le sujet sous-jacent était « comment arriver à un compilateur C » à partir de... source. Et il est vrai que jamais je ne m'étais posé la question sous cet angle : arriver à faire qu'un compilateur pour un langage X soit écrit dans ce même langage X suppose... que l'on ait déjà un compilateur pour X. Ce problème se gérant soit par la disponibilité d'un autre compilateur, soit d'une version antérieure du même compilateur. Prenons un exemple : la première ligne de code de GCC-9 n'a pas pu être compilée avec gcc-9 (vu que celui-ci n'existait pas encore), mais avec une version antérieure, disons GCC-8, qui lui même a été pour la première fois compilé par GCC-7 etc (ignorons les versions mineurs pour la simplicité de l'exemple). Mais qu'y avait il au... tout début ? Serions nous capable de reconstruire GCC-9 (dont une partie est écrite en C++) sans GCC ? Une chaîne possible serait de passer par GCC-4.7, dernier GCC à être écrit purement en C, mais supportant le C++. Et on peut compiler GCC-4.7 à partir d'un autre compilateur, a priori plus simple, [TCC](https://fr.wikipedia.org/wiki/Tiny_C_Compiler). Mais encore faut-il être capable de compiler TCC, ce qui reste plus simple que de compiler GCC. [Ce dépôt](https://github.com/mmastrac/bootstrap/tree/master/bootstrap) montre un chemin possible pour bootstrapper à partir de rien. Et c'est fascinant ! On commence par un petit bout de binaire écit à la main (il faut bien !) pour aller vers un langage de macro simplissime, puis un assembleur simpliste et enfin un assembleur correct, une mini-VM etc. Il y a pleins d'approches intéressantes du problème, ce journal vous enjoind à jouer avec l'idée ! Quelques liens sympatoches : - les [slides](https://fosdem.org/2019/schedule/event/gnumes/attachments/slides/2848/export/events/attachments/gnumes/slides/2848/gnu_mes_fosdem19_v2.pdf) présentés au FOSDEM - un [wiki](https://bootstrapping.miraheze.org/wiki/Main_Page) sur le sujet. L'allégorie des dominos fonctionne très bien je trouve ! - une [justification](https://en.wikipedia.org/wiki/Backdoor_(computing)#Compiler_backdoors) au délire, qui dit en gros que si on compromet le compilo, on compromet tout ce qu'il produit (c'est la [Ken Thompson Attack](http://wiki.c2.com/?TheKenThompsonHack)) - [bootstraping a simple compiler from nothing](http://web.archive.org/web/20061108010907/http://www.rano.org/bcompiler.html) J'ai un peu honte de ne découvrir ça que maintenant, ça a l'air d'être un sujet bien étudié et avec pas mal de littérature, certainement plus probante que les quelques liens du dessus...

AltStyle によって変換されたページ (->オリジナル) /