standards: Non-GNU Standards

1 
1 4.1 Non-GNU Standards
1 =====================
1 
1 The GNU Project regards standards published by other organizations as
1 suggestions, not orders.  We consider those standards, but we do not
1 "obey" them.  In developing a GNU program, you should implement an
1 outside standard's specifications when that makes the GNU system better
1 overall in an objective sense.  When it doesn't, you shouldn't.
1 
1    In most cases, following published standards is convenient for
1 users--it means that their programs or scripts will work more portably.
1 For instance, GCC implements nearly all the features of Standard C as
1 specified by that standard.  C program developers would be unhappy if it
1 did not.  And GNU utilities mostly follow specifications of POSIX.2;
1 shell script writers and users would be unhappy if our programs were
1 incompatible.
1 
1    But we do not follow either of these specifications rigidly, and
1 there are specific points on which we decided not to follow them, so as
1 to make the GNU system better for users.
1 
1    For instance, Standard C says that nearly all extensions to C are
1 prohibited.  How silly!  GCC implements many extensions, some of which
1 were later adopted as part of the standard.  If you want these
1 constructs to give an error message as "required" by the standard, you
1 must specify '--pedantic', which was implemented only so that we can say
1 "GCC is a 100% implementation of the standard", not because there is any
1 reason to actually use it.
1 
1    POSIX.2 specifies that 'df' and 'du' must output sizes by default in
1 units of 512 bytes.  What users want is units of 1k, so that is what we
1 do by default.  If you want the ridiculous behavior "required" by POSIX,
1 you must set the environment variable 'POSIXLY_CORRECT' (which was
1 originally going to be named 'POSIX_ME_HARDER').
1 
1    GNU utilities also depart from the letter of the POSIX.2
1 specification when they support long-named command-line options, and
1 intermixing options with ordinary arguments.  This minor incompatibility
1 with POSIX is never a problem in practice, and it is very useful.
1 
1    In particular, don't reject a new feature, or remove an old one,
1 merely because a standard says it is "forbidden" or "deprecated".
1