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>