I've written before about being a self-taught programmer. My path into the field was a bit haphazard, but one thing I've noticed is that my trajectory always moved down. Down from the frontend to the backend to the container to the vm to the host. Currently I work largely at the container abstraction layer. I've got some working knowledge of the linux primitives that serve as the foundation to my current world and the specs that make up the boundaries. I think the roots of that call deeper come from just wanting to understand things. I feel the calling from the deep. I read about the wizards at BBN and I want Halt and Catch Fire, and I feel truly jealous. Jealous of the time they lived in and their level of impact, but also jealous of their knowledge and their accomplishments!
And given that obvious trajectory, it seems a forgone conclusion that I'll end up in the metal soon enough. I suspect in a couple years I'll be writing firmware in Rust or working for Oxide (ha, that would be an impossible dream!) I spent some time going through some books and course on low-level programming a few years ago. I loved Nand2Tetris and managed to slog through CS:APP (which I really loved but felt over my head). I've loved all the flirtations I had with embedded elixir and talks I've seen embedded Rust.
And yet I just cant’ seem to make the commitment to move beyond userspace! (That's a great title for this series: 👽Beyond Userspace 👽. Gonna use that.) I think if I'm honest, its fear. Its a daunting field. Huge, impenetrable, populated by giants! I was dozing this morning and thinking about something Bryan Cantrill said: (“Soul is our Odyssey”)[https://www.youtube.com/watch?v=4PaWFYm0kEw#t=17m12s]). If that's true, systems programmers are, to me, a bit like Olympian gods or maybe demi-gods…But I feel like I've been bitten by some bug! I just can't seem to drop the subject. And so in the coming months my plans is to:
- Reacquaint myself with the basics of Rust
- Work through writing a VM, compiler, and interpreter in rust
- Work through bootloaders and simple kernel in C
- Learn how to contribute to the Linux kernel and land a patch
- Work through the rust embedicon
- Basically move down into the firmware and root around in the metal!