Tracker requires SQLite >= 3.20 to be compiled with –enable-fts5

Tracker is one of these pieces of software that get no special praise when things work, but you wake up to personal insults on bugzilla when they don’t, today is one of those days.

Several distros have been eager to push SQLite 3.20.0 still hot from the oven to their users, apparently ignoring the API and ABI incompatibilities that are described in the changelog. These do hit Tracker, and are only made visible at runtime.

Furthermore, there is further undocumented ABI breakage that makes FTS5 modules generated from pre/post 3.20.0 SQLite code backward and forward incompatible with the other versions. Tracker used to ship a copy of the FTS5 module, but this situation is not tenable anymore.

The solution then? Making it mandatory that SQLite >= 3.20.0 must have FTS5 builtin. The just released Tracker 1.12.3 and 1.99.3 will error hard if that is not the case.

I’ve just sent this mail to distributor-list:

Hi all,

Sqlite 3.20.0 broke API/ABI for Tracker purposes. The change described in point 3 at http://sqlite.org/releaselog/3_20_0.html is not only backwards incompatible, but also brings backwards and forwards incompatibilities with standalone FTS5 modules like Tracker ships [1], all of those are only visible at runtime [2].

FTS5 modules generated from SQLite < 3.20.0 won't work with >= 3.20.0, and the other way around. Since it's not tenable to ship multiple FTS5 module copies for pre/post 3.20.0, Tracker shall now make it a hard requirement that SQLite is compiled with builtin FTS5 (--enable-fts5) if SQLite >= 3.20.0 is found. The current Tracker FTS5 module is kept for older SQLite versions.

This change applies to Tracker >=1.12.3 and >=1.99.3. I don't know if any distro pushed SQLite 3.20.0 in combination with a Tracker that is older than that, but it will be just as broken, those would require additional patches from the tracker-1.12 branch besides the described change.

Please handle this promptly, wherever there's sqlite 3.20.0 without builtin FTS5 and/or tracker <= 1.12.2/1.99.2, there's unhappy Tracker users.

Cheers,
  Carlos

[1] Generated as described in
http://sqlite.org/fts5.html#building_a_loadable_extension
[2] https://bugzilla.gnome.org/show_bug.cgi?id=785883

So, if you see errors about “TrackerTokenizer” something, please contact your distro packagers. I’ll close further incoming bugs as NOTGNOME.

2 thoughts on “Tracker requires SQLite >= 3.20 to be compiled with –enable-fts5”

  1. SQLite is so tiny, I don’t understand why it is not embedded in tracker itself.
    This will avoid the problem of SQLite from the distribution breaking tracker.
    Mozilla’s Firefox takes a similar approach.

  2. @oz123, SQLite is only relatively tiny, at currently >1/3th the code size of the Tracker repo. Tracker did embed it in the past, but drags onto the maintainers’ shoulders the responsibility of being aware of bugs, security and performance fixes in order updating the code regularly.

    Perhaps Firefox is big enough for the size to be moot, and the team numerous enough that SQLite updates are quick and seamless to their users, but I personally prefer someone else to do the job.

    And it usually works well, two things failed here:
    – SQLite devs did an API/ABI break that won’t be discovered at compile time, they documented some of it but it’s deep rooted.
    – Distribution packagers that pushed the new release to stable branches without a critic eye on the changelog, or thinking the break was ok because it’s been partly sold as a security improvement.

    Normally SQLite doesn’t break ABI, and normally you don’t get ABI breaking packages to stable distro releases, so it should normally work.

Leave a Reply

Your email address will not be published. Required fields are marked *