FKernel com cpp e rust. Explicando as noias

Table of Contents

Introdução

E novamente vamos falar do FKernel, o segundo maior VaporWare da história depois do Microsoft Xenix. Leia mais sobre este assunto neste Post.

Entre muitos objetivos dessa reescrita de concepção, decidi escolher melhores as linguagens com base neste vídeo.

Provavelmente você viu esse tanto de vídeo no YouTube e não julgo quem acha que o rust vai substituir. E não, definitivamente não vai, mas não impedimos ninguém de sonhar.

Dito isso vou apresentar a mudança na ideia do FKernel.

  1. Vamos seguir toda a base de um projeto BSD usando obviamente a licença BSD.
  2. Vamos substituir C por Rust, mas continuar usando C++ e Nasm.

Sim, parece contraditório como tudo que faço, mas tenho explicações que considero no mínimo convincentes para isso.

Motivos de substituir C por Rust

Bom, primeiramente vamos entender o motivo da criação do rust. Como muitos já devem ter falado, o rust surgiu como uma forma de substituir o C e dar mais segurança, desempenho e simultaneidade no desenvolvimento de software. E da forma que o compilador Rust foi projetado, também nos dá uma alta proteção a memória.

Mas o mesmo não vale para o C++ que possui Smart Pointers um conceito elegante na programação que torna o C++ que o usa seguro.

O abismo das linguagens seguras

Existem diversas (e eu generalizo o máximo que posso) diversas linguagens consideradas memory safety:

Essas linguagens como:

Podem ser consideradas Memory Safety isso pela definição do mesmo:

Segurança da memória (memory safety) é o estado de proteção contra vários bugs de software e vulnerabilidades de segurança ao lidar com o acesso à memória, como estouro de buffer e ponteiros pendentes. Por exemplo, o Java é considerado seguro para a memória porque sua detecção de erro em tempo de execução verifica os limites de array e desreferências de ponteiro. Em contraste, C e C++ permitem aritmética arbitrária de ponteiros com ponteiros implementados como endereços diretos de memória sem provisão para verificação de limites, e, portanto, são potencialmente inseguros para a memória (memory-unsafe).

Veja que C++ não se enquadrava na definição de memory-safe pela operação arbitraria de ponteiros, coisa que veio mudar com o advento dos Smart pointers.

Interessante que os smart pointers são similares ao recurso do ARC e isso é motivo suficiente para cogitar usar o C++ como linguagem base do FKernel enquanto uso o Rust como uma linguagem secundária (da forma que o Linux vem fazendo) e isso que Andreas Kling está demostrando ser capaz de fazer em seu projeto SerenityOS.

SerenityOS usando smart pointers no Kernel além de garantir que a memória não vaze, podemos construir um “smart pointer customizado para nosso kernel” com centenas de templates que podem agilizar o desenvolvimento.

Apesar de tudo

Apesar de tudo, o kernel se mantém na ideia primária de ser um kernel híbrido pegando um pouco da ideia do XNU de misturar BSD/Unix com OpenMach garantindo um sistema mais seguro com mais features que os habituais

Conclusão

Esse foi um tipo de post que uso para dumpar meu cérebro de ideias e motivos, se este post foi útil para você fico feliz. Ele com certeza foi útil para mim

comments powered by Disqus
Tags: