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.
Respostas:
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.
fonte
Coisas mais importantes que o POSIX 7 define
API C
Estende bastante o ANSI C com coisas como:
mkdir
,dirname
,symlink
,readlink
,link
(hardlinks),poll()
,stat
,sync
,nftw()
fork
,execl
,wait
,pipe
, semaphorssem_*
, memória compartilhada (shm_*
),kill
, parâmetros de programação (nice
,sched_*
),sleep
,mkfifo
,setpgid()
socket()
mmap
,mlock
,mprotect
,madvise
,brk()
reg*
)Essas APIs também determinam os conceitos subjacentes do sistema dos quais dependem, por exemplo,
fork
exigem 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.
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 .Idioma do shell
Por exemplo,
a=b; echo "$a"
Grande implementação de desktop Linux: GNU Bash .
Variáveis ambientais
Por exemplo:
HOME
,PATH
.PATH
a semântica de pesquisa é especificada , incluindo como as barras impedem aPATH
pesquisa .Status de saída do programa
O ANSI C diz
0
ouEXIT_SUCCESS
para o sucesso,EXIT_FAILURE
para a falha e deixa a implementação restante definida.O POSIX adiciona:
126
: comando encontrado, mas não executável.127
: comando não encontrado.> 128
: terminado por um sinal.Mas o POSIX parece não especificar a
128 + SIGNAL_ID
regra usada pelo Bash: Código de saída padrão quando o processo é finalizado?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,
grep
aceitam 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
grep
podem usar como back-end.Estrutura do diretório
Por exemplo:
/dev/null
,/tmp
O Linux FHS estende bastante o POSIX.
Nomes de arquivos
/
é o separador de caminhoNUL
não pode ser usado.
écwd
,..
paia-zA-Z0-9._-
Consulte também: https://stackoverflow.com/questions/18550253/what-is-posix-compliance-for-filesystem
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 -- -l
para listar um diretório chamado-l
Consulte também: https://stackoverflow.com/questions/8957222/are-there-standards-for-linux-command-line-switches-and-arguments
"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 com
setxattr
.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
/proc
sistema de arquivos, Bash, GCC (TODO provavelmente glibc?)apt-get
E 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
fonte
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).
fonte
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.
fonte