O que torna um sistema operacional “Unix-Like”?

20

Costumo encontrar o termo "unix-like" em muitos sites.

Não há padrão; é apenas da maneira que se comporta.

Mas se eu desenvolvesse um kernel do zero, o que o tornaria considerado "semelhante ao unix"?

Basicamente, quais são as coisas que fazem código escrito como o Unix?

falta um axônio
fonte
11
en.wikipedia.org/wiki/Unix-like (que por si só se conecta a linfo.org/unix-like.html )
Drav Sloan

Respostas:

15

Não há padrão; é apenas da maneira que se comporta.

Acredito que a maioria dos sistemas operacionais "unix-like" faz um esforço muito sério para aderir ao padrão POSIX , que é supervisionado pelo Open Group, que também controla a especificação UNIX única, que define um "UNIX verdadeiro". O primeiro é o núcleo do posterior.

Portanto, existe, de fato, um padrão que define os aspectos práticos de sistemas operacionais do tipo unix . Veja a lista de sistemas operacionais compatíveis com "totalmente" e "principalmente" no final do artigo da wikipedia sobre POSIX.

Existem algumas razões óbvias para o linux, em particular, não serem consideradas totalmente compatíveis ou certificáveis ​​pelo Single Unix Specification (SUS), mas não porque um sistema linux específico é necessariamente incompatível com ele. O artigo da wikipedia resume as especificações desta maneira:

O SUSv3 totaliza cerca de 3700 páginas, divididas tematicamente em quatro partes principais:

Definições básicas (XBD) - uma lista de definições e convenções usadas nas especificações e uma lista de arquivos de cabeçalho C que devem ser fornecidos por sistemas compatíveis. São fornecidos 84 arquivos de cabeçalho no total.

Shell e Utilitários (XCU) - uma lista de utilitários e uma descrição do shell, sh. No total, são especificados 160 utilitários.

Interfaces do sistema (XSH) - contém a especificação de várias funções que são implementadas como chamadas do sistema ou funções de biblioteca. 1123 interfaces de sistema no total são especificadas.

Justificativa (XRAT) - a explicação por trás do padrão.

A linha de comando padrão do usuário e a interface de script é o shell POSIX, uma extensão do Bourne Shell com base em uma versão anterior do Korn Shell.

Outros programas, serviços e utilitários no nível do usuário incluem awk, eco, ed, vi e centenas de outros. Os serviços necessários no nível do programa incluem serviços básicos de E / S (arquivo, terminal e rede).

Uma suíte de testes acompanha o padrão. É chamado PCTS ou o conjunto de testes de certificação POSIX.

Além disso, o SUS inclui a especificação CURSES (XCURSES), que especifica 372 funções e 3 arquivos de cabeçalho. Em suma, o SUSv3 especifica 1742 interfaces.

Obviamente, isso se refere especificamente a muitos componentes da terra do usuário (como o shell) que simplesmente não fazem parte do kernel do linux. Portanto, não há como linux.org et. al. pode ter o kernel sozinho certificado - nesse sentido, não é um sistema operacional. Eles poderiam, é claro, tentar certificar algum sistema específico usando o kernel, mas isso não faria sentido à luz do esquema geral de distribuição: o kernel e as pessoas que o mantêm são independentes das pessoas que mantêm o núcleo da terra do usuário (GNU) que são independentes das pessoas que mantêm distribuições reais de SO montadas (Debian, Fedora, etc).

Suponho que o próprio Debian ou Fedora possam se envolver no processo de certificação (então, por exemplo, o RedHat Enterprise pode se tornar um "unix certificado"), mas isso levanta a questão de que isso é realmente desejável. Eu presumo que a principal razão para os sistemas SUS é executar software (em escala comercial, não consumidor) criado para isso, o que simplesmente não é o nicho do linux - as pessoas que fizerem isso pagarão milhares de dólares por licença para o sistema operacional, incluindo lotes de suporte etc., porque eles também estão pagando dezenas ou centenas de milhares de dólares por licença para qualquer software adicional que eles desejam executar no sistema. O Linux e os outros outliers, por outro lado, buscaram objetivos de design além da simples conformidade para fins comerciais, e há vários exemplos disso, por exemplo (a partir dehttp://en.wikipedia.org/wiki/STREAMS ):

STREAMS era necessário para conformidade com as versões 1 da especificação UNIX única (UNIX 95) e 2 (UNIX 98), mas como resultado da recusa dos desenvolvedores do BSD e Linux em fornecer STREAMS, [citação necessário] foi marcado como opcional para POSIX conformidade pelo Grupo Austin na versão 3 (UNIX 03).

Uma acomodação interessante que destaca o ponto em que o SUS e o The Open Group! = Linux,! = BSD, etc.

Cachinhos Dourados
fonte
2
Observe que ser certificado é diferente de cumprir. Por exemplo, é impraticável para a Linux Foundation obter cada versão do kernel certificada, devido ao custo e à taxa de desenvolvimento. Mas isso não significa que (o kernel) não esteja totalmente ou totalmente em conformidade.
strugee
2
@strugee O padrão POSIX não se aplica ou se preocupa com o kernel. O que é padronizado são comandos (shell, ls, cat, ...) e APIs (o que a libc fornece, threads). O que faz uma distribuição baseada em Linux, como Unix, são principalmente componentes GNU (comandos e glibc). O kernel está fora do escopo de certificação / conformidade.
Jlliagre
11
Para não refutar, mas esclarecer (estou repetindo isso no meu comentário sobre a resposta do illuminÉ): os padrões são "o que", o kernel é "como". Eu li apenas partes dos padrões, mas não acho que eles se refiram a um "kernel" (é apenas o "sistema"). Portanto, certificação e conformidade WRT: é "o que" um kernel / OS faz, não "como" ele faz.
Goldilocks
3
@strugee A Especificação Unix Única se aplica às interfaces da terra do usuário. É claro que o kernel está finalmente envolvido, mas meu comentário foi sobre a sua declaração sobre a Linux Foundation obter kernels certificados. Um kernel não pode ser certificado, faltam todos os componentes com os quais o processo de certificação interage. O que pode ser certificado (ou pelo menos tentar ser o mais compatível possível) é um sistema operacional, ou seja, o que é comumente chamado de distribuição na comunidade Linux.
Jlliagre
2
@ strugee Essa seria a razão possível, no entanto, não é tanto a rolagem rápida que importa, mas o fato de não haver compromisso de garantir que nenhuma alteração incompatível seja adicionada. Por exemplo, o Solaris 10 é compatível, garanta essa compatibilidade e houve uma dúzia de atualizações desde que foi certificado pelo Unix03. Além disso, a combinação Gnu / Linux tenta ser o mais compatível possível, mas não mais. É (quase) nunca tentou a ser certificada porque é tanto um processo caro e que não iria cumprir qualquer maneira porque alguns requisitos estão faltando (deliberadamente) e algumas extensões são incompatíveis
jlliagre
12

Para expandir a primeira resposta sobre o POSIX, para entender o que significa "unix-like", primeiro tente tentar entender o que exatamente é o UNIX. Examinando a documentação do Open Group , proprietário da marca comercial Unix, você encontrará detalhes sobre a evolução da especificação Single UNIX - aqui está o UNIX03 :

O Padrão do Produto UNIX 03 é a marca para sistemas em conformidade com a Versão 3 da Especificação Única do UNIX. É uma versão significativamente aprimorada do UNIX 98 Product Standard. Os aprimoramentos obrigatórios incluem o alinhamento com a linguagem de programação ISO / IEC 9989: 1999 C, IEEE Std 1003.1-2001 e ISO / IEC 9945: 2002. Este Padrão do Produto inclui os seguintes Padrões Obrigatórios do Produto: Chamadas e Bibliotecas Internacionalizadas do Sistema V3 Estendida, Comandos e Utilitários V4, Linguagem C V2 e Interfaces de Terminal Internacionalizadas.

UNIX98 :

O UNIX 98 Product Standard é uma versão significativamente aprimorada do UNIX 95 Product Standard. Os aprimoramentos obrigatórios incluem (1) interfaces de threads, (2) extensão de suporte multibyte (MSE), (3) suporte a arquivos grandes, (4) vinculação dinâmica, (5) alterações para remover dependências ou restrições de comprimento de dados de hardware e (6) ) Alterações do ano 2000. Além disso, os seguintes aprimoramentos opcionais estão incluídos: Recursos de administração de software e um conjunto de APIs para suporte em tempo real. Este padrão do produto inclui os seguintes padrões obrigatórios do produto: Bibliotecas e chamadas de sistema internacionalizadas Extended V2, comandos e utilitários V3, idioma C, serviço de transporte (XTI) V2, soquetes V2 e interfaces de terminal internacionalizadas. Além disso, também pode estar em conformidade com o Padrão de Produto de Administração de Software.

UNIX95 (ênfase minha):

Este Padrão de Produto define uma plataforma consolidada para o suporte a uma ampla gama de aplicativos originalmente desenvolvidos para uma classe de sistemas operacionais derivados do código do Sistema Operacional UNIX e / ou interfaces originalmente desenvolvidas pela AT&T , além das facilidades fornecidas. pelo Padrão Básico do Produto. Tem um escopo mais amplo que o Base. Este padrão do produto inclui os seguintes padrões do produto: bibliotecas e chamadas de sistema internacionalizadas estendidas, comandos e utilitários V2, linguagem C, serviço de transporte (XTI), soquetes e interfaces de terminal internacionalizadas.

As versões de servidor do padrão adicionam o Internet Server e o IPv6 em alguns casos.

Portanto, é claro que vemos a referência aos Laboratórios AT&T Bell e a linguagem C está no centro do que é o UNIX: a linguagem C, as ferramentas básicas modulares e o shell e como o kernel, o sistema de arquivos e outros componentes principais do SO foram projetados e implementados .

insira a descrição da imagem aqui

insira a descrição da imagem aqui

É aí que o livro O design do sistema operacional UNIX, de Maurice J. Bach, se torna uma leitura inestimável porque, neste momento, são questões históricas. É claro que é claro que isso está relacionado a outras invenções, como a linguagem C. C foi desenvolvido pela AT&T Bell para implementar o Unix com uma linguagem que pode ser tão rápida quanto a montagem, mas portátil em diferentes hardwares, e grande parte do POSIX é uma extensão do padrão C.

No que diz respeito ao próprio kernel, muitas vezes você encontrará um diagrama conceitual como este para ilustrar o que era tradicionalmente um kernel do UNIX:

insira a descrição da imagem aqui

Aqui estão alguns trechos do livro clássico de Mr Bach (1986) que discutem os fundamentos do kernel do UNIX System V:

No entanto, todos eles [subsistemas e programas de aplicativos] usam serviços de nível inferior finalmente fornecidos pelo kernel e se beneficiam desses serviços por meio do conjunto de chamadas do sistema. Existem cerca de 64 chamadas de sistema no Sistema V, das quais menos de 32 são usadas com freqüência. Eles têm opções simples que os tornam fáceis de usar, mas fornecem muita energia ao usuário. O conjunto de chamadas do sistema e os algoritmos internos que os implementam formam o corpo do kernel [...]

[...] seus dois componentes principais são o subsistema de arquivos e o processo.

Os arquivos são organizados em sistemas de arquivos, que são tratados como dispositivos lógicos; um dispositivo físico como um disco pode conter vários dispositivos lógicos (sistemas de arquivos). Cada sistema de arquivos possui um superbloco que descreve a estrutura e o conteúdo do sistema de arquivos, e cada arquivo em um sistema de arquivos é descrito por um inode que fornece os atributos do arquivo. As chamadas do sistema que manipulam arquivos o fazem por meio de inodes. [e o buffer pool]

[...] Existem duas versões do inode: a cópia em disco que armazena as informações do inode quando o arquivo não está em uso e a cópia interna que registra informações sobre arquivos ativos.

A execução dos processos do usuário nos sistemas UNIX é dividida em dois níveis: usuário e kernel. Quando um processo executa uma chamada do sistema, o modo de execução do processo muda do modo de usuário para o modo de kernel : o sistema operacional executa e tenta atender à solicitação do usuário [...]

[...] a filosofia do sistema UNIX é fornecer primitivas do sistema operacional que permitem aos usuários escrever pequenos programas modulares que podem ser usados ​​como blocos de construção para criar programas mais complexos. Um desses primitiva visível para desembolsar os usuários é a capacidade de redirecionar E / S .

[...] Além de atender às chamadas do sistema, o kernel faz a contabilidade geral para a comunidade de usuários, controlando o agendamento de processos, gerenciando o armazenamento e a proteção dos processos na memória principal, realizando interrupções, gerenciando arquivos e dispositivos e resolvendo os erros do sistema condições.

Se você estiver interessado nas diferentes implementações de kernels em sistemas operacionais do tipo Unix, também pode dar uma olhada na implementação do FreeBSD (4.4BSD) ou no kernel do Mach ou na comparação de seus recursos.

Quanto mais você souber sobre o design do UNIX, mais entenderá o que aconteceu no diagrama a seguir sobre a ancestralidade do UNIX e sua história . Bach está falando principalmente sobre o Sistema V em seu livro, mas ele também discute o BSD:

insira a descrição da imagem aqui

mais do que aparenta realmente. Por exemplo, o Mac OSX é certificado pelo UNIX03, mas você o vê conectado a algum UNIX puro (principalmente em vermelho)?

insira a descrição da imagem aqui

Acima, você pode ver como a BSD, GNU, Microsoft e diversos indivíduos contribuíram para esse universo. Embora o GNU e, finalmente, o linux não tenham linha direta com o UNIX, você vê que o GNU é um esforço para reprojetar no mundo de código aberto as ferramentas e o software do UNIX comercial que foram fechados. Portanto, olhar para o software mantido pelo GNU dá uma idéia, por exemplo, dos protótipos e aplicativos iniciais.

As guerras de licenciamento desempenharam um papel na evolução (e estagnação às vezes) do UNIX. Você pode ver imediatamente que os UNIXes estão alinhados de acordo com o tipo de licença - fechado vs. BSD (o BSD permite criar código fechado de código-fonte ... consulte OSX) e a GPL, que permite que o Linux e o GNU se complementem no mundo dos copyleft. Aqui está o mapa clássico do kernel do linux desenvolvido inicialmente por Linus Torvalds, que também revela o que um kernel "pode" ser em um sistema operacional semelhante ao Unix:

insira a descrição da imagem aqui

Isso sugere que um tipo de design " kernel " não é o que torna o padrão UNIX ou o que define um sistema operacional semelhante ao unix. Isso é evidenciado pelo fato de que muitos sistemas operacionais do tipo unix podem ter um núcleo monolítico ou um microkernel - monolítico era o tipo de design clássico para UNIX. De fato, mesmo dentro de UNIXes puros, o HPUX possui um núcleo monolítico, enquanto o AIX usa um microkernel. Esse debate sobre design é sobre desempenho e não está relacionado à ancestralidade ou identidade do Unix. Por outro lado, existe uma abordagem conceitual tradicional para fornecer serviços ao software, lidar com sistemas de arquivos etc. em sistemas operacionais do tipo UNIX / unix.

Acredito que essas considerações adicionarão contexto à parte do SO da sua pergunta.

Comunidade
fonte
3
+1 Alguns bons pontos aqui: 1) Sobre o relacionamento entre C e Unix (a acrescentar: C foi desenvolvido pela AT&T Bell para implementar o Unix com uma linguagem que pode ser tão rápida quanto a montagem, mas portátil em diferentes hardwares e muito POSIX é uma extensão do padrão C). 2) Esse design do kernel é independente dos padrões. Padrões são "o que", kernels são "como".
Goldilocks
11
@goldilocks Obrigado, adicionei seu comentário sobre C. verbatim. Tentei deixar claro que as considerações sobre o kernel não estão relacionadas ao padrão. A pergunta assume que há algo específico sobre o kernel do tipo unix, mas não existe. Por outro lado, historicamente, os primeiros kernels do Unix podem ter sido dessa maneira. Meu entendimento é limitado, mas eu assumiria que os kernels mudaram muito porque o hardware mudou muito desde os anos 70. O que está claro é que o kernel não define o tipo Unix / unix, apesar de o kernel linux definir claramente o GNU / Linux ou Linux.