Hello and good day.
I have a dream of one day contributing to the Linux Kernel on Github (I am a fan of Torvalds), my first great exposure to the Linux world was when I used the Backtrack 5 OS.
However, going through the repo, it looks like some cooked up potion by some dark arts magician in Hogwarts; I basically do not understand the architecture even though I do understand some C.
Where do you think I should start from, to achieve this little goal of mine?
As I believe and know that life, life is full of surprises, I may pivot later on to something else, however I want to be so good at this thing that I become a serial contributor to the Linux Kernel.
P.S: I am bad at watching video tutorials. I prefer texts.
Thanks.
I almost cried looking at the page and clicking each link.
I am not complaining or being lazy, however, I must ask, am I supposed to understand the whole thing before I contribute?
I mean, I don’t mind, but it is a lot of info to bite.
If I go through it all, for months, years, I hope it’s worth it.
I don’t mind at all fr.
I want to understand this thing, be very good.
To be honest, I had never looked at this or the kernel code before.
But two things I’ve noticed at a glance:
Those docs are actually very simplified. For example, when talking about locks the doc spends no more than 1 paragraph explaining a mutex. This is a complex topic that would take many pages in a book just to provide a very basic understanding. And you’d likely need more than “basic understanding” to handle mutexes at the kernel level.
It’s probably not necessary to know everything to make a small contribution to the kernel. The docs are comprehensive, they talk a bit about everything.
If you are serious about understanding this stuff, I’m guessing that you’d need to have some solid knowledge on Operating Systems and on Computer Architecture. Knowing some assembly wouldn’t hurt either.
And we are having a very good conversation. Thank you.
I do have a good understanding of both topics (OS, and Comp Architecture).
I actually studied them in school. Like many, I believe I do not yet understand it since I can’t practicalise this knowledge.
Assembly wouldn’t hurt, indeed.
While I believe that there is nothing one cannot learn, I also believe that some things are much harder to learn than others. By the way, this thread is not about C books, it is about the path to Linux Kernel contributions. Maybe name the thread like this?
The Linux kernel is an endeavor of thousands of subject matter experts over 30+ years, rooted in even more years of work that can be tracked back to the 1970’s and 1960’s. Be prepared to invest some years of learning to understand or contribute to some of the code.
I also think, there is not the kernel architecture. There is hundreds of parts with individual architectures. There is even concurrent architectures within each part. And differences between CPU types and other hardware.
Maybe it’s easier to dig into device drivers or kernel modules before trying the kernel itself. There is better ways of focussing on such clearly bounded code libraries. And these communities are more likely open to contributions from new people when they help support new hardware.
My advice would be:
Pick one part (e.g. memory management), then dig into it and study the documentation about it. Then pick something from that part and go deep into it.
Don’t try to contribute directly. Engage in the community and look for help in understanding the existing things first. This way you will get a feeling for when and what to contribute.
As the kernel is not a hobbyist project, community status is the door opener to successful contribution. Build their trust in your ability to contribute.
Last, not least: Books are not the source of knowledge when it comes to the Linux kernel. There are books, but they were outdated the day they hit the shelves. Study code, ask the community for literature to study the concepts behind the code, build your own code to observe the concepts at work (that’s what Linus did when he wrote Linux).