O que é POSIX? Por que isso importa para usuários do Linux/UNIX?

O que é POSIX? Por que isso importa para usuários do Linux/UNIX?

Você pode ter se deparado com o termo POSIX. Você já se perguntou o que é e por que os programadores frequentemente discutem a conformidade com POSIX?

Você ouvirá a sigla, ou lerá sobre isso: POSIX, em diferentes lugares e artigos online. Programadores e desenvolvedores de sistemas parecem se preocupar mais com isso. Pode soar misterioso e, embora existam muitas boas fontes sobre o assunto, alguns fóruns de discussão (a brevidade faz parte de sua natureza), não entram em detalhes sobre o que é e isso pode levar à confusão. O que, então, é POSIX, realmente?

O que é POSIX?

POSIX não é realmente uma coisa. Ele descreve uma coisa – muito parecida com um rótulo. Imagine uma caixa rotulada: POSIX, e dentro da caixa é um padrão. Uma norma consiste em conjuntos de regras e instruções com as que o POSIX se preocupa. POSIX é abreviação para Portable Operating System Interface (Interface do sistema operacional portável). É um padrão IEEE 1003.1 que define a interface de linguagem entre programas de aplicativos (juntamente com shell de linha de comando e interfaces de utilitários) e o sistema operacional UNIX.

A conformidade com a norma garante compatibilidade quando os programas UNIX são movidos de uma plataforma UNIX para outra. O foco do POSIX está principalmente nos recursos do Sistema V UNIX da AT&T e do BSD UNIX.

Uma norma deve ser explicitada e seguida por regras sobre como alcançar o objetivo de interoperabilidade entre sistemas operacionais. O POSIX cobre coisas como: Interfaces do sistema e comandos e utilitários, acesso a arquivos de rede, apenas para citar alguns – há muito mais sobre POSIX do que isso.

Por que POSIX?

Em uma palavra: portabilidade.

Há mais de 60 anos, os programadores tinham que reescrever o código completamente se quisessem que seu software fosse executado em mais de um sistema. Isso não dava muito certo devido às despesas envolvidas, mas a portabilidade tornou-se uma característica em meados da década de 1960 – não através do POSIX – mas na arena de mainframes.

A IBM introduziu a família System/360 de computadores mainframe. Modelos diferentes tinham suas especializações únicas, mas o hardware era tal que eles poderiam usar o mesmo sistema operacional: OS/360.

Não só o sistema operacional poderia funcionar em modelos diferentes, os aplicativos poderiam ser executados neles também. Isso não só manteve os custos baixos, mas criou sistemas de computador – sistemas em uma linha de produtos que poderiam trabalhar juntos. É tudo comum hoje em dia – redes e sistemas, mas naquela época, isso era um grande negócio!

ibm system 360 imagem vintage

IBM System 360 | Crédito da imagem: IBM

Quando o UNIX surgiu, na mesma época, também mostrou-se promissor em que poderia operar em máquinas de diferentes fabricantes. No entanto, quando o UNIX começou a bifurcar em diferentes sabores, o código de portabilidade através dessas variantes UNIX tornou-se difícil. A promessa de portabilidade UNIX estava perdendo terreno.

Para resolver esse problema de portabilidade, o POSIX foi formado na década de 1980. O padrão foi definido com base no Sistema V UNIX da AT&T e no BSD UNIX, as duas maiores variantes da época. É importante notar que o POSIX não foi formado para controlar como os sistemas operacionais eram construídos – qualquer empresa estava livre para projetar sua variante UNIX da maneira que quisesse. O POSIX só estava preocupado com a forma como um aplicativo interage com o sistema operacional. Em linguagem de programador, uma interface é o método que o código de um programa pode se comunicar com outro programa. A interface espera que o Programa A forneça um tipo específico de informação ao Programa B. Da mesma forma, o Programa A espera que o Programa B responda com um tipo específico de dados.

Por exemplo, se eu quiser ler um arquivo usando o comando cat, eu digitaria algo assim na linha de comando:

cat myfile.txt

Sem entrar em muitos detalhes de programador, só vamos dizer que o comando cat faz uma chamada para o sistema operacional para buscar o arquivo para que o cat possa lê-lo. cat lê e, em seguida, exibe o conteúdo do arquivo na tela. Há muita interação entre o aplicativo (cat) e o sistema operacional. Como essa interação funciona é o que POSIX estava interessado. Se a interação pode ser a mesma entre as diferentes variantes UNIX, a portabilidade – independentemente do sistema operacional, fabricante e hardware – é recuperada.

As especificidades de como tudo isso é realizado são definidas no padrão.

Compliance é voluntário

Todos nós já vimos uma mensagem como, "para ajuda, digite: xxxxx --help". Isso é comum no Linux e não é compatível com POSIX. POSIX nunca precisou do traço duplo, ele espera um traço. O traço duplo vem do GNU, no entanto, ele não prejudica o Linux e adiciona um pouco ao seu caráter. Ao mesmo tempo, o Linux é mais compatível, especialmente quando se trata de interfaces de chamada do sistema. É por isso que somos capazes de executar aplicativos X, GNOME e KDE em Linux, Sys V UNIX e BSD UNIX. Vários comandos, como ls, cat, grep, find, awk, e muitos mais operam o mesmo nas diferentes variantes.

Como regra geral, a conformidade é um passo positivo. Quando o código é compatível, é mais fácil mover-se para outro sistema; muito pouco código reescrito, se houver, seria necessário. Quando o código pode funcionar em diferentes sistemas, o uso dele se expande. Pessoas que usam outros sistemas podem se beneficiar do uso do programa. Para o programador, aprender a escrever programas compatíveis com POSIX só pode ajudar sua carreira. Para aqueles leitores interessados na esfera Linux de compliance, muitas boas informações podem ser encontradas em: Linux Standard Base.

Mas eu não sou um programador ou designer de sistemas...

Muitas pessoas que trabalham em computadores não são programadores ou projetistas de sistemas operacionais. São secretários que escrevem cartas, listas de tarefas, memorandos ditados, e assim por diante. Outros tabulam números, coletam e tratam dados, executam lojas online, escrevem livros e artigos (e alguns de nós os lêem). Em quase todos os trabalhos, provavelmente há um computador por perto.

O POSIX também afeta esses usuários, quer eles saibam ou não. Os usuários não têm que cumprir a norma, mas esperam que seus computadores funcionem. Quando sistemas operacionais e programas estão de acordo com o padrão POSIX, eles ganham o benefício da interoperabilidade. Eles serão capazes de passar de um sistema para outro com a expectativa razoável de que as máquinas funcionarão muito como o outro. Seus dados ainda estarão acessíveis e ainda poderão fazer alterações nele.

O POSIX, assim como outros padrões, estão em constante evolução. À medida que a tecnologia cresce, o padrão também cresce. As normas são, na verdade, um sistema acordado usado por pessoas, fabricantes, organizações, etc. para executar tarefas de forma eficiente. Dispositivos de um fabricante são capazes de trabalhar com o dispositivo de outro fabricante. Pense nisso: seu fone de ouvido Bluetooth pode ser usado em um iPhone da Apple tão bem quanto pode em um telefone Android. Nossa TV pode conectar e transmitir vídeos e programas de diferentes redes, como Amazon Prime, BritBox, Hulu – apenas para citar alguns. Agora, podemos até monitorar a frequência cardíaca com nossos telefones. Tudo isso é possível, em parte, pelo cumprimento das normas.

E o X?

Afinal, não expicamos o que significa o "X" no POSIX. Opensource.com tem um excelente artigo onde Richard Stallman explica o que o "X" em POSIX significa. Aqui está, em suas palavras:

o IEEE tinha terminado de desenvolver a especificação, mas não tinha nome conciso para ela. O título dizia algo como "interface portável de sistema operacional", embora eu não me lembre das palavras exatas. O comitê colocou "IEEEIX" como nome conciso. Não achei que fosse uma boa escolha. É feio pronunciar - soaria como um grito de terror, "Ayeee!" — então eu esperava que as pessoas, em vez disso, chamassem a especificação de "Unix". Como o Não Unix do GNU, e era para substituir o Unix, eu não queria que as pessoas chamassem a GNU de "sistema Unix". Eu, portanto, propus um nome conciso que as pessoas poderiam realmente usar. Sem inspiração particular, eu gerei um nome do jeito tio: peguei as iniciais do "sistema operacional portátil" e adicionei "ix". O IEEE adotou isso ansiosamente.

Conclusão

O padrão POSIX permite que os desenvolvedores criem aplicativos, ferramentas e plataformas em muitos sistemas operacionais usando grande parte do mesmo código. Não é um requisito, por qualquer meio, escrever código de acordo com a norma, mas ajuda, em grande estilo, quando você quer portar seu código para outros sistemas.

Basicamente, o POSIX é voltado para projetistas de sistemas operacionais e desenvolvedores de software, mas como usuários de um sistema, somos afetados pelo POSIX, quer possamos perceber ou não. É por causa do padrão que somos capazes de trabalhar em um sistema UNIX ou Linux e trazer esse trabalho para outro sistema e trabalhar nele sem problemas. Como usuários, ganhamos inúmeros benefícios em usabilidade e reutilização de dados em todos os sistemas.

Última atualização deste artigo: 16 de september de 2022