Feral é um kernel monolítico, assim como um pequeno projeto de hobby para construir um sistema operacional completo a partir do zero, mesmo que isso seja muito lentamente.
Feral foi projetado para executar em sistemas de PCs recentes com um BIOS razoavelmente compatível. Por enquanto, Feral não suporta a UEFI, embora uma porta esteja em andamento.
Feral, por enquanto, assume a presença das duas fotos 8259A presentes nos microcomutores tradicionais compatíveis com PC. Nos micros modernos, seu Southbridge, como X399 ou X470, provavelmente tem algo compatível. No futuro, Feral pretende passar para a utilização de recursos mais recentes do processador, como o APIC, e eventualmente o Xapic e o X2APIC. Além disso, Feral suportará multiprocessamento simétrico.
Atualmente, o hardware que está sendo testado inclui um PC com uma placa-mãe de 4 "x4" e uma CPU N3700 ("Braswell") com 4 GB de RAM, um laptop 17z com um 2500U (Zen 1 mencionado acima) e no futuro, um X5-Z8350 com 2 GB de RAM ("Cherry Trail").
No futuro, a Feral deve ser executada no hardware AARCH64 (BCM2711), Power (Sforza) e Rv64GC (U540), com portas escritas em algum lugar nessa ordem.
Arquitetonicamente, Feral é um simples kernel monolítico, que arquitetonicamente compartilha muitas semelhanças com Mach e Plan 9, especialmente o último. Feral prefere colocar a maioria das funcionalidades nos drivers, em vez de assinar diretamente no próprio kernel, para permitir mais flexibilidade e expor os recursos como localização e soquete de rede, para refletir melhor como os processos modernos e o armazenamento funcionam.
Por exemplo, para abrir um arquivo, uma pergunta o servidor de arquivos, que é um processo de propriedade do kernel, que abre um soquete que aceita tráfego recebido. Em seguida, pode ser lido ou escrito para, dependendo de como o soquete foi aberto.
A idéia principal é pegar a modularidade e a flexibilidade dos microkernels e enxertá -la em uma arquitetura tradicional de kernel monolítico, sacrificando a capacidade de fazer coisas como reiniciar os drivers do sistema de arquivos, mantendo benefícios como arquitetura limpa, camadas de motorista e vários provedores de motoristas.
Feral é criado para eu aprender mais sobre o design de sistemas operacionais, enquanto me afasta da maneira tradicional de "fazer outra *clone nix" de fazer isso: não há nada de errado nisso, mas eu gostaria de explorar diferentes maneiras de expor recursos de hardware e sistema aos programas, além de fazer um arquivo em algum lugar. Além disso, gostaria de explorar o quão diferente pode ser um novo sistema operacional dos sistemas tradicionais, sendo fácil de transportar o software existente.
Embora essa imagem esteja desatualizada, pois alguns desses subsistemas devem ser absorvidos pelo kernel, na maioria das vezes isso é preciso para a intenção: 
Feral agora usa cmake para construir. Um script de utilitário está incluído para o caso comum de construção para x86_64 e qemu em vm_test.sh e com o stub GDB ativado em vm_test_gdb.sh .
Para construir manualmente, você deve usar o Clang como seu compilador C. Para o destino x86-64-PC sem suporte EFI, você pode usar o arquivo CMake/x86_64-PC.CMake com o parâmetro -DCMAKE_TOOLCHAIN_FILE=cmake/x86_64-pc.cmake . Isso construirá o kernel adequado como 'Feralker', e algumas etapas adicionais serão necessárias para criar um arquivo ISO inicializável. Consulte o arquivo vm_test.sh para obter detalhes.
Feral deve ser executado confortavelmente em qualquer PC que implemente o conjunto de instruções X86-64 (ou seja, pelo menos K8 CPU) e pelo menos 1 GB de memória do sistema. Esse requisito de memória será reduzido no futuro, mas, por enquanto, é necessário para facilitar um pouco as coisas ao configurar o kernel inicialmente.
Feral espera que um adaptador de exibição compatível com VGA esteja presente para um PC. Como tal, você precisará de algum tipo de adaptador de vídeo capaz de executar no modo VGA. A maioria das CPUs e GPUs de classe de consumo implementam isso em pelo menos uma de suas GPUs.
Atualmente, Feral é testado exclusivamente em máquinas virtuais no topo do Zen 1 1950X e um punhado de máquinas menores de zen 1. É provável que o Feral funcione bem em outros hardware, mas não é testado.
As pastas devem ser nomeadas de maneira a evitar caracteres desnecessários (ou seja, 'Inc' vs 'incluem'.) Da mesma forma, para um determinado módulo, o nome da pasta deve refletir o prefixo, de modo que o gerenciamento de memória esteja em "MM", e o gerenciamento de objetos está em "Ob" e assim por diante.
As funções que devem ser exportadas entre os módulos geralmente devem ter a convenção de nomenclatura de (subsistema) (propósito de função) (tipo de argumento opcional), como "KestartProcessor". Quando a função é específica da arquitetura, ela deve ser prefixada com a arquitetura a que pertence, como "aarch64startpaging ()" ou "x86setupidt ()". Para mais detalhes, consulte Formating.txt
Além disso, as funções devem usar as macros em, inout, opt etc. para identificar claramente o que uma função faz com um argumento. Essas macros se expandem para nada e estão lá apenas para ajudar na documentação.
Kernel do núcleo leve. Maioria da funcionalidade em motoristas. Processos comunicados a Libos (os syscalls vão para uma mesa de kernel que diz a um motorista de Libos que isso foi chamado.)
Os drivers lidam com chamadas de sistema para permitir que os programas "estrangeiros" não modificados, como a versão GNU Mach do GCC ou o jogo dos DOS favoritos de todos os que estão em Marte.
Kernel interno estável Abi. Os motoristas de terceiros devem trabalhar em pequenas revisões. Use o ponteiro do pnext para quaisquer mudanças graves.
O sistema de arquivos estável e de versão incluído, de modo que um deltree acidental não exclua tudo para sempre. Suponha que o usuário não faça backups.
(Eventualmente) Crie drivers totalmente compatíveis com a família de GPUs "Vega" e "Navi".
Suporte X86-64 Extensões de virtualização ("Pacifica").
Algo como uma prisão ou contêineres de chroot, para permitir que o feroz seja útil para operações do servidor.
Algo divertido de trabalhar isso pode ser útil um dia?