License to confuse

9 Aug 2007

Today I was looking at ways to store data from a program we’re doing at CamVine, which will most likely be a closed source program in an embedded device. What I wanted was a tried and tested way to reliably store some tables persistently to disk, so I thought about using Berkeley db, an open source database, now owned by Oracle.

Looking into the license for db, I discovered that despite being a BSD offshoot, it wasn’t under the BSD license, but under a license that says you’re free to use it on your own open source applications (i.e., applications where you let anyone see the source code), but if you want to redistribute db with closed source applications (where you don’t disclose your source code), then you need to pay. This appeared to rule it out for me – I didn’t need to use db enough that I’d want to pay for it, and I’m working on a closed source product (at least for now). But it was all about to become as clear as mud…

The program I’m writing is in Python, which is a scripting language. With Python you write a script file, which is then read by the Python interpreter program and executed. The key point here is that your script doesn’t execute like normal programs, it’s the Python interpreter that is the executed program, which in turn does what your script tells it.

And here in lies the interesting get out clause in the db license (see the final Licensing Question at the end of the page). Because Python is an open source program that’s freely distributed, it can use the db open source license for free. The fact that my script is closed source doesn’t matter, as it’s not talking to the db directly, Python is. So I could infact use db in my close source product, as Python acts as a go between.

Understand? I thought so…

In the ended I opted for a totally public domain database instead, sqlite, but this is just an example of the legal issues that programmers today need to keep ahead of. There’s many fabulous products out there that you could potentially use to develop programs with, and whether you can use them depends on the license they use and the license you’re going to use. Get them mixed up, and you/your company is in trouble. The wealth of licenses create lots of new opportunities to use existing code (a Good Thing™), but at the same time the coder has to be very aware of what they’re agreeing to when they use code. Code that is open to read doesn’t mean it’s always open to use.