linux-embedded.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Rob Landley <rob@landley.net>
To: Jamie Lokier <jamie@shareable.org>
Cc: Valdis.Kletnieks@vt.edu,
	Embedded Linux mailing list <linux-embedded@vger.kernel.org>,
	Sam Ravnborg <sam@ravnborg.org>,
	linux-kernel@vger.kernel.org
Subject: Re: PATCH [0/3]: Simplify the kernel build by removing perl.
Date: Sat, 17 Jan 2009 19:44:03 -0600	[thread overview]
Message-ID: <200901171944.05014.rob@landley.net> (raw)
In-Reply-To: <20090117095143.GA20389@shareable.org>

On Saturday 17 January 2009 03:51:43 Jamie Lokier wrote:
> Rob Landley wrote:
> > On Friday 16 January 2009 08:54:42 Valdis.Kletnieks@vt.edu wrote:
> > > On Fri, 16 Jan 2009 00:11:09 CST, Rob Landley said:
> > > > P.S.  I still hope autoconf dies off and the world wakes up and moves
> > > > away from that.  And from makefiles for that matter.  But in the
> > > > meantime, I can work around it with enough effort.
> > >
> > > What do you propose autoconf and makefiles get replaced by?
> >
> > I've never built pidgin from source, but I've got the output of the
> > binutils build in a log file.
> > How many of these tests are actually necessary on an Linux system:
>
> None, but then it's not a Linux-only program that you're compiling.
> (Nor is it Linux-in-2009-only).

Yeah, I noticed.  It's not quite as bad as OpenSSL (where Linux support is 
intentionally an afterthought), but things like "Libtool" are supposed to be a 
NOP on ELF Linux and yet regularly screw up builds.  (It's supposed to do 
nothing, and can't manage to do it correctly.  That's sad.)

> If you _know_ you're running on Linux from a particular era, you can
> provide a config.cache file with the correct answers already filled in.

And yet very few projects actually do.

As for "from a particular era", just for fun I fired up the Red Hat 9 qemu 
image I keep around for this sort of thing, downloaded glibc 2.7 (the most 
recent one they bothered to cut a tarball for on ftp.gnu.org and one of the 
big autoconf offenders), and ran its ./configure.  It died with:

configure: error:
*** These critical programs are missing or too old: gcc
*** Check the INSTALL file for required versions.

So you can't build a 2 year old version of glibc under a 6 year old version of 
Linux (which was the most popular Linux version in the world when it shipped, 
with about 50% market share among Linux seats).  And yet glibc (one of the 
FSF's flagship projects) bothers doing extensive autoconf probes.  Why?  
Autoconf isn't really _helping_ here...

The bottom line is that if your assumption is that you have an open source 
application targeting an open source operating system, lots of the hoops you 
used to have to jump through just aren't very interesting anymore.

> I agree that Autoconf sucks (I've written enough sucking Autoconf
> macros myself, I hate it), but the tough part is providing a suitable
> replacement when you still want portable source code.

Depends on your definition of "portable".  The unix wars of the 80's are over; 
they're pretty much all dead.  Even the surviving legacy deployments of 
Solaris and AIX provide Linux emulation environments.  And of course FreeBSD's 
done so for years: 
http://www.onlamp.com/pub/a/bsd/2006/01/12/Big_Scary_Daemons.html

MacOS X and windows are still very much alive, but if you want to target those 
you can either A) treat them as Posix/SUSv3 (which both _claim_ to support), 
B) use cross platform libraries like SDL and opengl and program to their APIs, 
C) bother to do a proper port of the thing ala 
http://porting.openoffice.org/mac/ or http://www.kju-app.org/ or the way khtml 
wound up in Safari.

For Windows there's Cygwin, running windows programs on Linux has Wine.  Or 
just qemu/kvm in either direction.

Basically, pick a standard to write to.  If you want to write to posix and 
SUSv4, do it.  If you want to add in LSB and the Linux man pages, go for it.  
But autoconf was designed for portability between Irix and HP-UX, which just 
doesn't come up much anymore.

> > It just goes on and on and on like this.  Tests like "checking
> > whether byte ordering is bigendian... no" means "Either I didn't
> > know endian.h existed, or I don't trust it to be there".  How about
> > the long stretches checking for the existence of header files
> > specified by posix?
>
> You seem to be arguing for "let's make all our programs Linux-specific
> (and Glibc-specific in many cases)".

Checking for the existence of posix header files is Linux-specific?

I'm saying there are many standards, and you can choose to adhere to standards 
like LP64 (which MacOSX, Linux, and the BSDs all support) and _say_ you do so 
and achieve portability that way.

You also have "#if defined __linux__" and "#if defined __APPLE__" and so on, 
so header files can do a lot of the tests that people wind up doing with 
autoconf for some reason.

And there will always be platforms you're NOT portable to.  (Game consoles 
come to mind: your average autoconf recipe isn't going to make your program 
run on a PS3, XBox 360, or Wii.  Unless you load Linux on those systems first 
and program for Linux.)

> Given all the problems you've
> seen with cross-compiling, let alone compiling for different OS
> platforms, that seems a little odd.

If I can't get Linux running on the hardware (which is seldom an interesting 
case anymore; it's on everything from cell phones to the S390), and I can't 
get a Linux emulation environment like Solaris' lxrun, aix5L, or cygwin, then 
I probably want a rigidly posix environment.  (Heck, even wince has celib and 
gnuwince, not that I really care.)

The extra "portability" isn't even going to buy you 5% more seats these days.  
It's really not that interesting.  It's not that the world is homogenous now, 
it's that between open source and open standards we don't need giant if/else 
ladders with hundreds of tests to cover the interesting cases.  And trying to 
achieve portability by relying on standards is a superior approach to trying 
to achieve portability via an infinite series of special case checks.

> -- Jamie

Rob

  reply	other threads:[~2009-01-18  1:44 UTC|newest]

Thread overview: 129+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-01-02  8:07 PATCH [0/3]: Simplify the kernel build by removing perl Rob Landley
2009-01-02  8:13 ` [PATCH 1/3]: Replace kernel/timeconst.pl with kernel/timeconst.sh Rob Landley
2009-01-02  9:04   ` Sam Ravnborg
2009-01-02 12:00     ` Rob Landley
2009-01-02 19:33       ` H. Peter Anvin
2009-01-04  1:32         ` Rob Landley
2009-01-04  1:35           ` H. Peter Anvin
2009-01-04 12:07           ` Alan Cox
2009-01-04 18:36             ` H. Peter Anvin
2009-01-04 19:03             ` Rob Landley
2009-01-04 20:39               ` H. Peter Anvin
2009-01-05  0:59                 ` Rob Landley
2009-01-03  6:28       ` Harvey Harrison
2009-01-03 12:28   ` Ingo Oeser
2009-01-04  1:36     ` Rob Landley
2009-01-04  5:07       ` Valdis.Kletnieks
2009-01-04  6:43         ` Rob Landley
2009-01-04 22:13           ` Jamie Lokier
2009-01-05  0:15             ` Bernd Petrovitsch
2009-01-05  2:23               ` Jamie Lokier
2009-01-05 10:46                 ` Bernd Petrovitsch
2009-01-05 15:01                   ` Jamie Lokier
2009-01-05 16:18                     ` Bernd Petrovitsch
2009-01-06  0:06                     ` Rob Landley
2009-01-05 21:07                   ` Rob Landley
2009-01-05  4:50               ` Rob Landley
2009-01-05 12:29                 ` Bernd Petrovitsch
2009-01-04 21:51         ` Alejandro Mery
2009-01-04  7:15       ` Michal Jaegermann
2009-01-05  0:41   ` Ray Lee
2009-01-05  5:08     ` Rob Landley
2009-01-02  8:14 ` [PATCH 2/3]: Remove perl from make headers_install Rob Landley
2009-01-02  9:09   ` Sam Ravnborg
2009-01-02  8:15 ` [PATCH 3/3]: Convert mkcapflags.pl to mkcapflags.sh Rob Landley
2009-01-02  9:12   ` Sam Ravnborg
2009-01-02  9:26 ` PATCH [0/3]: Simplify the kernel build by removing perl Arkadiusz Miskiewicz
2009-01-02  9:49   ` Christoph Hellwig
2009-01-02 10:16     ` Alejandro Mery
2009-01-02 10:30       ` Mark Miller
2009-01-02 11:18         ` Matt Keenan
2009-01-02 10:41       ` Måns Rullgård
2009-01-15 12:59         ` Pádraig Brady
2009-01-15 18:52           ` Jamie Lokier
2009-01-15 19:45             ` Måns Rullgård
2009-01-02 11:15       ` Rob Landley
2009-01-02 11:44         ` Sam Ravnborg
2009-01-02 12:56     ` Rob Landley
2009-01-02 14:04       ` Theodore Tso
2009-01-03  3:22         ` Jamie Lokier
2009-01-04  2:23         ` Rob Landley
2009-01-02 10:02   ` Mark Miller
2009-01-02 10:03     ` Mark Miller
2009-01-02 11:13   ` Rob Landley
2009-01-02 16:04     ` Matthieu CASTET
2009-01-03 19:46       ` Rob Landley
2009-01-03 20:10         ` Sam Ravnborg
2009-01-03 20:50           ` H. Peter Anvin
2009-01-04  1:47             ` Rob Landley
2009-01-04  1:45           ` Rob Landley
2009-01-04  8:09             ` Sam Ravnborg
2009-01-04 20:19               ` Rob Landley
2009-01-04  0:44         ` Robert Hancock
2009-01-04  1:39           ` David Brownell
2009-01-04  3:05           ` Rob Landley
2009-01-04  1:32       ` Rob Landley
2009-01-02  9:50 ` Paul Mundt
2009-01-02 10:32   ` Mark Miller
2009-01-02 10:57     ` Paul Mundt
2009-01-02 12:11       ` Mark Miller
2009-01-02 12:44   ` Rob Landley
2009-01-02 17:25   ` Wookey
2009-01-02 18:01     ` Sam Ravnborg
2009-01-02 19:27       ` H. Peter Anvin
2009-01-04  1:35         ` Rob Landley
2009-01-03 19:48       ` Rob Landley
2009-01-08 13:13         ` klaasjan gm
2009-01-08 15:04           ` Christian Gagneraud
2009-01-03 14:59   ` Wolfgang Denk
2009-01-03 22:54 ` Leon Woestenberg
2009-01-03 23:03   ` H. Peter Anvin
2009-01-04  0:37     ` Leon Woestenberg
2009-01-04  2:53       ` Rob Landley
2009-01-04  3:38         ` Markus Heidelberg
2009-01-04  4:57           ` Rob Landley
2009-01-04  2:06     ` Rob Landley
2009-01-04  2:14       ` H. Peter Anvin
2009-01-04  6:29         ` Rob Landley
2009-01-15 14:32           ` Pádraig Brady
2009-01-04  2:36       ` Jamie Lokier
2009-01-04  2:39         ` H. Peter Anvin
2009-01-04  2:43           ` H. Peter Anvin
2009-01-04  3:06       ` Paul Mundt
2009-01-04 10:23         ` Leon Woestenberg
2009-01-08 13:29           ` Mike Frysinger
2009-01-11 12:45           ` Bernd Petrovitsch
2009-01-12  3:36             ` Mark A. Miller
2009-01-12  5:11               ` H. Peter Anvin
2009-01-12  5:23                 ` Mark A. Miller
2009-01-12  8:20               ` Paul Mundt
2009-01-12  9:18                 ` Mark A. Miller
2009-01-12  9:41                   ` Paul Mundt
2009-01-12 10:03                     ` Mark A. Miller
2009-01-12 10:34                       ` Paul Mundt
2009-01-12 17:56                     ` Rob Landley
2009-01-12 18:04                       ` Alan Cox
2009-01-12  8:27               ` Peter Korsgaard
2009-01-12 17:45                 ` Rob Landley
     [not found]             ` <31014a580901111928u586e2246uccf370ff941c8a01@mail.gmail.com>
2009-01-12  5:35               ` Sam Ravnborg
2009-01-12  5:50                 ` Mark A. Miller
2009-01-12 10:18                   ` Sam Ravnborg
2009-01-12 10:22                     ` Mark A. Miller
2009-01-12 10:44                       ` Alexander Neundorf
2009-01-12 10:55                         ` Mark A. Miller
2009-01-12 11:04                           ` Alexander Neundorf
2009-01-12 10:38                     ` Paul Mundt
2009-01-14  2:51                       ` Jamie Lokier
2009-01-16  6:11                         ` Rob Landley
2009-01-16  7:28                           ` Alexander Neundorf
2009-01-16 14:54                           ` Valdis.Kletnieks
2009-01-16 21:54                             ` Rob Landley
2009-01-17  9:51                               ` Jamie Lokier
2009-01-18  1:44                                 ` Rob Landley [this message]
2009-01-04 16:22         ` Vladimir Dronnikov
2009-01-04  1:24 ` PATCH [0/3]: Simplify the kernel build by removing perl v2 Rob Landley
2009-01-04  1:27   ` PATCH [1/3]: Replace kernel/timeconst.pl with kernel/timeconst.sh (v2) Rob Landley
2009-01-04  2:48     ` David Vrabel
2009-01-04 20:21       ` Rob Landley
2009-01-04  1:28   ` PATCH [2/3]: Remove perl from make headers_install Rob Landley
2009-01-04  1:29   ` PATCH [3/3]: Convert kernel/cpu/mkcapflags.pl to kernel/cpu/mkcapflags.sh Rob Landley

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=200901171944.05014.rob@landley.net \
    --to=rob@landley.net \
    --cc=Valdis.Kletnieks@vt.edu \
    --cc=jamie@shareable.org \
    --cc=linux-embedded@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=sam@ravnborg.org \
    /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).