Os diferentes kernels Linux / Unix são intercambiáveis?

14

Posso pegar um kernel Linux e usá-lo com o FreeBSD e vice-versa (kernel do FreeBSD, digamos, um Debian)? Existe uma resposta universal? Quais são as limitações? Quais são as obstruções?

    
por Tomasz 22.03.2018 / 10:33

2 respostas

38

Não, os kernels de diferentes implementações de sistemas operacionais no estilo Unix não são intercambiáveis, especialmente porque todos eles apresentam interfaces diferentes para o resto do sistema (espaço do usuário) - suas chamadas de sistema (incluindo ioctl specifics) sistemas de arquivos virtuais que eles usam ...

O que é intercambiável até certo ponto, no nível da fonte, é a combinação do kernel e da biblioteca C, ou melhor, das APIs em nível de usuário que o kernel e as bibliotecas expõem (essencialmente, a visão na camada descrita por POSIX, sem considerar se é realmente POSIX). Exemplos disso incluem Debian GNU / kFreeBSD , que constrói um sistema Debian sobre um kernel do FreeBSD, e < href="https://www.debian.org/ports/hurd/"> Debian GNU / Hurd , que constrói um sistema Debian sobre o Hurd.

Isso não é exatamente o nível de intercambiabilidade do kernel, mas houve tentativas de padronizar uma interface binária de aplicativo comum, para permitir que binários fossem usados em vários sistemas sem precisar de recompilação. Um exemplo é o o Intel Binary Compatibility Standard , que permite que binários em conformidade com ele sejam executados em qualquer sistema Unix que o implemente, incluindo versões do Linux com a camada iBCS 2. Eu usei isso no final dos anos 90 para executar o WordPerfect no Linux.

Veja também Como construir um chroot do FreeBSD dentro do Linux .

    
por 22.03.2018 / 10:40
4

Alguns kernels têm compatibilidade binária permitindo que você misture programas de espaço do usuário com diferentes ABIs (por exemplo, o freebsd pode trabalhar com binários do Linux em um grau) - no entanto, os binários principais (por exemplo, o programa init, o carregador de módulos, a biblioteca C, as ferramentas necessárias para configurar os sistemas de arquivos ...) terão, na prática, muita necessidade de saber sobre as interfaces no nível do kernel para inicializar um sistema com um kernel externo com sucesso.

Além disso, os sistemas de arquivos precisam ser compatíveis. Além disso, as opções de compatibilidade binária precisariam ser compiladas "duramente" no kernel - qualquer coisa implementada como um módulo do kernel poderia falhar porque você não podia executar o carregador do módulo.

Como mencionado, os ambientes do usuário tendem a ser um pouco portáteis se você estiver disposto a recompilar - como sistemas debian baseados no freebsd, ou configurar o sistema netbsd pkgsrc no linux (absolutamente não trivial, mas suportado e possível!).

    
por 22.03.2018 / 22:41