I wonder if Levi Strauss would have made billions selling his blue jeans if he had said that the zipper was “sold separately.” I wonder if cell phones would be as ubiquitous as they are today if everyone had to learn to speak binary in order to communicate using them. I wonder how many people would drive cars if they had to produce their own fuel. I wonder.
The sad truth is that this is how most of the open source world works. If you want to install one program, you’re often expected to find all its prerequisites and get them installed first. If you’re lucky, someone has already packaged up all the right versions of all the prerequisites, along with the app you really want to install, into the native package management system for whatever operating system you happen to use.
When there’s something missing, it’s usually obvious, which makes it easy to reject the app. The difference between mainstream success and utter failure is often in the details. Open source and free software have made great strides into the mainstream, but it’s taken us over two decades to get there. Even today, there are only a handful of big success stories, versus thousands of struggling apps that never see the light of day.
Where’s the Stack?
Most of the open source applications in the world are missing their stack. The stack is the complete suite of software that actually makes an application work. These are the prerequisites, the plugins, the installer, the management tools, and the application itself. If you’re writing a game, then you might have some sound libraries and a 3-D rendering engine as part of your stack. If you’re writing a desktop app, then you might have a windowing application programming interface like GTK+. If you’re writing a server application, you might have Apache and MySQL as part of your stack.
Every application of any size has a stack, and that stack grows as your application gains complexity. As your application gains complexity, getting your application to run gains complexity. The goal of including the entire stack with your application is to get your user up and running as quickly as possible.
We live in a world of instant gratification and many choices. If a user spends an hour trying to get your application running but then realizes that one of your competitors can have him up and running in under 15 minutes, which do you think he’ll choose?
In a world of constant media buzz, it’s difficult to even get someone to look at your product for a few minutes. Why give them any reason to leave or any hurdles to jump?
I wonder why so many people buy songs on iTunes even though they know they could get those same songs free by using another piece of software. Could it be that Apple has made it easier to pay for the songs than it is to get them for free? The same is true in the open source world. Just because your application is free doesn’t mean someone won’t pay for the commercial competitor. We pay because we often have more money than patience.
Many Paths to Success
I’m not saying that you shouldn’t, and can’t, make money on your open source application. After all, that’s how I make my living. What I’m saying is if you want to get users to use your application, you need to make it easier for them to get started. Your user isn’t you. They don’t have your skills, your time, or your environment. If you want them to use your product, then provide an environment that gives them a good experience right off the bat.
There are many ways to achieve this:
- If it’s a server side application, provide a hosting solution either directly or through some relationship with another company.
- Do what you can to provide native packages for your application, or work with the members of your community to get it done.
- Provide a virtual machine appliance that’s easy to download and get running.
- Write a GUI (graphical user interface) or Web-based install system for use with operating systems that don’t have a native packaging system and those with which you haven’t integrated.
- Provide an easy way to demonstrate your software, either through a Web-based Flash application, or a demo server.
- Work with third-party distributors to get your application distributed through them. Try to get your application included in a Linux or FreeBSD distribution. If your app is for an iPhone, then get it into the App Store. If it’s a game, get it distributed on Steam or one of the other download services. If it’s a Windows app, try Stardock’s Impulse distribution system.
I strongly encourage developers to take a sort of kitchen sink approach. For example, provide commercial hosting, a demo server, VMware appliances, a Web-based install system and native packages run through the community — and get the application included in systems like Debian and Ubuntu. Taking this sort of approach gives your current and potential users many ways both to evaluate and use your software.
At minimum, your stack should have an installer, the prerequisites for your application, and the application itself. You can provide an even better user experience by giving the user an easy way to install plugins, manage application settings, and provide an uninstall mechanism. It doesn’t matter whether you use native packages, a third-party distribution system, a VM (virtual machine) appliance, or write an installer yourself, just as long as you provide your user an easy way to get your application up and running.
Making it easy for your users to evaluate and use your software is just the first step that we, as a community, need to take to move forward. Ray Kroc, the founder of McDonald’s, said, “Look after the customer, and the business will take care of itself.” I wonder if we in the open source community shouldn’t adopt that as our credo too.
JT Smith is the president of Plain Black Corporation and the creator of the WebGUI Application Framework. He speaks internationally on the topics of Web content management, Web application development and open source software.