I like open-source, and Linux specifically, for two big reasons: customizability and community. What could be more customizable than being able to look at and add to a program’s code? And as that customization (which hopefully ends up on Github or Bitbucket or some community-accessible equivalent) happens on a large scale, the community grows.
Note that I’m a law student, not a computer engineer. I can’t really write anything…I guess what I would consider important. I’ll never make a kernel commit, for instance. All I can really do is write (mediocre) bash scripts, and maybe minor Java or C or C++ additions to an existing codebase. But I have found that open-source code is generally well-designed, properly commented, and logically named. So modifying existing codebases isn’t as difficult as I thought, especially when what you have in mind mirrors something already in the code. And at least from my admittedly minimal experience, developers tend to be pretty forgiving of stupid first-timer errors and oddball requests.
For example, I use the echinus dynamic tiling window manager. I like it in part because it’s generally EWMH compliant so I can use my favorite taskbar, fbpanel, with it. By default, new windows are master windows, meaning that they take up the largest space on the screen. I generally prefer that new windows be slave windows, meaning that they take up the last space on the screen. So…I gave it a shot. As is clear in the diff, the developer polachok made it startlingly simple to do: his functions and variables had obvious names, and the code was very clean and easy to follow.
If you read the discussion on my pull request (which I made with incredible trepidation, by the way), it’s clear that I did several things wrong. I changed default behavior. I didn’t create settings. I didn’t add documentation. And when I did add those things, I didn’t squash the commits into a single commit. In retrospect, these are all incredibly obvious things. Yet the developer was gentle, and eventually I changed all those things and squashed the commit, and polachok merged it. And I know this is silly, and I know many people contribute much more code to much more stuff, but I was actually quite excited.
So with that boost in confidence, the next time I wanted some minor function in some awesome application, I thought I’d give it a shot. This time, it was newsbeuter. It supported both Google Reader and Tiny Tiny RSS, but the Reader support was a little more substantial. Specifically for me, newsbeuter allowed you to set a password file instead of saving a password in plain text in the configuration file for Reader, but not for TTRSS; also, if username/password configuration options were missing for Reader, it would prompt the user for login information instead of just quitting. So when Google Reader announced it was closing and after I had switched from Reader to TTRSS, I was wondering if I could implement the ttrss-passwordfile option and the login prompts. (Like I said, these are really insubstantially tiny things I’m adding here.) And again, the developer akrennmair’s existing codebase made it simple. I literally copied and pasted the Reader implementation and renamed it to TTRSS.
This time, I remembered to add documentation and squash the commits. And after an email, akrennmair just committed it! And again, I know this is silly, but I was again quite excited.
To conclude, I realize that the attachaside setting in echinus and the ttrss-passwordfile setting in newsbeuter are extremely minor, rarely used things. But I guess my point is, what I love about Linux is that I use those minor things, and I was allowed to add them to already-great existing applications. And I’m not even a software engineer.