Jim Hall
FreeDOS Project coordinator, 1994-2009

Starting Open Source Software

Wednesday, November 4th, 2009

About a month ago, I wrote some guest posts for the Collective Imagination blog at ScienceBlogs. Now that they’ve run their course over there, I thought I’d re-post them here in case you missed them the first time. Here is part 2 of 4:

In the first part of this article, I discussed the differences between Free software, and Open source software. In a Venn Diagram, these are concentric rings. The definition of “free software” lives within the definition of “open source software”, which itself sits within the space of all kinds of software. That is, free software is a subset of open source software. So for the rest of this post, let me use the term “open source software” generically.

Let’s look at open source software using a real-world example. To me, the FreeDOS Project will always be the first example I look to, so I’ll use that. It should speak to the commitment of the open source software community that FreeDOS continues under active (if slow) development 15 years after it was conceived. How has FreeDOS held the interest of its users? Because FreeDOS embodies the important qualities that an open source project must possess in order for it to succeed.

But what are the “core” qualities for an open source software project to get off the ground?

Start by solving a problem

In 1994, I was a physics student at the University of Wisconsin-River Falls. I used DOS quite a lot to do data analysis, write papers, dial into the university network, and write small programs to make my life easier. DOS meant a lot to me, and I was very comfortable working with DOS to get my work done.

So it was a big surprise to me when Microsoft announced that they would stop supporting DOS with the next version of Windows, that everyone would soon move to Windows. If you remember the era, this was Microsoft’s first acknowledgment of the sea change coming in Windows 95, which certainly was a huge step up for Windows. But at the time, the current version was Windows 3.11, which wasn’t exactly user-friendly.

I didn’t like Windows. It was klunky, it was slow, it made my work much more difficult. I felt I could accomplish the same tasks in DOS, mostly at the command line, and that I could do it faster than in Windows. In Windows, everything is done by pointing and clicking with a mouse. That just slowed me down, and I felt it was a sloppy user interface to get things done.

I wasn’t alone. A lot of other people on various DOS news groups were shocked to hear that DOS would soon go away. They didn’t like Windows any more than I did, and were just as resistant to being “forced” into Windows. And many of these people didn’t have machines capable of running Windows 3.11, much less a “next generation” version of Windows with all new features. I had an 80386 with 4MB of memory (later upgraded to 8MB.) Many people still ran 80286 machines, and you can’t run Windows on that, but DOS runs just fine. If Microsoft were going to push us all to Windows, we’d need to upgrade our PC’s, and that didn’t seem right. We felt as though our freedoms were being taken away as well, when Microsoft decided to take away MS-DOS.

So I had a problem. How could I continue to use DOS, if Microsoft was abandoning it?

On news groups, people trying to find ways to preserve their freedom. By 1994, Linux had become an underground success story in a lot of universities. I ran Linux on a separate partition on my PC, so I knew it was solid. We looked to Linux and asked, “If they can create a free version of Unix, why couldn’t we create our own version of DOS?” Writing a single-tasking DOS system seemed almost trivial next to creating a multi-tasking, multi-user Unix kernel.

So I decided someone needed to write that version of DOS. I looked to the small DOS utilities I’d already written to improve on DOS, and started there. That became my first set of FreeDOS (then, “PD-DOS”) utilities: CLS, ECHO, MORE, TYPE, VER, PAUSE. I released them so that other DOS users could use them. Over time, I built them up, added new programs like our first versions of DATE, TIME, CHOICE, DEL, FIND, and Unix equivalents such as TEE and MAN.

The origins of the FreeDOS Project could just as well apply to any other open source software project. In order for the project to exist at all, there must first be a need. A developer solves a problem for himself by writing a program, then shares the program with others so they can use it too. The key is that open source software projects also make the source code available, so that its users can help to add improvements.

Users should be developers

The basic definition of open source software is that the source code must be made available for others to see it. A necessary side-effect of this condition is that anyone who uses the program has an opportunity to make improvements. A well-managed open source software project will accept any improvements in the form of patches, which modifies the program to solve someone else’s slightly different (but similar) problem. Releasing new versions of the software with the new features ensures that everyone benefits from these changes.

In the beginning, progress is usually very slow, because you may only have one or two developers making updates to the program. But as new versions are released, others become interested. The program doesn’t need to be complete, but it does need to demonstrate that it can do something, that it has the potential to be useful. Then the new users may help add to the code, so the program gets even better. The updated releases generate even more interest, which attracts more users and developers. Repeat as necessary, and even a complex system can become achievable.

Take, for example, the FreeDOS Project’s kernel effort. In 1988, Pat Villani started an experiment in writing a bare-bones DOS kernel that could support Pat’s embedded device programming. This kernel was Pat’s solution to a particular problem, how to re-use code on different platforms without having to re-write very low-level code each time. The DOS kernel changed very slowly over time, because it fit a very narrow set of requirements.

By 1994, Pat realized that others might be able to use the minimal DOS kernel he had written. At the same time, I posted on DOS news groups that I had released the first versions of my basic DOS utilities, and was in search of developers interested in writing a DOS kernel. Pat and I got in touch with each other (via the nice folks at Linux DOSEmu) and Pat’s “DOS-C” kernel became the basis of the FreeDOS kernel.

When the source code to DOS-C was made available, the kernel did not support LBA, CD-ROM drivers, or networking. Additionally, floppy disk access was very slow.

But we released this as the FreeDOS kernel anyway. Despite lacking features, despite being slow, we had something that worked. Other developers became interested in what we had produced, and immediately began contributing updates. A developer named “ror4″ provided a floppy driver that enabled buffered I/O, dramatically improving performance. James Tabor added networking and support for CD-ROM drives, later improved by Bart Oldeman and Tom Ehlert. Brian Reifsnyder provided LBA support.

As a result of opening the source code to its users, FreeDOS encouraged its users to be co-developers. Compared to Pat originally working on his own, progressing slowly (”cathedral” method) we had a mix of differing developers and approaches that created a coherent and stable system very rapidly (”bazaar” method).

Release early, release often

When many developers are involved in an open source software project project, many patches can be produced in a fairly short time window. It is important to maintain a constant feedback loop to the users, who are also the developers of the program.

As developers submit new patches to a project, it is important to package up the changes in a new release. This can sometimes be a frightening and daunting task, because the original creator of the program may begin to feel that he or she is losing control of the program. Rather, I encourage the viewpoint that the program is “evolving” beyond the goals originally set for it, and it is important to recognize new contributions as good.

The importance of making new releases is that the users/developers will be rewarded with frequent (possibly daily, if the rate of patches supports it) releases with new features. Yet, this can often result in an unstable release, especially at the beginning of a project when not everyone understands the code, and how changing one part can lead to unexpected behavior somewhere else. But over time, most open source software projects stabilize, so that as new versions are released, the program gets better and becomes more stable.

The frequency with which you release new versions will often depend on the size of the project. A small library such as FreeDOS Cats (an implementation of the Unix “catgets” function, which provides support for different spoken languages) might be released quite often. Sometimes, I released more than one version of Cats in a day as users sent me patches, and I released improvements on their fixes. A basic utility such as MORE or TYPE might be modified only in spurts, such as when I added support for Cats, but otherwise remain static. Software with a larger code base, such as the FreeDOS kernel, might take weeks to accumulate enough changes for a new release.

Projects need a coordinator or maintainer

Looking at the relative chaos of open source software development, with new versions released weeks or days apart, you may wonder what holds everything together. How do open source software projects not devolve into self-destruction? Someone needs to coordinate the changes that users contribute to a program. Someone needs to make the new releases. That person is the project maintainer.

An open source software project’s maintainer (sometimes called a “coordinator”, especially if the program has lots of people contributing to it) should have good communication skills. This person will be responsible for many things, including accepting and merging patches into the program’s source code, helping to write documentation, listening to what users are saying about the program and finding ways to accommodate them.

But perhaps the skill that the project’s maintainer will find most useful is the ability to listen. The maintainer must recognize that no single person will have all the correct answers all of the time. Insight may come from different directions, and it is the maintainer’s responsibility to understand that many people working together on a project (”bazaar”) are better than a single individual, no matter how talented (”cathedral”).

When I founded the FreeDOS Project, I came into it with the naive view that most of my time would be spent writing code for FreeDOS, and that only a little of my time would be spent doing “housekeeping”. My first contribution to FreeDOS was the basic utilities, followed by some kernel updates, the Install program. I thought it would always be like that.

In the early days, this was great. However, as the FreeDOS Project grew, I found my time shifted. I spent less time working on code, and more time answering questions and writing documentation. As more developers joined the project, and the FreeDOS distribution slowly worked its way to “1.0″, more than 90% of my time was dedicated to coordinating various efforts across FreeDOS, less than 10% writing code.

After the release of “1.0″ in 2006, I became completely hands-off. I no longer submitted patches to programs, I no longer wrote code for my own programs. FreeDOS had grown to the point where I no longer needed to be the expert. Others were pushing FreeDOS to do more things than I had ever dreamed possible in 1994, and I was glad to see it happen.

Each maintainer must similarly find his or her own motivation, and recognize that reasons for staying in a project may change. And that’s okay.

In my next post, I’ll discuss the organization of an open source software project, and a few of the features a project needs to support itself over the long run.

Open Source and Free Software

Monday, November 2nd, 2009

About a month ago, I wrote some guest posts for the Collective Imagination blog at ScienceBlogs. Now that they’ve run their course over there, I thought I’d re-post them here in case you missed them the first time. Here is part 1 of 4.

The open source software community is fond of using the comparison of cathedrals versus bazaars to demonstrate the differences between how proprietary software (”cathedrals”) and open source software (”bazaars”) is developed. This model was coined by open source software evangelist Eric S. Raymond in his 1996 essay, The Cathedral and the Bazaar. Raymond’s comparison is simple:

Linux overturned much of what I thought I knew. I had been preaching the Unix gospel of small tools, rapid prototyping and evolutionary programming for years. But I also believed there was a certain critical complexity above which a more centralized, a priori approach was required. I believed that the most important software (operating systems and really large tools like the Emacs programming editor) needed to be built like cathedrals, carefully crafted by individual wizards or small bands of mages working in splendid isolation, with no beta to be released before its time.

Linus Torvalds’s style of development – release early and often, delegate everything you can, be open to the point of promiscuity – came as a surprise. No quiet, reverent cathedral-building here – rather, the Linux community seemed to resemble a great babbling bazaar of differing agendas and approaches [..] out of which a coherent and stable system could seemingly emerge only by a succession of miracles.

Raymond’s is a very concise description of the open source software development model. It also begins to touches on the meritocracy of open source software development, where everyone can contribute, but the best ideas and most talented developers tend to rise to the top. I especially like the cathedral/bazaar comparison because it is:

  1. Simple enough to propagate
  2. Easy enough for non-technical people to understand
  3. Catchy

But what does it mean to talk about “open source software”? This term gets used a lot by the news, by developers, by managers. You see it a lot in places like Slashdot and Scienceblogs. Yet everyone seems to have a slightly different idea of what “open soruce” really means. In some extreme cases, the term “open source” is used interchangeably with “free software”. But the two are not always the same.

Open source software

Put in its most basic terms, open source software is any software where the users can see the source code. There are remarkably few rules that govern the conditions under which the users can see the code. However, the Internet community can agree that any software that provides the source code is “open source software”.

Unfortunately, this definition is pretty vague. The Open Source Initiative has attempted to document the conditions that define “open source software”, as 10 rules:

  1. Free Redistribution
  2. Source Code
  3. Derived Works
  4. Integrity of The Author’s Source Code
  5. No Discrimination Against Persons or Groups
  6. No Discrimination Against Fields of Endeavor
  7. Distribution of License
  8. License Must Not Be Specific to a Product
  9. License Must Not Restrict Other Software
  10. License Must Be Technology-Neutral

The gist of these terms is that anyone should be able to view the source code, and that both the program and its source code can be shared with others.

Free software

The Free Software Foundation, led by Richard M. Stallman, takes serious issue with the term “open source”:

However, the obvious meaning for the expression “open source software” – and the one most people seem to think it means – is “You can look at the source code.” That criterion is much weaker than the free software definition, much weaker also than the official definition of open source. It includes many programs that are neither free nor open source.

Free software is a matter of of the users’s freedom to run, copy, distribute, study, change, improve the software. Like open source software, a free software license requires that the source code be made available – otherwise the user would not be able to study, change, improve the program. In this usage, the term “free” refers to freedom, not price. This is also the origin of the meme “Free as in speech, not as in beer.”

More precisely, free software refers to the four fundamental kinds of freedoms, according to Stallman:

  1. The freedom to run the program, for any purpose.
  2. The freedom to study how the program works, and change it to make it do what you wish. Access to the source code is a precondition for this.
  3. The freedom to redistribute copies so you can help your neighbor.
  4. The freedom to improve the program, and release your improvements (and modified versions in general) to the public, so that the whole community benefits. Access to the source code is a precondition for this.

The Free Software Foundation guarantees these freedoms through the GNU General Public License (”GNU GPL”.) The GNU GPL is designed to make sure you have all the freedoms to use and modify the software as the person who gave it to you, even the author. As an (intended) side effect, source code that is released under the GNU GPL can never become part of proprietary programs, also called “closed source software.”

In a Venn Diagram, these are concentric rings. The definition of “free software” lives within the definition of “open source software”, which itself sits within the space of all kinds of software. That is, free software is a subset of open source software. So for the rest of this series, let me use the term “open source software” generically.

In my next post, I’ll look at open source software using a real-world example. To me, the FreeDOS Project will always be the first example I look to, so I’ll use that. It should speak to the commitment of the open source software community that FreeDOS continues under active (if slow) development 15 years after it was conceived. How has FreeDOS held the interest of its users? Because FreeDOS embodies the important qualities that an open source project must possess in order for it to succeed. H

Cultivating Open Source Software

Friday, October 23rd, 2009

Part 3 of my guest post series is now up at Collective Imagination. In this post, I discuss the features an open source software project needs to thrive – using FreeDOS as an example. Please leave a comment!

Are you a web developer?

Tuesday, October 20th, 2009

The FreeDOS web site has always been run by volunteers. M. “hannibal” Toal was our first webmaster, but after he left, I took on the web site duties. I mostly picked up design elements from my favorite web sites, eventually settling down to the “blue” web site we have now. It was a slow evolution, to be sure, since I am definitely not artistically inclined.

The new default stylesheet now uses an orange bar at the top for all our links to hosted apps at SourceForge. (SF used orange as their primary color, so it was less shocking to click on those links and then be presented with an orange-and-silver SF page.)

Since then, SourceForge has changed their colors, now using blue-and-grey. So I thought it might be a good time to update the FreeDOS web site, at least so the “SF” bar color is a closer match to SF’s colors.

It occurred to me that if I changed that, I really should clean up the rest of the FreeDOS web design at the same time. But I’m just not a web designer, so I need help. I think it would be better to find a [semi-] professional web designer to update the FreeDOS web site stylesheet for us.

If you have a talent for web site design, or know someone who does, this is for you: Help us update the FreeDOS web site.

There are a few “rules” in finding a new FreeDOS web design:

  1. You must use the FreeDOS fish logo. However, feel free to create a new “FreeDOS” banner that uses the “Blinky the fish” logo. I prefer the original color, not the purple we use in the “glossy” fish.
  2. Our primary colors are blue. I’m not stuck on the particular shade we use now, just as long as it looks good with the FreeDOS fish.
  3. We must use the SourceForge logo. This is a requirement from SourceForge, since we are hosted by them (but you can choose other SourceForge logos that may better match your colors.)
  4. I’d prefer to keep the amount of web site edits to a minimum when implementing a new design; if you can, use the existing xhtml document structure. However, I’m open to moving content around, or editing the banner/footer, or moving some content to sub-pages. For example, maybe the Software page should be split into two pages, so the LSM stuff is on another page (or in the wiki)?
  5. The front page is tricky, since this needs to have information for new users, and news updates for current developers. We also have an “announcements” box, which may not always be shown. Other pages will probably be easier.

I’m not particularly fond of the fonts that we use on the site. Feel free to change them.

Interested? Web designers can submit their design idea via email (you can send them to the mailing lists for discussion if you want – but send your final version to me.) I prefer to get a link to your own web site, showing the design idea. I’ll post the top finalists in about a month, and provide a way for people to vote for their favorite new web design. I’ll pick the winner based on the votes.

Don’t have a web site? Note that almost all pages on the FreeDOS web site recognize the “css=” directive, so you can specify your own stylesheet. For example: http://www.freedos.org/?css=http://www.example.com/freedos.css

What does the winner get? As a kind of “reward” to the winner, we can provide a “Original site design by __” link in the footer. This might be a resume-builder for someone trying to break into web design as a profession, or another reference for someone who is already a professional web designer.