On Wed, 2011-02-23 at 20:21 +0000, Chris Cannam wrote:
Entirely Redland free. I hand-wrote a Turtle parser and serialiser.
> And: why?
In short, it's been a PITA for everyone in numerous ways since day one.
Some abandoned SLV2 entirely because of it. Others were in the process
of doing so, until I decided enough was enough. Clearly SLV2 was
deficient somehow if people were abandoning it, and they were abandoning
it explicitly because of Redland...
Redland is great if you really need a fully featured RDF implementation,
and I still use it in such cases. To simply implement LV2, however, you
don't, and such a heavyweight dependency certainly doesn't induce the
best knee-jerk reaction. Often the librdf packages would pull in
ridiculously massive mysql libraries and such - to implement a simple
LADSPA based plugin API?! That this left a bad taste in people's mouths
is completely understandable. It has definitely hurt LV2 adoption.
(Because of historical reasons, "RDF" can seem bloatey, but it's really
just an elegant abstract data model, and we are using a terse and simple
syntax for it. The new lean-and-mean SLV2 implementation shows that
there is no bloat inherent in LV2, and it's all a much easier pill to
swallow in practice).
Some less hand-wavey practical reasons: there were mysterious and very
un-fun problems with librdf-in-librdf that crop up when you have plugins
that load plugins (e.g. Ingen, NASPRO(*)). Portability was also an
issue. Stefano D'Angelo (of NASPRO) and myself are now cooperating on
LV2 implementation rather than duplicating effort because of Redland
related problems (e.g. he'll be helping with win32 portability, and
Ingen now depends on NASPRO for LADSPA support). I am all about
resolving any fragmentation that has happened in the LV2 world, and
dropping Redland has been a big positive step in that regard.
The new implementation is thousands of times smaller, lighter, and
faster. The entire thing is much smaller than libxml2 alone, for
example. I should have just written one like this from the get-go, and
the initial reception of LV2 would have been a lot better. Oh well, live
SLV2 is now based on two new libraries: Serd (RDF syntax) and Sord (RDF
store). Both are roughly 2 thousand lines of C, solid and thoroughly
tested (about 95% code coverage, like SLV2 itself). Serd has zero
dependencies, Sord depends only on Glib (for the time being, possibly
not in the future). There is still some optimization to be done, but
it's already so much leaner it's not a huge priority for me.
The new SLV2 should be appropriate for, say, implementing LV2 on
embedded hardware with limited resources. The old one, frankly, smelled
of bloat even on a desktop system.
Unfortunately, this ground-up reimplementation thing consumed the
majority of my January, but I am very happy with the outcome.
(* For the unfamiliar, NASPRO is a bridge which transparently exposes
LADSPA, VST, etc. plugins as LV2 plugins, among other things)
Linux-audio-dev mailing list