[HN Gopher] A few facts about POSIX
       ___________________________________________________________________
        
       A few facts about POSIX
        
       Author : vorakl
       Score  : 101 points
       Date   : 2024-04-30 03:05 UTC (19 hours ago)
        
 (HTM) web link (vorakl.com)
 (TXT) w3m dump (vorakl.com)
        
       | augustk wrote:
       | "The current POSIX standard defines source code-level
       | compatibility for only two programming languages: The C language
       | (C99) and the command language (shell)."
       | 
       | There is also a definition of AWK:
       | 
       | https://pubs.opengroup.org/onlinepubs/9699919799/utilities/a...
        
         | dspillett wrote:
         | There is an argument that Awk's language isn't the same
         | category as it is a DSL not intended to be a general purpose
         | language (it is turning-complete, but was not specifically
         | designed as such), and awk itself is considered a complex tool
         | not a language interpreter.
         | 
         | Though having said that, any definition that separates awk from
         | general programming languages like that could probably apply to
         | shell syntax too.
        
           | anthk wrote:
           | Awk can do more than you think. Read The AWK Progamming
           | Language.
           | 
           | Also:
           | 
           | gopher://hoi.st/1/dl and gopher://hoi.st/0/files/tgl.awk
           | 
           | make up a pretty complete language.
           | 
           | Don't think on AWK as a more powerful grep, you are missing a
           | great mini-language.
        
         | skissane wrote:
         | There used to be POSIX.5 which standardised Ada bindings and
         | POSIX.9 which standardised Fortran bindings, but both were
         | abandoned (I assume due to lack of interest)
        
         | fanf2 wrote:
         | and sed
         | https://pubs.opengroup.org/onlinepubs/9699919799/utilities/s...
         | 
         | and m4
         | https://pubs.opengroup.org/onlinepubs/9699919799/utilities/m...
         | 
         | and ex
         | https://pubs.opengroup.org/onlinepubs/9699919799/utilities/e...
         | 
         | and bc
         | https://pubs.opengroup.org/onlinepubs/9699919799/utilities/b...
         | 
         | unix isn't short of programming languages!
        
           | iaabtpbtpnn wrote:
           | Just short of good ones!
        
             | blueflow wrote:
             | I'd always take the old POSIX stuff over whatever gets
             | bought by IBM next year.
        
         | vorakl wrote:
         | Certainly true. I just referred to this definition
         | 
         | "2.4 Other Language-Related Specifications
         | 
         | POSIX.1-2017 is currently specified in terms of the shell
         | command language and ISO C. Bindings to other programming
         | languages are being developed."
         | 
         | I've added a few words and links to other "utilities".
        
       | Karellen wrote:
       | > However, there are a number of operating systems, such as
       | MacOS, that are fully compliant with the POSIX standard and can
       | therefore be called Unix operating systems, not just Unix-like.
       | 
       | It's a bit more nuanced than this. Being fully compliant with the
       | POSIX standard isn't quite enough; you have to pass an official
       | conformance test suite _and be certified by the Open Group_ to
       | have passed it, in order to call yourself  "Unix", rather than
       | just being Unix-like.
       | 
       | https://en.wikipedia.org/wiki/Single_UNIX_Specification
       | 
       | So there could be (and likely are) implementations out there
       | which are fully compliant with the standard, but have not chosen
       | to get certified, and are therefore technically still "not Unix".
        
         | skissane wrote:
         | > Being fully compliant with the POSIX standard isn't quite
         | enough; you have to pass an official conformance test suite and
         | be certified by the Open Group to have passed it, in order to
         | call yourself "Unix", rather than just being Unix-like.
         | 
         | Technically, Unix certification and POSIX certification are
         | separate, you can certify as either.
         | 
         | Unix certification:
         | https://www.opengroup.org/openbrand/register/
         | 
         | POSIX certification: https://posix.opengroup.org/register.html
        
         | BoingBoomTschak wrote:
         | >such as MacOS, that are fully compliant with the POSIX
         | standard
         | 
         | Until you have to gets your hands dirty and find small and
         | bigger faults everywhere. For example, /bin/sh defaults to
         | their ancient (last GPL2 release) bash that doesn't work
         | properly in these two parameter expansion cases:
         | $ cat test.sh       var=       echo "${var+{\}}"       cat
         | <<EOF       ${var+\"z\"}       EOF       $ /bin/sh test.sh
         | {\}       \"z\"       $ /bin/dash test.sh       {}       "z"
         | 
         | Second one bit me quite badly when doing heredocs to generate
         | JSON.
        
           | Karellen wrote:
           | Program^WCompliance testing can be a very effective way to
           | show the presence of bugs, but it is hopelessly inadequate
           | for showing their absence.
           | 
           | -- Edsger Dijkstra (ish)
        
           | eadmund wrote:
           | It really says something about how much Apple cares about
           | restricting its users' freedom versus implementing
           | functionality for those users that in 17 years they haven't
           | been bothered to either write their own /bin/sh, fix the ca.
           | 2007 bash they do ship or just ship a newer, GPLv3 bash.
           | 
           | And it really says something about how important it is to
           | license one's software under GPLv3 or similar!
        
             | icedchai wrote:
             | They basically want you to use zsh... It's been the default
             | shell for a while. If you want a newer version of bash,
             | install it yourself with brew or macports.
        
             | BoingBoomTschak wrote:
             | What's even more comical is that they also ship dash, as
             | shown in my example! But the reason why is obvious: people
             | using a /bin/sh shebang with bash features.
             | 
             | So I understand, but patching bash to fix the --posix mode
             | should still be done.
        
             | paulddraper wrote:
             | I think it's best to consider MacOS not having bash by
             | default.
             | 
             | (The OS shell of choice being zsh.)
        
             | glhaynes wrote:
             | That might hold more weight for me if it weren't the
             | easiest thing in the world to install bash! Like literally
             | `brew install bash` will do it, right? That way I'm not
             | reliant on Apple at all, which seems optimal when we're
             | talking about features they don't build and that aren't
             | their focus. I'm very happy to let Apple do the things
             | they're good at and the community do the things they're
             | good at.
        
           | foldr wrote:
           | Apple added /bin/dash in Catalina, and the intention is
           | probably to eventually to use dash as the implementation of
           | sh: https://scriptingosx.com/2020/06/about-bash-zsh-sh-and-
           | dash-....
           | 
           | As for why they haven't done it yet, I'd guess it's just to
           | preserve backward compatibility with old scripts that rely on
           | quirks of bash's sh compatibility mode.
        
             | lelandfe wrote:
             | Oh they added it to recovery too. Interesting.
        
           | kergonath wrote:
           | > Until you have to gets your hands dirty and find small and
           | bigger faults everywhere. For example, /bin/sh defaults to
           | their ancient
           | 
           | It's irrelevant. Neither POSIX nor the UNIX certification (or
           | being a descendant of the UNIXes of old like the BSDs)
           | requires a recent GNU userland (which is, as the name
           | implies, not UNIX).
        
             | Karellen wrote:
             | > > > such as MacOS, that are fully compliant with the
             | POSIX standard
             | 
             | > > Until you have to gets your hands dirty and find small
             | and bigger faults everywhere. For example, /bin/sh [...]
             | doesn't work properly in these two parameter expansion
             | cases:
             | 
             | > It's irrelevant. Neither POSIX nor the UNIX certification
             | [...] requires a recent GNU userland
             | 
             | Is it irrelevant?
             | 
             | If an implementation passes the conformance test suite, but
             | is buggy according to the text of the spec _in a way that
             | is not caught by the test suite_ , can one really say it's
             | "fully compliant with the POSIX standard"?
             | 
             | Is it the test suite that's the final arbiter of the POSIX
             | standard, or is the text of the spec? Because I thought
             | that the point of having a written spec, ratified by a
             | standards body, is that the text of the spec defines what
             | the spec is. It is the text of the spec that is submitted
             | to the standards body, after all, not the test suite.
        
           | postmodest wrote:
           | They dropped any utility that switched to GPLv3 because of
           | v3's infectious patent clause that would've put their patent
           | portfolio in danger.
        
         | tialaramex wrote:
         | We typically distinguish UNIX(r) which is everybody who has
         | money and wanted to say they're Unix, from just Unix, meaning
         | the things that in practice behave like Unix.
         | 
         | Money talks, so I'm confident that Apple will get to call their
         | mac OS UNIX(r) until they don't care regardless of whether in
         | any useful sense it's still Unix. On the other hand, regardless
         | of whether some organisation pays money to effect this, Linux
         | is still Unix and so is FreeBSD.
         | 
         | You've probably seen other situations in the real world where
         | the thing you actually care about is distinct from legal status
         | - because our social cues aren't tied to legal status. That
         | doesn't make the legal status worthless, but it is distinct -
         | Obergefell for example is a case where doubtless normal people
         | just accepted that these guys are married - there was a
         | ceremony and everything, but in Ohio at the time the asserted
         | legal status was that they aren't married, therefore the death
         | certificate claims otherwise and hence the case in front of the
         | Supreme Court.
        
           | krylon wrote:
           | Apparently Oracle has stopped caring, new Solaris releases
           | haven't been certified in a few years, says Wikipedia.
           | 
           | I don't really know what the certification gets you these
           | days other than bragging rights. I imagine in the past,
           | government and corporate customers had check lists that
           | included a box for "certified Posix", but I'm not sure if
           | that is still the case.
        
             | mtillman wrote:
             | It is/was a useful credential to have when responding to
             | government RFPs as governments had purchased UNIX systems
             | and wanted new systems to be interoperable. This might no
             | longer be an advantage in most requests but my guess is
             | there are still some that require it.
        
           | graemep wrote:
           | There is another meaning. Derived from originally Unix code:
           | so MacOS and FreeBSD are Unix, while Linux is not.
        
           | znpy wrote:
           | > We typically distinguish UNIX(r) which is everybody who has
           | money and wanted to say they're Unix, from just Unix, meaning
           | the things that in practice behave like Unix.
           | 
           | From what i've seen Apple gets every Mac Os release UNIX-
           | certified, which is somewhat cool.
           | 
           | But frankly, is it of any actual relevance ? Nowadays it's
           | gnu/linux in (probably) 95-98% of the industry and the rest
           | is likely to be shared across FreeBSD and a few other
           | players.
           | 
           | But in general, I'd say any "POSIX implementation" that's not
           | been certified should not be taken any seriously: as an
           | example, i had a friend that was working with the Zephyr RTOS
           | which claimed to have some kind of posix compliance... Except
           | it wasn't full and it broke in subtle ways. Still a good RTOS
           | (it seems, not my area of expertise) but the "posix compliat"
           | claim should be taken with many grains of salt probably.
        
             | sillywalk wrote:
             | Certified Unix. The source link has more details:
             | Apple Inc.: macOS version 14.0 Sonoma on Apple silicon-
             | based Mac computers              Apple Inc.: macOS version
             | 14.0 Sonoma on Intel-based Mac computers              IBM
             | Corporation: z/OS 3.1 or later with: z/OS 3.1 or later
             | Security Server and z/OS 3.1 or later C/C++ Compiler on IBM
             | Series Processors that support z/OS Version 3.1 or later
             | IBM Corporation: AIX version 7, at 7.2 TL5 (or later) on
             | systems using CHRP system architecture with POWER(tm)
             | processors              IBM Corporation: AIX version 7, at
             | either 7.1 TL5 (or later) or 7.2 TL2 (or later) on systems
             | using CHRP system architecture with POWER(tm) processors
             | Hewlett Packard Enterprise: HP-UX 11i V3 Release B.11.31 or
             | later on HP Integrity Servers              IBM Corporation:
             | AIX 6 Operating System V6.1.2 with SP1 or later on Systems
             | using CHRP system architecture with POWER(tm) processors
             | and 2, 8 or 128 port async cards              IBM
             | Corporation: AIX 5L for POWER V5.3 dated 7-2006 or later on
             | Systems using CHRP system architecture with
             | POWER(tm)processors              IBM Corporation: z/OS V2R1
             | or later with: z/OS V2R1 or later Security Server and z/OS
             | V2R1 or later C/C++ Compiler on IBM zSeries Processors that
             | support z/OS Version 2 Release 1 or later              The
             | SCO Group, Inc.: UnixWare (r) 7.1.3 and later for single
             | and multiprocessor systems based on IA-32 and compatible
             | processors and conforming to PC architecture
             | The SCO Group, Inc.: SCO OpenServer Release 5 and
             | OpenServer Release 6 on Single and Multi-processor Industry
             | Standard Intel architecture platforms
             | 
             | Source: https://www.opengroup.org/openbrand/register
        
             | vorakl wrote:
             | > the Zephyr RTOS which claimed to have some kind of posix
             | compliance...
             | 
             | The work is still in progress. It's also important to note,
             | that Zephyr is intended to run on resource-constrained
             | systems. There is not much logic in implementing fork() for
             | example, since technically, there is only one process. So
             | it implements a subset of the interface. Here is the link
             | to the talk from the EOSS 2024 where Chris Friedt shares
             | the current state of POSIX support in Zephyr:
             | https://www.youtube.com/watch?v=nLnmXxXuS6w
        
         | chasil wrote:
         | > The current POSIX standard defines source code-level
         | compatibility for only two programming languages: The C
         | language (C99) and the command language (shell).
         | 
         | AWK is also defined in the standard.
         | 
         | Yes, subtleties are lost here.
        
           | chasil wrote:
           | sed is also a Turing-complete language.
        
             | vorakl wrote:
             | Interesting! I just wonder... How would you do a
             | conditional branching in sed?
        
           | vorakl wrote:
           | It's a good point! I've addressed it.
           | 
           | I referred here to the following definition:
           | 
           | "2.4 Other Language-Related Specifications POSIX.1-2017 is
           | currently specified in terms of the shell command language
           | and ISO C. Bindings to other programming languages are being
           | developed."
           | 
           | But, you are definitely right that some of the tools, defined
           | as standard "utilities", such as AWK, also have their own
           | language. Although, it is only defined in the "utilities"
           | section, https://pubs.opengroup.org/onlinepubs/9699919799/uti
           | lities/a... However, "sh" is also defined under "utilities",
           | although it has an extensive language specification that is
           | provided as a separate document.
        
         | frizlab wrote:
         | macOS is UNIX certified AFAICT though
         | https://www.opengroup.org/openbrand/register/
        
         | RobotToaster wrote:
         | It's funny that EulerOS is a GNU/Linux distro that is unix
         | certified, despite GNU standing for "Gnu's not UNIX".
        
         | squarefoot wrote:
         | > So there could be (and likely are) implementations out there
         | which are fully compliant with the standard, but have not
         | chosen to get certified, and are therefore technically still
         | "not Unix".
         | 
         | I'm not sure about certification, as compliance was mandated by
         | the US Govt so there may have been one, but Windows NT had its
         | POSIX API layer which I used ages ago to port some Unix network
         | code to it just by changing a couple lines. No tools or
         | anything else, that is, one didn't have a POSIX shell or any
         | usual Unix tool, but the way to say open a socket and initiate
         | network traffic was pretty much the same.
        
         | vorakl wrote:
         | Thanks for pointing this out! I have addressed this important
         | detail.
        
       | CoastalCoder wrote:
       | I really appreciate that at the top of the article, the author
       | has a link to a bulleted summary of the article.
       | 
       | It's a classy move: it shows respect for the readers' time.
        
       | rurban wrote:
       | It's missing all the anti facts, why the Unix Haters handbook
       | exists. https://archive.org/details/TheUnixHatersHandbook/
       | 
       | Horrible libc (strings, blocking IO, threads, locale, ...), why
       | all our systems are catastrophically bloated and insecure.
       | Garbage in, garbage out, the tagline of modern unix.
        
         | Gibbon1 wrote:
         | Why you don't have an alt libc that takes safe strings is
         | beyond me.
        
       ___________________________________________________________________
       (page generated 2024-04-30 23:02 UTC)