O sistema operacional Linux traça sua história desde 1991, quando o estudante finlandês Linus Torvalds começou a desenvolver um novo sistema operacional, inspirado nas idéias do Unix e do Minix. A escolha bem-sucedida de uma licença gratuita predeterminou o sucesso de seu empreendimento - dezenas e centenas de entusiastas se juntaram ao empreendimento, cada um dos quais trouxe algo novo. Posteriormente, grandes empresas aderiram ao desenvolvimento - Intel, IBM e outras. Os motivos exatos que levaram os líderes do setor a oferecer suporte a um sistema operacional livre não são conhecidos por mim, mas as "más línguas" dizem que muitas empresas decidiram mudar a Microsoft, que na época tinha um monopólio absoluto nos sistemas operacionais de computadores desktop.
Evolução do kernel Linux expressa em número de linhas
Poderia o Linux, sem o apoio dos mestres da indústria, ter se tornado o que é agora? Longe de um fato - os veteranos lembram as guerras de patentes entre a Operação Santa Cruz e as empresas que dão suporte ao Linux. A SCO perdeu esta guerra e não existe mais.
O número de confirmações no núcleo por empresa
Assim, durante sua vida útil, o sistema operacional Linux percorreu um longo caminho evolutivo e agora se tornou um sistema operacional popular capaz de substituir o Windows por resolver muitas das tarefas urgentes dos usuários.
Antes de começarmos a comparar as distribuições modernas do Linux, precisamos definir dois aspectos importantes - o primeiro aspecto é o que o sistema operacional consiste e o segundo é o ponto de vista que compararemos. Por kit de distribuição, entendemos uma solução completa que consiste em um kernel do SO, um servidor gráfico (servidor X), um ambiente (um conjunto de programas fornecidos), um utilitário de instalação e uma configuração inicial. É possível comparar distribuições do ponto de vista do usuário final, administrador do sistema e programador de aplicativos.
Linux do ponto de vista de um administrador de sistema
No início de seu desenvolvimento, o Linux era um monte de tecnólogos e padres de tecnologia com conhecimentos específicos de programação e administração. O precursor do Linux era o sistema operacional Unix, e um especialista com experiência em administração Unix poderia facilmente instalar e configurar o sistema. Isso era inacessível para o usuário médio, e o processo de administração para ele era algo semelhante à mágica. O Linux moderno tornou-se fácil de usar - o processo de instalação se resume a responder a algumas perguntas, e muitas vezes basta concordar com a opção de configuração oferecida pelo instalador, simplesmente respondendo a todas as perguntas de forma positiva - o instalador analisará a configuração do hardware e selecionará os drivers e parâmetros de configuração necessários. Normalmente, o kit de distribuição contém pacotes de software prontos para uso,fornecido na forma de arquivos DEB ou RPM que contêm, além dos próprios programas, scripts de configuração e informações sobre dependências em bibliotecas de terceiros. No entanto, há exceções, por exemplo, a distribuição do Gentoo é fornecida como fonte quando todos os programas e regras de criação, e o próprio sistema operacional é literalmente construído no computador do usuário para a configuração do processador. A questão da eficácia de tal método é controversa, não vamos nos aprofundar nele, apenas observarei que esse é apenas um dos graus de liberdade declarados pela comunidade - o usuário é livre para escolher "se vale a pena a vela". Em geral, os formatos de pacote RPM e DEB são semelhantes e, ao escolher um kit de distribuição, você pode ignorar esse ponto. Com raras exceções - às vezes aconteceque o autor do programa, por algum motivo, não forneceu a segunda versão do instalador e ele existe apenas no formato RPM (RedHat Linux e seus derivados) ou DEB (Debian Linux e seus derivados). Nesse caso, você pode precisar de um esforço para instalar esse programa - mesmo desembalando manualmente o pacote de instalação, você pode encontrar dependências não satisfeitas. A instalação de um programa desse tipo exigirá muito esforço e, em caso de erro, ao tentar substituir as bibliotecas necessárias, você poderá causar uma falha no sistema. Felizmente, essa situação é extremamente rara e 99,9% dos usuários de Linux nunca enfrentarão esse problema. Além disso, todos os fabricantes conhecidos de kits de distribuição mantêm seus repositórios com um rico conjunto de programas, onde cada programa é compilado e testado para uma versão específica da distribuição.
Portanto, sabemos que uma das diferenças entre o Linux é o formato de pacote. No entanto, do ponto de vista do administrador do sistema, há mais uma diferença - o formato dos scripts de inicialização. Da família de sistemas operacionais Unix, o Linux possui dois formatos concorrentes - estilo System V e estilo BSD. Para entender do que se trata, vamos ver como funciona. O carregador de inicialização carrega o kernel do SO e transfere o controle para ele, o kernel inicia e inicia o primeiro processo - init. Estritamente falando, em vez de init, você pode ignorar qualquer processo, por exemplo, bash. Nesse caso, temos algo como um sistema de console de usuário único e de tarefa única, sem rede e sem GUI, e com um sistema de arquivos raiz somente leitura. Além disso, alguns dos hardwares nesse caso podem não funcionar se os drivers não estiverem presentes no kernel, mas forem carregados como módulos.No modo clássico de operação, o processo init lê o arquivo / etc / inittab e, de acordo com ele, inicia o processo de inicialização do sistema - monta partições, carrega drivers, inicializa interfaces de rede, inicia programas de serviço (anteriormente chamados daemons), carrega o subsistema gráfico. O Init não faz isso diretamente, mas usa o conceito de nível de execução e scripts especiais. Geralmente, existem até seis níveis de execução - os modos de execução que descrevem os modos operacionais do sistema - inicial, usuário único, multiusuário com um subsistema de rede, multiusuário com uma interface gráfica. Dependendo das condições de uso, o administrador pode definir um nível de execução padrão, para o qual o sistema mudará após a inicialização,geralmente é o modo multiusuário com rede e interface gráfica para a área de trabalho e modo multiusuário com rede para servidores. É nesses scripts que reside a diferença entre os estilos SystemV e BSD. No entanto, tendo conhecimento do formato inittab, é possível examinar o conteúdo dos scripts e entender como funcionam o início, a parada e a transição entre os níveis de execução do sistema.
Em 2010, os engenheiros da RedHat desenvolveram um substituto para o init, o serviço systemd. Este serviço trouxe novos recursos para o sistema:
- serviços ativados por soquete (
substitui oscomplementos inetd); - iniciar serviços em um horário (
substitui oscomplementos cron); - trabalhar com um cronômetro de watchdog de hardware (substitui o watchdog);
- mudança de raiz (substitui chroot);
- volumes automount e recursos de rede (
substitui oscomplementos mount e fstab); - journalctl - serviço de registro;
- systemd-analyse - análise da inicialização do serviço (inclui velocidade de carregamento (do sistema e de serviços individuais), prestação do início dos serviços, etc.);
- systemd-boot - gerenciador de inicialização UEFI (substituto para grub e lilo).
Atualmente, a grande maioria das distribuições Linux mudou para systemd, das distribuições outrora populares apenas o Slackware resiste à transição para o novo subsistema.
Assim, a transição para systemd, por assim dizer, apaga uma das diferenças entre o Linux - o sistema de scripts de inicialização e leva à unificação. Ao mesmo tempo, o suporte para scripts de inicialização clássicos é preservado - por exemplo, alguns volumes para montagem podem ser especificados classicamente via / etc / fstab, enquanto outros volumes podem ser montados usando as ferramentas systemd.
No passado, os administradores de sistemas costumavam discutir qual sistema era melhor que o SystemV ou o BSD, mas agora o debate acalmou. Um administrador de sistemas experiente poderá configurar qualquer sistema, mas para iniciantes na Web, há informações suficientes que revelam qualquer aspecto da configuração do Linux.
Linux da perspectiva do usuário
Do ponto de vista do usuário final, o Linux difere um pouco mais. Vamos examinar mais profundamente a questão. O subsistema gráfico era originalmente opcional no Unix. O Unix geralmente rodava em computadores poderosos e os usuários conectados a ele via terminais X. A interação ocorreu na rede - o programa foi executado no computador host, recebeu informações sobre pressionamentos de teclado e eventos de mouse e, em resposta, enviou comandos ao terminal para desenhar primitivos gráficos e texto. Os terminais gráficos eram dispositivos caros e raros, então os computadores pessoais se tornaram populares como terminais. A propósito, aqui está um ponto interessante que geralmente causa confusão - o servidor X é executado no terminal, não no host. O próprio programa está sendo executado no host, que usa a biblioteca xlib,fornecendo uma interface básica de baixo nível para trabalhar com um servidor gráfico. Essa interface é de nível bastante baixo, apresenta o conceito de janela, ou seja, A área retangular da tela pode exibir texto vetorial em várias fontes e também fornece desenhos de várias primitivas gráficas - pontos, linhas, retângulos, círculos e imagens.
Como as primitivas gráficas básicas são bastante simples, isso levou ao surgimento de bibliotecas de widgets - essas bibliotecas fornecem um nível mais alto de abstração e simplificam bastante os programas de gravação com uma interface gráfica. Por exemplo, a biblioteca X Athena Widgets tornou-se parte do sistema gráfico do X Window System. Esta biblioteca apresenta o conceito de botões, botões de opção, menus, campos de entrada e primitivas semelhantes. No entanto, pelos padrões modernos, parece bastante "distorcido".
E é aí que as diferenças começam para os usuários. A aparência do que o usuário vê na tela depende de vários subsistemas - é o ambiente de área de trabalho que fornece um espaço chamado área de trabalho, é um gerenciador de janelas que determina a aparência das janelas de programas (decorações de janelas) e, muitas vezes, mas não necessariamente, integrado ao ambiente de desktop e, finalmente, é uma biblioteca de elementos de interface. O que e como o usuário vê na tela é determinado pelas combinações dos componentes acima.
Na prática, isso leva ao fato de que o mesmo programa lançado em gerenciadores de janelas diferentes pode ter decorações de janelas diferentes - títulos diferentes, tamanhos de bordas de janelas, minimização diferente, botões de tela cheia e fechar. O gerenciador de janelas define tudo isso. No entanto, em um único gerenciador de janelas, programas diferentes podem ter tipos diferentes de elementos de interface, dependendo da biblioteca usada. Por uma questão de justiça, note-se que você pode observar uma variedade desse tipo no Windows, mas com muito menos frequência, pois a grande maioria dos programas do Windows usa o GDI + padrão ou o envolve.
O que o usuário do Linux enfrentará na área de trabalho? Primeiro de tudo, é GNOME ou KDE, a maioria das distribuições é baseada nesses ambientes de desktop. No entanto, eles não estão limitados e vários fornecedores de Linux oferecem cerca de uma dúzia de ambientes diferentes. Quanto às bibliotecas de elementos de interface, duas bibliotecas estão na liderança aqui - GTK e Qt. Ambas as bibliotecas são multiplataforma e, se houver algum programa no Linux e no Windows, provavelmente será gravado usando GTK ou Qt. No entanto, há exceções, por exemplo, o Xamarin criou uma versão da Windows Forms Library para Linux e macOS. Às vezes, os desenvolvedores do gerenciador de janelas também distribuem suas bibliotecas de widgets. Assim, fica claro de onde vem uma variedade de interfaces gráficas de usuário para Linux.
Linux do ponto de vista dos programadores de aplicativos
Todos os itens acima também se aplicam à programação. Se você estiver escrevendo um servidor ou um utilitário de console, na grande maioria dos casos, não precisará usar diretivas de compilação condicional - o Linux moderno é razoavelmente bem padronizado e totalmente compatível com POSIX. Além disso, o uso do autoconf permite escrever programas não apenas para Linux, mas também para qualquer sistema compatível com POSIX, do BSD a todo tipo de exótico.
Você provavelmente não terá que escolher um formato de pacote - use DEB e RPM e cobrirá quase todos os casos de uso. Para programas de serviço, você provavelmente terá que prestar atenção ao formato dos scripts de inicialização para que o instalador registre corretamente a inicialização automática do seu serviço. No meu caso, tive que prestar atenção à localização das fontes, uma vez que diferentes fornecedores usam caminhos diferentes para armazenar fontes, no entanto, uma pesquisa recursiva começando com / usr / share / fonts o ajudará aqui - todas as fontes, exceto as personalizadas, estarão localizadas nesse caminho. Quanto às fontes personalizadas instaladas em / home / user, há alguma confusão e oscilação, e diferentes fornecedores oferecem pelo menos duas hierarquias - ~ / .fonts e ~ / .local / share / fonts.
Para programas gráficos, a complexidade é um pouco maior. Tendo em vista os diferentes ambientes de área de trabalho do zoológico, você precisa considerar suas particularidades. Por exemplo, as chamadas notificações da área de trabalho serão suportadas pela maioria dos ambientes da área de trabalho, mas podem não funcionar com alguns gerenciadores de janelas exóticos.
Finalmente, mais alguns pontos importantes que fazem diferenças significativas entre as distribuições. Apesar da semelhança de todos os Linux modernos, você pode encontrar problemas em distribuições com maior proteção, ou seja, aqueles em que o sistema de acesso obrigatório é usado. Por exemplo, algum recurso está disponível por padrão em todas as distribuições clássicas, mas causará um erro de acesso na versão protegida do Linux. É impossível prever com antecedência onde e como o programa falhará nesse caso; portanto, a única solução é testar em distribuições protegidas. Ou uma solução rápida do problema após o usuário entrar em contato com o suporte técnico.
O segundo ponto é a popularidade da distribuição. Se você usar alguma biblioteca ou estrutura não muito comum como parte do produto, é possível que essa distribuição tenha uma versão antiga ou incompleta desta biblioteca. Na minha prática, essa situação ocorreu em uma das distribuições com suporte para a página de código 1251 na biblioteca System.Text.Encoding para C #. Há apenas uma maneira de lidar com esses problemas - como o problema não é observado em outras distribuições Linux, você deve escrever para o suporte técnico do desenvolvedor desta distribuição, descrevendo o problema em detalhes e dizer que não há problemas em outras distribuições.
Resultado. Se você não considera as versões protegidas do Linux, do ponto de vista dos administradores e programadores de sistema, as distribuições modernas são muito semelhantes. Freqüentemente, as diferenças entre gerações diferentes de uma distribuição do mesmo fornecedor são mais significativas do que as diferenças entre as distribuições modernas. Do ponto de vista dos usuários, a principal diferença está na escolha e configuração do ambiente de desktop e do software fornecido com a distribuição.