É possível alterar o kernel em um sistema UNIX / Linux?

16

Eu queria saber se é possível mudar os kernels, por exemplo, substituindo o kernel Linux do Fedora pelo do FreeBSD.

Agora, já existia o Debian GNU / kFreeBSD . É possível personalizar uma distribuição Linux para conter um kernel BSD?

    
por Switch 07.12.2016 / 15:00

3 respostas

21

Não, cada kernel implementa seus próprios recursos à sua maneira. Há uma grande quantidade de compatibilidade POSIX, mas uma vez que você sai disso, os executáveis precisam ser compilados com os mecanismos do kernel já em vigor. Muitos projetos contêm código-fonte que só é compilado se você diz explicitamente que está compilando para o FreeBSD ou Linux. Isso é essencialmente o que o kFreeBSD é. As ferramentas suportam o kernel do FreeBSD, mas elas precisam ser compiladas para ele.

Por exemplo, se você tentar usar epoll_create no FreeBSD, as coisas não funcionarão como esperado.

Naturalmente, você pode cruzar compilar as ferramentas de um sistema BSD no estilo LFS, mas isso provavelmente levará uma eternidade. Não é tão simples como apenas compilar um novo kernel.

    
por 07.12.2016 / 15:24
16

O FreeBSD não usa um kernel Linux - como o próprio nome sugere, ele usa um kernel BSD.

É possível substituir um kernel Linux por um kernel Linux diferente (um que você construiu sozinho ou um que você extraiu de uma distribuição). Esteja ciente de que os programas de espaço do usuário em sua distribuição podem depender de recursos específicos do kernel para serem compilados, e podem não funcionar corretamente se você executá-los em um kernel construído sem esses recursos. Por exemplo, uma distribuição baseada em systemd exigirá cgroups no kernel.

Para o exemplo que você mencionou, sim, uma distribuição GNU pode ser construída para um kernel Linux ou para um kernel BSD. Em muitos casos, existem diferenças de tempo de compilação (por exemplo, #ifdef ) entre os programas compilados para os dois, mesmo se os kernels anunciarem a mesma ABI. No mínimo, as bibliotecas de baixo nível, como a Biblioteca de Tempo de Execução C, têm que acomodar as diferentes ABIs do kernel.

    
por 07.12.2016 / 16:35
2

O kernel é a parte independente e é rotineiramente substituído durante as atualizações do sistema operacional. Alguns drivers proprietários (NVIDIA, etc) possuem os scripts de instalação que corrigem o driver no código fonte do kernel, constroem esse kernel e substituem o kernel atual por ele. Portanto, se você desenvolver sua própria versão de kernel que possa executar toda a funcionalidade necessária, não deverá ser um grande problema plantá-la e deixar o restante do sistema operacional funcionando. No entanto, na maioria das vezes, esse "novo kernel" é derivado da versão oficial recente.

O kernel do Solaris foi portado dessa forma em algum grau, resultando no OpenSolaris executando o ambiente do Gnome.

Ainda assim, colocar o kernel completamente diferente é um esforço significativo, pois as interfaces devem ser conectadas. Isso provavelmente requer muita programação em C e não é apenas sobre o script de construção.

    
por 08.12.2016 / 09:29