FreeBSD 12 is the “previous” series of releases. FreeBSD 13 is the “stable” series as of today (march 2023) and FreeBSD 14 is “current”, e.g. upcoming somewhen. The major versions of FreeBSD tend to bring larger changes – such as a newer base compiler, or a sudden improvement in system header-file compatibility. The previous series releases use clang 13, for instance, while stable uses clang 14. FreeBSD 12 is poorly supported by the KDE-FreeBSD team, and that’s on purpose.

Chasing compiler versions, and more importantly, C++ standard library versions, is frustrating work. Maintaining backwards compatibility has real costs – especially when most of KDE development is done with some recent gcc on Linux.

Case in point is qxmpp, which does not build on FreeBSD 12.3, like so:

  error: no viable constructor or deduction guide for deduction of template
  arguments of 'weak_ptr'
    QObject::connect(state->upload.get(), &QXmppHttpUpload::progressChanged,
    [stateRef = std::weak_ptr(state), reportProgress = std::move(reportProgress)]()

The error message is re-formatted a little for readability, but it comes down to a lambda with a binding not being able to deduce some type. Chasing that means building and re-building and applying some serious C++ knowledge to the qxmpp codebase.

Building the same code on FreeBSD 12.4 “just works”. The STL has been updated, and so we reach the situation that the cheapest (in terms of developer time on the KDE-FreeBSD team) and easiest way to deal with this problem is just to say:

FreeBSD 12.3 is no longer supported by the KDE-FreeBSD team. Update to 12.4 or 13.1 or later.

For what it’s worth, there are similar problems with STL versioning with libquotient (tuple constructor) and nheko (no concepts header). Right now, that means that we are actively declaring older OS releases as “unsupported” in order to keep the maintainence burden (particularly: developing new patches specifically for older FreeBSD + clang versions which upstream is unlikely to find interesting) low.