O POSIX é uma descrição de como os aplicativos implementaram cada parte específica do UNIX no passado ou é uma norma prescritiva de como o UNIX deve ser implementado?
Se for descritivo, apenas os recursos comuns a todas as implementações incluídas seriam válidos. Embora qualquer implementação não tenha implementado um recurso, esse recurso é "indefinido".
Se prescritivo: Em que quadro teórico se baseia? Matemática? Linguagem C? Experiência?
Responder1
É prescritivode direito, mas principalmente descritivode fato.
POSIX é um conjunto de especificações com as quais as implementações podem ser comparadas, incluindo implementações que já existem quando o documento é publicado e implementações futuras. Então é prescritivo.
Na prática, o POSIX começou principalmente como um subconjunto comum de implementações existentes. Então, nesse sentido, é principalmente descritivo. Mas o POSIX às vezes exige um novo comportamento. Mais comumente, para recursos que existiam em muitas implementações, mas com interfaces diferentes (nomes de funções, opções de linha de comando, etc.), o POSIX introduziu diversas funções e utilitários, comopax
(um substituto para tar
e cpio
, que eram muito diferentes nas variantes do Unix) e váriosposix_xxx
funções. O POSIX também introduziu novas opções de constantes e de linha de comando; por exemplo, paraps
, “A -A
opção é equivalente ao BSD -g
e ao SVID -e
. Como os dois sistemas eram diferentes, foi selecionado um compromisso mnemônico.”. As seções de justificativa geralmente explicam por que este ou aquele recurso foi incluído, muitas vezes mencionando quais implementações já tinham um recurso ou por que uma escolha foi feita ou não entre implementações incompatíveis.
Responder2
A intenção do POSIX é descrever o comportamento existente e não quebrar o comportamento histórico (não tornar o UNIX histórico não compatível), a menos que o comportamento histórico já possa ser visto como um bug histórico definitivo.
A intenção adicional do POSIX não é introduzir invenção própria. Se se verificar que haveria necessidade da chamada invenção própria (porque as implementações existentes não são úteis para uma padronização), as ideias do comité POSIX são discutidas com os autores de várias versões do UNIX (ou programa), a fim de obter a melhor solução. Tal discussão frequentemente resulta em novas implementações que apoiam a proposta final no momento em que já estão escritas.
Existem algumas exceções, por exemplo, POSIX definidas getpgrp()
e setpgrp()
de uma forma que está em conflito com as interfaces BSD que já existiam 10 anos antes. POSIX definido getline()
e fexec()
de uma forma completamente incompatível com implementações que existiram por quase 30 anos antes da introdução das interfaces incompatíveis da GNU libc.
Se se verificar que as implementações existentes não correspondem, é tomada uma decisão sobre qual variante é usada (ou se uma mistura de diferentes implementações existentes é introduzida) e um nome específico posix é introduzido. Isto aconteceu, por exemplo, para as interfaces de thread, onde posix_xxx()
foram introduzidas funções que são muito semelhantes à implementação de referência anterior de Roger Faulkner (Sun Microsystems).