What is the FreeBSD situation?

Jonathan M Davis newsgroup.d at jmdavisprog.com
Thu Nov 2 05:11:48 UTC 2017


On Thursday, November 02, 2017 00:25:26 Andrei Alexandrescu via Digitalmars-
d wrote:
>  From the recent PR-related discussion I gather that FreeBSD 12 has made
> some breaking changes to file primitives such as stat.
>
> Do binaries built for pre-v12 crash on v12? If that's the case we should
> have two distinct build platforms, FreeBSD "legacy" and FreeBSD 12. They
> would be selected statically.
>
> IF older binaries don't crash, what mechanism is FreeBSD 12 using to
> identify old API calls?

Technically speaking, with how FreeBSD deals with its API/ABI, it promises
compatibility across major releases but not minor ones, so _any_ time you go
up a major version, there's a risk of breakage (though I don't know how
often APIs get changed in practice). In that respect, the fact that we've
been doing FreeBSD releases that don't target a particular version of
FreeBSD is kind of crazy, though for the most part, I think that the API and
ABI have not changed sufficiently in the areas that matter to dmd or Phobos
for it to be a big issue, though occasionally, fixes have had to be made
because something worked on one version of FreeBSD but not another. But we
don't currently have a way to version code for a particular version of
FreeBSD even if we wanted to. So, while we could do separate builds for
different versions of FreeBSD (and thus handle ABI changes), the source code
would have to be the same. AFAIK, the closest that we can currently come to
versioning the source code based on the version of FreeBSD is to check the
uname at runtime and run different code depending on the version, but that
obviously doesn't work in all situations.

Right now, what we have mostly works on FreeBSD 10.x and 11.x (it looks like
64-bit has a dmd test failure, and 32-bit has a Phobos test failure) as well
as older versions of 12-to-be (that's what I run locally, since that's what
TrueOS is based on), but several months ago, FreeBSD did make changes to
stat and related functions so that inodes are 64-bit, and that obviously
changed the API. They did a lot of work to make that compatible so that
programs didn't just break, but the compatibility stuff that they did was
for C/C++, and we don't use C/C++ headers; we duplicate their declarations
in D. So, we have to do work of some kind to be compatible, and I'm not
familiar enough with the details to know what needs doing. The related bug
report is

https://issues.dlang.org/show_bug.cgi?id=17596

and some work has been done to figure out what needs doing including a
suggested way to wrap the API changes at least until we're only supporting
FreeBSD 12+ (which is quite a ways off, since it hasn't even been released
yet). I don't know exactly what the situation with that currently is. I keep
hoping that it will be sorted out by December, since that's when the next
TrueOS update happens, and then it'll be based on a new enough version of
FreeBSD 12 that D will break if I upgrade, but I haven't had time to look
into it, and clearly those who looked into it previously haven't finished
doing whatever needs doing.

- Jonathan M Davis



More information about the Digitalmars-d mailing list