O que exatamente é o POSIX?

139

Vejo o POSIX mencionado com frequência e em qualquer lugar, e supus que fosse o padrão UNIX de linha de base ... até que notei o seguinte trecho em uma página da Wikipedia: The Open Group

O Open Group é mais famoso como o organismo de certificação da marca registrada UNIX e sua publicação do padrão técnico Single UNIX Specification , que estende os padrões POSIX e é a definição oficial de um sistema UNIX .

Se a definição oficial de um sistema UNIX é uma extensão do POSIX, o que exatamente é o POSIX? ,,, Certamente parece ser uma pedra de toque do mundo UNIX, mas não sei como ele se encaixa na imagem geral.

Peter.O
fonte
2
SUS é a definição oficial do UNIX, uma vez que o The Open Group, e não o IEEE, possui a marca comercial do UNIX. Veja minha resposta abaixo.
penguin359

Respostas:

125

O POSIX foi o primeiro padrão em 1988, muito antes da Especificação UNIX Única. Foi uma das tentativas de unificar todos os vários garfos do UNIX e sistemas semelhantes ao UNIX. POSIX é um padrão IEEE, mas como o IEEE não possui a marca registrada UNIX®, o padrão não é o UNIX®, embora seja baseado na API UNIX existente naquele momento. O primeiro padrão POSIX.1 é formalmente conhecido como IEEE std 1003.1-1988. [ 1 ] O IEEE cobrou uma taxa substancial para obter uma cópia do padrão.

O Open Group lançou a Single UNIX Specification (SUSv2) em 1997, com base no trabalho do IEEE sobre o padrão POSIX. O SUSv3 foi lançado em 2001 a partir de um grupo de trabalho conjunto entre o IEEE e o The Open Group, conhecido como Austin Group. O SUSv3 também é conhecido como POSIX: 2001 [ 2 ]. Agora também existe o POSIX: 2004 e o POSIX: 2008, que é o núcleo do SUSv4. Quanto ao que é UNIX®, UNIX® é o que o atual proprietário da marca registrada diz ser. Desde 1994, esse é o The Open Group.

A Novell adquiriu o negócio de sistemas UNIX® da AT & T / USL, onde nasceu o UNIX®. Em 1994, eles venderam o direito à marca UNIX® para o X / Open [ 3 ], agora conhecido como The Open Group. Eles então venderam o código-fonte UNIX® para a SCO como UNIXWARE®. [ 3 ] O próprio UNIX® bifurcou-se muitas vezes [ 4 ] [ 5 ] em parte devido ao modelo de licenciamento da AT&T. A compra do UNIX® deu a você a fonte completa do sistema operacional e toda a cadeia de ferramentas para construí-lo. As modificações na fonte podem ser distribuídas e usadas por qualquer pessoa que possua uma licença para o UNIX® da AT&T. A taxa de licença estava na casa dos milhares.

O BSD foi um projeto em Berkeley que adicionou vários aprimoramentos ao sistema operacional UNIX®. O código BSD foi lançado sob uma licença muito mais liberal do que a fonte da AT&T e não exigia que uma taxa de licença ou mesmo um requisito fossem distribuídos com a fonte, ao contrário da GPL que o GNU Project e o Linux usam. Isso fez com que boa parte do código BSD fosse incluída em vários garfos comerciais do UNIX. Por volta de 4.3BSD, eles quase substituíram qualquer necessidade do código-fonte original da AT&T UNIX®. O FreeBSD / NetBSD / OpenBSD são todos os garfos do 4.3BSD que são um sistema operacional completo e não possuem o código-fonte original da AT&T. Eles também não têm direito à marca comercial UNIX®, mas grande parte de seu código é usado pelos sistemas operacionais comerciais UNIX.

O Linux foi desenvolvido em 1991, mas foi desenvolvido do zero, diferentemente do BSD, e usa o projeto GNU existente, que é uma implementação de sala limpa de grande parte do espaço do usuário UNIX. Ele implementa grande parte do POSIX para compatibilidade e é semelhante ao UNIX no design, mas não possui uma conexão estreita com a AT&T ou UNIX® que os BSDs possuem.

penguin359
fonte
1
Uma ótima resposta .. todas (3) respostas foram boas, mas essa foi extremamente informativa (especialmente depois de ter sido preparada pelas outras 2); exatamente o que eu precisava ... e obrigado pelo comentário (abaixo do corpo da pergunta) sobre o SUS, eu o entendo bem o suficiente agora, obrigado ... (e eu não percebi que era apenas um parágrafo ... Era demais :) interessante
Peter.O
2
@Mikel espero que a minha edição ajuda um pouco
penguin359
1
Essa é uma resposta fantástica lá @ penguin359!
boehj
Alguém tem uma boa idéia do que o X significa? Se é apenas um sufixo para indicar uma relação com o Unix, não deveria estar em minúsculas?
Alex W
Excelente. Obrigado. Estive em computação durante grande parte dessa história, mas os detalhes "fofoqueiros" de como as coisas aconteciam não eram algo em que eu me concentrei. Bom ver a trilha.
Ken Ingram
55

Coisas mais importantes que o POSIX 7 define

  1. API C

    Estende bastante o ANSI C com coisas como:

    • mais operações de arquivo: mkdir, dirname, symlink, readlink, link(hardlinks), poll(), stat, sync,nftw()
    • processo e tópicos: fork, execl, wait, pipe, semaphors sem_*, memória compartilhada ( shm_*), kill, parâmetros de programação ( nice, sched_*), sleep, mkfifo,setpgid()
    • rede: socket()
    • gerenciamento de memória: mmap, mlock, mprotect, madvise,brk()
    • utilitários: expressões regulares ( reg*)

    Essas APIs também determinam os conceitos subjacentes do sistema dos quais dependem, por exemplo, forkexigem o conceito de um processo.

    Muitas chamadas de sistema Linux existem para implementar uma função específica API POSIX C e tornar o Linux compatível, por exemplo sys_write, sys_read... Muitos desses syscalls também têm extensões específicas do Linux no entanto.

    Principal implementação do desktop Linux: glibc, que em muitos casos apenas fornece um invólucro superficial para chamadas do sistema.

  2. Utilitários CLI

    Por exemplo: cd, ls, echo, ...

    Muitos utilitários são front-ends diretos do shell para uma função correspondente da API C, por exemplo mkdir.

    Maior Linux aplicação de desktop: GNU Coreutils para os pequenos, projetos GNU separadas para os grandes: sed, grep, awk, ... Alguns utilitários CLI são implementadas por Bash como built-ins .

  3. Idioma do shell

    Por exemplo, a=b; echo "$a"

    Grande implementação de desktop Linux: GNU Bash .

  4. Variáveis ​​ambientais

    Por exemplo: HOME, PATH.

    PATH a semântica de pesquisa é especificada , incluindo como as barras impedem a PATHpesquisa .

  5. Status de saída do programa

    O ANSI C diz 0ou EXIT_SUCCESSpara o sucesso, EXIT_FAILUREpara a falha e deixa a implementação restante definida.

    O POSIX adiciona:

  6. Expressão regular

    Existem dois tipos: BRE (Básico) e ERE (Estendido). O básico foi descontinuado e mantido apenas para não quebrar as APIs.

    Essas são implementadas pelas funções da API C e usadas nos utilitários da CLI, por exemplo, grepaceitam BREs por padrão e EREs com -E.

    Por exemplo: echo 'a.1' | grep -E 'a.[[:digit:]]'

    Grande implementação do Linux: glibc implementa as funções sob regex.h que programas como greppodem usar como back-end.

  7. Estrutura do diretório

    Por exemplo: /dev/null,/tmp

    O Linux FHS estende bastante o POSIX.

  8. Nomes de arquivos

    • / é o separador de caminho
    • NUL não pode ser usado
    • .é cwd, ..pai
    • nomes de arquivos portáteis
      • use no máximo 14 caracteres e 256 no caminho completo
      • pode conter apenas: a-zA-Z0-9._-

    Consulte também: https://stackoverflow.com/questions/18550253/what-is-posix-compliance-for-filesystem

  9. Convenções de API do utilitário de linha de comando

    Não obrigatório, usado pelo POSIX, mas quase em nenhum outro lugar, principalmente no GNU. Mas é verdade que é muito restritivo, por exemplo, apenas sinalizadores de letra única (por exemplo -a), não há versões longas com hífen duplo (por exemplo --all).

    Algumas convenções amplamente usadas:

    • - significa stdin onde um arquivo é esperado
    • --termina sinalizadores, por exemplo, ls -- -lpara listar um diretório chamado-l

    Consulte também: https://stackoverflow.com/questions/8957222/are-there-standards-for-linux-command-line-switches-and-arguments

  10. "ACLs POSIX" (Listas de controle de acesso), por exemplo, usadas como back-end setfacl.

    Isso foi retirado, mas foi implementado em vários sistemas operacionais, inclusive no Linux comsetxattr .

Quem está em conformidade com o POSIX?

Muitos sistemas seguem o POSIX de perto, mas poucos são realmente certificados pelo Open Group, que mantém o padrão. Os certificados notáveis ​​incluem:

A maioria das distribuições Linux é muito compatível, mas não é certificada porque não deseja pagar a verificação de conformidade. O K-UX da Inspur e o EulerOS da Huawei são dois exemplos certificados.

A lista oficial de sistemas certificados pode ser encontrada em: https://www.opengroup.org/openbrand/register/ e também na página wiki .

janelas

O Windows implementou o POSIX em algumas de suas distribuições profissionais.

Como era um recurso opcional, os programadores não podiam confiar nele para a maioria dos aplicativos do usuário final.

O suporte foi preterido no Windows 8:

Em 2016, uma nova API oficial semelhante ao Linux chamada "Windows Subsystem for Linux" foi anunciada. Ele inclui chamadas de sistema Linux, ELF em execução, partes do /procsistema de arquivos, Bash, GCC (TODO provavelmente glibc?) apt-getE muito mais: https://channel9.msdn.com/Events/Build/2016/P488, por isso acredito que permitirá que o Windows execute grande parte, se não todos, do POSIX. No entanto, ele é focado em desenvolvedores / implantação em vez de usuários finais. Em particular, não havia planos para permitir o acesso à GUI do Windows.

Visão geral histórica da compatibilidade oficial do Microsoft POSIX: http://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-posix-subsystem/

Cygwin é um projeto de terceiros da GPL bem conhecido por "fornecer uma funcionalidade substancial da API POSIX" para Windows, mas requer que você "reconstrua seu aplicativo a partir da fonte, se quiser que ele seja executado no Windows". O MSYS2 é um projeto relacionado que parece adicionar mais funcionalidades ao Cygwin.

Android

O Android tem sua própria biblioteca C (Bionic), que não suporta totalmente o POSIX a partir do Android O: https://stackoverflow.com/questions/27604455/is-android-posix-compatible

Nível de bônus

A base padrão do Linux estende ainda mais o POSIX.

Use os índices que não são de quadros, eles são muito mais legíveis e pesquisáveis: http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html

Obtenha uma versão compactada completa das páginas HTML para grepping: https://stackoverflow.com/questions/453993/is-there-a-listing-of-the-posix-api-functions/45832939#45832939

Ciro Santilli adicionou uma nova foto
fonte
A pergunta era sobre o POSIX e o SUS, mas essa resposta não menciona o SUS ...
Kidburla 6/17
1
@Kidburla uma grande oportunidade para adicionar a sua própria resposta e obter algum :-) representante (ou editá-lo para o meu e me dar rep hehe)
Ciro Santilli新疆改造中心法轮功六四事件
@ phuclv obrigado, eu adicionei isso à resposta.
Ciro Santilli escreveu:
16

POSIX é o padrão do sistema operacional portátil. Ele descreve certos utilitários, APIs e serviços que um sistema operacional compatível deve fornecer ao software (por exemplo, soquetes, E / S de arquivo e encadeamento), além de convenções sobre como elas devem ser chamadas de um programa.

A idéia é que um programa criado para um sistema operacional compatível com POSIX seja mais fácil de portar para outro sistema operacional compatível com POSIX do que com a portabilidade entre sistemas operacionais não compatíveis com POSIX. É por isso que é muito mais fácil portar um aplicativo do, digamos, FreeBSD para Linux do que portá-lo do FreeBSD para o Windows (embora o Windows suporte ostensivamente um subconjunto do POSIX).

Andrew Lambert
fonte
14

POSIX é um subconjunto do UNIX que se destina a cobrir vários ambientes semelhantes ao Unix para outros sistemas operacionais; isso originalmente incluía ambientes como o Eunice for VMS, a personalidade POSIX do Windows NT e o Apollo Domain / OS. Você pode pensar nisso como uma API de portabilidade padrão para o subconjunto de serviços do sistema operacional cujo comportamento é comum entre Unix e não Unix. Veja http://standards.ieee.org/develop/wg/POSIX.html para mais informações.

geekosaur
fonte
Eu li mais sobre isso agora, e certamente parece que o Uinx era a galinha e o POSIX era o ovo ... mas eu me pergunto se o UNIX ainda governa o poleiro ... ou seja, o POSIX tem vida própria agora, e o UNIX deve estar em conformidade com o POSIX? ... btw. parece que o nome POSIX foi coinded por Richard Stallman ....
Peter.O
@ fred.bear: Resposta curta: UNIX (a marca comercial) deve estar em conformidade com POSIX; O Unix (o produto) foi a principal base do POSIX; os departamentos (a família de sistemas operacionais) estão em conformidade, mas têm mais em comum. Veja Linux é um Unix? e o Mac OS X, UNIX? para discussões relacionadas.
Gilles
@ fred-ter Muitas pessoas argumentam que o padrão POSIX é hoje guiada pela comunidade de desenvolvimento do kernel Linux, que (se for verdade) IMHO não é uma coisa boa ...
sakisk
1
@faif Eu nunca ouvi isso e acho improvável, você pode postar uma referência?
precisa saber é o seguinte
2
@Gilles O Open Group, proprietário da marca comercial UNIX® também é responsável pela certificação e especificação UNIX®, que eles chamam de Single UNIX Specification ou SUS. O POSIX é desenvolvido pelo IEEE que não é responsável pelo UNIX®. Desde 2001, eles foram desenvolvidos amplamente em sincronia, mas tecnicamente o SUS, agora na versão 4, definiu o UNIX®.
precisa saber é o seguinte