Por que o sistema operacional e o kernel são tratados separadamente no Linux? [fechadas]

9

Quando se trata de qualquer sistema operacional Linux, incluindo o Ubuntu, as pessoas tendem a distinguir os termos kernel e sistema operacional . Isso está correto para o Windows e a família OS X, mas por que é tão difundido entre a comunidade Linux? Existe uma maneira de atualizar o kernel do sistema operacional, sem ter o próprio sistema operacional atualizado? Ou vice-versa? Se sim, como isso pode ser útil?

    
por Aleksandr Medvedev 09.05.2017 / 11:00

5 respostas

12

Todo o sistema GNU / Linux é construído usando a abordagem modular. Você pode atualizar principalmente ( substituir em geral) um único módulo sem tocar nos outros. O módulo em questão pode ser um gerenciador de inicialização, kernel, shell, comando, ambiente de área de trabalho, aplicativo GUI, o que for…

Claro que é verdade, desde que você consiga gerenciar as dependências corretamente. No conjunto de distribuições no Ubuntu, o APT é usado para resolver dependências automaticamente.

Você pode instalar outra versão do kernel usando o comando:

sudo apt install linux-image-<version>

Desde que o APT permita, você deve poder reinicializar e usar a versão selecionada do kernel, seja genérica, de baixa latência, etc. Ou você mesmo construir uma versão do kernel, por exemplo, o Real-Time Linux , e use-o com seu sistema atual.

    
por Melebius 09.05.2017 / 11:17
5

Como você sabe, o Kernel é uma parte importante do sistema operacional, em distribuições GNU / Linux você pode atualizar facilmente o kernel sem tocar em outra parte do sistema operacional. No entanto, estamos simplesmente atualizando uma parte do nosso sistema operacional.

Um sistema operacional é composto de duas partes, espaço do kernel e espaço do usuário.

Então, sim, você pode atualizar seu espaço de kernel sem tocar em seu espaço de usuário se apenas a nova versão for compatível com seu espaço de usuário atual.

E sobre a atualização das ferramentas do espaço do usuário, é outro sim.

Quando você executa:

sudo apt-get upgrade

Se houver uma atualização disponível para o kernel, você verá:

The following packages have been kept back:
  linux-generic linux-headers-generic linux-image-generic

então você está apenas atualizando seu espaço de usuário e quando você executa algo como

sudo apt-get dist-upgrade

você está atualizando tudo, incluindo o kernel.

Para atualizar apenas o seu Kernel para uma versão mais recente, use algo como:

$ apt-cache search "linux-image-[0-9]+.*-generic" | awk '{print }' | head -4
linux-image-4.4.0-21-generic
linux-image-4.10.0-14-generic
linux-image-4.10.0-19-generic
linux-image-4.10.0-20-generic

para encontrar uma lista de novos kernels, e depois instalá-lo como um novo pacote, por exemplo:

sudo apt install linux-image-4.10.0-14-generic
    
por Ravexina 09.05.2017 / 11:10
3

Primeiro, alguns esclarecimentos, porque eu sinto que você não entende como os sistemas GNU / Linux surgiram. Fique comigo se isso não for novidade para você:

"Kernel" não é apenas outro programa que roda, mas é a parte do sistema operacional que fornece as funções base: se você quer iniciar um programa (digamos, você digita "ls" na linha de comando) o binário tem para ser carregado do disco (que inclui algumas operações do sistema de arquivos para localizá-lo e algum tratamento de arquivo para lê-lo), um "ambiente de processo" é criado: memória é atribuída, um número de processo é emitido, etc., etc. as atividades anteriores (FS, leitura do arquivo, ...) são tratadas pelas bibliotecas do sistema, mas as últimas são funções do kernel. Em certo sentido, o kernel "é o sistema operacional" e tudo o mais é apenas decoração em torno dele.

"Linux" é na verdade (apenas!) um kernel sem outras partes do sistema operacional. Linus Torvalds começou a escrevê-lo pegando o kernel do sistema operacional MINIX do Andrew Tanenbaums e completando-o para que ele fosse um kernel funcional completo e real. Até hoje, Linus (e muitos outros que contribuem / contribuíram) desenvolvem esse núcleo. Este kernel ainda é muito semelhante ao UNIX, mas NÃO é um kernel UNIX.

O "GNU" começou como uma iniciativa para "melhorar" muitos comandos comuns do UNIX. Não vou discutir se eles obtiveram sucesso ou não, mas eles definitivamente escreveram muitos softwares e em determinado momento tiveram uma coleção de programas utilitários. Eles até começaram a desenvolver um kernel do sistema operacional próprio (HURD), que era baseado principalmente no UNIX, mas era definitivamente diferente. Mas até hoje HURD está em seu desenvolvimento inicial e dificilmente é uma solução funcional. "GNU" btw. é a abreviação de "GNU (is) Not UNIX" - eles tentaram superar algumas limitações (percebidas ou reais) do UNIX com a intenção de criar um sucessor para o UNIX (novamente: não quero entrar na discussão se tiverem êxito ou não - eu não me importo se é "melhor" ou "pior", mas é definitivamente diferente!).

Assim, com um conjunto de ferramentas sem kernel e um kernel sem um conjunto de ferramentas, foi um desenvolvimento natural juntar essas duas coisas: o GNU / Linux foi criado.

Ainda assim, para ter um sistema operacional (e viável), você precisa de mais do que apenas um kernel e um conjunto de ferramentas: você precisa de um sistema de gerenciamento de pacotes, precisa de procedimentos de instalação, precisa de configurações de modelo ...

Várias pessoas diferentes (ou grupos delas) chegaram a essa conclusão e usaram a combinação GNU / Linux para criar um sistema GNU / Linux de seu gosto, adicionando exatamente as coisas que eu mencionei acima: elas criaram um gerenciador de pacotes, um sistema de embalagem, procedimentos de instalação e mais. Estes diferentes grupos (respectivamente os resultados de seus esforços) são o que as diferentes distribuições são. Hoje existem três gerenciadores de pacotes diferentes (apt para Debian e sistemas derivados como * ubuntu, rpm para RedHat e sistemas derivados como Fedora, CentOS e mais, pacman para ArchLinux) mas todos eles gerenciam pacotes de software que são (essencialmente) o mesmo: o que é chamado quando você emite "ls" ou "df", etc., em um sistema Debian ou em um sistema RHEL vem de pacotes diferentes, mas essencialmente é a versão GNU do "ls" - (" df "-) programa, apenas diferentemente empacotado.

Então, "em princípio" você pode atualizar o kernel sozinho, como as pessoas que criaram uma distribuição de várias versões de todo o software que eu falei acima fizeram.

Mas, e isso é realmente grande MAS: porque não há apenas o kernel e alguns softwares adicionais, mas muitas outras coisas para se ter em mente, como ferramentas de configuração do sistema (systemd, que algumas distribuições usam e algumas não ), ferramentas de gerenciamento de rede como o NetworkManager, que por sua vez depende de algumas versões da biblioteca GNOME, etc., etc. - uma "distribuição" é uma coisa bastante complexa e as chances são de tentar atualizar o kernel que você acaba atualizando muitas outras coisas por causa das muitas interdependências.

Ainda assim, e também "em princípio", como acima: você também pode criar sua própria distribuição baixando todas as fontes, compilando-as, encontrando um conjunto de combinações de versões, colocando algum sistema de empacotamento no lugar (ou use um dos os existentes) - e assim por diante, até que você tenha um sistema distribuível, instalável e configurável. Isto é o que os criadores de distribuições como o Ubuntu fazem e não é um milagre - apenas um monte de trabalho complexo, então, na realidade, a maioria dos usuários evita isso e usa algo que pode ao pronto para usar.

Espero que isso responda à sua pergunta.

    
por bakunin 09.05.2017 / 14:08
3

A resposta mais simples não tem nada a ver com o Ubuntu; está relacionado ao modo como o GNU / Linux é construído. Se você tentar vê-lo como um desenvolvedor de sistema, verá dois mundos, cada um separado por uma borda nítida (a ABI).

O mundo do kernel, onde os desenvolvedores de baixo nível trabalham, é um sistema por si só. Tem tudo o que você normalmente encontra em um aplicativo regular. A única diferença é que o usuário não é a pessoa real que está usando a máquina, mas o mundo do espaço do usuário. O "aplicativo" do kernel é o intermediário, o servidor que está usando a máquina - o fantasma no shell.

Agora, o espaço do usuário é o mundo normal em que o usuário e o desenvolvedor estão jogando. Tem rígidas APIs, regras, arquivos e, o mais importante, uma imagem abstrata e infantil da máquina em que está sendo executada. Como o usuário está vendo apenas essa parte, e isso equivale a 99% do tamanho da distribuição, é fácil nomear incorretamente o sistema operacional. A nomenclatura correta é chamada de distribuição de software, criada por alguma entidade (Canonical, Fedora, etc.), usando um kernel (Linux, HURD, BSD, etc.) e construída usando um conjunto de ferramentas (geralmente fornecidas pelo GNU ).

Para responder sua pergunta, no GNU / Linux (assim como no Windows e OSX, confie em mim), você pode alterar o kernel, não apenas a versão, mas toda a arquitetura (Kernel Linux, HURD Kernel) e contanto que a ABI não seja tocada, nunca faça uma única mudança no mundo dos usuários ... De volta ao dia, quando o homem de verdade tinha que construir o kernel a partir de fontes, você poderia passar por várias mudanças como essas, para obter um crappy USB webcam para trabalhar ... Agora, com o kernel modular, você só precisa instalar um módulo, e você terá um novo mundo de kernel, com a ABI (às vezes) estendida com novos recursos ...

Novamente, o mesmo para o espaço do usuário. Quando você instala um novo aplicativo, de, digamos, um repositório do Ubuntu, 99% do tempo, sua maior preocupação é a compatibilidade dos outros componentes do espaço do usuário, não o kernel real. Existem casos em que a versão do kernel dita (através da ABI) a variedade de coisas que podem ser instaladas no espaço do usuário, mas a meta (para os desenvolvedores, pelo menos) é fazer com que isso desapareça ...

Outra coisa a considerar é que você pode (e é bem fácil) construir sua própria distribuição GNU / Linux especial e única. Obtenha um kernel, alguns scripts simples, vários aplicativos e você está pronto. É assim tão fácil (dê uma olhada nas distribuições OpenWRT GNU / Linux, para equipamentos de rede, toda a distribuição se encaixa em algo como 16Mb ou mais).

    
por rftghost 09.05.2017 / 12:21
1

Eu acho que eles são mantidos separados porque o kernel é uma parte crítica. Um kernel com uma regressão, ou apenas uma falha na atualização, pode causar muitos danos. Você pode querer atualizá-lo com menos frequência; ou apenas depois de esperar algum tempo para garantir que ninguém relate erros preocupantes.

Além disso, alguns usuários avançados ou profissionais recompilam o kernel para modificar seu comportamento para melhor atender às suas necessidades. Nesse caso, você obviamente não desejaria que ele fosse substituído automaticamente pela versão de fábrica toda vez que você atualizasse.

    
por Francesco Dondi 09.05.2017 / 13:54