============================================================ | | | M E S O N ... considered ... | | xxx | | x x ,-_/,. ,_ . | | x x ' |_|/ ,-. ,-. ,-,-. |_ . . | | | x x /| | ,-| | | | | | | | | | | x ####### x `' `' `-^ ' ' ' ' | `-' `' | | x # # x ' | | x # # x | | x # # x | | x # x | | xxxxxxxxxxxxxxxxxxx | | | .__________________________________________________________. | | | Many Free software and/or Open Source projects this day | | and age are switching away from old tried and true tools | | such as GNU auto tools to meson. | | | | This phenomenon isn't particularly new, if you've been | | around for a while, you'll remember this happened before | | with jam and then, notably, with cmake. | | | | Meson being the latest fad in build systems however, is | | particularly annoying if you're fond of more esoteric | | platforms, old or new, because it depends on python, and | | it's ecosystem, and a rather new-ish version at that. | | | | I always found the python ecosystem to be particularly | | fragile, as they don't care much about keeping backwards | | compatibility between versions. And now that projects | | don't even care to make things work with OS package | | managers anymore, and instead, their build instructions | | mention 'just' grab from pip | | / pypi, getting reliably reproducible builds for these | | things is harder than ever. As such, I'm finding this | | latest meson fad particularly problematic. | | | | Meson promises to make things "easier" on developers, by | | being on the surface, 'simple', but everyone who's done | | this for a while knows that 'simple' usually means worse | | in practice, and I believe this holds true for Meson. | | | | Even during the previous autotools exoduses, I always | | felt a bit like we were collectively making a mistake, | | because the proposed alternatives were missing something | | important. | | | | Autotools helps you in writing cross-platform software | | by scanning your source files for platform-specific | | things, and letting you know you probably ought to add | | a configure check for those. It can then also output a | | config.h file with definitions for things which are and | | are not present on the current platform, such that you | | may provide alternative implementations within your | | source code. | | | | If I run `autoscan`, for example, in the fvwm3 project | | root, it comes up with the following: | | | | configure.ac: warning: missing | | AC_CHECK_FUNCS([gethostname]) wanted | | by: fvwm/fvwm3.c:2171 | | | | What it's complaining about here, is that in fvwm3.c the | | gethostname() function is used, which is a platform- | | specific function that may not be present on all systems.| | | | It has similar warnings for many other functions used | | throughout the project. | | | | Not all checks are about functions, they can be about | | architecture specific things, like endianness, etc,... | | | | So, you can see, the autotools strategy towards helping | | you write portable software is not hardcoded platform | | names like you see in many projects, like the old | | ubiquious #ifdef __WIN32 or #ifdef __FreeBSD__ etc, but | | rather, granular checks for individual features and | | platform characteristics. | | | | The benefit of this approach is that not only does it | | give your software a fighting chance to run on more | | platforms, it also gives more descriptive errors for | | other developers looking to port your software to their | | platform. | | | | These days, most developers don't care if their software | | runs on more than just GNU+Linux/Windows/Mac, and maybe | | the BSD's if you're lucky. And it seems, people have | | written off autotools as some archaic boomer tool. | | | | While M4 might not be the prettiest language to write | | your platform checks in, I think the approach used by | | autotools is the correct one, and I haven't seen a build | | system with an equivalent system. This isn't just about | | supporting ancient legacy platforms, but also new ones. | | If I were to write a new OS tomorrow, these platform | | checks would be just as valid for my new OS as they are | | for the ancient platforms. It's just the sane, correct | | approach to writing portable software. | | | | Yes, you can manually write these checks in cmake or in | | meson, as these build systems do have ways to check if a | | particular function is present, or if a particular | | header is present, but none of them have these checks | | built-in, in the way autotools has them, and none come | | with a tool equivalent to `autoscan`, which means that | | you won't even KNOW which checks you're missing in your | | software. | | | | I can tell you autoscan has warned me about stuff I | | hadn't even CONSIDERED to be a potential porting issue. | | It is extremely helpful. There is so much historical | | knowledge contained within these tools, I sincerely | | believe that we as developers ought to think twice | | before throwing out the baby with the bath water. | | | | If you're writing proprietary software, where you're | | targetting only very specific supported platforms, none | | of this really matters, and of course, meson or cmake | | seem more than fine. And I think what we've been seeing | | over the past decade or so is an influx of developers | | who came from that world primarily, and get weirded out | | by the tooling in the Free software community, and bring | | their pushy politics with them, for whatever they do not | | understand surely must be bad and ought to be shunned. | | | | Of course, everything gravitating towards monoculture | | doesn't help. Many developers aren't even aware that | | other platforms even exist. And while this problem has | | been a thing for a while now, I find that meson | | depending on python just made the problem so much worse | | once again. | | | | But I also found that many people aren't aware of these | | issues or understand how autotools is intended to work, | | so I hope this helped someone out there understand! :) | | | `---------------------------------------------------------'