Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor.
-- Werner von Braun
License bamboozling
Recently I've been forced to look more and more at licenses for third party software that I use. This is in my opinion a complete waste of time and just a justification for more lawyers. Reading any license text is like reading the most boring end dense textbook you could possibly find on a trivial subject, and manages to make the subject incredibly complicated and hard to understand.
Now there are a couple of licenses out there for open source software, and I use that term loosely since I will argue that some of that is not really open. The GPL license is especially suspect, since it forces anything that even links to it, even dynamic linking, to be infected by that license. So if you accidentally linked to any GPL software in your game, anyone can demand the full source of the game since it is now under GPL. Really insidious. It's called a license virus, with justification.
There is a Library GPL license that does allow for dynamic linking and not infecting whatever program that links to the library. In my eyes this is the least you should require for any library that you link with. In this case you can at least create license firewalls, eg create a dynamic link library that encapsulate the open source components and exposes them to your application. Now, is it only me that find it ridiculous to create libraries and interfaces based on licenses? I bet that don't teach you that in school.
Alternatives to GPL
There are of course alternatives to the whole GPL family of madness licenses. In fact, the MIT and BSD licenses are very liberal and friendly to commercial applications. They are basically just statements that you don't take credit for the work, assume all support and liability from using the software and in some cases credit the authors. Actually, there are several MIT/BSD like licenses that have that seemingly innocent clause, but it could bite you in the posterior if you don't credit them in the final manual or credit screen. I usually deem MIT/BSD as safe licenses to use.
Internal distribution
If you are just using the libraries for internal applications, and don't distribute them outside the office, you might be safe to use them. I say might, since this is not clear when the distribution is considered internal, or your company goals might change and you want to have them distributed externally (and at this point the programmer that initially put the GPL library into the dependency chain has left).
Free alternatives
So for a case study, I recently had cause to look at some database bindings for a SQL database. Any database really. The one requirement I had was that the database had a ADO.NET binding so that I could code against it directly in C# with minimal hassle. Here is a list of the databases I considered.
MySQL
Despite being a Swedish database, I could not use this. Sadly they've been acquired by SUN Microsystems, which seems to struggle not to go the same way as SGI in the server market. The source is available here, through the GPL license. For the database itself I don't really care about the license, since I'm not linking against it, but rather the ADO.NET integration. You can find it here. Unfortunately the integration is also licensed through the GPL, which makes it virtually useless. You could also obtain a commercial license apparently, but so far the I've waited on a reply from the MySQL sales team for 5 days. And I don't expect them to come back to be anytime soon. All I asked was the price and details of the commercial license, but apparently that was too much for the sales team (they are probably asking the lawyers for the details, since only a lawyer can read it). So much for the MySQL database. One would think that the sales team would be on the ball a little better at least and get back to potential customers. Or just simply post the pricing information on their webpage...
PostgreSQL
Next up was another database I've used in the past. The source code is available under the BSD license here. The ADO.NET integration can be accessed here and it's under a BSD license as well. Actually, this is the database that I'm going to run with. It's a fairly mature product (been around since 1989) and has a lot of enterprise level features (actually, at a quick glance it seems that it beats MySQL in almost all respects).
SQLite
This small database is actually file based, targeting embedded environments and in the Public Domain! The accompanied ADO.NET integration is actually also in the Public Domain, so all the license concerns go away and we can fire all the lawyers... oh, wait, perhaps not the last part. Anyway, if you're only prototyping smaller databases or you are working in limited memory environment, this is really the thing you should check out first. The C# integration seems to be very fully featured, but lacks threading support (which for my particular purposes was a major blow).
Firebird
This is the old InterBase 6.0 database that Inprise (old Borland) released as open source. It's licensed under some IDPL license which seems to be ok for commercial applications. The ADO.NET integration can be downloaded here, also under the IDPL license.
In closing
Licenses continue to be a big headache when it comes to software. The uncertainty and the obtuse language only lawyers can love makes it harder for simple software developers to actually understand them. Which usually just leads to us either not using the libraries, or keeping code to ourselves which otherwise could have been shared. Which is the exact opposite of what the GPL is saying it wants, but the actual result. Ironic? No, just very predictable. Phew, that was a lot of bullshit. Perhaps next time I'll actually write about something games related :)
Resources
- http://www.alittlemadness.com/2008/04/24/ext-discovers-step-2-of-the-slashdot-business-model/
- http://en.wikipedia.org/wiki/Comparison_of_relational_database_management_systems