Most of these kinds of discussions that say that there are two kinds of people or ten best ways of doing something are extremely subjective and involve gross simplifications. I plead guilty here but want to make a few points about the nature of software today and how people think about it.
There’s a tremendous amount of buzz in the industry today about open source software, but there is, of course, a huge amount of use of “that other kind of software” that variously goes by the name of “proprietary,” “closed-source,” “traditional,” or “commercial” software. None of those terms work well in practice.
Let me break down software into three categories:
- Open source software, where every single byte of the programming source code is covered by some license sanctioned by the Open Source Initiative (OSI).
- Proprietary software, where none of the code making up the whole is covered by an OSI-sanctioned license or is otherwise made available for free reuse and distribution.
- Hybrid software, where some of the code is covered by an open source licence and some of it is not.
Whoa!, you might say, it is ethically and ideologically wrong to do anything but #1!
Whoa!, you might say, capitalists abhor “free” when it comes to anything they are trying to sell, so #2 wins!
Whoa!, you might say, you’re allowed to mix open source and non-open source code to create software, as in #3?
There will be no further discussion of ideology, philosophy, or economics in this entry, so let me focus on the third kind of software, the hybrid variety.
Here’s something you might not realize: while there is a growing amount of pure open source software (#1), there is a significantly growing amount of hybrid software (#3).
If you want to reuse some code that falls under the GPL license, creating hybrid software can be tricky and in any case involves create care. It becomes easier if it is under the LGPL license and you might be able to take advantage of the so called “classpath exception” to mix and match. Note that the links here for GPL and LGPL are for version 2 of the licenses. The OSI site also has the version 3 licenses.
If in doubt, consult your local intellectual property attorney. A word of advice: you might be a brilliant software engineer, but that does not necessarily make you a brilliant amateur legal expert.
Things get simpler if you want to incorporate code that is covered by a license such as the Apache License v2, the Eclipse Public License, or the BSD License. Other OSI-sanctioned licenses might work as well. Though they have conditions, being legal documents, they allow you to include open source code into otherwise proprietary software products.
A good book on the ins and outs of open source licenses and what you can do with code covered by them is Open Source Licensing: Software Freedom and Intellectual Property Law by Larry Rosen, one of the top intellectual property attorneys involved with open source.
The discussion above was not meant to be a primer on open source legal issues, it was simply to show that you can legally build hybrid software and sell it. Of course, you might want to keep to scheme #1 above, but remember that we are focusing here on the mixed world where some of the source code is not made public.
If you are building some software that will run on a server on the Internet, head on over to the Apache Software Foundation and look at the open source libraries there. For example, if you need to quickly grab and use an XML parser written in Java or C++, look at the Xerces project.
Need to build some tools or rich clients? Visit Eclipse. Don’t build these things from scratch unless you really want to do so.
Here’s my main point: I think many people see the software world in the binary extremes of purely open source or purely proprietary. They may choose to do so, or they simply may not know that many, many of the “proprietary” operating systems and applications they use today include open source code.
I think a lot of the pure open source software projects tend to be considered sexier by the press and some users because you can talk about them by name: Linux, Apache HTTP Server, MySQL, and so on. This should in no way diminish the value, the recognition, and the usefulness of the thousands of open source components and libraries that are incorporated into thousands of software projects and products and services.
So, guess what? You are already using a lot open source technology today.
Now that you know that, you can ask the important questions and make sure you are getting everything you want and need from your software. You want good value, performance, reliability, security, and interoperability. This is true for open source, proprietary, or hybrid software.
The world is rarely at one extreme or the other, and the same is true with software and “open sourceness.”