The FSF created the GNU Public License to support their agenda of free software. In particular, the GPL incorporates mechanisms intended to ensure that free software is not incorprated into non-free software.
This has led to a certain industry captain taking the public position that it is not possible to “commercialize” a product incorporating GPL source.
Though IANAL1, I’d like to disagree with the industry captain. There are legal, if underhand, ways to make huge piles of $$$ from GPL software.
Take, for example, boutique retail banks. These are the kind of banks that have just 25 employees and write billion dollar mortgages for family trusts. Suppose you run a company producing front-office software for these banks, and that you have 5% of the market. Your clients pay well if you can offer them a competitive advantage.
You decide to add a Virtual Reality interface to the next version of your product. After carefully evaluating all the options, your technical architect settles on the GPLed C’Nedra as the VR engine, and your company goes into development, incorporating as much of the open source code as is helpful to the project.
Because your new product is derived from GPLed source, you must comply with the terms of the GPL. The trick to remaining profitable is in how you comply. Here is how I would address the license terms:
Section 2a requires that all modified source have a comment noting the change and its date. Your programmers probably do this already with the CVS $Log$ keyword, or similar.
Section 2b disallows charging money for the software. Instead, charge for installation, customisation, support, and ‘consulting.’
Section 2b also requires that your whole program be licensed to your customer under the GPL. Take a deep breath and go do it.
Section 2c requires that, if your displays a copyright notice on startup, it also gives details of the license. Weasel out of this by not displaying any copyright notice or startup message.
Section 3 requires that you distribute the source with the program. It offers a number of ways to do this, but 3a is the most promising. Copy all the source onto an unlabelled CD-R and hand it to your customer’s CEO. Warn the CEO of the danger to his company’s competitive advantage should another bank get hold of the CD-R. Recommend to him/her that they burn the CD-R and shred the ashes.2
Of course there are some details that I’ve left out, but no show-stoppers. Provided that your customer’s CEO doesn’t give away the source code, you now have a money earning, GPLed, and—for all intents and purposes—proprietary product.
Just a thought.
1 I Am Not A Lawyer. I am not legally or morally qualified to give legal advice. For that matter, I am not legally or morally qualified to give business advice. Don’t blame me if you try it and it doesn’t work.
2 It’s kind of neat that section 1 requires you to distribute a copy of the GPL with the source; your customer will be burning and shredding the GPL along with their source.
I had a peculiar problem this morning. log4j logging output was being turned off in a call to a third party library1. Not very much fun, particularly when exceptions start going unlogged.
Here are two code snippets that were useful for debugging the problem. This code resets the log4j configuration from the contents of the log4j.properties file:
static void resetLog4j() {
LogManager.resetConfiguration();
ClassLoader cl = this.getClass().getClassLoader();
URL log4jprops = cl.getResource(
"log4j.properties");
if (log4jprops != null) {
(new PropertyConfigurator())
.configure(log4jprops);
}
}
The log4j config can be dumped to standard out like this:
private void printLog4jConfig() {
System.out.println("#log4j Config");
PrintWriter pw = new PrintWriter(System.out);
PropertyPrinter pp = new PropertyPrinter(pw);
pp.print(pw);
System.out.println("#End of Config");
}
1 Google turned up a solution to the same problem in a previous version of the product, but nothing for the current version. I couldn’t find any other mention in the Knowledge Base or Support forums. I submitted a bug report, but meanwhile I have a workaround.
Microsoft have a product that provides a Unix-like environment, including command-shell and standard unix utilities (like Cygwin) and also an NFS client/server and a swag of tools for administrators working in a hetrogenous environment.
Given that it provides a whole bunch of standard Unix services to Windows users and to Windows applications, would you call it:
A. Unix Services for Windows, or
B. Windows Services for Unix?
Really, think about it for a second.
Believe it or not, MS went for option B.
I cannot imagine what argument they might try to make that option B is better than option A. Yes, the product does provide some Windows services to Unix, but it is more about providing Unix services to the Windows operating System, to Windows administrators and to Windows applications.
Undoubtedly there were solid, market-driven reasons for their choice but that doesn’t make their mis-representation any less.