Hi all,<p>I want to ask for advice regarding getting a career in system programming. I have about 7 years of professional working experience. Last 4 years has been in the area of full-stack development (Typescript, MySQL, AWS, etc). Prior to that, I spent 3 years working on Android OS, but more on the frameworks layer (Java, C++, C), while also having some level of exposures on low-level Android code (i.e. HAL) and Linux kernel programming.<p>I've been really interested to have a career in a low-level system programming, especially in Linux kernel. But there are some obstacles: (1) Other than hacking as a hobby on the side, I don't have a concrete portfolio in system programming that I can show off to get an interview. (2) I'm currently based in South East Asia (Singapore), and it doesn't seem like there's that many system programming positions here?<p>I'm very tempted to take a few months off, to focus on building a portfolio around system programming. My questions are: (1) what would be a good project to work on or OSS to contribute to land a system programming job? (2) what career prospect is there for Linux kernel development? (3) what are the recommended system programming language with good career prospects? (4) how hard it is to get a remote system programming job? (5) is it a good idea to get an internship position to get my feet wet vs. just building a side project?<p>I'd really appreciate it if somebody in the industry can enlighten me :)
Can't answer all your questions, I'm a hobbyist here, not a professional, but I can offer a bit of insight on a few of them<p>1) The Linux kernel would be a good one to start. There are a lot of good resources out there for getting started with that. Work on similar <i>nix kernels could be helpful too. I've done a little work on the FreeBSD kernel which has decent document, and NetBSD, which has poorer documentation, but a bit better code quality and a helpful community.<p>2) A good bit of companies hire people to do direct work on the kernel. Redhat is the first that comes to mind. I imagine most if not all of the Big </i>N* companies have teams working on doing kernel work. Many hardware and silicon companies also have kernel work available. Not sure about companies in your specific market, unfortunately.<p>3) C mostly. I imagine having solid C++ knowledge, but I don't think there's much, if any, C++ directly in the Linux kernel. Knowing other languages never hurts, I see a lot of relevant job postings mentions Python / Perl, I assume mostly for automation. For more specialized roles I imagine there are some other languages that could be useful.<p>I can't give much information on the other questions, as I'm just a hobbyist. If I said anything that's flat out wrong, please feel free to correct me.
May I assume that you read <a href="https://lkml.org/" rel="nofollow">https://lkml.org/</a> ? If you research the contributors, then you will be able to identify where they work and thus identify any possible job openings.<p>Google's Fuschia project might also be of interest.<p>In general, kernel level programming requires years of experience. Most of the work entails device drivers and sub-systems, e.g. filesystems, networking -- all of which rely on knowing standards and their implementations.<p>Being located in SE Asia, I would think that equipment manufacturers could be interested in your skills in writing device drivers for their products. Another area might be embedded systems, which in addition to Linux might use one of the BSD variants.<p>In order to be effective at the low-levels, you need a good grasp of CPU architectures and their many idiosyncrasies. In addition to x86-64, ARM and RISC-V knowledge should be very applicable.