Instructive Open Source Projects for an Intermediate Level C Programmer?

What open source projects e.g. on Github or as part of a Linux distro are particularly instructive or useful for an intermediate level C programmer? I am attracted to the command line and find visual programming boring.

It would have to be reasonably compact, well documented with well commented code, with enough unfinished portions for me to ultimately contribute to after I become comfortable with the code.

I am thinking of something along the lines of a simple UNIX shell, a UNIX utility or a CLI strategy game. The code base has to be reasonably compact (a few hundred lines to a couple of thousand) rather than the massive size of many current Linux projects. Again well designed, well commented code would be nice, possibly created for it's educational benefit as opposed to absolute efficiency.

Thanks.

10-27-2012

Salem

1 Attachment(s)

> well documented with well commented code, with enough unfinished portions for me to ultimately contribute
Those might seem like fairly mutually exclusive statements.

What open source projects e.g. on Github or as part of a Linux distro are particularly instructive or useful for an intermediate level C programmer? I am attracted to the command line and find visual programming boring.

Personally, I'd try to split my time between learning, and contributing (or trying to find an interesting project to contribute to).

GNU Coreutils provide the core command-line utilities on Linux distros; their source code is certainly instructive. I'd say start by reading the code, then adding (frivolous) new command-line options and their implementations, for learning purposes. For example, the source for the env command is just 159 lines, and the source for base64 is just 321 lines.

The Coreutils has reasonably straightforward source code (compared to e.g. PHP, which is simply atrocious), aside from certain shall we say "archaic" coding style details ;), and it is quite stable and readable, so it is best suited for educating yourself. Honing your skills first makes it easier for you to contribute to an interesting project, like those Salem mentioned. (However, who says you couldn't find a bug and contribute a fix in Coreutils anyway? It is perfectly possible, just not that likely, with something as stable as coreutils.)

Aside from projects listed at Sourceforge like Salem mentioned, you might also look into plugins for desktop or server applications. They usually have very little GUI-related stuff, if any, and tend to have much less code, as the common code is already written in the main application. Perhaps contributing to an Apache module would interest you?

Before specializing on anything in particular, try to get a wide basis. I've found diverse background knowledge extremely valuable in my own work.