[Novalug] use of "make" in "industry"

Peter Larsen peter@peterlarsen.org
Sun Jun 7 12:57:55 EDT 2015


On 06/06/2015 12:10 PM, James Ewing Cottrell III via Novalug wrote:
> Hmmm, this looks like Something Interesting to check out for Later.
>
> But just to play Devil's Advocate for a minute, what could possibly be
> a Bigger and more Complex than a UNIX Operating System Plus Utilities
> or the X11 Window System? Both of these had (I)Makefiles that
> Statically reflect the Major Dependencies of the Target Systems. As
> for the Minor Dependencies, they used 'makedepend'. They built the
> Needed Tools first, then made sure the Include Files were in place,
> built the Libraries, and finally Everything Else.

Absolutely. The amount of frameworks and interdependencies in Java,
Perl, Go etc. are much bigger than that of the monolithic kernel. And
don't forget you have a very advanced and custom script for kernel
makefile configuration called "config" which is hard to maintain, even
though all kernel components are always shipped in one package. That's
not the case for any other distro. And that doesn't talk about 3rd party
modules and their dependencies - to my knowledge no official tools exist
to validate that a 3rd party module is compatible with the version you
have, and that it has all it's dependencies satisfied.

Consider that any modern programming language like Node.JS consists of a
ecosystem of frameworks that all have their own dependencies which again
have their dependencies. When you begin you have none of those available
- nobody downloads the whole ecosystem. It's automatically determined on
build time what you need, and where to get it.

I think the point here is, that complexity isn't just an expression of
advanced, highly optimized code - but also a sign of how things are
distributed. The kernel is sent to you as one large set of source that
is already checked for interdependencies.  Most code created today are
not created/distributed that way. It's more dynamic and hence if you
like make terminology, the make file is custom created every time -
which is pretty much what every tar ball does today using "configure"
which again is run/created by the developers giving it options on what
to offer, check for etc.

>
> What more do you need?
>

See above. A lot. This is really clear once you develop your own code.
And the language isn't really that important here - they all have
dependencies on libraries etc. - even all our binutils that are created
have dependencies on dynamic libraries and other executables. For make
to succeed, all of those have to be in place. That's why Rich talked
about "make depend" - this is a key issue for all code that actually
makes things quite more complex. We have a lot of Linux/Gnu code that
changes depending on what other systems you have available. Think about
what it takes to maintain and create code like that, which allows you to
switch authentication modules, library features etc. out by just setting
a parameter. Imagine what it takes to test these beasts as every
possible system configuration you want to support has to be present and
clean.

The kernel code is complex. But it's inter dependencies are easy
compared to most other code distributed.

-- 
Regards
  Peter Larsen






More information about the Novalug mailing list