GNU Info

Info Node: (standards.info)System Portability

(standards.info)System Portability


Next: CPU Portability Prev: Names Up: Writing C
Enter node , (file) or (file)node

Portability between System Types
================================

   In the Unix world, "portability" refers to porting to different Unix
versions.  For a GNU program, this kind of portability is desirable, but
not paramount.

   The primary purpose of GNU software is to run on top of the GNU
kernel, compiled with the GNU C compiler, on various types of CPU.  So
the kinds of portability that are absolutely necessary are quite
limited.  But it is important to support Linux-based GNU systems, since
they are the form of GNU that is popular.

   Beyond that, it is good to support the other free operating systems
(*BSD), and it is nice to support other Unix-like systems if you want
to.  Supporting a variety of Unix-like systems is desirable, although
not paramount.  It is usually not too hard, so you may as well do it.
But you don't have to consider it an obligation, if it does turn out to
be hard.

   The easiest way to achieve portability to most Unix-like systems is
to use Autoconf.  It's unlikely that your program needs to know more
information about the host platform than Autoconf can provide, simply
because most of the programs that need such knowledge have already been
written.

   Avoid using the format of semi-internal data bases (e.g.,
directories) when there is a higher-level alternative (`readdir').

   As for systems that are not like Unix, such as MSDOS, Windows, the
Macintosh, VMS, and MVS, supporting them is often a lot of work.  When
that is the case, it is better to spend your time adding features that
will be useful on GNU and GNU/Linux, rather than on supporting other
incompatible systems.

   It is a good idea to define the "feature test macro" `_GNU_SOURCE'
when compiling your C files.  When you compile on GNU or GNU/Linux,
this will enable the declarations of GNU library extension functions,
and that will usually give you a compiler error message if you define
the same function names in some other way in your program.  (You don't
have to actually _use_ these functions, if you prefer to make the
program more portable to other systems.)

   But whether or not you use these GNU extensions, you should avoid
using their names for any other meanings.  Doing so would make it hard
to move your code into other GNU programs.


automatically generated by info2www version 1.2.2.9