In the essay "The Physicist as Programmer" (reproduced in the book Programming on Purpose II, where it is Essay 13), P. J. Plauger offered the following advice for enthusiastic programmers:
Never give away anything you can sell.
While this advice has generally done quite well for many of us, there are some very interesting exceptions. In this article, second in a series, I examine some of the ways you can make money giving away something you can sell, or perhaps selling something you can give away.
Plauger's advice tells you how to make money, without ascribing any grave moral failings to people who choose to do otherwise. Other people went further, and when "free software" was a new idea, some people believed that it would destroy the lives of programmers because it would make it impossible to receive pay for programming software that did have restrictive licenses. People believed this, in all sincerity. They also pointed out many things you could never make work with such software; things like operating systems. Things that were simply too large for a small team of people to do in their spare time, and therefore could not be created unless they were being sold for money with significant licensing fees.
It didn't turn out that way. In this part of my series on open source, I look at some of the economic models and business models that work for open source projects, and a few examples of fields where some once viewed open source as impractical or impossible.
Towards a post-scarcity economy
Fundamentally, limitation of resources drives economies; there's not enough stuff, so we have to find ways to allocate stuff. Speculators and futurists talk about a "post-scarcity" economy, in which things are generally free; in which the costs of things are too low for it to be worth measuring them.
While we're some way from having enough food and energy for everyone, let alone doing so safely or cheaply, software provides an interesting special case, because duplication is essentially free. This explains why people have assumed that open source couldn't provide a way for people to make a living; without the artificially induced "scarcity" of licensing and the like, it's hard to for people used to a traditional economy to see where there could be an exchange of value.
However, software development is still work, and still requires specialized skills, and the creation of software, which you can then duplicate for no measurable cost, turns out to be a value too. What we see, then, is a migration away from the traditional model of pricing items by scarcity, towards a model of pricing services.
What makes this particularly effective is that it allows participants to compete with a broader economy that is still scarcity-based, and undercut prices by a factor of 100 percent. If you charge for licenses, free software will be 100 cheaper than your product. You can never beat that margin. The only way to compete effectively with the post-scarcity providers is to switch to their model. You have to figure out a way to provide things without charging money for licenses.
In short, even if you can't make money on open source software, you may be able to make a whole lot of money with open source software. So much, in fact, that it may be worth spending money creating and enhancing the open source software you need to do so. It's going to be a long time before we fully understand the implications of open source for the broader economy, but so far, it's been very good for just about everybody.
BSD and Linux® are now both well-established examples of successful development of operating systems as open source. Both, of course, built on existing work. Before you dismiss this as "cheating," consider that this is the entire point of open source. You can build on what other people did, and provide things for other people to build on. It is not "cheating" to play to the strengths of your development model.
BSD was built on the work of people at the University of California, Berkeley. They began, long ago, with AT&T's UNIX®, and started modifying it. Eventually, they reached a point when they could remove all the remaining AT&T code and have a complete new system. They did. The purpose of the AT&T code was to provide infrastructure under which development of individual components could take place. (This explanation is slightly oversimplified. A full discussion of the issue would be an article in its own right, and would probably violate a number of confidentiality agreements.)
Similarly, the Free Software Foundation's GNU project developed a broad variety of utilities and tools for UNIX-like systems, which relied on those existing systems for their infrastructure. However, this meant that, when Linus Torvalds released a kernel, the tools to run on it and provide it with basic userspace functionality already existed. Again, existing infrastructure allowed the development of the needed components.
Some people have argued that no one could have done an open source operating system "from scratch" — without the existence of other systems for the infrastructure work. This may well be true, but it's also true most modern operating system work now; we've gotten well past the point where the operating system can be toggled in on the front panel.
Back when Linux was first showed up, many people claimed it would be commercially irrelevant because there was no way to make money on it. This has turned out not to be the case. Interestingly, rather than fewer ways of making money, open source appears to offer more ways of making money. With proprietary, closed-source software, your primary moneymaking plan is to sell licenses, and possibly do some custom work for specific customers. Carrying that custom work can become a major cost, though, and there's no one to share the costs of maintenance. Most of your revenue has to come from selling licenses. Software developed for internal use never makes you money; all it does is provide functionality. (That can be worth it, but it's never a direct source of revenue.)
People making money from Linux do so in many ways. One is to sell a "distribution" — essentially selling the packaging of a bunch of software as a bundled solution. You can make money doing this, simply because good packaging is worth something to people. Even if they don't have to pay you money to get your product, they may well prefer to send you $10 for a DVD than to download and burn it themselves. Projects doing this can also collect donations.
An interesting way to make money can be found in hardware vendors. Hardware vendors can sell more hardware if their hardware is more useful, and these days "runs Linux" is a great place to start on "more useful". Meanwhile, professional programmers can sell the service of developing Linux support for hardware. The programmers get paid to program, developing code which (we hope) they can then contribute to the main Linux source tree. The hardware vendors get paid to sell hardware; paying someone to develop support for it is a cost of doing business. Conveniently, it's quite common that it's a much lower cost than, say, the cost of developing your own system from scratch.
Services and support can also be sold, of course. There are always people out there who want something done, and would rather hire someone else to do it. Open source creates a real and competitive market for support services — supporting software is no longer a task limited to the one company that has access to the source code.
Like biological ecosystems, a computer ecosystem is more viable when it has more participants and more diversity. Building an ecosystem for a closed-source project is certainly possible, but it's not easy. Third parties don't want to be too dependent on software that could easily migrate away from them, leaving them with nothing to sell. They will do it if they have to, but it's something people would usually rather avoid.
With an open source project, the ecosystem participants don't have to worry so much that the project leader will move in an unacceptable direction. After all, they can just take the version they liked and work on it. It might not be ideal, but it's better than being totally out of business if a single entity (which may regard you as a competitor) decides to change something that was vital to your product's viability.
In both closed-source and open source ecosystems, the participants have common interest. In open source ecosystems, though, there are fewer secrets, and thus, fewer opportunities for mistrust. You don't hear news stories about the U.S. Department of Justice investigating allegations of Linus Torvalds using special undocumented system calls in Linux to make his word processor run better than any competitor's could.
Reducing barriers to participation in a market makes it easier to build a viable ecosystem. Increasing the size of the market does, too. So if you give away a product, making it easy to get large market share, and you let everyone play on a level playing field, it should be easy to develop a thriving ecosystem. The theory, in this case, works out; open source software provides a large pool of opportunities for people to make money.
Frankly, even I was a bit surprised by this one. Not that I didn't think open source technologies were up to the task; I just didn't expect the financial industry to catch on within the decade. The London Stock Exchange recently announced that their new Linux-based platform was noticeably faster than the previous implementation.
Over time, people have gradually realized that security through obscurity doesn't work; if you really want things to be reliable, there is a great deal to be said for having 100% complete source code availability. Nonetheless, financial markets have often had some mix of the people who think "proprietary" means "fast" or "good". (see the Proprietary connotations sidebar). It's nice to see that progress has been made on that front.
Routers and network appliances
It's no secret that a lot of wireless routers run Linux under the hood, as do many other network appliances, such as some network-attached storage (NAS) devices. However, most consumer routers I've used have been disappointing at best. They've tended to buggy NAT implementations (such as being unable to contact your external address from the inside network), limited settings, bad DHCP implementations, and the like. A friend of mine spent something over a month trying to get a vendor to acknowledge that you couldn't enter a WEP key except in hexadecimal; he finally sent them a screen shot of the interface, with "ASCII" clearly selected, complaining that "g" was not a valid hex digit. A new update came out, eventually.
The magic of open source, though, is that if they're running Linux, it's usually possible for us to update it. Sure enough, the DD-WRT project offers router firmware replacements that are full-featured, powerful, flexible, and just plain awesome. After the second or third time I griped about a misbehaving router, one of my friends convinced me to try DD-WRT. The DD-WRT allows a user to replace a commercial router's firmware with a free Linux implementation, adding a number of functions that are within the hardware's capabilities, but not necessarily utilized. I haven't looked back; it's amazing.
What's particularly interesting about DD-WRT is that the user interface is excellent. For a long time, user interfaces were regarded as one of the things for which open source models were hopeless. Certainly, I've had plenty of bad experiences with open source user interfaces. However, the DD-WRT interface is remarkable; it is unequivocally better than any wireless router factory-provided interface that I've seen. (As a disclaimer, though, I've been using consumer hardware, not high-end professional stuff.) As a special bonus, it doesn't automatically and randomly redirect you to an advertising page every so often, nor can the firewall be configured remotely (see Resources for an example of a closed-source product that did allow that).
Given the availability, free, of DD-WRT, why do many companies persist in shipping less powerful, less flexible, and buggier interfaces on their routers? I am pretty much stumped on this one; it would seem to me that hardware vendors would be much happier using DD-WRT, so they could sell more hardware at lower costs. It may come down to branding issues, control, or job security; we just don't know.
A while back, my employer had a problem: We needed a particular piece of functionality, and while there were some near matches for it available (as open source, of course), there were a number of mismatches between existing designs and our primary use cases. We decided we needed to build our own. There was no question that the resulting project ought to be made available as open source. Sure, we were spending development time on something that could conceivably be a competitive advantage; however, the advantages of something open to the community, which other people might work on, obviously outweighed that.
That project is pseudo (see Resources), and it's now being used outside our environment by other projects, including the Yocto Linux project. If you're interested in learning more about a specific open source project, look for an upcoming series on pseudo on IBM developerWorks.
In the next (and final) installment of this series, I'll address the frequently asked question: If open source is such a great thing, why is there still commercial software?
Learn
- Read about the London Stock Exchange using
Linux to break world record trading speeds. (Computer World UK)
- The Cranky User discusses an odious
router. But hey, you can reconfigure the firewall remotely, that
makes it OK, right?
- Wikipedia gives some background on post-scarcity as a concept.
- The pseudo project was
developed entirely to meet internal needs, but was released as open source
anyway.
- The Yocto project aims to provide
key infrastructure for people working on building embedded Linux.
- Listen to interesting interviews and
discussions for software developers, tune in to developerWorks
podcasts.
- Stay current with developerWorks' Technical events and webcasts.
- Follow developerWorks on
Twitter.
- Check out upcoming conferences, trade
shows, webcasts, and other Events around the world that are of interest to IBM open source
developers.
- Visit the developerWorks Open source
zone for extensive how-to information, tools, and project updates
to help you develop with open source technologies and use them with IBM's
products, as well as our most popular articles and tutorials.
- Watch and learn about IBM and open source
technologies and product functions with the no-cost developerWorks On-demand demos.
Get products and technologies
- See the Wikipedia
list of free and open source software packages for a sampling of
what is available in open source.
- Innovate your
next open source development project with IBM trial
software, available for download or on DVD.
Discuss
- Get involved in the developerWorks
community. Connect with other developerWorks users while exploring
the developer-driven blogs, forums, groups, and wikis.





