Free Software Business Models
*****************************

Abstract
========

Free software, in addition to being an activity for users and
volunteers to participate in, is a viable business model.  There are a
number of things that potential businesspeople should be aware of, in
terms of what has worked in the past for businesses which have
succeeded with free software.

   Five successful ways of making money are by providing custom work for
ports and new features, support contracts, training,
consulting/customization, and telephone support.  Documentation and
internal code cleanups are probably better treated as overhead rather
than being funded specifically.  Funding major projects can be
difficult-various models have succeeded in the past but it isn't as
straightforward as selling support for existing software.

   It is beneficial to collaborate with developers outside the business,
who are working on the same software.  Techniques include a mailing list
focused on improvements people are planning to make, and offering
checkin access to people who have demonstrated their ability to
contribute.  Widespread distribution of the software can publicize the
software and help people conduct pre-purchase evaluations.  Two ways to
enable people to redistribute the software and offer support are (1)
have the redistributor sell support contracts, and have an agreement
which provides for passing along difficult problems for money, and (2)
have the redistributor provide only the most minimal support
themselves, and refer people if they want a greater level of support.

   Using these free software business models, there is no limit.  Free
software can reach software intended for hackers and software intended
for non-technical people.  People in free software businesses can make
a living.  And free software businesses need not inhibit in any way the
communities of users and contributors which have been so instrumental
in many free software projects.

Introduction
============

   Freely redistributable software, which I will refer to as free
software for brevity, may be most familiar to many people as an
activity driven by users and volunteers.  Users may write improvements
to the software, or assist in its maintenance so that they (or their
employer) can use it.  Students or others seeking to develop their
skills may work on the software as an educational project.  Researchers
may implement improvements as a way of trying out new technical ideas.
And of course, anyone might contribute for the sheer fun of hacking.
All of these types of contributions are not to be discounted, and in
fact are very valuable to the progress of free software.  However, it
is a misconception to think that free software (particularly the best
and most widespread free software) has relied exclusively on mechanisms
such as this.

   For instance, X Windows has been written and maintained by a
consortium, funded by the companies which use X Windows in their
products [XcoWba], which employs some 25 people [XcoWbb].  The Free
Software Foundation has written and/or maintained GCC, GDB, emacs, and
other GNU programs.  They are funded by donations, and their
distribution services [GNU96a,GNUWba].  They employ some 8 people
[GNU96b].  Cygnus Support has been responsible for much of the recent
development of programs such as GCC, GDB, and binutils; they employ
over 50 people [CygWba].  This is only a sampling; there are others as
well.  This paper does not try to list every possible funding
mechanism, but it does describe some of the basic ways that one can
make money off free software.

What people will pay for
========================

   In years of selling free software support, people in the business
have developed some experience about what works and does not work.
Here are some of the services which people have been willing to pay for.

   A prospective customer may approach the free software business with
an inquiry such as:  "We like the software, but can you make it do X?"
Examples are porting the software to a new platform or adding a
particular feature.  Some free software businesses will respond to such
an inquiry by quoting a price for adding the desired functionality.
The parties will typically sign a contract detailing the work to be
done, the timetable, and a price, generally fixed, to be paid for the
work.  Two companies offering this kind of service are Cyclic [CycWba]
and Cygnus [CygWbb].

   Another successful model is to sell yearly support contracts.  They
are similar to the support contracts sold by many vendors for non-free
mainframe and unix software, and provides fairly comprehensive
service--in particular both assistance using the software (typically by
telephone or email) and fixing bugs.  By having a fixed yearly price
rather than charging for each problem resolution, the free software
business has an incentive to maintain a quality product (in those areas
that customers care about).  However, many users find that such
contracts are too expensive.  They don't expect to need a lot of
bug-fixing and assistance.  For example, they might be willing to work
around bugs rather than get them fixed.  Two companies offering this
kind of service are Cyclic [CycWba] and Cygnus [CygWbc].

   A support offering which may be more appropriate for some customers
is telephone support.  This is priced per-minute or per-call, allowing
people to use the service with no big financial commitment.  This
service is often most useful for people seeking assistance but also
could encompass bug-fixing, at least for some kinds of bugs.  One
company offering this service is Yggdrasil [YggWba].  It is probably
not as profitable as the more expensive yearly support contracts
[Per95a], but seems to be viable.

   Training classes are a business which is well-established at least
for non-free software.  Classes may be located at the customer's site
or the training company's site.  Classes typically have a standard
curriculum.  An example of a company offering training (for non-free
software) is The Learning Tree [LrnWba].

   Another well established business, although not necessarily in a
specifically free software context, is hourly consulting or
customization.  The customer will have the consultant come in, look at
the customer's use of the software, and offer advice, help set up the
software in a way that matches the customer's needs, or write software
to meet a specific need.  The most common arrangement is that the
customer receives ownership of any software produced.  Providing for
the software to become free software instead would change the business
arrangement relatively little in many cases.

What people (usually) will not pay for
======================================

   There are other activities that one might hope to find a customer to
fund, but have proven to be difficult to do that way.

   One is internal code cleanups.  One can include some cleanups in
preparing quotes for ports and new features, but you won't tend to find
customers willing to pay $40,000 to rewrite the foo, bar, and baz
modules when the alternative is paying $10,000 for a less clean
solution, doing without the feature, hiring someone else to implement
it, switching to a competing product, etc.

   Another is documentation.  People rarely approach free software
businesses asking to fund writing better documentation.  The one
exception that I am aware of is that the Free Software Foundation did
receive a donation specifically earmarked for writing the Emacs Lisp
Reference Manual [Per91a].  Also, customers who are paying for adding
new features will pay for documentation of those features [Per96c].

   The fact that it is hard to get customers to fund these items
specifically does not mean that they cannot get done; it merely means
that one can consider them as overhead, funded by services such as
support contracts and training classes.

Funding major projects
======================

   So, if one of the standard ways to enhance the capability of a free
program is to find a customer who wants to fund the work, what does one
do if the work is too large, relative to the benefit for any one
customer?  Experience has shown that graphical user interfaces are
often in this category.

   One approach is, of course, to simply fund the work oneself.  This
works as long as the improvement will make the software sufficiently
more attractive that one can sell enough additional support contracts
to make back the investment.  For example, Cygnus did its Graphical User
Interface for the GNU Debugger this way [Cyg95a].

   Another method is to line up a bunch of funders each of whom is
willing to chip in a small amount.  For example, Cygnus sought such
customers for the initial Solaris 2.x port of the GNU software
development tools [GNU92a].  This is a very logical approach--often in
such situations people will be not only willing but eager to
participate.  But such projects can be hard to manage.  The difficulty
is lining up a sufficient amount of funding from people who are all
interested in the same thing (not just generally similar things).
Timing is also critical; by the time the last people show up, the first
people (or their employers) may have lost interest.

   Another way for major projects to happen is outside the context of a
free software business.  Most free software businesses have been built
upon existing software (perhaps arising from a research lab, a different
business, or a volunteer effort), because of the difficulty of funding
major projects.

Developers
==========

   Because the software is free, diverse people will be enhancing it.  A
free software business needs to figure out how it will relate to other
people working on the same software but not employed by the business
(who I will call "developers").  One possible answer, of course, is to
let them go their own way.  But there are various business reasons to
involve them.  One is that they will contribute bugfixes, features, and
ideas that customers want.  That way, when a customer request comes in,
a free software business can simply inform them about the feature or
perhaps tidy it up a bit as needed, rather than developing it from
scratch.  Another reason to cooperate is that, without coordination,
developers will tend to create their own branches of the software and
then customers will complain that the branch they are getting lacks
features from the other branches.

   On the other hand, if not done carefully, interacting with the many,
many people out there who might be working on the software or attempting
to do so can be a huge time sink.  There are proven techniques to help
with this.

   One is offering checkin access, that is, the ability to make changes
to the master sources.  Many free software projects have been held back
by the situation of an overworked maintainer trying to keep up with
reviewing all changes and putting them in.  One good solution is to
recruit other people who are qualified to determine what is a good
change.  Not everyone who volunteers is qualified, however.  By
requiring people to submit at least one, and preferably several, good
quality changes before being offered checkin access, one can weed out
people who never get around to writing any code and people who write
poor quality code.

   Of course, when there are multiple people with checkin access, they
need to communicate regarding criteria for checkin.  So it is a good
idea to have a mailing list for those with checkin access.  Because
this list is so central to the functioning of the developer group, it
is important to keep it focused on concrete improvements that someone
has offered to implement, not on pipe dreams.  If this ground rule is
established, asking "who has volunteered to implement this?" can be very
effective in curtailing a discussion which is getting off track.

   Free software projects using the mechanism outlined here, or some
variation thereof, include CVS [Cyc96a], FreeBSD [FrBWba], and NetBSD
[NtBWba].

Wide distribution of software
=============================

   Because the software is free, various people will, of course,
distribute it.  So the question for the free software business is how to
participate in this.  Should a business make binaries of the software
available to anyone on the internet?  Or should it just provide them to
customers (and figure that others can take care of further distribution
if they choose)?  To what extent should a free software business
promote the software's availability to non-customers?

   There are various advantages to the free software business to having
everything--sources, binaries, and printed manuals--widely available.
One of the more obvious, for some entities, is that they run
distribution services which bring in needed revenue.  Examples are Red
Hat [RdHWba] and the Free Software Foundation [GNUWba]).

   Another advantage is that, particularly if the product consists of
relatively expensive support contracts, many customers will want to
evaluate the software before buying.  Vendors of non-free software often
have demo versions or limited time licenses.  For the free software
business the most obvious answer can also be quite effective: "just
download it!"

   Wide distribution also promotes word of mouth marketing.  The more
people who are using the software, even if they are not people who are
interested in the services of the free software business at the time,
the more likely that it will spread to people who will use those
services.  For example, a number of our customers at Cyclic had been
using CVS for some years before they purchased support.

   Now, this fact--that being associated with the software which is
widely available can lead to greater exposure--also has a downside.  If
someone has a bad experience rather than a good experience, then that
is also more likely to reflect on the free software business that has
an association with the software.  It is probably impractical to
provide sufficient documentation, mailing lists, and other mechanisms so
that *everyone* who tries the software gets the same kind of help (and
therefore as favorable an impression) as a customer would, so it is
useful to make it clear that support is an extra service which one
cannot expect if one merely gets the software alone.

Redistribution of support
=========================

   One of the key possibilities facilitated by free software is that it
becomes possible to get the software and be able to redistribute it.
For example, a hardware vendor may distribute the software with their
hardware.  In the context of a free software business, though, one must
ask about how one handles support for the redistributed software.

   It is impractical to support a customer and all of their customers
for the same price for which one would support only the customer
themself.  Redistributor arrangements, in which people who receive the
software have ways of getting support if they need it, are essential to
getting into as many markets as possible.  Non-free software tends to
be sold through a wide variety of resellers.

   One way of solving this problem is for the redistributor to sell
support contracts, with an arrangement by which easy problems can be
handled directly and harder problems can be passed along, with the
revenues divided between the companies in some way.  For example, SGI
has an arrangement with Ada Core Technologies to redistribute the GNU
Ada compiler in this fashion [ACTWba], [Per96a].

   Another solution is for the redistributor to provide minimal or no
support (for example, installation support only), and then suggest that
people buy a full support contract from the upstream company directly if
they want a greater level of support.  Hitachi distributes compiler
tools from Cygnus on this basis [HitWba], [Per96b] and at one time Wind
River also distributed those tools similarly [Cyg95b].

Conclusion
==========

   The various success stories mentioned above should make it clear that
one can make money off free software.  Also, communities of developers
and users (taking a more active role than merely as customers) and free
software businesses complement, rather than undermine, each other.

   By looking at the particular models and the ways that they provide
revenue, an even more sweeping conclusion emerges.  The business models
described still work even if the vast majority of users do not have the
skills or inclination to modify the software.  Applying these models
shows how to make free software work for most or all kinds of software.
Software for hackers, the kind of free software which has been most
successful to date, is only the beginning.

References
==========

   [ACTWba], "A Well-Established Product", section of "GNAT
maintenance", sub-page of the Ada Core Technologies web page at
http://www.gnat.com/.

   [CycWba], "Prices for our CVS support", sub-page of
http://www.cyclic.com.

   [Cyc96a], "Cyclic Thanks CVS Contributors", news release of 26 Aug
1996, available from http://www.cyclic.com/.

   [Cyg95a], "Cygnus Support Ships Graphical User Interface for GNU
Debugger", press release of April 17, 1995, available from
http://www.cygnus.com/.

   [Cyg95b], "Wind River and Cygnus Support Announce Partnership",
Cygnus press release of September 11, 1995, available from
http://www.cygnus.com/.

   [CygWba], http://www.cygnus.com/.

   [CygWbb], "Cygnus Products," sub-page of http://www.cygnus.com/.

   [CygWbc], "Cygnus GNU Professional", sub-page of [CygWbb].

   [FrBWba], "FreeBSD contributor list", section 26 of the FreeBSD
Handbook, available from the "Documentation" sub-page of
http://www.freebsd.org/.

   [GNU92a], "A GNU Standard on Suns?", GNU's Bulletin, Free Software
Foundation, Boston, MA, Vol. 1, No. 13, June, 1992.  Online at
http://www.cs.pdx.edu/~trent/gnu/.

   [GNU96a], "What is the FSF?", GNU's Bulletin, Free Software
Foundation, Boston, MA, January, 1996.  Online at
http://www.gnu.ai.mit.edu/.

   [GNU96b], "GNU's Who", GNU's Bulletin, Free Software Foundation,
Boston, MA, January, 1996.  Online at http://www.gnu.ai.mit.edu/.

   [GNUWba], Free Software Foundation, Boston, MA,
http://www.gnu.ai.mit.edu/.

   [HitWba], "Hitachi SH-1 $99 Eval Board", sub-page of
http://www.halsp.hitachi.com/ as of December 1996.

   [LrnWba], Learning Tree International, http://www.learningtree.com/.

   [NtBWba], "The people who make it all possible", sub-page of
http://www.netbsd.org/.

   [Per91a], personal communication from Robert J. Chassell, about 1991.

   [Per95a], personal communication from someone who worked for one of
the companies to whom Microsoft outsources Windows 95 support, 1995.

   [Per96a], personal communication from sources at Silicon Graphics Inc
(SGI) and Ada Core Technologies, May 1996.

   [Per96b], personal communication from Stan Shebs of Cygnus, December
1996.

   [Per96c], personal communication from Roland Pesch, December 1996.

   [RdHWba], http://www.redhat.com/.

   [XcoWba], "What is the X Consortium", sub-page of http://www.x.org/
as of December, 1996.

   [XcoWbb], "The Staff Here at the X Consortium", sub-page of "Job
Listings and Staff", sub-page of http://www.x.org/ as of December, 1996.

   [YggWba], "Technical Support Policy," sub-page of "Yggdrasil
Technical Support Information", sub-page of http://www.yggdrasil.com/.

Biography
*********

   Jim Kingdon has worked in a number of free software businesses,
including Cygnus and the Free Software Foundation.  He is currently with
a small free software startup, Cyclic Software, and as such does some of
just about everything, including management, sales, and marketing.