9fans - fans of the OS Plan 9 from Bell Labs
 help / color / mirror / Atom feed
From: Dave Eckhardt <davide+p9@cs.cmu.edu>
To: Fans of the OS Plan 9 from Bell Labs <9fans@cse.psu.edu>
Subject: Re: [9fans] impressive
Date: Tue,  9 May 2006 17:56:03 -0400	[thread overview]
Message-ID: <13740.1147211763@piper.nectar.cs.cmu.edu> (raw)
In-Reply-To: <8ccc8ba40605081525p7b703dbaq318fbdb790d118d2@mail.gmail.com>

The "old way" was to create an explicit portability layer,
with the application running on top of that layer and
one version of the layer for each platform.  So each
application would need one expert to maintain the SunOS
blob, one to maintain the HP-UX blob, etc.

The autoconf approach (following perl's pioneering
configuration infrastructure) was based on the observation
that the 1995 version of the SunOS blob and the 1995
version of the Irix blob looked somewhat like each other,
especially in the sense that if you looked at the 1998
version of each the underlying platforms had added many
of the same features.  Also, if you looked at the SunOS
blob for one application and the SunOS blob for another
application, they would of course share many similarities.

So the theory was to ignore platforms and start testing
for *features*, and the hope was that once a *feature*
had been coded for platforms would add the feature over
time and all software using autoconf would automatically
start using the feature.  Great!

But there are problems:

1. The language chosen for the configuration infrastructure,
sh, is an issue because it is REALLY hard to debug
5,000-line shell scripts which were generated by sh and
m4.  In the old days if you tried to build a package on
a too-new version of Solaris you might run into trouble
with the Solaris blob and need to contact the Solaris
expert who maintained it.  But *nobody* is an expert at
debugging 5,000-line machine-generated sh scripts, so
you just lose.

2. Feature-detection code ages very fast.  If the foo()
function used to be provided in -lmumble but suddenly is
moved -lfrobotz, or if /etc/foo.cfg is moved to
/var/etc/sbin/foo.cfg, then the test code for the foo
feature (cleverly written in m4 and turned into 237 lines
of unreadable sh) is broken.  Maybe you can figure out
how to fix it for your system, but the bad news is that
you need to fix it the same way for multiple applications
as you try to build them.

3. The interface between applications and the auto*
infrastructure changes pretty rapidly.  So if version 3
of your application is designed to work with version 47
of auto* and version 49 of auto* has better foo-detection
code, that doesn't help you at all because if you ask
version 49 of auto* to rebuild the 5,000-line shell script
to configure the application you'll find yourself debugging
amusing m4/sh errors (e.g., AC_META_FIZZBANG has been
replaced by AC_HYPER_FIZZBANG which has 7 more args
and uses a different quoting style).

The end result is that an autoconf-maintained package
will build pretty much on exactly the (platform, version)
tuples that one of the package maintainers built it on
as part of the release process, and likely not anywhere
else.

This is uncannily like the bad old days.  Furthermore,
when something is broken you're not trying to fix C code
in the application's Solaris blob, but trying to debug a
broken 5,000-line machine-generated sh script.  Sometimes
some of the application-supplied feature tests depend on
gawk as opposed to any other dialect of awk, so despite
the huge tracts of portability infrastructure actually
all of the (platform, version) tuples which work are some
flavor of Linux.  Resistance is futile!  You will be
assimilated!

Dave Eckhardt


  reply	other threads:[~2006-05-09 21:56 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-04-26  0:26 erik quanstrom
2006-04-26  0:48 ` geoff
2006-04-26  0:54   ` Roman Shaposhnick
2006-04-26  0:53 ` Roman Shaposhnick
2006-04-26  2:15   ` Taj Khattra
2006-04-26  4:59     ` David Leimbach
2006-04-26 12:37       ` Anthony Sorace
2006-04-26 15:28     ` Rian Hunter
2006-04-26 16:39     ` Micah Stetson
2006-04-26 18:02       ` Bruce Ellis
2006-04-26 20:14         ` Micah Stetson
2006-05-08 14:50       ` Harri Haataja
2006-05-08 15:04         ` LiteStar numnums
2006-05-08 15:12           ` Charles Forsyth
2006-05-08 20:08             ` Micah Stetson
2006-05-08 20:52             ` LiteStar numnums
2006-05-08 21:10               ` Jack Johnson
2006-05-08 21:17                 ` andrey mirtchovski
2006-05-08 21:18                 ` Paul Lalonde
2006-05-08 22:25                 ` Francisco J Ballesteros
2006-05-09 21:56                   ` Dave Eckhardt [this message]
2006-05-10  0:13                     ` geoff
2006-05-10  8:39                       ` Lluís Batlle
2006-05-08 23:31                 ` geoff
2006-05-09  1:18                   ` Paul Lalonde
2006-05-09  1:39                     ` quanstro
2006-05-09  2:12                       ` Paul Lalonde
2006-05-09  2:20                         ` quanstro
2006-05-09  3:00                           ` Paul Lalonde
2006-05-09  9:32                             ` Bruce Ellis
2006-04-26 22:57     ` Roman Shaposhnick
2006-04-26  4:57 ` David Leimbach
2006-04-26  4:53   ` Ronald G Minnich
2006-04-26  5:11     ` Roman Shaposhnick
  -- strict thread matches above, loose matches on Subject: below --
2006-05-10  0:45 erik quanstrom
2006-05-10  2:09 ` Lyndon Nerenberg
2006-05-10  3:35   ` David Arnold
2006-05-10  4:03     ` Lyndon Nerenberg
2006-05-08 22:02 erik quanstrom
2006-04-27  2:13 erik quanstrom
2006-04-27  1:35 erik quanstrom
2006-04-27  1:23 erik quanstrom
2006-04-27  5:08 ` Micah Stetson
2006-04-27  1:10 erik quanstrom
2006-04-27  2:06 ` Jack Johnson
2006-04-26  3:24 jmk
2006-04-26  2:38 erik quanstrom
2006-04-26  0:55 erik quanstrom
2006-04-26  1:07 ` Roman Shaposhnick
2006-04-25 10:20 erik quanstrom
2006-04-25  2:30 erik quanstrom
2006-04-25  2:48 ` Derek Fawcus
2006-04-24 20:37 Ronald G Minnich
2006-04-24 20:51 ` Charles Forsyth
2006-04-24 21:32 ` Brantley Coile
2006-04-25 11:06   ` Anthony Sorace
2006-04-25 11:08     ` Anthony Sorace
2006-04-25  2:15 ` Derek Fawcus
2006-04-25  2:23   ` Roman Shaposhnick
2006-04-25  2:37     ` Derek Fawcus
2006-04-25  3:51       ` Roman Shaposhnick
2006-04-25  8:17         ` Derek Fawcus
2006-04-25 17:53           ` Roman Shaposhnick
2006-04-26  1:11             ` Derek Fawcus
2006-04-26  1:19               ` Roman Shaposhnick
2006-04-26  2:12                 ` Derek Fawcus
2006-04-25  3:02   ` Andy Newman
2006-04-25  3:13     ` Ronald G Minnich
2006-04-25 19:57     ` Dan Cross

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=13740.1147211763@piper.nectar.cs.cmu.edu \
    --to=davide+p9@cs.cmu.edu \
    --cc=9fans@cse.psu.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).