Unix, Linux, BSD, Posix – Quais as diferenças e porque existe tantas opções?

Tempo de Leitura: 13 Minutos

Antes de mais nada, o objetivo desse artigo não é defender nenhum sistema operacional ou distribuição, e sim, tentar de maneira clara e objetiva explicar porque de tantos nomes e as diferenças de cada um deles. Um ponto importante, que devemos entender, é que muitos deles são parecidos pois são baseados em um ancestral comum, o sistema MULTICS que foi o primeiro sistema operacional de tempo compartilhado, criado na AT&T em meados de 1965.

O multics nunca avançou, pois as empresas desenvolvedoras nunca entraram num acordo sobre ele, porém, as ideias concebidas nele foram muito valiosas para a tecnologia e para os sistemas de informática, tendo muitos recursos voltados a acessibilidade e por ser modular, poderia crescer bastando-se adicionar os recursos que se desejava de maneira totalmente modular (memória, disco, processamento, etc) além de recursos de controle de acesso que eram extremamente flexíveis, baseados em 9 pontos.

Uso remoto e conveniente através de terminais, operação contínua e análoga aos serviços elétricos e telefônicos, grande variedade de configurações do sistema cambiáveis transparentemente, sistema de arquivos de alta confiança, suporte para compartilhamento da informação, estruturas hierárquica, suporte a vários tipo de aplicações diferentes, suporte para vários ambientes de programação e interfaces para o usuário, habilidade de evoluir o sistema com mudanças em sua tecnologia e aspirações do usuário.

Com a saída da empresa Bell do projeto multics, os engenheiros computacionais Ken Thompson e Dennis Ritchie passaram a trabalhar no desenvolvimento de um outro sistema conhecido como UNICS uma brincadeira deles com o seu antecessor, e que posteriormente foi batizado de UNIX.

Uma Outra Parte da História

Por outro lado, a IBM baseou o seu sistema operacional MVS (dos mainframes System/370 e System/390) também o AIX (do System/38 e TSS/360) no sistema MULTICS, além de outros como o VOS da Stratus Tecnologies, e o famoso VMS que acompanhava o VAX da DEC, que virou sinônimo de computadores cunhando o nome VAX/VMS que por muitos é conhecido e ainda utilizado.

O marco mais importante, foi o sistema ser reescrito em linguagem C, em meados de 1973 e portado para outros tipos de computadores. Nesta década, a Universidade de Berkeley na Califórnia desenvolveu uma versão própria do sistema, batizando-o como BSD (Berkeley Software Distribution) pois o código fonte do sistema MULTICS era fornecido junto com os computadores da Bell para universidades encorajando-as a estudar e desenvolver ou expandir para seus próprios fins, hoje o BSD é um nome usado para designar diversos sistemas baseados nessa distribuição que era incluída em diversos modelos de equipamentos fabricados nessa época.

Dezenas de sistemas baseados no BSD incluindo o famoso OS X da apple e o iOS também da Apple foram feitos tendo como base a distribuição do UNIX DA BERKELEY como ficou conhecido. Além de ter fornecido partes do código que integra sistemas modernos como o Windows NT.

O UNIX original de Ken Thompson, ganhou uma versão cheia de recursos que acabou sendo batisada de System V e foi a base para o desenvolvimento do sistema SunOs (derivado direto do BSD) e que foi posteriormente batizado de Solaris 2 (hoje pertencente a Oracle, juntando partes do SunOS e do System V)

Compatibilidade Binária

Sistemas operacionais BSD podem executar software nativo de muitos outros sistemas operacionais na mesma arquitetura, usando uma camada de compatibilidade binária. Muito mais simples e rápido que emulação, o que permite, por exemplo, aplicações previstas para Linux serem executadas em velocidade efetivamente completa. Isso faz com que os BSDs não só sejam adequados para ambientes de servidores, mas também para as estações de trabalho, dada a crescente disponibilidade de software comercial ou de código fechado apenas para Linux. Isto também permite que os administradores migrem para aplicações comerciais normais, o que pode ter apenas variantes comerciais do Unix suportadas, para um sistema operacional mais moderno, mantendo a funcionalidade de tais aplicações até que eles possam ser substituídos por uma alternativa melhor. Dai, surge o termo abaixo…

POSIX – Definição, Arquitetura e Estrutura

Acrônimo para: Portable Operating System Interface, que pode ser traduzido como Interface Portável entre Sistemas Operacionais, é uma família de normas definidas pelo IEEE para a manutenção de compatibilidade entre sistemas.

O POSIX define a interface de programação de aplicações (API), juntamente com shells de linha de comando e interfaces utilitárias, para compatibilidade de software com variantes de Unix e outros sistemas operacionais. Tem como objetivo garantir a portabilidade do código-fonte de um programa a partir de um sistema operacional que atenda às normas POSIX para outro sistema POSIX, desta forma as regras atuam como uma interface entre sistemas operacionais distintos.

Sistema operacional multitarefa

Multitarefa significa executar uma ou mais tarefas ou processos simultaneamente. Na verdade, em um sistema monoprocessado, os processos são executados sequencialmente de forma tão rápida que parecem estar sendo executados simultaneamente. O Unix escalona sua execução e reserva-lhes recursos computacionais (intervalo de tempo de processamento, espaço em memória RAM, espaço no disco rígido, etc.). O Unix é um sistema operacional de multitarefa preemptiva, isso significa que, quando esgota um determinado intervalo de tempo (chamado quantum), o Unix suspende a execução do processo, salva o seu contexto (informações necessárias para a execução do processo), para que ele possa ser retomado posteriormente, e coloca em execução o próximo processo da fila de espera, ele também determina quando cada processo será executado, a duração de sua execução e a sua prioridade sobre os outros.

Multiusuário

Uma característica importante do Unix é ser multiusuário, ou seja, é capaz de executar, concorrente e independentemente, várias aplicações pertencentes a dois ou mais usuários distintos. O Unix possibilita que vários usuários usem um mesmo computador simultaneamente, geralmente por meio de terminais com conexões seriais, o uso de redes locais.

O Unix gerencia os pedidos que os usuários fazem, evitando que um interfira com os outros. Cada usuário possui direitos de propriedade e permissões sobre arquivos. Quaisquer arquivos modificados pelo usuário conservarão esses direitos. Programas executados por um usuário comum estarão limitados em termos de quais arquivos poderão acessar. O sistema Unix possui dois tipos de usuários: o usuário root (também conhecido como superusuário), que possui a missão de administrar o sistema, podendo manipular todos os recursos do sistema operacional; e os usuários comuns, que possuem direitos limitados.

Arquivos de dispositivo

Uma característica singular no Unix e em seus derivados, é a utilização intensiva do conceito de arquivo, onde quase todos os dispositivos são tratados como arquivos e, como tais, seu acesso é obtido mediante a utilização das chamadas de sistema open, read, write e close. Os dispositivos de entrada e saída são classificados como sendo de bloco (discos rígidos, discos óticos, fitas magnéticas) ou de caractere (impressora, modem) e são associados a arquivos mantidos num diretório da mesma maneira que outros arquivos de usuários e podem ser acessados como tal.

Sistema de arquivos é uma estrutura lógica que possibilita o armazenamento e recuperação de arquivos. No Unix, arquivos são contidos em diretórios (ou pastas), os quais são conectados em uma árvore que começa no diretório raize mesmo os arquivos que se encontram em dispositivos de armazenamento diferentes precisam ser conectados à árvore para que seu conteúdo possa ser acessado.

A árvore de diretórios do Unix é dividida em várias ramificações menores e pode variar de uma versão para outra. Os diretórios mais comuns são os seguintes:

/ — Diretório raiz – este é o diretório principal do sistema. Dentro dele estão todos os diretórios do sistema do seu computador, incluindo dispositivos físicos.
/bin — Contém arquivos, programas do sistema, que são usados com frequência pelos usuários.
/boot — Contém arquivos necessários para a inicialização do sistema.
/dev — Contém arquivos usados para acessar dispositivos (periféricos) existentes no computador, como impressoras, teclado, etc
/etc — Arquivos de configuração de seu computador local, e de softwares executados nele
/home — Diretórios contendo os arquivos dos usuários, cada usuário possui um diretório exclusivo seu neste diretório, com todos os seus dados desde configurações do ambiente até arquivos pessoais
/lib — Bibliotecas compartilhadas pelos programas do sistema e módulos do núcleo.
/mnt — Diretório de montagem de dispositivos, em estado montado (pronto) /mnt/cdrom por exemplo é um subdiretório onde são montados os CDs. Após a montagem, o conteúdo do CD se encontrará dentro deste diretório.
/proc — Sistema de arquivos do núcleo, este diretório não existe no disco rígido, ele é colocado lá pelo núcleo e usado por diversos programas que estão sendo executados no momento (lembra-se que quase tudo no UNIX são arquivos, esses arquivos são basicamente os dados do que tem em execução no momento)
/root — Diretório do usuário root, similar ao home, porém do usuário root.
/sbin — Diretório de programas usados pelo superusuário (root) para administração e controle do funcionamento do sistema
/tmp — Diretório para armazenamento de arquivos temporários criados por programas, muitas distribuições limpam esse diretório periodicamente, ou sempre que se reinicia a instancia do sistema.
/usr — Contém maior parte de seus programas de usuário, como arquivos de conteúdo binário, ou dados normalmente acessível somente como leitura.
/var — Contém maior parte dos arquivos que são gravados com frequência pelos programas do sistema. Como armazenamento dos programas para seu próprio uso, como bases de dados ou um despejo (cache) de acesso.

Um sistema Unix é orientado a arquivos, quase tudo nele é um arquivo. Seus comandos são na verdade arquivos executáveis, que são encontrados em lugares previsíveis em sua árvore de diretórios, e até mesmo a comunicação entre entidades e processos é feita por estruturas parecidas com arquivos. O acesso a arquivos é organizado através de propriedades e proteções. Toda a segurança do sistema depende, em grande parte, da combinação entre as propriedades e proteções definidas em seus arquivos e suas contas de usuários.

Comandos

Os comandos, que são fornecidos pelos usuários, são em sua maioria acrônimos (abreviações) para sua função por exemplo (List – listar) LS, MKDIR (MaKe DIRectory – fazer diretório), ChangeDirectory (mudar diretorio), DiskFree (disco livre), DiskUsage (uso do disco), CHange OWNer (mudar dono),  entre muitos outros e consistem basicamente em arquivos executáveis (com permissão de execução) que são executados diretamente para realizarem a tarefa a que são destinados.

LINUX

Linux é um termo popularmente empregado para se referir a sistemas operacionais que utilizam o Kernel (núcleo do sistema) desenvolvido pelo finlandês Linus Torvalds, inspirado no sistema Minix, que por sua vez foi baseado no UNIX. O seu código-fonte está disponível sob a licença GPL (versão 2) para que qualquer pessoa o possa utilizar, estudar, modificar e distribuir livremente de acordo com os termos da licença.

Inicialmente desenvolvido e utilizado por grupos de entusiastas em computadores pessoais, os sistemas com núcleo Linux passaram a ter a colaboração de grandes empresas como IBM, Sun, Hewlett-Packard (HP), Red Hat, Novell, Oracle, Google, Canonical e mais recentemente até a Microsoft.

O desenvolvimento do Linux é um dos exemplos mais proeminentes de colaboração de software livre e de código aberto. O código-fonte pode ser usado, modificado e distribuído – com fins comerciais ou não – por qualquer um, devolvendo o código desenvolvido de volta para o desenvolvimento do núcleo e incorporação das melhorias mantendo-o sempre atualizado.

Normalmente, o Kernel Linux é encontrado dentro de uma distribuição, ou seja, um pacote contendo além do núcleo outras partes importantes que juntas permitem o uso do computador para os mais diversos fins, algumas distribuições Linux populares incluem o Arch Linux, CentOS, Debian, Fedora Linux, Linux Mint, openSUSE, Ubuntu, além de distribuições focadas para usuários corporativos, como o Red Hat Enterprise Linux ou o SUSE Linux Enterprise Server.

Distribuições Linux – Se tudo é linux porque tantas diferenças?

A resposta é simples, porque é melhor. Basicamente, cada distribuição foca seus esforços não no núcleo do sistema, mais sim no conjunto de aplicações específicas para atender as necessidades do grupo de usuários para o qual a distribuição resolveu ser focada.

Por exemplo, uma distribuição focada em estudantes universitários, vai rodar em um hardware mais simples, e vai ser focada em um ambiente mais leve, e que possua ferramentas (softwares) que acompanham o pacote como planilhas, editores de texto, e-mail, softwares de apresentação, leitores de livros e pdf, calculadora científica, softwares de conversão de medidas e outras coisas que um universitário ou estudante usem com frequência e que facilitem o trabalho. Já uma distribuição voltada ao mercado de servidores de internet, não vai ter uma interface gráfica (GUI) e vai possuir uma otimização para velocidade de processamento, muitas vezes sem suporte multimídia e outros anexos, para ser performática como um servidor web, um bind para dns, serviços de e-mail entre outros.

Essas diferenças tornam uma ou outra distribuição melhor adaptada para um ou para perfil de usuário, isso não significa que uma distribuição focada em um objetivo não rode uma aplicação diferente, mais significa que o conjunto não foi otimizado para esse uso, por isso muitos usuários iniciantes se frustram com um ambiente POSIX.

Atualmente, temos versões para milhares de usos específicos, nas mais diversas áreas da tecnologia, e também temos versões genéricas que são muito similares a sistemas comerciais como o Microsoft Windows. O próprio sistema ANDROID é baseado em um kernel unix modificado, com funções específicas para um hardware leve como o dos dispositivos móveis. O iOS também é baseado em sistemas unix. Desde a versão 8 do windows, ele vem ganhando suporte a compatibilidade com sistemas posix, o Windows 10 consegue rodar muitos softwares unix diretamente, através de uma camada de compatibilidade chamada WSL2 criada em uma parceria da microsoft e da canonical que distribui o linux ubuntu.

Falando em WINDOWS, o que ele tem de diferente?

Como dito anteriormente, o Microsoft Windows, desde a sua versão 8 vem ganhando compatibilidade nativa com sistemas POSIX e cada dia mais algumas distribuições Linux vem se tornando tão simples através de lindas interfaces gráficas, instaladores automatizados além de hoje através das linguagens de mais alto nível muitos sistemas e aplicativos até mesmo jogos vem sendo lançados em diversas plataformas e rodam igualmente em níveis de performance.

Um pergunta que é sempre retórica em redes sociais e fóruns abertos, é “O QUE PODEMOS FAZER COM O LINUX QUE NÃO PODEMOS FAZER COM O WINDOWS” ou vice versa, e a resposta é muito simples, NADA, tudo o que se pode fazer com um dos sistemas se pode fazer com os outros, cada um tem sua particularidade e seu modo de fazer, através de um ou de outro utilitário ou comando. O que pode diferenciar é que um pode ter uma performance diferente, e olha, que não existe um pior ou melhor, simplesmente diferente.

Além do mais, é possível desenvolver software em ambos, e fazer uma aplicação diferente em cada um dos sistemas para realizar uma mesma tarefa. Falando de maneira particular, trabalho como desenvolvedor de software e uso como máquina primaria de trabalho um sistema desktop, que roda o Linux Mint inclusive é nele que edito quase todo o conteúdo aqui do site, e de outras redes sociais que tenho.

Nele, é que desenvolvo quase tudo o que faço para back-end, e grande parte do que uso para interface web, e isso não é porque sou um apaixonado pelo Linux, e sim por uma questão simples, por ser um ambiente similar ao que vai rodar a aplicação e onde eu acabo passando grande parte do tempo, acabo sendo mais familiarizado com os comandos que preciso para realizar minhas tarefas no dia a dia.

Tenho uma segunda estação de trabalho onde rodo Windows 10, e basicamente porque escrevo alguns aplicativos para desktop, que vão rodar nos clientes e em ambiente Windows dai nada melhor que ele para me mostrar o comportamento da aplicação, além de ter os recursos necessários e alguns outros aplicativos que uso e que tenho em ambas as estações.

Conclusão

Indiferente de qual o sistema que você tem preferência de usar, todos podem realizar de maneira satisfatória uma ou outra tarefa, o que distingue é a forma passo a passo que um tem, não existe um sistema mais poderoso que outro, existe um mais adaptado para uma ou para outra função.

É possível realizar qualquer atividade tanto em um como no outro, e atualmente de maneira quase transparente, podemos estar usando um ou outro sem nem ao menos saber qual estamos usando.

Distribuições são justamente isso, uma adaptação para executar melhor uma função ou outra, contendo um conjunto de ferramentas diferente. Analogamente seria como comparar ferramentas usadas por um médico, um advogado ou um dentista, todas são ferramentas o que diferencia é como serão usadas e para que se propõe o seu uso, e o mais importante, se ela cumpre a função para a qual foi projetada.

Imagine, seria possível para um médico, abrir um paciente com um estilete de escritório, porém, como ele não foi projetado para isso, pode e vai ser muito mais difícil além de causar danos colaterais para o paciente que podem agravar ou prejudicar ainda mais o estado. Porém, em uma situação extrema, pode ser feito e pode ser o diferencial entre salvar ou não aquele paciente.