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 bind2csv2.py 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:
https://<![if gt IE 6]><![endif]>They are completely unsupported.
github.<![if gt IE 6]><![endif]> com/<![if gt IE 6]><![endif]> samboy/<![if gt IE 6]><![endif]> Mara<![if gt IE 6]><![endif]> DNS-<![if gt IE 6]><![endif]> attic
MaraDNS 3.5.0025 can be built and tested using multiple implementations for each step of the process:
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
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:
It can be downloaded here:
https://maradns.samiam.org/maramakeLike pdpmake, this implementation is public domain.
MaraDNS, as always, can be downloaded here:
Comments for blog entries can be seen in the forum.