bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Document reasonable portability targets


From: Bruno Haible
Subject: Re: Document reasonable portability targets
Date: Sat, 29 Jan 2011 15:58:04 +0100
User-agent: KMail/1.9.9

Hi,

The same question was asked several times over the last few months: [1][2][3].
Some people think that dropping SunOS 4 support was "aggressive",
others think that gnulib should drop Cygwin 1.5.x support less than one year
after Cygwin 1.7.x was released and stabilized. So, obviously, there's a
need for documentation.

[1] http://lists.gnu.org/archive/html/bug-gnulib/2010-11/msg00204.html
[2] http://lists.gnu.org/archive/html/emacs-devel/2011-01/msg00995.html
[3] http://www.cygwin.com/ml/cygwin/2011-01/msg00375.html


Here's a proposed patch. Comments?


2011-01-29  Bruno Haible  <address@hidden>

        doc: List the target platforms.
        * doc/gnulib-intro.texi (Target Platforms): New section.
        * doc/gnulib.texi (Introduction): Update menu.
        * README (Portability guidelines): Refer to the new section. Update
        statement about oldest supported environment. Remove rationale why
        <errno.h>, <string.h>, <stdlib.h> are assumed. Update example of an
        unportable C89 function.
        Reported by Bastien Roucariès <address@hidden> and
        Charles Wilson <address@hidden>.

--- doc/gnulib-intro.texi.orig  Sat Jan 29 15:46:36 2011
+++ doc/gnulib-intro.texi       Sat Jan 29 15:42:30 2011
@@ -74,6 +74,121 @@
 stdout if desired, and emits an error message if the subprocess
 failed.
 
address@hidden Target Platforms
address@hidden Target Platforms
+
+Gnulib supports a number of platforms that we call the "reasonable
+portability targets".  This class consists of widespread operating systems,
+for three years after their last availability, or --- for proprietary
+operating systems --- as long as the vendor provides commercial support for
+it.
+
+Some operating systems are not very widespread, but are Free Software and
+are actively developed.  Such platforms are also supported by Gnulib, if
+that OS's developers community keeps in touch with the Gnulib developers,
+by providing bug reports, analyses, or patches.  For such platforms, Gnulib
+will not support all versions that are at most three years old, but only
+the versions of the last year or the last few months, depending on the
+maturity of said OS project, the number of its users, and how often these
+users upgrade.
+
+Niche operating systems are generally unsupported by Gnulib, unless some
+people from their developers or users community contributes support to
+Gnulib.
+
+There are four degrees of support a platform can have in Gnulib:
+
address@hidden
address@hidden
+Essential.  These are the platforms which have the highest attention.
+
address@hidden
+Major.  On these platforms, Gnulib gets tested about every 6 months or so.
+
address@hidden
+Minor.  On these platforms, Gnulib is not tested very often, but we
+fix bugs when they are reported.
+
address@hidden
+Unimportant.  On these platforms, Gnulib is rarely tested, and reported bugs
+have low priority.
address@hidden itemize
+
+As of 2011, the list of supported platforms is the following:
+
address@hidden
address@hidden
+glibc systems.  With glibc 2.8 or newer, they are essential.  With glibc 2.3
+or newer, they are major.
address@hidden
+MacOS X.  In versions 10.5 and 10.6, it's essential.  In version 10.4, it's
+minor.
address@hidden
+FreeBSD 6.0 or newer is major.  FreeBSD 5.x is minor.
address@hidden
+NetBSD 5.0 or newer is major.  NetBSD 3.0 or newer is minor.
address@hidden
+OpenBSD 4.0 or newer is major.  OpenBSD 3.8 or newer is minor.
address@hidden
+AIX 6.1 or newer is major.  AIX 5.1 or newer is minor.
address@hidden
+HP-UX 11.11 or newer is major.  HP-UX 11.00 is minor.  HP-UX 10.20 is
+unimportant.
address@hidden
+IRIX 6.5 is major.  IRIX 5.3 is unimportant.
address@hidden
+OSF/1 5.1 is major.  OSF/1 4.0 is unimportant.
address@hidden
+Solaris 8 and newer are major.  Solaris 7 is minor.  Solaris 2.6 and older is
+unimportant.
address@hidden
+Cygwin 1.7.x is essential.  Cygwin 1.5.x is major.
address@hidden
+mingw is essential.  But note that some modules are currently unsupported on
+mingw: @code{mgetgroups}, @code{getugroups}, @code{idcache}, @code{userspec},
address@hidden, @code{login_tty}, @code{forkpty}, @code{pt_chown},
address@hidden, @code{pty}, @code{savewd}, @code{mkancesdirs}, @code{mkdir-p},
address@hidden, @code{faccessat}.  The versions of Windows that are
+supported are Windows XP and newer.
address@hidden
+Native Windows, with MSVC as compiler, is unimportant.
address@hidden
+mingw in 64-bit mode is unimportant so far.
address@hidden
+Interix 3.5 is unimportant.
address@hidden
+Haiku is minor, BeOS is unimportant.
address@hidden
+uClibc on Linux is minor.
address@hidden
+QNX is unimportant.
address@hidden itemize
+
+These operating systems are all supported in an unvirtualized environment.
+When you run an OS inside a virtual machine, you have to be aware that the
+virtual machine can bring in bugs of its own.  For example, floating-point
+operations on Solaris can behave slightly differently in QEMU than on real
+hardware.  And Haiku's @command{bash} program misbehaves in VirtualBox 3,
+whereas it behaves fine in VirtualBox 4.
+
+Similarly, running native Windows binaries on GNU/Linux under WINE is
+"unimportant": WINE has a set of behaviours and bugs that is slightly
+different from native Windows.
+
+The following platforms are @emph{not} supported by Gnulib.  Even correct
+patches for their support will not be applied.
+
address@hidden
address@hidden
+Windows 95/98/ME.
address@hidden
+DJGPP and EMX (the 32-bit operating systems running in DOS).
address@hidden
+MSDOS (the 16-bit operating system).
address@hidden
+Smartphone operating systems: Windows Mobile, Symbian OS, iOS.
address@hidden itemize
+
 @node Modules
 @section Modules
 
--- doc/gnulib.texi.orig        Sat Jan 29 15:46:36 2011
+++ doc/gnulib.texi     Sat Jan 29 15:40:48 2011
@@ -108,6 +108,7 @@
 * Benefits::
 * Library vs Reusable Code::
 * Portability and Application Code::
+* Target Platforms::
 * Modules::
 * Various Kinds of Modules::
 * Collaborative Development::
--- README.orig Sat Jan 29 15:46:36 2011
+++ README      Sat Jan 29 15:40:07 2011
@@ -77,6 +77,7 @@
 
 Contributing to Gnulib
 ======================
+
 All software here is copyrighted by the Free Software Foundation - you need
 to have filled out an assignment form for a project that uses the
 module for that contribution to be accepted here.
@@ -201,7 +202,8 @@
 ----------------------
 
 Gnulib code is intended to be portable to a wide variety of platforms,
-not just GNU platforms.
+not just GNU platforms.  See the documentation section "Target Platforms"
+for details.
 
 Many Gnulib modules exist so that applications need not worry about
 undesirable variability in implementations.  For example, an
@@ -210,27 +212,17 @@
 need not worry about localtime_r returning int (not char *) on some
 platforms that predate POSIX 1003.1-2001.
 
-Originally much of the Gnulib code was portable to ancient hosts like
-4.2BSD, but it is a maintenance hassle to maintain compatibility with
-unused hosts, so currently we assume at least a freestanding C89
-compiler, possibly operating with a C library that predates C89.  The
-oldest environment currently ported to is probably SunOS 4 + GCC 1.x,
-though we haven't tested this exact combination.  SunOS 4 last shipped
-on 1998-09-30, and Sun dropped support for it on 2003-10-01, so at
-some point we may start assuming a C89 library as well.
+Currently we assume at least a freestanding C89 compiler, possibly
+operating with a C library that predates C89.  The oldest environment
+currently ported to are probably HP-UX 10.20 and IRIX 5.3, though we
+are not testing these platform very often.
 
 Because we assume a freestanding C89 compiler, Gnulib code can include
 <float.h>, <limits.h>, <stdarg.h>, and <stddef.h> unconditionally.  It
 can also assume the existence of <ctime.h>, <errno.h>, <fcntl.h>,
-<locale.h>, <signal.h>, <stdio.h>, <stdlib.h>, <string.h>, and
-<time.h>.  Some of these headers, such as <errno.h>, were present in
-Unix Version 7 and are thus widely available.  <string.h> and
-<stdlib.h> were not in Unix Version 7, so they weren't universally
-available on ancient hosts, but they are both in SunOS 4 (the oldest
-platform still in relatively-common use) so Gnulib assumes them now.
-Similarly, many modules include <sys/types.h> even though it's not
-even in C99; that's OK since <sys/types.h> has been around nearly
-forever.
+<locale.h>, <signal.h>, <stdio.h>, <stdlib.h>, <string.h>, and <time.h>.
+Similarly, many modules include <sys/types.h> even though it's not even
+in C99; that's OK since <sys/types.h> has been around nearly forever.
 
 Even if the include files exist, they may not conform to C89.
 However, GCC has a "fixincludes" script that attempts to fix most
@@ -239,10 +231,10 @@
 should use fixincludes or fix their include files manually.
 
 Even if the include files conform to C89, the library itself may not.
-For example, SunOS 4's (free (NULL)) can dump core, so Gnulib code
-must avoid freeing a null pointer, even though C89 allows it.
+For example, strtod and mktime have some bugs on some platforms.
 You can work around some of these problems by requiring the relevant
-modules, e.g., the Gnulib 'free' module supplies a conforming 'free'.
+modules, e.g., the Gnulib 'mktime' module supplies a working and
+conforming 'mktime'.
 
 The GNU coding standards allow one departure from strict C99: Gnulib
 code can assume that standard internal types like size_t are no wider



reply via email to

[Prev in Thread] Current Thread [Next in Thread]