This file has been truncated. show original
# GDNSD MANUAL
This manual attempts to cover things that don't logically fit in the man pages or other documents.
This manual is not intended to be an exhaustive reference. For a complete rundown of every configuration and commandline option and its precise technical meaning, see the man pages.
## General Portability Notes
Modern 64-bit Linux/x86\_64 is the primary development and deployment platform, with 32-bit Linux/x86 and the in-between Linux/x32 ABI being close seconds.
Compatibility with the open source \*BSD distributions is important, and bug reports are welcome for any breakage there. Unfortunately the author doesn't use these regularly, so portability mistakes may creep in that need reporting. FreeBSD 11.2 and 12 were tested during the final beta releases leading up to gdnsd 3 and seems to work out great with `mac_portacl` handling the issue of binding port 53. Probably the biggest issue facing OpenBSD, NetBSD and other \*BSD builds right now is that even if they build, I have no idea how to handle non-root processes binding port 53 on them, which is a new requirement as of gdnsd 3. They may have to fall back on using PF to remap port 53 traffic to unprivileged ports gdnsd is listening on.
Through the official Debian packaging of gdnsd, it gets some testing on exotic CPU architectures, and generally shouldn't have issues with any of the well-supported Debian target architectures. The code does try to be clean on endian-ness and alignment issues at least.
There are a few gcc-isms in the source, but they're either older ones that tend to be well-supported by other modern compilers, or there's fallback support when they're not available. Clang is explicitly supported and works great.
The code **requires** the userspace RCU library `liburcu`, and this in itself could limit portability. However, currently `liburcu` seems to have a wider amount of portability than gdnsd itself, so it shouldn't be a major impediment.