A recent Stack Overflow podcast brought up the interesting possibility of open-sourcing the Stack Overflow engine. Jeff was highly in favor of eventually open-sourcing Stack Overflow, while Joel felt that doing so would come in direct conflict with the recently announced Stack Exchange, a hosted version of Stack Overflow offered by Joel’s company, Fog Creek Software.

opensource_logoI’m not even going to attempt to debate the merits of open-sourcing the Stack Overflow engine, as that could take up an entire blog post by itself.  Instead, I’m going to discuss whether or not open-sourcing your product will automatically destroy your business model.

The short answer: yes and no.  Yes, it will likely destroy your existing business model, but it does not necessarily destroy your business; you simply have to adapt to a new business model.

There are numerous examples of commercial open-source software products that have been able to successfully adapt their business to an open-source model (Firefox, Mono and MySQL, just to name a few).

An open-source business model typically takes one of several forms:

  1. A dual-license model, where a code base is published under a traditional open source license and a commercial license simultaneously. Vendors typically charge a perpetual license fee for additional closed-source features, supplementary documentation, testing, and quality, as well as intellectual property indenification to protect the purchaser from legal liability.
  2. Functional encapsulation, where an open source framework or library is installed on a user’s computer separately from the commercial product, and the commercial product uses the open source functionality in an “arm’s length” way (under the argument that the commercial product was shipped without the open source library, even though it uses it). Vendors typically charge a perpetual license fee for the functionality that they provide under closed source, as they usually don’t provide services or other direct value for the open source elements.
  3. A software as a service model, under the argument that the vendor is charging for the services, not the software itself (because the software is never shipped to customers or installed on their computers). Vendors typically charge a monthly subscription fee for use of their hosted applications.
  4. Not charging for the software, but only for the support, training, and consulting services that assist users of the open source software. Vendors typically charge an annual fee for support, per-student fees for training, and per-project fees for consulting engagements.

Charging for support & training, as well as value-added services or features seems to be the most popular route for commercial open-source products.  Popular examples utilizing this model include Red Hat Linux, WordPress and DotNetNuke.

It’s important to realize that we are dealing with two different classes of users.  First are the “enterprisey” users that, for all intents and purposes, have no time and infinite money.  Second are the more tech-savvy users who effectively have infinite time and no money.

The first of the two groups is much more willing to pay large amounts of money for an out-of-the-box solution that just works.  They either don’t have the time or the technical expertise to setup an open-source product on their own server.

The second group has no lack of technical expertise; instead, they don’t have the money to pay for a fancy hosted solution.  For these users, setting up an open-source solution on their own server is often a fun exercise in geekery.

Since the open-source version of a software product is clearly only aimed at the second group, you simply need to market a version of your product to the first group.  This can be done through either some sort of support and/or training, a hosted version (such as Stack Exchange or WordPress.com), or value-added services.

It’s certainly not a given that an open-source business model will work for every software product, but I am certain that open-sourcing your product will not automatically destroy your business model – you just have to be willing to change and adapt.

{ 4 comments }

Let’s face it, developing applications for the iPhone isn’t exactly a walk in the park. Objective-c has a much steeper learning curve than say, C# or Java. And learning how to use Xcode and Interface Builder can be quite an exercise if you’re more used to an IDE like Visual Studio or Eclipse.

The iPhone Developer Center is a decent resource for budding iPhone developers, but I’ve found that many of the sample applications are far too trivial to be good examples for best practices when it comes to developing on the iPhone. Heck, some of Apple’s example applications are downright contradictory to each other in terms of how they implement the MVC pattern.

This may not be true for other programmers, but at least for me, one of the best ways for me to learn a new language is not to run through a bunch of tutorials or to read a book on the language, but to just start reading through some well written source code. If you’re already fairly well versed in another programming language, chances are the language you’re trying to learn won’t be that different, and you’ll be able to figure things out pretty quickly just by looking at some source code.

So, the question of the day then becomes, where might you find some good iPhone source code to look at? Following is a list of open source iPhone applications that can serve as good examples for a new developer trying to learn the ropes of objective-c and iPhone development.

  • WordPress – a WordPress client on your iPhone that lets you write posts, upload photos, and edit your WordPress blog
  • Freshbooks – an excellent companion to the already fabulous Freshbooks site – an application that’s great for freelancers to do time tracking and billing
  • wikiHow – brings wikiHow’s content directly to your iPhone.
  • Twitterfon – a Twitter client
  • Gorillas – the classic game from the good ‘ole DOS days
  • Tris – a Tetris clone

{ 0 comments }

What’s the best way to implement the ICloneable interface in .NET? Don’t.

July 11, 2009 .net

When creating a .NET object that you need to be able to make copies of, it seems fairly intuitive, at least on the surface, that you would want to implement the ICloneable interface. Surprisingly enough, Microsoft actually recommends against implementing this interface:
Do not implement ICloneable
There are two general ways to implement ICloneable, either as [...]

Read the full article →

iPhone Development: Making the keyboard disappear after pressing “Done”

April 27, 2009 iPhone Development

While working on a new iPhone application the other day, I was surprised to find out that the keyboard does not automatically hide itself after pressing the “Done” button. This seems odd to me, because what would you want the “Done” button to do, other than hide the keyboard? It seems like this [...]

Read the full article →

Searching Active Directory groups with C#

March 23, 2009 Programming

I recently wrote about searching Active Directory users with C#, and mentioned that the next part of the equation was searching Active Directory groups, and returning all the users in the group. Since groups can contain other groups, we must perform this search recursively. In order to avoid the infinite recursion possibility, I [...]

Read the full article →

Adding custom JavaScript to a SharePoint Form

March 15, 2009 Programming

Recently I was implementing a simple bug tracker in the form of a SharePoint list, and I wanted to add some simple JavaScript to the bug entry form that captured the referring page. This seemed like a simple enough feature, but as it turned out, using JavaScript within a SharePoint form isn’t exactly straight-forward.

Read the full article →