Differences between revisions 2 and 12 (spanning 10 versions)
Revision 2 as of 2016-09-13 04:23:08
Size: 3624
Editor: LukeShumaker
Comment: say what RBAC stands for
Revision 12 as of 2024-08-07 18:03:14
Size: 29531
Editor: geirha
Comment: Links to the various utilities in issue 8
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
POSIX is a standard specifying source-code compatibility for C99 and Bourne-family shell programs. POSIX is a standard specifying source-code compatibility for C99 and Bourne-family shell programs. The latest version currently available for free is http://pubs.opengroup.org/onlinepubs/9699919799, with the part on [[http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap01.html|Shell and Utilities]] being the most important part to read if you want to write shell scripts that will work on more than one system.

An important thing to realise about POSIX is that it generally does not restrict the commands it defines. It defines what features a given command or function should '''at least''' implement. To take an example:

POSIX defines a certain set of options for the [[http://pubs.opengroup.org/onlinepubs/9699919799/utilities/grep.html|grep]] command. GNU grep, and recent versions of BSD grep, include a `-o` option that output only what matched each pattern, instead of the lines that contained a match. POSIX does not define a `-o` option, but both grep implementations are POSIX compliant since they implement all the required options and behaviour described by POSIX. This means that if you use grep with the `-o` option in a script, you can't expect the script to work the same on other POSIX compliant systems. While if you only use options and features described by POSIX, you '''can''' expect the script to work on any POSIX compliant system.
Line 7: Line 11:
= The POSIX standard = == The POSIX standard ==
Line 9: Line 13:
POSIX is published by 3 different organizations; the Open Group, IEEE, and ISO/IEC. The most recent version of POSIX is POSIX-2008, 2013 edition; that is: the 2008 version of POSIX, with the 2013 technical corrigendum applied. POSIX is published by 3 different organizations; the Open Group, IEEE, and ISO/IEC. The most recent version of POSIX is POSIX-2008, 2016 edition; that is: the 2008 version of POSIX, with the 2016 "Technical Corrigendum 2" (TC2-2016) applied (replacing the 2013 "Technical Corrigendum 1").
Line 11: Line 15:
The Open Group calls this "C138"; that is standard "C082" (2008) with update "U130" (2013) applied. The Open Group calls this "C165"; that is standard "C082" (2008) with update "U160" (2016) applied.
Line 13: Line 17:
IEEE calls this "IEEE Std 1003.1-2008, 2013 Edition". Prior to 1997, there were three separate core POSIX documents; 1003.0 for base definitions, 1003.1 for C, and 1003.2 for shell (there were even other non-core documents, such as 1003.5 for Ada). Because of this, you may see references to "POSIX.1" for C things and "POSIX.2" for shell things. However, in 1997, C and shell got rolled into one document. IEEE calls this "IEEE Std 1003.1-2008, 2016 Edition"; that is "IEEE Std 1003.1-2008" with "1003.1-2008/Cor 2-2016" applied. Prior to 1997, there were three separate core POSIX documents; 1003.0 for base definitions, 1003.1 for C, and 1003.2 for shell (there were even other non-core documents, such as 1003.5 for Ada). Because of this, you may see references to "POSIX.1" for C things and "POSIX.2" for shell things. However, in 1997, C and shell got rolled into one document.
Line 15: Line 19:
ISO/IEC calls the base document "ISO/IEC 9945:2009", and calls the corrigendum "ISO/IEC/IEEE 9945:2009/Cor 1:2013". ISO/IEC calls the base document "ISO/IEC/IEEE 9945:2009", and calls TC2 "ISO/IEC/IEEE 9945:2009/Cor 2:2017".
Line 17: Line 21:
So, what's up with having 3 versions? They are all the same. I don't mean equivalent, I mean the same. The Open Group and IEEE publish their versions at the same time; identical documents, except with a differing cover page. Then the IEEE version goes to ISO/IEC where it gets approved (which takes time, hence the 2009 instead of 2008), and they insert 3 new pages before the IEEE cover page (ISO cover page, PDF disclaimer/copyright statement, forward with committee information). So, what's up with having 3 versions from different publishers? They are all the same. I don't mean equivalent, I mean the same.  As a product of a Open Group/IEEE joint working group, the [[http://www.opengroup.org/austin/|Austin Group]], the Open Group and IEEE publish their versions at the same time; identical documents, except with a differing cover page. Then the IEEE version goes to ISO/IEC where it gets approved (which takes time, hence the 2009 instead of 2008), and they insert 3 new pages before the IEEE cover page (ISO cover page, PDF disclaimer/copyright statement, forward with committee information).
Line 21: Line 25:
= The POSIX certification = == The POSIX certification ==
Line 23: Line 27:
There is a [[http://get.posixcertified.ieee.org/|POSIX certification]]. Getting a product certified allows it to use the POSIX mark in the marketing, and allows it to be listed in the [[http://get.posixcertified.ieee.org/register.html|POSIX register]]. However, the register is pretty empty; most certified products choose to not be listed. This certification, contrary to popular myth, does not entitle a system to the UNIX name; the Open Group UNIX certification is required for that. There is a [[http://get.posixcertified.ieee.org/|POSIX certification]]. Getting a product certified allows it to use the POSIX mark in the marketing, and allows it to be listed in the [[http://get.posixcertified.ieee.org/register.html|POSIX register]]. However, the register is pretty empty; the certification requires a (costly) yearly renewal. This certification, contrary to popular myth, does not entitle a system to the UNIX name; the Open Group UNIX certification is required for that.
Line 25: Line 29:
= The Single UNIX Specification = == The Single UNIX Specification ==
Line 27: Line 31:
Related to POSIX is the Single Unix Specification (SUS). Back in the day, there were many differences between SUS and POSIX, but today SUS is just POSIX+Curses. SUSv4 is literally a document set (Open Group T101) of two separate documents, Open Group C138 (POSIX-2008), and Open Group C094 (X/Open Curses, Issue 7). Related to POSIX is the Single Unix Specification (SUS). Back in the day, there were many differences between SUS and POSIX, but today SUS is just POSIX+Curses. SUSv4 is literally a document set (Open Group T101) of two separate documents; Open Group C165 (POSIX-2008, 2016 edition), and Open Group C094 (X/Open Curses, Issue 7).  When a new corrigendum comes out, the SUS document set is updated to include the edition of POSIX with it applied, without issuing a new document set number; T101 previously included C138 (POSIX-2008, 2013 edition).
Line 29: Line 33:
= The UNIX certification = == The UNIX certification ==
Line 34: Line 38:



== Utilities ==

Links to the various POSIX Issue 8 pages, arranged similar to [[https://shellhaters.org|shellhaters]].

|| '''Language''' || '''Programming''' || '''Text''' || '''Files''' || '''Processes''' ||
|| [[http://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#tag_19_01|intro]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/alias.html#top|alias]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/awk.html#top|awk]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/basename.html#top|basename]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/bg.html#top|bg]] ||
|| [[http://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#tag_19_02|quoting]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/bc.html#top|bc]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/cat.html#top|cat]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/cal.html#top|cal]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/fg.html#top|fg]] ||
|| [[http://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#tag_19_05|variables]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/command.html#top|command]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/cksum.html#top|cksum]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/cd.html#top|cd]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/kill.html#top|kill]] ||
|| [[http://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#tag_19_06|expansion]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/date.html#top|date]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/cmp.html#top|cmp]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/comm.html#top|comm]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/csplit.html#top|csplit]] ||
|| [[http://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#tag_19_07|redirection]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/env.html#top|env]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/comm.html#top|comm]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/chmod.html#top|chmod]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/nohup.html#top|nohup]] ||
|| [[http://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#tag_19_08|exit status]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/expr.html#top|expr]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/csplit.html#top|csplit]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/chown.html#top|chown]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/ps.html#top|ps]] ||
|| [[http://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#tag_19_09|commands]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/false.html#top|false]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/cut.html#top|cut]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/cp.html#top|cp]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/renice.html#top|renice]] ||
|| [[http://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#tag_19_10|grammar]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/getopts.html#top|getopts]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/echo.html#top|echo]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/dd.html#top|dd]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/wait.html#top|wait]] ||
|| [[http://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#tag_19_11|signals]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/hash.html#top|hash]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/ed.html#top|ed]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/df.html#top|df]] || ||
|| || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/fc.html#top|fc]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/ex.html#top|ex]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/dirname.html#top|dirname]] || '''Job Control''' ||
|| '''Built-in''' || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/id.html#top|id]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/expand.html#top|expand]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/du.html#top|du]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/at.html#top|at]] ||
|| [[http://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#dot|.]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/locale.html#top|locale]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/fold.html#top|fold]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/file.html#top|file]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/batch.html#top|batch]] ||
|| [[http://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#colon|:]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/localedef.html#top|localedef]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/grep.html#top|grep]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/find.html#top|find]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/jobs.html#top|jobs]] ||
|| [[http://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#break|break]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/logger.html#top|logger]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/head.html#top|head]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/fuser.html#top|fuser]] || ||
|| [[http://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#continue|continue]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/logname.html#top|logname]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/join.html#top|join]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/link.html#top|link]] || ||
|| [[http://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#eval|eval]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/newgrp.html#top|newgrp]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/more.html#top|more]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/ln.html#top|ln]] || ||
|| [[http://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#exec|exec]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/pathchk.html#top|pathchk]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/nl.html#top|nl]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/ls.html#top|ls]] || ||
|| [[http://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#exit|exit]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/pwd.html#top|pwd]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/od.html#top|od]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/mkdir.html#top|mkdir]] || ||
|| [[http://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#export|export]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/read.html#top|read]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/paste.html#top|paste]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/mkfifo.html#top|mkfifo]] || ||
|| [[http://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#readonly|readonly]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/sh.html#top|sh]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/printf.html#top|printf]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/mv.html#top|mv]] || ||
|| [[http://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#return|return]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/sleep.html#top|sleep]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/sed.html#top|sed]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/rm.html#top|rm]] || ||
|| [[http://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#set|set]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/test.html#top|test]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/sort.html#top|sort]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/rmdir.html#top|rmdir]] || ||
|| [[http://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#shift|shift]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/time.html#top|time]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/split.html#top|split]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/tee.html#top|tee]] || ||
|| [[http://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#times|times]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/tput.html#top|tput]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/tail.html#top|tail]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/touch.html#top|touch]] || ||
|| [[http://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#trap|trap]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/true.html#top|true]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/tr.html#top|tr]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/unlink.html#top|unlink]] || ||
|| [[http://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#unset|unset]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/type.html#top|type]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/tsort.html#top|tsort]] || || ||
|| || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/unalias.html#top|unalias]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/unexpand.html#top|unexpand]] || || ||
|| || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/uname.html#top|uname]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/uniq.html#top|uniq]] || || ||
|| || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/write.html#top|write]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/wc.html#top|wc]] || || ||
|| || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/xargs.html#top|xargs]] || || || ||


|| '''Development''' || '''Admin''' || '''Terminal''' || '''Comm''' || '''Compression''' ||
|| [[http://www.opengroup.org/onlinepubs/9799919799/utilities/ar.html#top|ar]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/crontab.html#top|crontab]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/stty.html#top|stty]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/mailx.html#top|mailx]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/compress.html#top|compress]] ||
|| [[http://www.opengroup.org/onlinepubs/9799919799/utilities/asa.html#top|asa]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/getconf.html#top|getconf]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/tabs.html#top|tabs]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/mesg.html#top|mesg]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/pax.html#top|pax]] ||
|| [[http://www.opengroup.org/onlinepubs/9799919799/utilities/c99.html#top|c99]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/ulimit.html#top|ulimit]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/tty.html#top|tty]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/talk.html#top|talk]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/uncompress.html#top|uncompress]] ||
|| [[http://www.opengroup.org/onlinepubs/9799919799/utilities/cflow.html#top|cflow]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/umask.html#top|umask]] || || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/uucp.html#top|uucp]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/zcat.html#top|zcat]] ||
|| [[http://www.opengroup.org/onlinepubs/9799919799/utilities/ctags.html#top|ctags]] || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/who.html#top|who]] || || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/uudecode.html#top|uudecode]] || ||
|| [[http://www.opengroup.org/onlinepubs/9799919799/utilities/cxref.html#top|cxref]] || || || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/uuencode.html#top|uuencode]] || ||
|| [[http://www.opengroup.org/onlinepubs/9799919799/utilities/diff.html#top|diff]] || || || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/uustat.html#top|uustat]] || ||
|| [[http://www.opengroup.org/onlinepubs/9799919799/utilities/fort77.html#top|fort77]] || || || [[http://www.opengroup.org/onlinepubs/9799919799/utilities/uux.html#top|uux]] || ||
|| [[http://www.opengroup.org/onlinepubs/9799919799/utilities/gencat.html#top|gencat]] || || || || ||
|| [[http://www.opengroup.org/onlinepubs/9799919799/utilities/iconv.html#top|iconv]] || || || || ||
|| [[http://www.opengroup.org/onlinepubs/9799919799/utilities/lex.html#top|lex]] || || || || ||
|| [[http://www.opengroup.org/onlinepubs/9799919799/utilities/m4.html#top|m4]] || || || || ||
|| [[http://www.opengroup.org/onlinepubs/9799919799/utilities/make.html#top|make]] || || || || ||
|| [[http://www.opengroup.org/onlinepubs/9799919799/utilities/man.html#top|man]] || || || || ||
|| [[http://www.opengroup.org/onlinepubs/9799919799/utilities/nm.html#top|nm]] || || || || ||
|| [[http://www.opengroup.org/onlinepubs/9799919799/utilities/patch.html#top|patch]] || || || || ||
|| [[http://www.opengroup.org/onlinepubs/9799919799/utilities/strings.html#top|strings]] || || || || ||
|| [[http://www.opengroup.org/onlinepubs/9799919799/utilities/strip.html#top|strip]] || || || || ||
|| [[http://www.opengroup.org/onlinepubs/9799919799/utilities/vi.html#top|vi]] || || || || ||
|| [[http://www.opengroup.org/onlinepubs/9799919799/utilities/yacc.html#top|yacc]] || || || || ||

POSIX is a standard specifying source-code compatibility for C99 and Bourne-family shell programs. The latest version currently available for free is http://pubs.opengroup.org/onlinepubs/9699919799, with the part on Shell and Utilities being the most important part to read if you want to write shell scripts that will work on more than one system.

An important thing to realise about POSIX is that it generally does not restrict the commands it defines. It defines what features a given command or function should at least implement. To take an example:

POSIX defines a certain set of options for the grep command. GNU grep, and recent versions of BSD grep, include a -o option that output only what matched each pattern, instead of the lines that contained a match. POSIX does not define a -o option, but both grep implementations are POSIX compliant since they implement all the required options and behaviour described by POSIX. This means that if you use grep with the -o option in a script, you can't expect the script to work the same on other POSIX compliant systems. While if you only use options and features described by POSIX, you can expect the script to work on any POSIX compliant system.

It is often claimed that POSIX is a standard for UNIX-like operating systems. Superficially, this seems true, as C and shell are the primary ways of interacting with *NIX systems, but it isn't strictly true. Totally non-UNIXy systems such as IBM z/OS are POSIX certified.

There is also a lot of confusion with the relationship between POSIX and the Single UNIX Specification (SUS), and the UNIX trademark. This article will clarify that.

The POSIX standard

POSIX is published by 3 different organizations; the Open Group, IEEE, and ISO/IEC. The most recent version of POSIX is POSIX-2008, 2016 edition; that is: the 2008 version of POSIX, with the 2016 "Technical Corrigendum 2" (TC2-2016) applied (replacing the 2013 "Technical Corrigendum 1").

The Open Group calls this "C165"; that is standard "C082" (2008) with update "U160" (2016) applied.

IEEE calls this "IEEE Std 1003.1-2008, 2016 Edition"; that is "IEEE Std 1003.1-2008" with "1003.1-2008/Cor 2-2016" applied. Prior to 1997, there were three separate core POSIX documents; 1003.0 for base definitions, 1003.1 for C, and 1003.2 for shell (there were even other non-core documents, such as 1003.5 for Ada). Because of this, you may see references to "POSIX.1" for C things and "POSIX.2" for shell things. However, in 1997, C and shell got rolled into one document.

ISO/IEC calls the base document "ISO/IEC/IEEE 9945:2009", and calls TC2 "ISO/IEC/IEEE 9945:2009/Cor 2:2017".

So, what's up with having 3 versions from different publishers? They are all the same. I don't mean equivalent, I mean the same. As a product of a Open Group/IEEE joint working group, the Austin Group, the Open Group and IEEE publish their versions at the same time; identical documents, except with a differing cover page. Then the IEEE version goes to ISO/IEC where it gets approved (which takes time, hence the 2009 instead of 2008), and they insert 3 new pages before the IEEE cover page (ISO cover page, PDF disclaimer/copyright statement, forward with committee information).

There are other IEEE standards bearing the "POSIX" name, but they are not important (for example, IEEE Std 1387.2-1995, containing some administration utilities).

The POSIX certification

There is a POSIX certification. Getting a product certified allows it to use the POSIX mark in the marketing, and allows it to be listed in the POSIX register. However, the register is pretty empty; the certification requires a (costly) yearly renewal. This certification, contrary to popular myth, does not entitle a system to the UNIX name; the Open Group UNIX certification is required for that.

The Single UNIX Specification

Related to POSIX is the Single Unix Specification (SUS). Back in the day, there were many differences between SUS and POSIX, but today SUS is just POSIX+Curses. SUSv4 is literally a document set (Open Group T101) of two separate documents; Open Group C165 (POSIX-2008, 2016 edition), and Open Group C094 (X/Open Curses, Issue 7). When a new corrigendum comes out, the SUS document set is updated to include the edition of POSIX with it applied, without issuing a new document set number; T101 previously included C138 (POSIX-2008, 2013 edition).

The UNIX certification

There is not a SUS certification; instead, the Open Group has a UNIX certification--but it isn't just testing for compliance with SUS! The Open Group UNIX V7 certification tests for SUSv4, and the UNIX RBAC (Role-Based Access Control; user and group permissions), which isn't in SUS/POSIX.

Similarly to the POSIX certification, there is a register. It is more populated than the POSIX register, but still doesn't have anything listed for UNIX V7; only the previous version, UNIX 03.

Utilities

Links to the various POSIX Issue 8 pages, arranged similar to shellhaters.

Language

Programming

Text

Files

Processes

intro

alias

awk

basename

bg

quoting

bc

cat

cal

fg

variables

command

cksum

cd

kill

expansion

date

cmp

comm

csplit

redirection

env

comm

chmod

nohup

exit status

expr

csplit

chown

ps

commands

false

cut

cp

renice

grammar

getopts

echo

dd

wait

signals

hash

ed

df

fc

ex

dirname

Job Control

Built-in

id

expand

du

at

.

locale

fold

file

batch

:

localedef

grep

find

jobs

break

logger

head

fuser

continue

logname

join

link

eval

newgrp

more

ln

exec

pathchk

nl

ls

exit

pwd

od

mkdir

export

read

paste

mkfifo

readonly

sh

printf

mv

return

sleep

sed

rm

set

test

sort

rmdir

shift

time

split

tee

times

tput

tail

touch

trap

true

tr

unlink

unset

type

tsort

unalias

unexpand

uname

uniq

write

wc

xargs

Development

Admin

Terminal

Comm

Compression

ar

crontab

stty

mailx

compress

asa

getconf

tabs

mesg

pax

c99

ulimit

tty

talk

uncompress

cflow

umask

uucp

zcat

ctags

who

uudecode

cxref

uuencode

diff

uustat

fort77

uux

gencat

iconv

lex

m4

make

man

nm

patch

strings

strip

vi

yacc


CategoryUnix

POSIX (last edited 2024-11-01 21:18:23 by geirha)