Isaac Jones Blog
Welcome to the Future

Sat, 28 Feb 2004

How to get involved in Free Software (the bug method)

Are you a software developer? Are you graduating soon? Maybe you should get involved in free software projects! There are any number of reasons people get involved, from altruistic reasons to selfish reasons. Let's approach it from a "selfish" point of view. I assert that involvement in free software projects looks really good on a resume, and is an excellent way to "network". Networking isn't all about schmoozing at job fairs; it's about building a reputation with professionals in your field. There are very few fields where a huge number of professionals are so very accessible. Software developers are very lucky in this sense.

Common wisdom seems to indicate that the job market for software developers is very competitive, and it's going to continue to be competitive for a while yet. Any edge you can get over your classmates is going to help.

There is plenty of opportunity to contribute, no matter what your skill level. There is documentation to write and there are translations to perform. There are bugs to fix, and packages to create. Of course there are projects that need more "serious" development as well. You don't have to start your own open-source project, and you don't have to learn to hack on the Linux kernel to add something very attractive to your resume.

When people ask me how to get involved in free software, I usually recommend that they start out reporting bugs in the open-source software they use frequently. You might install a version of GNU/Linux, or if you want to stick with Windows or MacOS, you should browse around to find out what free software is available. I think you'll be pleasantly surprised. Let's use "Gaim", a multi-protocol IM client, as an example of how this might proceed.

Gaim runs on Windows, GNU/Linux variants, and I'd expect MacOS X, and Unix. It's open source and free: http://gaim.sourceforge.net/.

Download Gaim and the Gaim source code. Build it for your machine if you want. Notice what language it's written in. Do you know this language? If not, can you understand it (if you know Java, you can probably understand a lot of C, for instance).

Try out Gaim, set up your AOL Instant Messenger and your IRC channels. Visit some open source channels. See any problems? Check the bug reports to see if anyone else has seen that problem. If not, report it as a bug (you might want to google for "how to report a bug" first).

Now check out the "bug reports" for Gaim. Pick a bug and try to reproduce it.

Why are bug reports the first step in improving your resume?

  • Reporting a bug is a half-hour task.
  • Fixing a bug is often (not always) a small, weekend-sized task.
  • Bugs introduce you to the source code on a level where you don't have to understand everything (hopefully).
  • You will build familiarity with debugging tools which are invaluable for a developer.
  • You will start to build a reputation with the authors of the software, and in the free software community.
  • And because developers are always very happy to get bug fixes that they didn't have to work on themselves.

    Let's take a look at the bug list for Gaim again.

    Different ways to contribute to fixing a bug:

  • If you can reproduce the bug, you might add more information to the bug report: What steps did take to reproduce it? Is there a unique combination of features you need to be using to cause the bug?
  • If you can't reproduce the bug, maybe it's fixed in the version you're using! Maybe you should add that to the report (better read and understand it very carefully first). Pick another bug, repeat.
  • Depending on your skill level, you might try to fix this bug, or at least isolate where the bug came from. If you manage to fix it, read about the "diff" and "patch" utilities. Send the author a patch, or attach the patch to the bug report.

    Here is a bug that looks pretty easy, and it doesn't look like the developer is particularly thrilled to spend time on it: "Buddy Pounce does not get removed when user is deleted".

    I'm going to take a wild stab at how you might fix this bug: most probably, there's a "list" of "pounces" that has a data-structure which contains both the buddy's name, and the pounce action, whatever that is. Find the code where the buddy is deleted from the buddy list (a different list). Add code to search through the "pounces" list to delete that buddy from the pounces list as well. Compile, test, and run diff to create a patch, attach it to the bug report, take a bow.

    Now add this to your resume. You are now 50% more interesting to me, as someone who reads resumes, than your classmates who have never taken on a project outside of school. You've shown initiative, skill, and maybe even teamwork.

    Higher levels of commitment

    If there's a piece of software that you love, that you think is really important, then you might try adding features to that software and joining the development effort. Lots of projects have a page dedicated to information about how to help out. Here is one for the Mozilla project, for instance.

    If you want to lead a development project, you might adopt one that has been orphaned. Many people recommend against starting your own project off the bat.

    I've presented you with a method to increase your skill and reputation, and to add something interesting to your resume. Try it out. You might find out why so many software professionals work on free software projects. It's tons of fun!

    Feel free to send me comments on this document, or to tell me whether this advice has effected you.

  • [20:41] | [/technology] | # | G

    ;
    Misc
    Email Me
    My Home Page
    RSS Feed for this Blog
    My Other (Nerd) Blog
    LiveJournal Syndication
    Mention on Debian Weekly News

    Web Sites
    Isaac's Home Page
    Haskell Web Page
    Debian Web Page
    Google News
    A Go Wiki

    Misc. Blogs
    The Music Issue
    circlek
    nanny
    Planet Debian

    Open Source Club Related Blogs
    Colin's Blog
    The Daily Amoeba
    Disjointed
    dashandthedot
    Harshy(feed)