Introdução
O desenvolvimento de sistemas operacionais (OSDev) é uma área fascinante e desafiadora da computação. O FKernel, meu projeto de desenvolvimento de kernel, é uma tentativa de criar um núcleo moderno para a arquitetura x86_64 usando C++. O objetivo é desenvolver um kernel que combine a flexibilidade dos BSD com o Mach, garantindo ao mesmo tempo um desempenho robusto e eficiente.
Com inspiração nos conceitos de kernels híbridos, como o BSD/Unix e o MACH, o FKernel busca um equilíbrio entre adaptabilidade e desempenho, explorando o potencial de um kernel híbrido para maximizar a eficiência.
Quais seriam os diferencias do FKernel em comparação com outros kerneis
O FKernel se destaca de outros kerneis em diversos aspectos:
Especificidade de Arquitetura: Ao focar em uma única arquitetura, o FKernel permite um aprimoramento direcionado e uma manutenção simplificada, proporcionando um kernel mais eficiente e de fácil compreensão.
Facilidade no Desenvolvimento de Drivers e Filesystems: Inspirado no DriverKit da Apple, o FKernel oferece um framework que simplifica a criação e inicialização de drivers e sistemas de arquivos. Com uma interface de classe virtual, é possível definir e gerenciar drivers e VFS (Virtual File System) de forma mais eficaz.
Exemplo de Interface para Drivers
enum class DriverStatus {
OK,
Error,
};
class DriverInterface {
public:
virtual DriverStatus initDriver() = 0;
virtual DriverStatus readData(uint8_t* buffer, size_t size) = 0;
virtual DriverStatus writeData(const uint8_t* buffer, size_t size) = 0;
virtual void shutdownDriver() = 0;
virtual ~DriverInterface() = default;
virtual DriverStatus resetDriver() = 0;
virtual DriverStatus setConfiguration(const void* config, size_t configSize) = 0;
virtual std::string getDriverName() const = 0;
virtual std::string getDriverVersion() const = 0;
};
Exemplo de Interface para Filesystems
enum class FileStatus {
Opened,
Closed,
};
class FileSystemInterface {
public:
virtual ~FileSystemInterface() = default;
virtual void open(const std::string& filename) = 0;
virtual void close() = 0;
virtual size_t read(void* buffer, size_t size) = 0;
virtual size_t write(const void* buffer, size_t size) = 0;
virtual FileStatus getStatus() const = 0;
virtual std::string getFileName() const = 0;
virtual bool isError() const = 0;
virtual std::string getErrorDescription() const = 0;
};
Essas interfaces serão adaptadas e atualizadas conforme necessário, permitindo maior compatibilidade e facilidade de manutenção.
Alguns recursos monoliticamente instalados do FKernel
O FKernel inclui uma série de recursos monolíticos que aprimoram seu desempenho e flexibilidade:
Hypervisors Suportados
- Kvm: Suporte para o driver de virtualização KVM.
- Xen: Suporte para o driver de virtualização Xen.
Formatos de Arquivos Suportados
- Formato Elf: Suporte básico ao formato ELF integrado no Kernel.
- Formato Mach-O: Suporte básico ao formato Mach-O integrado no Kernel.
Sistema de Arquivos Suportados
- FAT: Suporte ao sistema de arquivos FAT, uma opção simples e de especificação aberta.
- UFS: Suporte ao sistema de arquivos UFS, ideal para sistemas Unix-like.
- EXFAT: Suporte ao sistema de arquivos EXFAT para compartilhamento entre sistemas operacionais.
- F2FS: Suporte ao sistema de arquivos F2FS, otimizado para SSDs e SSDs NVMe.
Além desses, o FKernel também incorporará sistemas de arquivos virtuais como SysFS, DevFS, TmpFS, bem como outros como 9p, SSHFS, UnionFS, e OverlayFS.
Expansibilidade e futuro do FKernel
O FKernel não se limita aos recursos atuais. Sua arquitetura modular permite a adição de novos formatos, drivers e dispositivos, mantendo a versão padrão inalterada.
Atualmente, o FKernel está em fase de planejamento, com foco na inclusão de otimizações C++ avançadas, como o uso de SIMD para melhorar a eficiência das instruções.
Adicionalmente, o projeto seguirá boas práticas de desenvolvimento, como Clean Code, Space Proof Code, Early Return, e Clause Guards.
Para atrair novos usuários e desenvolvedores, planejo criar um montador de distros semelhante ao SUSE Studio, utilizando Dialog, Shell Script, e Xmake. Isso permitirá a criação de distros personalizadas para o FKernel e Linux, promovendo a utilidade e gerando interesse.
Outra estratégia é desenvolver um sistema operacional customizado que aproveite ao máximo a estrutura do FKernel, oferecendo suporte a DRI, HDR, e outras funcionalidades, com uma interface aberta e extensível.
Conclusão
O FKernel é projetado para ser um sistema operacional moderno, modular e eficiente, com uma arquitetura robusta e recursos avançados. O objetivo é oferecer um kernel que se destaque pela flexibilidade, desempenho e inovação, aproveitando o melhor da tecnologia atual.