Slashdot Mirror


Becoming a Linux Kernel Programmer?

Young Grasshoopa asks: "In my 6 years of IT life, I've been a sys admin, perl programmer, and a config. mgmt. engineer. I've recently learned programming in C, and somehow ended up learning a bit of Linux Kernel programming as well. I now have developed a strong motivation to become a Linux kernel developer, but given my background, I am not sure how to approach companies or Open Source Project groups. I ask all those who were in a similar situation - how do you become a full-time kernel developer?"

52 comments

  1. start for free by gmhowell · · Score: 4, Insightful

    Start for free. Sure, it sounds odd, but you have to get your foot in two doors. First, the linux kernel proper. Second, a company or position that will pay you for the privilege.

    If your code isn't accepted into Linus' kernel, why should they pay you? I'm sure there's a lkml faq that has answers for the first step. Finding an employer who will pay you... I understand Red Hat will have an opening, now that AC is taking a sabbatical:)

    --
    Jesus was all right but his disciples were thick and ordinary. -John Lennon
    1. Re:start for free by Anonymous Coward · · Score: 1, Insightful

      anyone who wants to to be a kernel developer can!. isnt that what open source is about anyways!

      why even try to be accepted!

      why dont you just fork. if your patches and fixes are good, people will be comming to you. if they arn't then well you should'nt be getting a change to put them in anyways.

      remember! kernel developers are not doing us a favour, they do what they like and what make them happy. you do the same! and you are a kernel developer.

      that is the ~BEAUTY~ of OPEN SOURCE no controls!

    2. Re:start for free by soloport · · Score: 4, Informative

      Finding an employer who will pay you...

      You make it sound so impossible. However...

      Today's Going Pay Rate for a Kernel Developer:
      * Excellent
      * $110K
      * Market
      * Open
      * $110K-$125K
      * Competetive
      * Open
      * Competetive
      * Market
      * $80K-$95K

      And that's just 10 of 56. And look at some of the salaries! And look at the fact that, it would seem, Linux is beginning to be used everywhere. Therefore, it would seem one might look forward to a long, lucrative career as a Kernel hack. No?

    3. Re:start for free by BrokenHalo · · Score: 1
      Start for free. Sure, it sounds odd

      Doesn't sound odd to me. IANALKD (I am not a Linux kernel developer, since I just made up the acronym) but I spent many years as a sysprog on mainframe (non-Unix) operating systems. My point is that this kind of thing should be what you do for fun, and if someone wants to pay you for it then you are a very lucky individual.

      The thing to do is to write the best code you can on a couple of projects, put them to one side for 3 months or so, then take another critical look at what you've written. If you still believe your code is hot shit, by all means submit it, but most of us (even the best of programmers) don't stand up too well under the cold light of this kind of self-examination.

    4. Re:start for free by Glonoinha · · Score: 1

      I thought Dice went bankrupt and out of business once people realized that Dice was just making up fake job listings that offered $100k to work on OSS and be a kernel developer.

      Oh yea, they did.

      --
      Glonoinha the MebiByte Slayer
    5. Re:start for free by soloport · · Score: 1

      I thought Dice went bankrupt and out of business... Oh yea, they did.

      That's funny. So the job I just got from a Dice posting is just imaginary?

      Hmmmm. The money I earn spends the same. Bankruptcy or not, Dice works for me!

  2. Have you considered checking by leviramsey · · Score: 5, Informative

    KernelNewbies?

    If you have, you may want to consider starting out as a kernel janitor (basically doing assloads of grunt work to build a name for yourself).

    1. Re:Have you considered checking by Rik+van+Riel · · Score: 1

      Also, don't forget the kernelnewbies mailing list and IRC channel.

      If you want to learn about the kernel, you're not alone. There are a few thousand people out there willing to learn about the kernel with you...

    2. Re:Have you considered checking by Alizarin+Erythrosin · · Score: 2, Insightful

      I agree 100%. I'm not a kernel programmer but my experience with other programming positions is along the same lines.

      I am a coder for a MUD. I started out doing the same thing the parent post talks about. I did grunt work. Small bug fixes, small improvements, minor tweaking of here and there. I took any project that came up, even those that nobody wanted. I had the C skills, but had no name made for myself with them. As time went on, I took on bigger and bigger projects and got promoted up the ranks. Now I'm one of the highest ranking coders (#2 IIRC) and still going strong. Of course, I don't get paid for my code, but I'm happy doing it. It's fun, and I enjoy it. Probably the same as kernel programmers who would do the work even if they didn't get paid.

      --
      There are only 10 kinds of people in this world... those who understand binary and those who don't
  3. Kernel Development by kzadot · · Score: 5, Informative
    Well its a strange question to ask, normally one becomes a Kernel Developer, by having a need, usually unsupported hardware, and they write a driver for it.

    I would consider myself a kernel developer at this stage, even before my driver is included in the mainstream kernel versions.

    It sounds like you are at this stage already, so are you actually asking "How do I get a driver included in the kernel as distributed?". Well I think the answer to that is to keep submitting it to the maintainer of the relevant kernel. Things like revelance, and especially quality are important factors too.

    For anyone at an earlier stage, perhaps "normal" programmers who need to learn how it all works in the kernel, I have (reccomend is too strong a word, as I have only read these 2 books on the topic) read 2 OReilly books.

    Understanding the Linux Kernel, 2nd Edition and Linux Device Drivers, 2nd Edition

    Of course you should also be on the linux kernel mailing list

    And the rest is dependant on exactly you want to add to the kernel.

    1. Re:Kernel Development by sydb · · Score: 3, Insightful

      Well its a strange question to ask, normally one becomes a Kernel Developer, by having a need, usually unsupported hardware, and they write a driver for it... It sounds like you are at this stage already

      To me it sounds like Young Grasshoopa wants to be a kernel developer because [s]he would like to be a kernel developer, not because they have a requirement for features no-one else is working on.

      In which case I would think the first thing [s]he should do is get themselves a purpose. Or, as others have suggested, become a janitor or documentation writer.

      Not that I know what I'm talking about as I'm not a kernel hacker, but I acknowledge that there would be a certain coolness about being one.

      --
      Yours Sincerely, Michael.
  4. Here's a way... by Anonymous Coward · · Score: 5, Insightful

    the easiest way would be
    to start as a part time kernel developer.

    find something wrong.
    fix it.
    find who's in charge of that code.
    send it to them.

    if there's not anyone,
    contact one of the high mucky-mucks,
    and let em know.
    maybe the maintainer will be you.

    1. Re:Here's a way... by kurosawdust · · Score: 1

      Garth! That was a haiku!

  5. Clarification by Photar · · Score: 1

    I think what he is asking is how does he con his (current|future) employeer into paying him for kernel development.

    --
    He who knows not and knows he knows not is a wise man. He who knows not and knows not he knows not is a fool.
  6. Re:A word of advice by 0x0d0a · · Score: 2, Insightful

    An OS programmer compared to a low-level IT worker? You must be joking.

  7. getting acquanted by bmac · · Score: 5, Interesting

    Your best bet (not that I have done this or have any inclination to do so) may be to be a part of documenting the code area(s) you are interested in working on. This will thoroughly acquaint you with the code and provide a much-needed service that may get your foot in the door.

    Just a thought,
    bmac

    Peace be with you all.
    Manual .sig generator v.1.0.

    1. Re:getting acquanted by Anonymous Coward · · Score: 0

      You are suggesting that because you want some documentation for the bmac driver but's too cheap to do it yourself?

    2. Re:getting acquanted by Anonymous Coward · · Score: 0
      you're a fucking idiot, it's his username.

      plonk

  8. Re:A word of advice by Anonymous Coward · · Score: 0

    he-he, nice troll

    The most highly paid certs are Cisco CCNP ones, I know a dude maintaining 100K straight after college with a CCNP.

  9. LKJP by meowsqueak · · Score: 4, Informative

    The Linux Kernel Janitor Project might be a good place to start.

    http://sourceforge.net/projects/kernel-janitor

  10. Re:A word of advice by Anonymous Coward · · Score: 4, Interesting

    Nevertheless - the parent post does have a point. Kernel developing isn't going to be very lucrative. One of my friends had his contributed code accepted into the Linux kernel - for a little bit of fame, glory and geek points. I think the only mainstream OS developers that get any money these days are at Microsoft and Apple (or behind closed doors at IBM, Sun, etc).

    OS design and IT work still solve technical problems - but the deeper ones such as OS design are a lot less visible to the pointy-haired-bosses than the "my printer doesn't work" ones. Therefore they're a lot harder to get $$$ for in general.

    Having written an OS (as a toy back in '96), it's not that amazingly glamorous, there's a lot of painstakingly detailed work.

  11. I'd go for hardware companies by snowtigger · · Score: 4, Interesting

    Assuming you want to get paid, I think there are two "easy" ways of getting to do kernel programming.

    The first one being embedded systems. A few friends have already done that. There are lots of companies making their own hardware devices: firewalls, toasters, gadgets, etc. Linux is a popular OS for that market and you're likely to touch different parts of the kernel.

    The other market is device drivers hardware (Printers, webcams, network cards, joysticks, etc ...) Companies making computer hardware need drivers for them and somebody has to code them.

    Good luck !
    ---
    If you're not living on the edge, you're taking up space in the middle

  12. Do something by kinema · · Score: 3, Interesting

    Find something that you think the kernel needs or that the kernel needs to do better and work on it. Look at areas of the kernel that you specifically use (i.e. networking, NFS, Netfilter, etc.). Work on something that matters to you and nothing bad can come from it. that.

  13. Kernel Hacking How-To by Anonymous Coward · · Score: 2, Funny
    A few easy steps on how to become a kernel hacker (with sincere apologies to all kernel hackers):
    • wear sunglasses at night
    • get your caffein IV
    • eat cold pizza
    • 100BaseT IV, maybe IEEE802.11g
    • get a plush tux
    • avoid direct sunlight
    • print out the entire kernel code and pin it to the wall (might require additional houses)
    • eat more cold pizza
    • subscribe Playboy(tm)

    Now, I've never met or know any kernel hackers, so the points above are just wild guesses... ;)
  14. Prove your sk33lz by n1ywb · · Score: 3, Informative

    Linux "kernel development" is a pretty broad term. It can mean anything from mucking with the lowest of the low level junk to writing simple device drivers from existing templates, which mostly amounts to filling in some blanks.

    Getting paid to develop low level kernel functions is probably the hardest thing to do. Partly because it's just very challanging programing. In fact a lot of it is less programing and more mathematics. If you haven't taken a class in Discrete Mathematics and done well, it's probably not for you. You may still be able to handle low level hardware interface issues, but forget about coming up with any brilliant new VM algorithms. It's also hard to get a job doing that because companies know that very few people on Earth can do it consistently well. Also, most companies don't see a direct benefit from it and therefor don't care since they can't see past their nose. They don't care that Linux will have 0(1) scheduling in two years if it doesn't increase sales tomorrow. This type of kernel development is typically bleeding edge and reserved for super-geniouses with a vision.

    The easier way to get into kernel programming is probably driver development. There are a lot of companies that design computer hardware, and (hopefully) they'd all like to have Linux drivers for their products. Drivers are relatively easy to develop (once you know how), they all have a lot in common and there's a pretty good body of driver source code you can work from, and a large body of theory available in text books and whatnot. Writing everyday drivers typically isn't bleeding edge work and can be performed by your average sub-genious.

    Either way, getting a job in the computer industry is hard right now. It never hurts to apply for jobs, but your odds of actually getting one will be a whole hell of a lot better if you have some kind of programming portfolio you can use to show off your stuff. Companies will be a lot more likely to hire a tried and true kernel programmer than a wet-behind-the-ears newb. So I recomend you get friendly with some of the kernel maintaners, reverse engineer some hardware, or pick a piece of the kernel and just do some work on it. Produce something good and then you can show it off when you get interviewed. You can't buy that kind of credential.

    --
    -73, de n1ywb
    www.n1ywb.com
    1. Re:Prove your sk33lz by Anonymous Coward · · Score: 0
      They don't care that Linux will have 0(1) scheduling in two years if it doesn't increase sales tomorrow.
      Did you really just write zero(one) scheduling?
  15. ESR's papers by n1k0 · · Score: 1

    Understanding the mentality of the open-source communities might be of some help. Eric Raymond's essay titled "Homesteading the Noosphere" talks a bit about the hacker cultures surrounding Linux and other open-source projects. I'd also suggest reading his essay titled "The Cathedral and the Bazaar". Both essays are mostly Eric's own observations, experiences, and opinions relating to open-source communities, and the CATB in particular has some insightful reflections on software engineering in general.

    -Nick

    1. Re:ESR's papers by Anonymous Coward · · Score: 0

      He's looking for a job not a half-baked philosophy

    2. Re:ESR's papers by Anonymous Coward · · Score: 0

      Sir, you do a disservice to the word "philosophy" by using it in reference to that tripe.

  16. Exactly like any other open source project by movement · · Score: 4, Informative
    There's nothing unique or special in Linux kernel programming as compared to hacking on, say, Mono, or KDE.

    You get into the projects in exactly the same way: start off doing some small useful things (docs, janitor work, UI design, whatever) and then sooner or later you'll inevitably find yourself maintaining a driver or whatever. Next thing you're making changes to sub system APIs, and you work from there.

    There's no magic and there is no cabal.

    If you're asking about specific organisations to help you on the way in, the other posters have already mentioned kernel janitors and kernel newbies, both of which are good.

    I became a kernel hacker through a rather unusual route: my M.Sc. supervisor spotted missing functionality and suggested I had a crack at it.

    --
    -- Remove the trailing '\0' to email me.
    1. Re:Exactly like any other open source project by The+Clockwork+Troll · · Score: 1
      You get into the projects in exactly the same way: start off doing some small useful things (docs, janitor work, UI design, whatever) and then sooner or later you'll inevitably find yourself maintaining a driver or whatever. Next thing you're making changes to sub system APIs, and you work from there.
      You forgot to mention a couple stages:
      • The "I have a little clout now so I'm going to use my veto power to nix any idea that doesn't mimic the way I want to do things" stage
      • The "You guys are all idiots and I'm leaving the project - best of luck, this used to be fun but now it's just a lot of whining and ego-stroking" stage
      • The "I used to actually write code but now I just bitch about things" stage
      --

      There are no karma whores, only moderation johns
  17. Motivation? by Breakerofthings · · Score: 3, Insightful

    I think wanting to contribute "just because" is motivation enough ...

    At my POE, we are planning to rewrite a lot of stuff real soon now; when we do so, we intend to create a LOT of generic, reusable components a) for our own benefit, naturally and b) so we can contribute (the now not-so-proprietary) code back to the community, because essentially, without Free Software, we would not be able to operate (and trying to convince the boss to give money is futile ;).

    My point is, simply wanting to contribute back to the community that many of us have benefitted so much from is motivation enough; why would you suggest that someone only contribute when they have a personal need for a feature set? Isn't that sort of selfish? And so what if someone just wants to contribute for "geek points" or ego, or whatever; their code shouldn't make it into the kernel unless it is up to snuff, so to speak, so who the hell cares what their motivation is?

    1. Re:Motivation? by sydb · · Score: 1

      Quite right; I simply meant that the motivation "to contribute" will lead nowhere unless it goes hand in hand with a tangible purpose - a pragmatic outlet for magnanimous energies, rather than an aimless outlet.

      --
      Yours Sincerely, Michael.
    2. Re:Motivation? by Breakerofthings · · Score: 1

      Which sort of brings us back to the original question, doesn't it?

      So give the guy a suggestion, if you have one, to channel his aimless enthusiasm into something more pragmatic.

      That is really the question he was asking, sort of ... "where can I start?"

  18. Start with drivers by mnmn · · Score: 4, Informative

    Find a network card that is ill-supported in Linux and start working on it. See if you can find the card in used computer places and start tweaking the code.

    A while ago when I was trying out a new kernel version I saw that one of the cards I had did not compile well. I dug into the code and saw a function name change was all that was required. I had to tweak another kernel a little to get it to compile under a new gcc version. No it didnt run well but it did compile and boot.

    Just exploring like this and reading the kernel hackers guide driver guide and other things will give you a good handle on the internals, at least from the drivers perspective. Several month of kernel tweaking later, the vm, scheduler and the other stuff will become clear as you gain interest. However the market will be biggest for kernel ports to new architectures and drivers for newer network adapters. Keep your skills sharp there, build a portfolio and surf dice.com regularly.

    --
    "Give orange me give eat orange me eat orange give me eat orange give me you." -Nim Chimpsky
  19. How to become a kernel programmer by Anonymous Coward · · Score: 1, Funny

    You have good chance if you're gay or drugged.

    1. Re:How to become a kernel programmer by Anonymous Coward · · Score: 0

      than i'm two lucky men

  20. Why do anything? by phorm · · Score: 3, Insightful

    Make a compilable module for the kernel. It doesn't actually have to be in the kernel-proper code to be useful as lots of companies release 3rd-party kernel-module-source (my fasttrak promise TX2000 pro RAID card, and also the DIGI multiport card for example).

    If it's useful and stable enough to be of benefit to the linux users at large, perhaps you could then lobby to have it put in the base kernel. One trick would simply be to find out a new technology or popular device that is coming out and create a decent driver module for it...

  21. Other kernels by sleepingsquirrel · · Score: 2, Interesting
    If by full-time kernel developer you mean you want to get paid to hack on the kernel, then linux is what you want. But if you are just itching a sratch you might also want to have a look at other free kernels. Besides the BSDs you might want to look into the GNU/Hurd. It has a pretty nifty architecture that hasn't really been done before, and since its not polished like Linux, there's still plenty of non-trivial, non-clean-up stuff that newbs can make a meaningful contribution to. And because we're such a small pond, that means you automatically become a big fish. Here's some sites to get you started...

    The official GNU/Hurd page.

    The help-hurd mailing list archive.

    1. Re:Other kernels by Zachary+Kessin · · Score: 2, Interesting

      BSD represents some fine code, But I personally would stay away from the GNU/Hurd Kernel its been "almost ready" for 10 years or more, and shows no sign of getting much past that point any time soon. There may be some good ideas in there but it seems to be to a day late and a dollar short.

      If you don't want to muck about in the linux kernel you can also look at a lot of the application code that is floating around. Gnumeric, GIMP, perl, MySQL, apache etc. Once again find something that needs doing and start doing it. They probably all could use some documentation somewhere (OK several of those projects have very good docs). Or could use testing or transation to a new language.

      The other thing you could look at doing is start building a test suite for an application. Better tests are always useful.

      --
      Erlang Developer and podcaster
    2. Re:Other kernels by Anonymous Coward · · Score: 0

      I know it's common belittle HURD without knowing much about it, but HURD does have some solid ideas behind it, things that have not been done before, and things that are interesting. If completed, HURD _WILL_ offer things that Linux, BSD, and traditional Unix don't, so I don't think "a day late and dollar short" is fair to say at all. Perhaps the reason it hasn't quite gotten its feet off the ground is because it has high ambitions. Whether or not they produce a full-featured, usable sytem anytime soon, surely HURD is a great thing to tinker with, and something to watch.

      And hey, if more people contribute to HURD as one poster suggests, then it will fix that "almost ready" problem, won't it? Or at least, that's the theory...

      Check out this page for more philosophical information about HURD. Some of the ideas really do speak for themselves, debunking the "Hurd is just linux--" myths. Whether they actually get this working well and ready to go is another question, but we should all hope that they do.

      Who knows? Maybe with your help, they will. I'm sure there is room for the next Linus or Alan Cox of GNU kernel development. :P

    3. Re:Other kernels by Zachary+Kessin · · Score: 1

      Your right Hurd is not like linux, Hurd has neat ideas. Linux has solid working code. The truth of the matter is from the 1.0 point a OS kernel takes 5-8 years (or more) to get really solid. Linux has had a large team with good management (linus et al) working on it for 12 years now.

      Hurd may have ideas that Linux and BSD don't but when will it be ready to use in a mission critical setting? The truth of the matter is that the developers who know kernels well are doing linux and BSD.

      --
      Erlang Developer and podcaster
  22. Real simple answer: code better kernal functions by Anonymous Coward · · Score: 0

    I suspect many many people and companies would much rather you spend your time writing public domain replacements for the linux kernal parts.

  23. Re:A word of advice by Interesting+Username · · Score: 1

    Look at the front page of /.. At time of writing this post, you'll see an article about how Linux is the future of embedded devices. There is a potential market building as we speak.

  24. Comment removed by account_deleted · · Score: 1

    Comment removed based on user account deletion

  25. Re:A word of advice by bigusputicus · · Score: 1

    Hmmm... so as I best recall from working at places like HP and Sun for most of the 80's and 90's... Unix Kernel developers were king of the hill. I'm talking about the folks that developed the VM system, Threading, Networking, core kernel work... (i.e not so much device drivers as lots on none core kernel folks contributed) Thru the late 80's into the mid 90's the graphics developers i.e hardware/software think framebuffers/opengl become very much in demand, required alot of math besides programming Core database developers have (i.e oracle kernel, sybase kernel) been hot the entire time In regards to OS Development vs IT careers there are alot of variables. They are such different disciplines and a very different culture. I've worked in both, started in IT (4yrs) then moved into engineering; database, networking, os, graphics (17 years). Finding both a culture and type of work can be challengine but very rewarding once you've found what meets your requirements. In regards to compensation, it really is supply and demand that drives the salary ranges. So in a long winded way... how to get started in OS development... At places like HP and Sun there are multiple tracks to doing this * Customer Support (in-house) people are assigned to specific areas of system functionality, i.e system commands, system libraries, networking, device drivers etc... * Sustaining Teams, they are supporting the customer support folks provide patches for released baselines * Technical Marketing, They are working closely with development and customers * Consulting Teams, They too are working closely with development and high profile customers * Any development team that is developming new hardware for an OS platform (graphics, storage, et c...) * An OS development organization... just get your foot in the door and the rest will happen as you develop your skills. You might consider (unit test development, system services development, buildmeister, lab administrator)

  26. no dinero needed by Anonymous Coward · · Score: 0

    first rule take no money, linux = love. second, renounce any affiliation with windows....no more games on windows platform. third....ask wife...if she'll pay your bills...rember u'll need u'r own money for the attorney u'll be hiring to divide joint property....remember open source means free ...which means u must work for free.....or face the LAMS (linuxers against money society....they eat the old computer parts from left over junk systems...it's free). Rember....Money has no meaning here in the world of LINUX.

  27. Re:A word of advice by Anonymous Coward · · Score: 0

    Actually RHCE surpasses CCNP and CCNE in average yearly salary.