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 é 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?

O vento dos sonhos
fonte
3
Simples: liberdade. A liberdade de criar sua própria versão do que você sentir que precisa. Núcleo? Concha? Área de Trabalho. Vá em frente.
Rinzwind
6
Porque eles são separados? A mesma razão pela qual o gerenciador de janelas é tratado separadamente do servidor X (porque eles são separados) e por que o shell é tratado separadamente do emulador de terminal (porque eles também são separados). Agora, se você fosse perguntar por que eles foram concebidos dessa forma ...
user253751
O Ubuntu agora também roda em cima do kernel do Windows 10, o que mostra que é uma separação real. Obviamente, o Windows não vem com um servidor X, o que complica um pouco as coisas, mas isso é esperado quando faltam peças.
MSalters
@MSalters O gerenciador de janelas no Windows é um pouco complicado, sim; no entanto, se alguém realmente deseja executar o X no Windows, existem várias maneiras de lidar com isso. O mais fácil para alguém de fora provavelmente seria um "emulador" de servidor em cima do gerenciador de janelas existente, embora eu não tenha idéia de quão bem isso poderia ser mapeado (a última vez que vi X internals, não estava muito esperançoso). Eu não prendia a respiração - não me parece que muitas pessoas estejam interessadas em ter o X em execução no Windows.
Luaan

Respostas:

12

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

Obviamente, isso é verdade desde que você consiga gerenciar as dependências corretamente. No conjunto de distribuições do 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>

Enquanto o APT permitir, você poderá reiniciar e usar a versão selecionada do kernel, seja genérica, de baixa latência, etc. Ou criar você mesmo uma versão do kernel, por exemplo, o Real-Time Linux , e usá-la com o sistema atual. .

Melebius
fonte
Muito obrigado, mas seria consistente? Digamos, o Ubuntu 14.04 LTS possui a versão 3.19.0 do kernel e, no caso de atualizar o kernel, não é mais o 14.04 LTS, certo? Portanto, se eu tentar atualizar o sistema inteiro posteriormente, ou o mecanismo de atualização interno (Atualizador de Software) me trouxer a nova versão, ele estará ciente da versão atualizada do kernel? É capaz de verificar os módulos separadamente e trazer apenas as alterações necessárias, sem os módulos atualizados já afetados?
The Dreams Wind
11
Veja packages.ubuntu.com/search?keywords=linux-image para a longa lista de versões do kernel suportadas por cada versão do Ubuntu. A versão do Ubuntu é determinada por coisas diferentes da versão do kernel, mas eu não estou realmente ciente de quais… Se você estiver interessado nisso, poderá iniciar outra pergunta.
Melebius
11
@AleksandrMedvedev Muito mais tarde eu o encontrei! A versão do Ubuntu é anotada no arquivo /etc/issueque é fornecido pelo base-filespacote. Como já escrevi, não está relacionado à versão do kernel.
Melebius 8/08/19
5

Como você sabe, o Kernel é uma parte importante do SO, nas distribuições GNU / Linux, você pode atualizar facilmente o kernel sem tocar em outra parte do SO. 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.

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

E sobre a atualização das ferramentas de 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ê obterá:

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

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

sudo apt-get dist-upgrade

você está atualizando tudo, incluindo o kernel.

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

$ apt-cache search "linux-image-[0-9]+.*-generic" | awk '{print $1}' | 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 kernels mais recentes, instale-o como um novo pacote, por exemplo:

sudo apt install linux-image-4.10.0-14-generic
Ravexina
fonte
Isto definitivamente não é verdade.
Mck765 9/17
Corrija-me;) assim que eu aprender algo novo :)
Ravexina
3
sudo apt upgradeatualizará o kernel também se novas versões estiverem disponíveis. sudo apt full-upgradeirá remover as bundas bem, o que asudo apt upgradenão vai fazer.
Soren A
Como agora a atualização para um novo kernel é algum tipo de instalação e enquanto estiver usando o upgradesubcomando, ele não instalará nenhum novo pacote e também não remove nenhum pacote, é por isso que usamos dist-upgrade. pelo menos apt-getfunciona dessa maneira;) então atualizei meus comandos para evitar qualquer confusão.
Ravexina
11
Tenho mais experiência com o aptcomando, depois de uma breve pesquisa, parece que sua resposta está correta agora apte apt-getlida com a coisa diferente, consulte hiroom2.com/2016/05/20/ubuntu-16-04-debian-8-apt -command / ... . Então, algum conhecimento para nós dois ...
mook765
3

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

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

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

O "GNU" começou como uma iniciativa para "melhorar" muitos comandos UNIX comuns. Não vou discutir se eles foram bem-sucedidos ou não, mas eles definitivamente escreveram muitos softwares e, a certa altura, tinham uma coleção de programas utilitários. Eles até começaram a desenvolver seu próprio kernel do sistema operacional (HURD), que se baseava amplamente no UNIX, mas era definitivamente diferente. Mas até hoje o HURD está em seu desenvolvimento inicial e dificilmente é uma solução funcional. "GNU" entre. é 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: eu não quero entrar na discussão se tiverem sucesso ou não - eu não me importo se é "melhor" ou "pior", mas é definitivamente diferente!).

Portanto, com um conjunto de ferramentas sem um 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) necessário, você precisa mais do que apenas um kernel e um conjunto de ferramentas: precisa de um sistema de gerenciamento de pacotes, de procedimentos de instalação, de configurações de modelos, de ....

Várias pessoas diferentes (ou grupos de pessoas) chegaram a essa conclusão e usaram a combinação GNU / Linux para criar um sistema GNU / Linux do seu agrado, adicionando exatamente o que eu falei acima: eles criaram um gerenciador de pacotes, um sistema de empacotamento , procedimentos de instalação e o que mais. Esses diferentes grupos (respectivamente os resultados de seus esforços) são quais são as diferentes distribuições. Hoje existem três gerenciadores de pacotes diferentes em funcionamento (apto 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 apenas pacotes de software que são (essencialmente) o mesmo: o que é chamado quando você emite "ls" ou "df" etc.,

Portanto, "em princípio", você pode atualizar o kernel sozinho, como as pessoas que criaram uma distribuição a partir de várias versões de todos os softwares que falei acima.

Mas, e isso é realmente grande, MAS: porque não há apenas o kernel e algum software adicional, mas muitas outras coisas a serem lembradas, como ferramentas de configuração do sistema (systemd, que algumas distribuições usam e outras não), rede ferramentas de gerenciamento 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 que, se você tentar atualizar o kernel, 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, instalando algum sistema de empacotamento (ou usando um dos 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 trabalho complexo, portanto, na realidade, a maioria dos usuários evita isso e usa algo que pode estar pronto para usar.

Espero que isso responda à sua pergunta.

bakunin
fonte
O GNU não começou como uma iniciativa para "melhorar" muitos comandos UNIX comuns. O GNU era um sistema operacional desde o início, com a finalidade de o software livre em resposta ao UNIX ser restritamente proprietário. Você pode ler mais em seu site . Eles decidiram portar todos os seus softwares para o Linux porque, quando o Linux foi criado, o GNU ainda não tinha um kernel em funcionamento.
Ian Emnace
3

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

O mundo do kernel, onde desenvolvedores de baixo nível trabalham, é um sistema por si só. Tem tudo o que você normalmente encontraria 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 todos os dias estão jogando. Possui APIs rígidas, 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 dar um nome errado de Sistema operacional. A nomenclatura certa é chamá-la de distribuição de software, criada por alguma entidade (Canonical, Fedora, etc.), usando um kernel (Linux, HURD, BSD, etc.) e criada usando um conjunto de ferramentas (geralmente fornecidas pelo GNU )

Para responder sua pergunta, no GNU / Linux (como no Windows e OSX, confie em mim), você pode alterar o kernel, não apenas a versão, mas toda a arquitetura (Linux Kernel, vs HURD Kernel) e, desde que a ABI não é tocada, nunca faça uma única alteração no mundo do usuário ... Naquele dia, quando o homem real precisava criar o kernel a partir de fontes, você podia passar por várias mudanças como essas, para obter uma webcam USB ruim para funcionar ... Agora, com o kernel modular, você só precisa instalar um módulo e obterá 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, a partir de, digamos, um repositório Ubuntu, 99% das vezes, sua maior preocupação é a compatibilidade dos outros componentes do espaço do usuário, não do kernel real. Há casos em que a versão do kernel determina (por meio da ABI) a variedade de coisas que podem ser instaladas no espaço do usuário, mas o objetivo (pelo menos para os desenvolvedores) é fazer com que isso desapareça ...

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

rftghost
fonte
"uma borda afiada (a ABI)." Eu acho que você quer dizer a API. A ABI é, por falta de um termo melhor, um código para interface de hardware. A API, por outro lado, é um código para codificar a interface.
Sam
1

Eu acho que eles são mantidos separados porque o kernel é uma parte crítica. Um kernel com regressão, ou apenas uma atualização com falha, pode causar muitos danos. Você pode atualizá-lo com menos frequência; ou apenas depois de esperar algum tempo para garantir que ninguém relate bugs 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 gostaria que fosse substituída automaticamente pela versão de fábrica sempre que atualizar.

Francesco Dondi
fonte