Nick Desaulniers, a compiler and Linux kernel engineer, writes tutorials on C, assembly, JITs, debugging, and kernel development.
HN commenters praise the blog as fascinating and use his posts on JITs, designated initializers, and kernel patch submission as references.
QEM[2][3] & write shell script with option to a) "compile latest source & run the just compiled OS under QEM emulation" OR b) run known working OS under qem with development environment/tools for messing with source used in part a.
Advantage: on same box, one window can be the development environment. other QEM can compile/run in different window to test what was done via development environment. aka edit english paper in word processor & save. view/print the compiled results in different window.
grub / uboot[1] would be what pc hardware bios would use in place of the above QEM shell/boot script.
[0] : https://en.wikipedia.org/wiki/GNU_GRUB
[1] : https://en.wikipedia.org/wiki/Das_U-Boot
[2] : https://nickdesaulniers.github.io/blog/2018/10/24/booting-a-custom-linux-kernel-in-qemu-and-debugging-it-with-gdb/
[3] : Helpful info QEM to kernel vs QEM to bios with bios booting/loading kernel : http://unix.stackexchange.com/questions/397939/turning-off-kaslr-to-debug-linux-kernel-using-qemu-and-gdb
I love it! I just finished a blog post on cross compiling [0] which alluded to needing to have crt*.o and friends available. I was just considering exploring them in a follow up post, but I think this talk was even better and I could just point people to it.
My favorite quote from the video, paraphrased, is: "get locale is per thread, for looking up what decimal separator you'd need, so you can have a server with multiple threads where each thread has its own locale."
Also, it's neat seeing the write syscall from the interpretation of the '\n' char; years ago when using Emscripten, sometimes it seemed printf wasn't working. Turns out, our implementation of printf also buffered writes up to '\n' characters. IIRC, write was implemented with JavaScript's console.log.
[0] https://nickdesaulniers.github.io/blog/2016/07/01/android-cli/
> This is not what this article does.
Discounting books, many other well written articles on JIT have been shared on HN over the years [0][1][2]; the one I particularly liked as it introduces the trinity in a concise way: Compiler, Interpreter, JIT https://nickdesaulniers.github.io/blog/2015/05/25/interpreter-compiler-jit / https://archive.vn/HaFlQ (2015).
[0] How to JIT - an introduction, https://eli.thegreenplace.net/2013/11/05/how-to-jit-an-introduction (2013).
[1] Bytecode compilers and interpreters, https://bernsteinbear.com/blog/bytecode-interpreters/ (2019).
[2] Let's build a Simple Interp, https://ruslanspivak.com/lsbasi-part1/ (2015).
I think I found this when I was reading a tutorial on JIT compilers: http://blog.reverberate.org/2012/12/hello-jit-world-joy-of-simple-jits.html
Which I found in a simpler tutorial: http://nickdesaulniers.github.io/blog/2013/04/03/basic-jit/
TLDR;
It describes a programming competition/challenge that involves building programs in a self-contained VM that is built on its own programming language and system, meant to have been "discovered" as an ancient computing platform from thousands of years ago :)
The process for submitting patches probably has an even larger deterrent effect than the personalities: http://nickdesaulniers.github.io/blog/2017/05/16/submitting-your-first-patch-to-the-linux-kernel-and-responding-to-feedback/
I think I saw a quote from Linus that this is a good filter for non-serious contributors, but it is an additional barrier for anyone who might want to get involved.
These are called desginated initializers, they're part of C99.[0] This is a good read which discusses them and also devles into compound literals.[1]
[0] https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html
[1] https://nickdesaulniers.github.io/blog/2013/07/25/designated-initialization-with-pointers-in-c/