O Linux é compatível com POSIX?

Is Linux Posix Compliant



O software é escrito por vários desenvolvedores com várias origens. Algoritmos gerais estão disponíveis sob uma licença gratuita ou foram publicados cientificamente, e também podem estar disponíveis gratuitamente para fins de estudo. Isso resulta em diferentes implementações e versões de software que atendem a uma variedade de necessidades. Uma padronização de interfaces e formatos de dados é necessária para tornar essas diferentes implementações intercambiáveis ​​e modulares.

Resumindo, POSIX [1] faz exatamente isso para sistemas UNIX e semelhantes (veja o artigo de Zak H [4] para uma história mais detalhada sobre este tópico). Ele define as interfaces de troca, mecanismos de chamada e dados transferidos para o software, mas deixa a implementação interna para o desenvolvedor ou mantenedor do software. O objetivo é unificar todos os vários forks UNIX e sistemas semelhantes ao UNIX de forma que diferentes implementações de software possam interagir umas com as outras. A principal vantagem do POSIX é ter uma documentação de ligação para esses componentes - interfaces, mecanismos e dados - disponível na forma escrita.







Um sistema operacional que segue o padrão POSIX em sua totalidade é classificado como compatível com POSIX. Neste artigo, explicamos o que POSIX significa, determinamos se o Linux pertence a esta categoria e listamos quais componentes Linux devem ser excluídos desta classificação.



O que significa o termo POSIX?

POSIX é uma abreviatura de Portable Operating System Interface. Conforme explicado brevemente acima, POSIX é o nome de uma coleção de padrões necessários para manter a compatibilidade entre os sistemas operacionais. Conforme declarado em [1], [ele] define a interface de programação de aplicativos (API), junto com shells de linha de comando e interfaces de utilitários, para compatibilidade de software com variantes do Unix e outros sistemas operacionais. A primeira versão do POSIX foi publicada em 1988. Desde então, o POSIX tem sido continuamente expandido e atualizado pelo Austin Common Standards Revision Group (também conhecido simplesmente como The Austin Group) [7].



A partir de 2021, o padrão POSIX contém as seguintes partes:





  1. Serviços essenciais (Incorpora o padrão ANSI C) (IEEE std 1003.1-1988) - Criação e controle de processos, sinais, operações de arquivo e diretório, tubos, biblioteca C, interface e controle de porta de E / S, gatilhos de processo
  1. Extensões (Links Simbólicos)
  2. Extensões em tempo real e I / O (IEEE Std 1003.1b-1993) - Agendamento de prioridade, sinais em tempo real, relógios e temporizadores, semáforos, passagem de mensagem, memória compartilhada, E / S assíncrona e síncrona, interface de bloqueio de memória
  3. Extensões de tópicos (IEEE Std 1003.1c-1995) - Criação, Controle e Limpeza de Thread, Agendamento de Thread, Sincronização de Thread, Tratamento de Sinal
  4. Mais extensões em tempo real
  5. Extensões de segurança (Listas de controle de acesso)
  1. Shell e utilitários (IEEE Std 1003.2-1992) - Intérprete de Comando, Programas Utilitários

A norma é revisada regularmente para refletir mudanças e melhorias técnicas. Às vezes, pode levar vários anos antes que uma nova versão seja publicada e as alterações sejam incorporadas. Isso pode ser desvantajoso, mas é compreensível dado o escopo do padrão.

Nos últimos anos, foram adicionadas extensões ao processamento em tempo real. A versão atual foi lançada no início de 2018 [3]. Os autores de SibylFS [5] também publicaram muitas anotações para o padrão POSIX para determinar lógicas e interações de ordem superior.



O que significa ser compatível com POSIX?

O termo compatível com POSIX significa que um sistema operacional atende a todos os critérios POSIX. Um sistema operacional pode executar programas UNIX nativamente ou um aplicativo pode ser transferido do sistema UNIX para outro sistema. Portar um aplicativo do UNIX para o sistema operacional de destino é fácil, ou pelo menos mais fácil, do que se não oferecer suporte a POSIX. Para estar no lado seguro, um sistema operacional deve ter obtido com sucesso a certificação POSIX [2]. Esta etapa é alcançada (com um custo) pela aprovação em um teste de certificação automatizado. O conjunto de testes correspondente pode ser encontrado aqui [11].

Em 2021, a lista de sistemas operacionais com certificação POSIX contém AIX da IBM, HP-UX da HP, IRIX da SGI, EulerOS [6] da Huawei, Mac OS X da Apple (desde 10.5 Leopard), Solaris e QNX Neutrino da Oracle, Inspur's K-UX [11] e o OS INTEGRITY em tempo real da Green Hills Software [15]. Atualmente não está claro se as versões mais recentes dos três sucessores do Solaris, OpenSolaris, Illumos e OpenIndiana, também são classificadas como totalmente compatíveis com POSIX. Esses sistemas operacionais eram compatíveis com POSIX até POSIX 2001.

Outros sistemas operacionais considerados em sua maioria (mas não totalmente) compatíveis com POSIX incluem Android, BeOS, FreeBSD, Haiku, Linux (veja abaixo) e VMWare ESXi. Para o Microsoft Windows, o Cygwin fornece um ambiente de desenvolvimento e tempo de execução amplamente compatível com POSIX.

O Linux é compatível com POSIX?

O termo Linux se refere a todo o sistema operacional Linux, independentemente do tipo, como Debian GNU / Linux, RedHat Linux, Linux Mint, Ubuntu Linux, Fedora e CentOS, por exemplo. Para ser preciso, Linux é apenas o nome do kernel que é o componente principal deste sistema operacional gratuito.

Como Linus Torvalds descreveu no livro Just For Fun [8], para desenvolver o kernel Linux, ele solicitou uma cópia do padrão POSIX. Isso o ajudou a implementar os mesmos mecanismos usados ​​em sistemas UNIX comerciais. Além disso, isso permitiu que ele vinculasse o kernel do Linux às ferramentas GNU que seguiam principalmente a mesma abordagem. Para ser justo, o software em um sistema Linux é fornecido por uma variedade de fontes que respeitam o padrão POSIX, mas que às vezes também implementam seus próprios conceitos. Ao mesmo tempo, no entanto, isso também mostra a diversidade que constitui o Linux como sistema operacional.

Um exemplo disso é a maneira como os argumentos da linha de comando são escritos. Argumentos com dois traços (por exemplo, –help) são convenções GNU, enquanto os comandos POSIX nunca usam argumentos de dois traços, mas apenas um único (por exemplo, -help). Desde o início, o Linux foi projetado com GNU em mente, e é por isso que os comandos contêm o estilo GNU

argumentos. Para atingir a conformidade com POSIX, argumentos de estilo POSIX foram adicionados passo a passo. Ainda assim, a decisão final é do desenvolvedor. A partir de hoje, a maioria dos comandos aceita argumentos curtos e longos, ou mesmo argumentos sem travessões, como o comando find, por exemplo. Para ser justo, não há consistência entre os comandos em um sistema, e isso pode ser um problema quando você pretende usar o mesmo comando em um sistema baseado em UNIX diferente, particularmente ao alternar entre Linux, OS X e Solaris.

Por enquanto, o Linux não é certificado pelo POSIX devido aos altos custos, exceto para as duas distribuições comerciais do Linux, Inspur K-UX [12] e Huawei EulerOS [6]. Em vez disso, o Linux é visto principalmente como compatível com POSIX.

Esta avaliação se deve ao fato de que as principais distribuições do Linux seguem o Linux Standard Base (LSB) ao invés do POSIX [9]. O LSB visa minimizar as diferenças entre as distribuições individuais do Linux [14]. Isso se refere à estrutura do sistema de software, incluindo o Filesystem Hierarchy Standard (FHS) usado no kernel do Linux. O LSB é baseado na especificação POSIX, na Single UNIX Specification (SUS) [10] e em vários outros padrões abertos, mas também os estende em certas áreas.

Distribuições de Linux baseadas em LSB incluem RedHat Linux, Debian GNU / Linux (2002-2015) e Ubuntu (até 2015), para citar alguns.

Desenvolvendo com POSIX em mente

Para entender o POSIX em mais detalhes, recomendamos obter uma cópia do padrão POSIX e lê-lo na íntegra. Você pode obter o livro no site do Open Group. Isso requer uma taxa de registro, mas dá a você acesso total a este valioso recurso. Os padrões ajudam, pois permitem que você desenvolva software de forma que ele se comporte da mesma maneira em todas as plataformas UNIX.

Links e referências

Obrigada

O autor gostaria de agradecer a Axel Beckert e Veit Schiele por sua ajuda e conselhos durante a preparação deste artigo.