Applying to Outreachy

The Outreachy application process is a lot different from a normal job application process. There’s no formal interview and no white-boarding. You need to fill out the eligibility application, complete some project related tasks, and then fill out your final application. The project related tasks can be time consuming, so I would encourage anyone that’s interested in an Outreachy project to try to get an early start!

The project related tasks that you need to complete for your application depend on the specific project that you’re applying to. I applied to Linux kernel projects, so my application required a number of small, cleanup patches for Linux device drivers. The cleanup patches are fairly simple and typically don’t require much knowledge about the driver code; they consist of things like fixing typos, adding and removing whitespace, and just generally fixing the code to comply with the kernel coding standard. The patches are a little boring, but you’ll learn a ton about the Linux kernel patch submission process. The cool thing about this cleanup patch requirement is that, if you choose to work on a bunch of different drivers, you’ll get to see a lot of different things and get feedback from a multiple driver maintainers.

I was really intimidated by the patch submission process at first. The kernelnewbies tutorial has a lot of information, which is very helpful but can also be overwhelming. Once you’ve submitted a patch or two, you’ll find that it’s actually a fairly simple process. So, if you’re really interested in getting involved with the Linux kernel but feeling overwhelmed by everything, just take your time, read through the tutorial, and start working on a patch. You might not understand everything in the tutorial the first time you read it, which is normal. Just review the tutorial occasionally as you prepare a few patches.

The best thing about the Outreachy application process for the Linux kernel is that there is a small group of experienced people that closely watch the Outreachy kernel mailing list and are happy to help out. If you’re considering applying for an Outreachy internship with the Linux kernel, I’d highly encourage you to read through the tutorial and submit a patch!

My Workflow

Recently, some of the Outreachy interns were discussing our workflows. So, I thought that a short description of what I do might be useful!

Where I work

I do all of my work in an Ubuntu VM running in the Hyper-V hypervisor. I start up a VM and make some code changes. Then I compile and install the changes and finally shutdown and restart the VM to test them.

How I compile and install changes

After making some code changes, I compile and install them using the following steps. I run all of the these commands from the root directory of the kernel source tree that I’m working on.

1. Run a make command on the directory that contains the module that I’m working on to check for compilation errors. For example, if I’m working on a module in the drivers/hv directory, I would run the following command, which will make the .o files for the files in the drivers/hv directory:

make drivers/hv/

Note the forward slash at the end of the directory path – that’s necessary. If you leave it off, nothing will be built. This command just makes the .o files, but it doesn’t link the modules. I just like to use it for quick check to make sure that I don’t have any compilation errors.

2. Compile the kernel the make command. This command takes care of compiling and linking everything:

make -jX

where X is the number of threads that you want to use for the compilation. The kernelnewbies tutorial suggests setting this equal to the number of CPUs that your machine has.

4. Reload the modules and install the kernel with:

sudo make modules_install install

How I test my changes

I shut down the Linux VM and restart it to test the code changes. Since I’m currently working on a Hyper-V module in a Linux VM running in Hyper-V, I can’t unload and reload the module. The module is in use. If you’re working on a module that you can unload and reload, it’s much faster to do that.

That’s it! For more information, check out the first patch tutorial at

A New Blog

Over the next few months, I’ll be working as an Outreachy intern with the Linux Kernel.  I’m very excited about this opportunity, and I hope my blog posts will be helpful to future Outreachy applicants and interns!