Sam Trenholme's webpage
Support this website

MaraDNS 3.5.0025


November 2 2022

I have released MaraDNS 3.5.0025

==Scripting languages==

MaraDNS is becoming a mature open source project, having been around for over 21 years, and with stable releases since mid-2002. That in mind, I am now thinking about how I can keep MaraDNS sustainable for as long as possible with a minimum of forced maintenance.

One moving part which can break some components of MaraDNS is any non-standard scripting language which MaraDNS uses. For example, MaraDNS has had a Python script for converting BIND zone files in to MaraDNS zone files which I wrote in 2006, ran fine in 2006, and which I had no reason to update because it was running fine. Then, in 2019, I got some annoying messages from the Debian team about having a Python2 script which would break in Python3.

I had made no changes to the script. It did not have any bugs. The only thing that changed is that the non-standard scripting language Python decided to change their syntax and stop supporting the older version of Python. So, much to my annoyance, I had to perform unpaid maintenance work for MaraDNS because I chose to include a Python script.

That in mind, I have removed from MaraDNS, placing it in a separate repository of unsupported programs.

Likewise, I have converted the Perl scripts MaraDNS has to handle MaraDNS’ documentation in to Lua5.1 scripts. While Lua5.1 isn’t standard per se, there are multiple independent implementations of it (PUC Lua, LuaJIT, etc.) including one in the MaraDNS source tree (lunacy, a fork of PUC Lua 5.1), and Lua5.1 will never change its syntax.

I understand that, right now, there are no plans to come out with a Python4 that breaks Python3 scripts, nor a Perl7 which breaks Perl5 scripts (there’s a reason Perl6 was renamed Raku, so that the Perl world would not have the same issues Python had with the Python3 update), but since both scripting languages are not included with MaraDNS and are not set in stone with a standard like POSIX, in the interests of long-term maintainability, MaraDNS now has no Perl nor Python scripts in it.

For people who still want the Python scripts or the outdated Perl versions of the the MaraDNS “EJ” (Easy Journal) documentation tools, they are available here:
They are completely unsupported.

==Multiple implementations==

MaraDNS 3.5.0025 can be built and tested using multiple implementations for each step of the process:

  • It can be built on top of a Linux kernel, or in Windows 10 with cygwin.
  • It can use the GNU utilities for the POSIX userspace (sh, awk, etc.), or it can use Busybox.
  • It can use either PUC Lua 5.1 or Lunacy, my Lua 5.1 fork, to run the Lua parts of the tests and the document-building Lua scripts.
  • No less than three make implementations can now run MaraDNS’ makefiles.
  • MaraDNS compiles with no less than three different C compilers: gcc, clang, and tcc.


Make is a standard POSIX utility to determine dependencies and compile programs.

I have updated all of MaraDNS’ makefiles to work with an implementation of the “make” development utility which is mostly POSIX compliant. For real world use, the “make” utility needs to have an extension that POSIX permits: The ability to have the / character in makefile targets. This is supported by any real-world “make” implementation (GNU make, bmake, even pdpmake with non-POSIX extensions enabled) but does deviate from a strict reading of the POSIX standard for “make”.

If using a strictly POSIX version of make which has the extension of allowing / in target names, one needs to type in these commands to compile MaraDNS:

CC=cc # Change this to gcc/clang/tcc as desired
export CC

This deviates from the standard ./configure ; make build process.

While real-world implementations of “make” set CC to the cc command by default, the POSIX make spec actually says this should be c99 which won’t compile MaraDNS (since MaraDNS uses POSIX calls not part of the ISO spec).

That in mind, I have created a fork of pdpmake which is completely POSIX compliant with two exceptions:

  • / character allowed in target names
  • Default C compiler is cc and not c99

It can be downloaded here:
Like pdpmake, this implementation is public domain.

==Getting MaraDNS==

MaraDNS, as always, can be downloaded here:

Comments for blog entries can be seen in the forum.