liblicense 0.8.1: The bugfixiest release ever

asheesh, December 25th, 2008

I’m greatly pleased to announce liblicense 0.8.1. Steren and Greg found a number of major issues (Greg found a consistent crasher on amd64, and Steren found a consistent crasher in the Python bindings). These issues, among
some others, are fixed by the wondrous liblicense 0.8.1. I mentioned to Nathan Y. that liblicense is officially “no longer ghetto.”

The best way enjoy liblicense is from our Ubuntu and Debian package repository, at More information on what liblicense does is available on our wiki page about liblicense. You can also get them in fresh Fedora 11 packages. And the source tarball is available for download from


The full ChangeLog snippet goes like this:

liblicense 0.8.1 (2008-12-24):
* Cleanups in the test suite: test_predicate_rw’s path joiner finally works
* Tarball now includes data_empty.png
* Dynamic tests and static tests treat $HOME the same way
* Fix a major issue with requesting localized informational strings, namely that the first match would be returned rather than all matches (e.g., only the first license of a number of matching licenses). This fixes the Python bindings, which use localized strings.
* Add a cooked PDF example that actually works with exempi; explain why that is not a general solution (not all PDFs have XMP packets, and the XMP packet cannot be resized by libexempi)
* Add a test for writing license information to the XMP in a PNG
* Fix a typo in exempi.c
* Add basic support for storing LL_CREATOR in exempi.c
* In the case that the system locale is unset (therefore, is of value “C”), assume English
* Fix a bug with the TagLib module: some lists were not NULL-terminated
* Use calloc() instead of malloc()+memset() in read_license.c; this improves efficiency and closes a crasher on amd64
* Improve chooser_test.c so that it is not strict as to the *order* the results come back so long as they are the right licenses.
* To help diagnose possible xdg_mime errors, if we detect the hopeless application/octet-stream MIME type, fprintf a warning to stderr.
* Test that searching for unknown file types returns a NULL result rather than a segfault.

Comments Off

liblicense 0.8 (important) fixes RDF predicate error

asheesh, July 30th, 2008

Brown paper bag release: liblicense claims that the RDF predicate for a file’s license is rather than Only the latter is correct.

Any code compiled with liblicense between 0.6 and 0.7.1 (inclusive) contains this mistake.

This time I have audited the library for other insanities like the one fixed here, and there are none. Great thanks to Nathan Yergler for spotting this. I took this chance to change ll_write() and ll_read() to *NOT* take NULL as a valid predicate; this makes the implementation simpler (and more correct).

Sadly, I have bumped the API and ABI numbers accordingly. It’s available in SourceForge at, and will be uploaded to Debian and Fedora shortly (and will follow from Debian to Ubuntu).

I’m going to head to Argentina for a vacation and Debconf shortly, so there’ll be no activity from on liblicense for a few weeks. I would love help with liblicense in the form of further unit tests. Let’s squash those bugs by just demonstrating all the cases the license should work in.

Comments Off

Exempi 1.99.3 Released

jakin, July 11th, 2007

Hubert Figuiere has released Exempi 1.99.3

An important addition in this release is the ability to serialize XMP to a string, making sidecar XMP possible. The soon-to-be-released Liblicense 0.1 already takes advantage of this feature; it uses Exempi to read and write licenses within XMP sidecar.

Hopefully, the API will soon stabilize in preparation for the 2.0 release.

Comments Off

Exempi 1.99.0 Released

alex, May 30th, 2007

Following on from Jon’s follow-up, Hubert Figuiere has released Exempi 1.99.0, now based on Adobe’s XMP SDK.

His blog post includes a nice snippet of code showing how to apply a CC license to a PDF:

#include <exempi/xmp.h>
XmpFilePtr f;
f = xmp_files_open_new("test.pdf", XMP_OPEN_FORUPDATE);
XmpPtr xmp = xmp_files_get_new_xmp(f);
xmp_set_property(xmp, NS_XAP_RIGHTS, "Copyright", "(c) ACME Inc., some rights reserved"
" - This work is licensed to the public under the Creative Commons Attribution-ShareAlike "
xmp_files_put_xmp(f, xmp);
xmp_files_close(f, XMP_CLOSE_SAFEUPDATE);

Excellent news for the community, and for the continuing saga of XMP.

Comments Off skin available

nathan, April 23rd, 2007

The skin for Creative Commons’ “wiki”: is now available from Subversion. You can find decidedly minimalist details (where else) “in the wiki”:

Comments Off

wpLicense 0.7.6

nathan, April 11th, 2007

Today I released wpLicense 0.7.6 (download see update below). It’s a minor bug fix, but one worth noting. Thanks to Tiago and Cristóbal for both reporting the bug.

The bug was simple: the documentation says that the licenseUri function returns the URI of the selected license. And that’s what the internal wpLicense code relied on. However, the implementation actually echo‘d the URI, introducing a race condition: if things were timed just right, the problem wasn’t apparent. But too often they weren’t, and then it was.

There are some outstanding issues with wpLicense, particularly with rendering the selection interface under Internet Explorer. That’s just one of the tasks new web engineer will be tackling when he or she comes on board. Which reminds me, we’re still accepting resumes.

UPDATE: Yeah, so 0.7.6 only had half the fix; well, the entire fix, but I was braindead with the default parameter value. So I give you