4 ms·
Everyone can do kernel development. Linux and the BSDs guarantee that. To get a kernel engineering job, once you've gathered some experience, you could become a
by anyfoo 4y ago
Everyone can do kernel development. Linux and the BSDs guarantee that. To get a kernel engineering job, once you've gathered some experience, you could become an embedded engineer, or e.g. a driver engineer... Modern kernels are vast, there is always opportunity to branch into new areas.
If the question is how to learn kernel development, I would say it probably involves reading some books about modern OSes in general as a primer, reading specs (e.g. the reference manual of the CPU; just like other references you fortunately don't have to read all of it to get started), and reading lots of kernel code (that will be true throughout your entire career). The aforementioned OS kernels also contain documentation that really helps getting into specific areas.
You can most likely find some good lists. I started long enough ago that I have a hard time recommending any specific resources. It was during a time where there were entirely "unmodern" OSs around, such as MS-DOS or OSs on home computers, so my learning involved some transitioning between OS paradigms, mostly going from simpler to more complex. That would not really apply today.
It's also hard to make general recommendations in the first place, because parts of the kernel range from high level, where the jump from userspace programming is not that far, to potentially rather arcane, such as low level memory management or context switching code.
From a glance at your comment history, it's very likely that there's some part of the kernel where you can just jump in, and expand as necessary.
- livueta 4y agoThis is all great advice. > probably involves reading some books about modern OSes in general as a primer > I started long enough ago that I have a hard time recommending any specific resources. Having gotten into kernel programming in the last decade I'd just like to offer a specific recommendation that really helped me out: https://www.amazon.com/Design-Implementation-FreeBSD-Operating-System-ebook/dp/B00O56CFEE https://www.amazon.com/Design-Implementation-FreeBSD-Operati... I started out literally just reading stuff in the source tree/man(9) (which was informative!) but then my employer gave me a copy of this book, and I found it to be a super-helpful aid in understanding the general organization and motivation of the kernel: what kinds of tasks and problems each component needs to address, how components interact with each other, and the basic building blocks by which these things get done. I found that having a higher-level understanding of the what/why of each bit, covering algorithm/data structure details but probably not the exact code implementation, made grasping the actual kernel code a lot easier. Oh, also: dtrace is a very fun and interactive way of getting a live peek into FreeBSD kernel structures without doing a whole bunch of scary recompilation. You can e.g. start digging around in `curthread->td_proc` on a process you control and you'll discover a whole lot about how the kernel manages processes.