A Generation Lost in the Bazaar (2012)
This is a poorly-thought-out screed by longtime BSD hacker Poul-Henning Kamp, a.k.a., someone who should freaking know better.<p>Autoconf doesn&#x27;t exist because &quot;the bazaar&quot; is full of lazy incompetents and only cathedrals have halfway decent design. It comes from the bad old days when &quot;open&quot; meant &quot;spec documents are available under RAND terms&quot; and had little to do with what we now call open source. Unix had splintered into lots of different idiosyncratic systems, each with its own configuration, and the GNU stuff had to run on all of them. Autoconf provided a portable way to paper over all those differences.<p>The same with libtool. The Unix splintering had already happened when shared libs became relevant for Unix. There wasn&#x27;t even agreement among the various vendors on how to <i>implement</i> shared libs! For example, how do you resolve the fact that a dynamic&#x2F;shared library could be loaded anywhere into a process&#x27;s address space, making absolute pointers inside the library invalid? There were two main schools of thought:<p>* when linking the library, replace all exported pointers with placeholder values. Then when the dynamic linker loads the library, it swizzles the placeholder values back into pointers. (Windows)<p>* use position-independent code, taking advantage of relative jumps, calls, and data accesses to create an object file that can be loaded anywhere. (ELF)<p>I&#x27;ve seen some half-measures as well:<p>* give each library a fixed address where it&#x27;s loaded every time (Linux a.out)<p>* punt on symbol resolution; hand the programmer a base address and have them call into the library at fixed offsets from the base (AmigaOS through 3.x)<p>Each of the implementation strategies for shared libs required a different constellation of compiler and linker flags. Again, libtool papered over these and made it tractable to write shared libs for a variety of operating systems. It is true that these days, compiling with &#x27;gcc -fPIC&#x27; and linking with &#x27;gcc -shared&#x27; will probably do what you want. But that assumes a modern enough OS and toolchain, something that GNU couldn&#x27;t and still cannot in some cases necessarily assume.<p>The purpose of both these programs is to portably solve problems that were created by multiple, competing cathedrals. I don&#x27;t <i>like</i> Autoconf or Libtool. They&#x27;re unholy messes. But they&#x27;re largely that way out of necessity considering the problems they solve, problems which would otherwise be nigh-intractable -- not because their developers were lazy or incompetent.<p>And no, Meson does not solve the same problem, it punts on working on any OS that&#x27;s insufficiently modern.<p>The neat thing about  the open source bazaar is that it can produce reference implementations for things everybody agrees should be in the finished product, reducing the friction of competing implementations. An example is the 86open consortium, an effort by various proprietary x86 Unix vendors (mainly BSDi, Sun, and SCO) to agree on a single binary standard for x86 Unixes. Well, the vendors got together fully expecting to get into the weeds with meetings and committees and stuff... but what they found was all their products had Linux&#x2F;ELF kernel personalities already built in. So they declared Linux&#x2F;ELF to be the binary standard and disbanded the 86open initiative!