39
votes

I currently work in a professional capacity as a software engineer working with the Android OS. We work at integrating our platform as a native daemon among other facets of the project. I primarily work in Java developing the SDK and Android applications, but get to help with the platform in C/C++.

Anywho, I have a great interest to work professionally developing low level for linux. I am not unhappy in my current position and will hang around as long as the company lets me (as a matter of fact I quite enjoy working there!), but I would like to work my way that direction. I've been working through Linux Kernel Development (Robert Love) and The Linux Programming Interface (Michael Kerrisk) (In addition to strengthening my C skills at every chance I get) and casually browsing Monster and similar sites.

The problem I see is, there are no entry level positions. How does one break into this field? Anytime I see "Linux Systems Programmer" or "Linux Device Driver Programmer" they all require at the minimum 5-7 years of relevant experience. They want someone who knows the ropes, not a junior level programmer (I've been working for 7 months now...).

So, I'm assuming, that some of you on stackoverflow work in a professional capacity doing just what I would like to do. How did you get there? What platforms did you use to work your way there? Am I going to have a more difficult time because I have my bachelors in CSC as opposed to a computer engineer (where they would experience a bit more embedded, asm, etc)?

EDIT FOR CLARIFICATION! I am aware of the opensource nature of the linux kernel/drivers etc. I plan on contributing regardless of where my day job is. I'm more curious of what kinds of entry level positions will allow me to do relevant work and get paid doing it! Thanks for all the replies so far!

2
  • 6
    Very simple. Linux is opensource. Just follow the development list, fix some bugs, after you know your stuff, start maybe writing bigger stuff like new features, optimizations, maybe some drivers... Feb 27, 2011 at 23:30
  • 2
    But prior to choose any area in Linux you should have a through understanding of working of Linux and some hands on. Lets say you must have knowledge of Linux file system etc.
    – user29973
    Apr 26, 2013 at 14:04

2 Answers 2

36
votes

I write Linux device drivers for my company, and I got into this position by knowing the most about Linux development in my department and they promoted/hired me into a new role. It was very much a junior level style entry, so they do exist and don't lose hope!

My immediate advice for you is to see if you can narrow down your focus. Kernel programming is very different from system programming is very different from device driver programming.

  1. Kernel developers focus on interfaces, data structures, algorithms, and optimization for the core of the operating system.
  2. System programmers write daemons, utilities, and other tools for automating common or difficult tasks.
  3. Device drivers use the interfaces and data structures written by the kernel developers to implement device control and IO.

A very good kernel programmer may not know a lot about interrupt latency and hardware determinism, but she will know a lot about how locks, queues, and Kobjects work. A device driver programmer will know how to use locks, queues, and other kernel interfaces to get their hardware working properly and responsively, but he won't be as likely to fix a page allocation bug or write a new scheduler.

So, pick what interests you most, perhaps by surveying development lists or bug trackers, and see what kinds of impact you want to make. Then, contribute and build experience by working on those projects and efforts. When your name/email is attached to code in the kernel mainline, then you'll have experience you can point to in your resume/cover letter for other positions :-)

4
  • 3
    Interesting, but maybe not a magic bullet. Feb 28, 2011 at 2:34
  • 7
    Magic bullets rarely exist.
    – Ed S.
    Feb 28, 2011 at 3:02
  • Thank you for your input! I will work at narrowing down my focus (eventually I would like to have an understanding of all facets) for now. In what capacity (if you are at leisure to disclose) did you work at prior to becoming the "go to guy" for the drivers? Feb 28, 2011 at 15:59
  • 4
    Believe it or not, but I was tech support for customers using the hardware and sales trying to understand it: I answered email and phone calls. But my side experience in kernel and user-land development for Linux helped me more. Feb 28, 2011 at 16:20
3
votes

I am a software developer with 15+ years experience working at Motorola and a few other hi tech companies. I have a BSCE degree. So I'm not an amateur.

This question... how to break in... is a common one not only for Linux but for virtually any area of specialization. Software engineering has become just like medicine in that practitioners must specialize. But when your company downsizes and lays you off after 10 years of being a specialist, you find the job market has changed and you're not current. Companies used to not be so selective - frequently now the only candidate who has all the skills in the wishlist are those already working for that company or a direct competitor! Its become quite tough.

I am in this situation now and while its hard, there are a few strategies you can use to get hired. But first, you MUST become proficient in the technology because if hired, you'll be expected to produce. Once you feel ready, consider the following:

  1. Look for a small company to start with. They cannot be so picky about who they hire as are the big guys. Spend a year or two there and after that, you'll have the professional experience on the resume to qualify.

  2. Consider contracting, especially if you are not working full time. Companies are much more willing to take a chance on a contractor than full time. Again, once you have verifiable experience to put on your resume, it opens doors.

  3. Do a small project or two on your own and create a portfolio to present to prospective employers. This may open the door to entering not only a small company but a midsized one as well.

In addition to the above, consider using a professional recruiter from a company such as Kforce, Aerotek, etc. The employer pays the recruitment fee and the recruiter will help sell you in a way that you cannot do on your own.

Actually, a "junior programmer" with only 7 months experience has a huge advantage over a guy like me when trying to get hired to do something new. Companies LOVE "fresh-outs"/"new grads" because they know you won't ask for much money and will be willing to do WHATEVER THEY ASK including long stints overseas if required. Companies won't hire me for a junior position even if I applied for one because they know I will be looking to leave for a better one straightaway. Your situation is not that bad.

Good luck!

Not the answer you're looking for? Browse other questions tagged or ask your own question.