I want to jump to the punchline even before I make somedefinitions: open source software is something that you need toconsider very seriously. This is true whether you are a user ofsoftware, a creator of software, a software distributor, a softwareintegrator, a software solutions provider, or a venture capitalist.There is a difference, though, between seriously consideringsomething and eventually doing something with it. Nevertheless, ifyou don’t educate yourself about the possible role of opensource in your business, organization, or government, you might beleaving yourself open to missed opportunities and cost savings, aswell as increased competitive pressures. You need to be able toaccurately assess what is the right balance of proprietary and opensource software that will optimize the results you are trying toachieve. In this part I’m going to look at open source softwareand some of the factors that you need to examine in your seriousconsideration of its use.
Fundamentally (and informally), “open source software”is software where you can see, re-use, and redistribute all or partof the source code, plus some fine print. There are two fundamentalconcepts here: what do I mean by “source code” and justwhat is this “fine print”? If you are a softwaredeveloper, you know all about the former, and if you are anintellectual property attorney, the second is your specialty. Forthose of you who are one or the other or neither, I’ll discussboth.
“Proprietary software” is usually made available in aform that will run on your computer, but you are not given the original material from which it was created. You cannot freely incorporateproprietary software in your own products, though you may be able to obtainsome sort of fee-based license to let you do this. The basic idea here is thatproprietary software contains intellectual property that was created by thesoftware provider and that is not shared because it offers competitive advantage.Licensing proprietary software to users for a fee is a long standing business modelin the software industry. Licensing is not the only way revenue can be created, and it is often supplemented with subscription, maintenance, and support charges.
There are precise definitions of what is and is not open sourcesoftware, and I think the Open Source Initiative should be yourprimary source of this information. I’m going to adopt a moreinformal approach to give you enough of an idea of what people talkabout when they discuss open source. That said, when you develop youropen source strategy and management plan, you need to be quitecareful of the details, particularly the legal ones concerninglicenses. Of course, if you are using proprietary, commercialsoftware I hope you are looking at those licenses with a great dealof care as well.
There are people who think all software should be open source andthere are others who think that no software should be made availablethat way. This has at times caused political, if not almost ideological, arguments about the nature of open sourceand its relationship to economic systems. I am not exactly neutral, but neither am I at eitherextreme. The ultimate choice of what to usebelongs to the customer and consumer. If open source drivesinnovation and increases competition, that’s a good thing. If it allowsbusinesses to be more creative in their business models as Idescribed in the last section, then that is a positive effect. If proprietarysoftware provides the functionality, scalability, security, andperformance that you need, then it may very well be what you should use today. (This is with the caveat that proprietary software shouldnot lock you into its use by avoiding the use of real open standards.)
Thesoftware industry is changing rapidly, so make sure you re-evaluateyour decisions at least yearly, if not every six months. Open sourceprojects may get better in that time, but so too may proprietaryproducts, possibly spurred on by open source competition.
It is likely that your world will increasingly be a hybrid mix of bothopen source and proprietary software. You may not even know this is happening.For example, approximately 70% of all websites use the open source Apacheweb server. When you browse the web, even if you are using a proprietaryoperating system and browser, you are still employing open source tocarry out your tasks.
“Code” is the set of instructions that makes computerhardware do things. Hardware has low level code built right into thecircuitry. There are also special chips that can be altereddynamically to have different instructions: this type of code is called“firmware.” “Software” is a general term thatincludes firmware, but most frequently means the very large class ofsets of instructions that make general purpose chips made by IBM,Intel, AMD, Sun Microsystems, and others do a wide range of things.Using the same hardware, I can create and run software like videogames, operating systems such as Linux or Windows, accountingsoftware, word processors, web browsers, email programs like LotusNotes, banking systems, travel reservation systems, databases, andmany others.
Software can run on top of other software, such as a spreadsheetrunning on the OS X operating system. A macro in a spreadsheet isalso an example of software, though it is relatively small comparedto the spreadsheet software itself. Informally, we call software thatruns on operating systems “applications.” The term“program” is used generally and vaguely to refer to anysoftware that accomplishes a particular task. People who createsoftware go by many titles. Here are a few: programmer, softwaredeveloper, software engineer, application developer, and coder.
Just as I am using a text editor to create and then save thisdocument to my hard disk so that you and others can read it later, Ican use a programmer’s editor to create the code for aparticular piece of software and then save that on disk. Thisdocument is translated by your eyes (if you reading it) or your ears(if you are listening to it), and then your brain into somethingmeaningful (I hope). In the same way, there are special programs thattranslate high level code into the low level form that someparticular kind of hardware understands. My words in the text are the source forany direct understanding you may get from this document. The highlevel code is the source for the low level instructions that thehardware understands, hence the phrase “source code.”
Just as it would have been possible to write this article inFrench, German, Russian, Japanese or some other language and stillhave it understood by a speaker of those languages, there aredifferent languages in which a software developer can create sourcecode. In fact, the original source code for an application can be acollection of parts done in several languages.
I don’t think there will ever be a time when only oneprogramming language is used by everyone for every kind of task.There are engineering reasons that determine why programminglanguages are created and used. There are also computer industrypolitical and competitive motivations, such as the developer of aparticular operating system who creates a language that primarilyruns on that operating system and makes it difficult to moveapplications to other platforms.
As I mentioned before, an application may be created by combiningseveral different parts. Why might I do this when I am developingsoftware? One reason has to do with design: if I can factor a bigapplication into smaller parts, or modules, and they have welldefined ways in which they talk to each other, then it is easier tounderstand, create and fix the smaller sections, while having thewhole fit together like a jigsaw puzzle. Modules can also be writtenby different people, sometimes living in different parts of the worldor working in another part of an organization.
For example, if I am an expert in writing code that draws andmanipulates photographs on a computer screen, then it makes the mostsense for me to focus on implementing modules that need that sort offunction, rather than have me write code for something completelydifferent, like databases. Another good reason for using this modularkind of design is that I can re-use the pieces in different projects.The more I can re-use, the faster I can develop software. If I knowthat the individual modules were written and maintained by experts, Ihave greater confidence that the software I put together will behigher quality and that I am efficiently leveraging the work ofothers.
So software applications can be broken down into components called modules and they can also use collections of special routines that are stored in what are called libraries. For example, I might have a library that does fancy mathematical calculations. If the modules and libraries are available as open source, then many people can use them freely. They can also look at and possible improve the code and then share that. This means that a community can develop around the code to create, maintain, and improve it. This benefits everyone who might be able to take advantage of the code in their own projects.
One important place to do this sort of thing is where standards need to beimplemented. If I am creating a word processor, then it makes senseto have a module that knows how to read and write the OASISOpenDocument Format (ODF), and it is the only part of the programthat does this. The rest of the application can use whatever formmakes sense internally to store the information from the document,but when it needs to saved to or read from disk, then that one modulewill be used. If I am writing an extension for a web browser thatneeds to read and then display an ODF document, I can re-use thatmodule if I have access to it and have permission to use it. If thereis a problem in the module or the standard gets updated, I can changethe module if I have access to the source code. If I have access tothe source code, I can read it and become a better software developerby looking at how certain tasks are handled. If I don’t haveaccess to the module or its source code, I have to write new code toprocess the ODF. With luck, I’ll do it perfectly ...eventually, though it seems a waste of effort if someone has done itbefore.
If everyone uses the same software module to implement a standardand it is high quality software, then more people can developapplications faster that use the standard correctly. In this way, theeasy availability of software can accelerate the adoption of astandard, with all the resultant goodness of systems that can speakto each other.
If support for a standard comes with an operating system or asoftware development environment, then many of the things I justdescribed may be true. However, if the standards support isproprietary you probably will not have access to the source code andyou may not be able to use that standard as easily on otherplatforms, such as different operating systems. This trade-off may beacceptable, but you should accept it, if you do, after carefulconsideration. You will need to depend on the vendor for updates andfixes to the software at the pace he or she decides to provide it.You also need to be careful that the vendor supports the standardcorrectly and that there are not hidden security problems or special vendor extensions. This canbe hard to tell if you don’t have the source code but, again,might be acceptable. You get to make the choice. If the vendor supports multiple operating systems and platforms, you are less likely to have the sorts of problems described.
If a vendor has a history of and reputation for delivering proprietarysoftware that provides significant value and high quality, secureproducts with good support, this may outweigh the advantages, to you,of having the source code open. If, however, the way the vendordevelops, licenses, and supports his or her software will lead you tobeing locked into his or her world with limited future choices andflexibility, then you should carefully consider the possibleadvantages of an open source solution.
In a somewhat round-about way, I’ve described softwaredevelopment and pointed out some situations where it would beadvantageous to have access to the source code. There is more to itthan just seeing the code or having it shared in some limited way bya vendor. Open source fundamentally means that you can benefit fromthe work of others and, in turn, others get to benefit and extendyour work. In this way, the software development community can makeprogress by working and innovating in a collaborative way. Animportant part of the open source process is engaging a community ofpeople who will work on the software together. It’s the powerof this community working in an open, transparent way that helps makethis model of software development work.
Why would you not want to make the source code for your software openand available? Here are some possible reasons:
- Your software contains code from other people, and you don’t have permission to give their property away.
- You are getting strategic advantage, differentiation, and revenue from your software and you don’t want to give that up.
- Your customers are content with the current situation and business is good.
- You are operating in a niche market and there is no pressure to open source.
- There is no community of developers outside your organization who will help you further develop the code.
- There’s nothing you need from developers outside your organization and you don’t want to share what you’ve spent your own resources to develop.
- The less others know about your code, the easier it will be to keep them from moving to competitive products.
- You’re embarrassed by the poor quality of your code (don’t laugh, it happens).
- You fundamentally do not believe that sharing source code is the right thing to do with intellectual property because it might cause damage to the existing business model of fee-based software licensing.
Here are some reasons why you might want to make the code available as open source:
- The code implements a standard that you want to be widely adopted.
- You’ve used other open source code and you want to give something back to the community.
- There is no special business advantage to keeping the code private and you want to make it available for others to use and learn from it.
- Your code contains some real innovations that you want to be widely used.
- You are very proud of your code and you want others to see and use your work, and then think you are a superb programmer.
- Your business model allows you to generate revenue in ways other than charging people who want to use your software.
- One of your competitors has a business model that does not allow him or her to generate revenue in ways other than charging people who want to use his or her software.
- The code was developed while you were working under a government grant, and you feel that you owe it to people to make it publicly available.
- By making your code available, it will allow others to innovate on top of the foundation you are providing. That is, you think that innovation will happen faster if others don’t have to “reinvent the wheel.”
- You believe that all source code should be freely available in the same way that academic results have been shared for centuries.
Now, the fine print.
A particular open source project makes its code available under a specific legal license and this lays out the rights, restrictions, and responsibilitiesyou have when you use the code. There are many licenses and the Open Source Initiative lists many of them. They are not all compatible with each other and you cannot and must not necessarily mix code covered under one license with code covered under anotherlicense.
The most widely used license is the GNU General Public License (GPL). While itis hard to quantify, it appears likely that approximately 70% of all open source projectsuse the GPL. Code that uses the GPL is referred to as “free software.” By its nature,the GPL makes new code that incorporates older GPLed code also use the GPL. That is, the GPL issomewhat self-propogating as code that uses it is picked up and re-used elsewhere. This is exactlyas the authors intended. The GNU/Linux operating systems use the GPL. You cannot charge others fora license to use GPLed software and you must make your source code available.
Another commonly used license is from the Apache Software Foundation. This is an open source licensethat does allow direct use of the source code within commercial products. Unlike the GPL, the Apache Licenseallows “defensive termination”: if you sue someone because you claim that the software infringes on one of your patents, then you lose the right to freely use the patentsof others that are implemented in the software. In other words, you stop having the right touse the software if you are trying to stop others from using it. Much of the open source software that implementsthe standards of the World Wide Web are covered under the Apache license.
There are many other licenses but a handful of them cover well more than 90% of all free and open sourcesoftware. I illustrated a few of the sorts of things that licenses can include but there are others.If you are planning to open source your code, study the licenses carefully. If you are planningto use open source code in a product, also study the licenses carefully and you should probablyspeak with an intellectual property attorney. With care and some flexibility on your part, you canvery likely accomplish what you wish to do. Treat license considerations very seriously.
In the first section I spoke about standards, in the second I discussed software and business models, andin this section I dove into what open source is in a way that I hope makes clear some of the differencesfrom the traditional, proprietary development methods. I hope that I’ve justified to you the assertion from thevery first sentence, that you must seriously consider open source software. I want to emphasize that weare now and will continue to live in a hybrid open/proprietary world but I also fundamentally believe thatwhether you are talking about standards or software that we are advancing towards increasing openness. This isbecause we are looking for greater transparency into what our software does, how it works, and how itinteroperates with software elsewhere in our own organization as well as those of customers, partners, and suppliers.We are looking to leverage the community to build a strong foundation of software and standards on top of whichwe can innovate. Finally, we’re looking for greater certainty that vendors will not be building things intosoftware that benefit themselves at our expense, particularly if it limits our future choices of whatapplications we use to access the data that we ourselves created.
In the fourth and final section I’ll tie all these threads together and talk about how and why ServiceOriented Architecture, or SOA, is accelerating this movement towards openness.