The Thrill of OpenSource Programming

Posted 30 Jan 2000 at 01:24 UTC by rakholh Share This

This article was written by me a while back after I made the first release of my first OpenSource project ever, gLife. I wrote it right then so I could capture the essence and the emotions that I felt right after release my first every project to the OpenSource community. Also just prior to that project I had written my first ever patch for a program (bug-buddy), naturally it didn't get accepted. :)

The Thrill of OpenSource Programming

Background

        I recently started work on my first ever open-source project. It is also my first ever Linux coding project, my first C application, my first Gtk+/GNOME program. I've only dabbled before in TurboPascal so this was a big thing for me. The project is called gLife, basically an Artificial Life simulation, but with a twist (tries to simulate a society). It's still in its very infant stages. I first started this project on Windows, using C++ for a research paper for high-school. I started work on this project around the beginning of December. I write this editorial because I was told by one person "I still don't understand why people code things and give them away for free". Another reason why I write this, is to remind people of the "fun" of programming. I want people to take a step back and remember their first significant/real programming project. I want people to remember what it feels like...to stay in touch with their roots and remember why they're doing all of this.

The Primal Urge

        Personally, I started out this project with one simple goal in mind: Educate myself. I wanted to learn something other than TurboPascal (the only language that I've been "taught" in high-school/university so far). I also wanted to learn how to program using GNOME and the Gtk+ widget toolkit (even though this was not one of my objectives, I also learned how to use libglade and glade). I also wanted to teach myself how to program in general. We all know those simple tic-tac-toe programs we're forced to do in every preparatory course for Computer Science. They teach you very little on how to work on a large project, or on how to utilize the various programming tools that are out there. While these projects are necessary to acquaint the beginner to Computer Science, they do not teach any real-world scenarios. They do not teach you how to use the bleeding edge technologies that are important for a programming career. The reason I wrote gLife initially was to learn what my university still hasn't taught me.

        I was going to say that Education is one of the main reasons people write programs but it isn't. The main reason somebody writes software is to fill a gap. As a famous open-source advocate once said open source projects are made "to scratch an itch". An important consequence of this though is that you learn a lot, programming-wise. Coding anything "larger" than you have previously coded will teach you something new, whether you intended it or not. The only way a person can get acquainted with programming concepts is to actually WRITE software. Open-source software is the best way to do this, because that way you can gain A LOT of feedback from the community on what you have done. That way you can learn from people who may have more experience, or better ideas than what you have. Education is an excellent reason for starting a programming project, just as strong as "scratching an itch".

        There is one other reason I wrote gLife, which wasn't in my conscious thoughts...It was subliminal. I wanted to know what it like to be a part of the "open- source" community. I wanted to know how it feels to put a program out there for free, for everyone to play with. I wanted to experience the feeling you get when you know other people out there are using your program. A virus author is a good analogy for this - you want to see how far your program can go...how many people can you effect? Of course, you want people when using your program to go "wow, nice" as opposed to "Damn! Shit!".

The Road to Starting

        It's not easy to just "dive into" a project on your own. As I said my only experience was with TurboPascal, I still haven't formally studied things such as pointers, linked lists, or trees. I read Havoc Pennington's editorial/essay on writing an open-source project. He discouraged starting your own project and I was convinced by him. I've been monitoring GNOME ever since its 0.33 release and have been heavily interested in it, so I really wanted to do something for it (or at least something that uses it). The first project I wanted to write was a GUI for the GNOME bug- tracking system (based on Debian). Unfortunately, just as I was starting to think about it, Jacob Berkman began coding his (and I believe that he has done a much better job than I could have done)

        As Havoc Pennington's essay suggested - before starting on a project all by yourself, try to get involved with another project first, submitting patches for small enhancements and bug-fixes. I thought "great!", I'll start submitting patches to the bug-buddy author. I started by reading through the source, and getting a "feel" for the program, learning what the variables are for and what the functions do. An important thing that helped me was that this was a (relatively) small program and it was very simple. It was easy to learn the concepts in it. I asked myself "what can I do?" - it seemed pretty cool program to submit patches to. I decided to take a stab at making it support multiple bug- tracking systems (using XML files). To make a long story short, my patch didn't get included but I gained confidence to start on gLife, as well as learning XML/libxml, glade/libglade and some GNOME/Gtk+ stuff.

The Expectations

        I didn't expect anybody to download my program. I believed that many people would just "pass it up" as I do to a lot of programs on Freshmeat. One of the reasons for this right now is that my program still is in its very early stages. Another reason is because its basically a "waste of CPU cycles" - Its not an application that does something serious (like GIMP). Its not a tool for system administration (linuxconf). Its not a library that people will use (glibc). Their is no logical reason for people to use my program. The only people I believed to be interested in Artificial Life and Artificial Society were anthropologists and CompSci researchers...and I'm sure both of these groups have much more highly developed, and more appropriate tools to do their job.

        I expected that I'd write my program, get a few of my online geek friends to try it out, possibly incorporate their suggestions, as well as add more functionality to my program and then thats it. I know what I wanted to know, and I could move on to a different project that could teach me something new. Something, that could possibly be of real use for somebody else.

The Joy of Release

        I released the first version of my application on the 26th of December. I believe the announcement came on the 27th though. The feeling I got inside when I knew that I had some code out there that I can share with people is indescribable. I felt that I really am a programmer...I have hope of someday becoming a hacker (in the truest sense of the word). I felt on top of the world, that I can program anything. In addition, I now feel that I have some "experience" under my belt, so I can tell people "see, look at what I've done. Look at what I can do" - before, I had nothing. I felt as mother would feel giving birth to a child, giving it life, for the first time.

        When I made the release, I kept monitoring my website for hits and seeing how many people downloaded the files (features provided by sourceforge). Two downloads almost as soon as the announcement was made - I was happy, my expectations were met. I observed the logs for the hits to my website, somebody using SunOS, someone using a 2.0.34 linux kernel (wow), several stable 2.2 linux kernel users, a couple of linux devel kernel users, and most surprisingly, many Windows users (mainly NT). Satisfied with around 50 hits and two downloads I left for home (from the computer lab). Later that night I connected to see how my "baby" project was doing. It had appeared on freshmeat, and I now saw over 1050 hits to my website and over 239 downloads for just the first version. Joy is the only thing that I could feel...people use my program. You've all seen the expectations I had for the program, and I'm sure all of you know the feeling when something you've done is successful. After a bit of hacking (due to my over-eagerness to get a first release), I made a 0.1.1 release (which should have really been the 0.1 release) - It had a similiar success to the 0.1.1 version. My 0.1.2 release has had the most download, at around 300 and something last I checked.

        I'm sure many developers have in time received a "Wow - this rocks" type of message. Those kind of messages are the most rewarding to an opensource programmer. It shows that people use, and actually ENJOY the program. The whole point of making a program is not to keep it tucked away in some secret hidden vault. It's for everyone else out there to enjoy and use. That is the ultimate goal of any program, be it opensource, closedsource, commercial or non-commercial.

The Frustrations

        There are frustrations that come along with working on an open-source project. One of the ones that I experiences were the lack of decent bug reports. I got two bug-reports one was "it crashes after the 2nd refresh", I tried to email back for more information - What do you know, the mail bounces. Second bug report was "it doesn't compile on my mandrake 6.1" - Not much I can do, especially since NO OUTPUT was provided from the ./configure script. These bug reports are frustrating, because I have no clue what is wrong, and I feel responsible for making this program work right for everybody.

        Of course, us programmers are only human...I have not experienced this problem so far, but I'm sure many people want features which you either A) Don't have time to code, or B) Don't really want or C) Don't know how to implement. Often people want features in the program, but don't desire to put the time or effort to contribute it themselves. Then they discard the program because the author doesn't add the feature. Programmers are only human and can not implement everything themselves - in other words, contributions are welcome.

        Also, I'm sure another problem that many projects suffer from is "over-zealous criticism". I'm sure, for example, that CmdrTaco suffers from this a lot. Many other projects have suffered from this resulting in petty flame-wars that detract from programming time or constructive criticism. We all know about the KDE vs. GNOME, vi vs. emacs, etc. It is notable to point out that usually the developers don't get involved, but its the users and non-core developers that get involved in these discussions. A good example of this is the mindcraft surveys done between Linux and WindowsNT - everyone criticized the survey's results immediately because Microsoft was shown to be better. This is opposed to trying to see where the problems are and fixing them (this occurred after the second, more accurate, benchmark survey). My request from all: Provide constructive, useful criticism - not petty useless "flame" messages.

Conclusion

        I encourage anybody who has been thinking for a while on writing a project to go ahead and start working on it. Anybody who has been thinking of participating in a project - go ahead, get working. There is nothing out there more rewarding then getting people to use your program, or having your changes incorporated into a project. Anybody who wants to educate themselves in a specific toolkit, or a specific language, or any new "technology" (be it OpenGL, XML, whatever) - start writing, start programming for that is the ideal way of learning.. Anybody who wants to learn about the OpenSource movement, I recommend you get working on a project and release it. Feel, first hand, what these "crazy" opensource developers do. Know why we do this, know why do we do all of this for free.

Ali Abdin <aliabdin@aucegypt.edu>

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!

X
Share this page