<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Erik Inkinen</title><link>/pt/</link><description>Recent content on Erik Inkinen</description><generator>Hugo -- gohugo.io</generator><copyright>&amp;copy; Erik Inkinen</copyright><lastBuildDate>Thu, 16 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="/pt/index.xml" rel="self" type="application/rss+xml"/><item><title>O que é um sistema operacional baseado em capacidades</title><link>/pt/posts/erix-article-2/</link><pubDate>Thu, 16 Apr 2026 00:00:00 +0000</pubDate><guid>/pt/posts/erix-article-2/</guid><description>Os sistemas operacionais modernos impõem limites de segurança entre processos, arquivos, dispositivos e usuários. No entanto, a forma como esses limites são implementados varia significativamente entre diferentes projetos de sistema.
A maioria dos sistemas operacionais convencionais depende de controle de acesso baseado em identidade e de espaços de nomes globais. Sistemas operacionais baseados em capacidades adotam uma abordagem fundamentalmente diferente: representam a autoridade explicitamente e a tornam um conceito de primeira classe.</description><content>&lt;p>Os sistemas operacionais modernos impõem limites de segurança entre processos,
arquivos, dispositivos e usuários. No entanto, a forma como esses limites são
implementados varia significativamente entre diferentes projetos de sistema.&lt;/p>
&lt;p>A maioria dos sistemas operacionais convencionais depende de
&lt;strong>controle de acesso baseado em identidade&lt;/strong> e de &lt;strong>espaços de nomes
globais&lt;/strong>. Sistemas operacionais baseados em capacidades adotam uma abordagem
fundamentalmente diferente: representam a autoridade explicitamente e a tornam
um conceito de primeira classe.&lt;/p>
&lt;p>Este artigo apresenta sistemas baseados em capacidades, explica como eles
diferem de modelos tradicionais e descreve por que são centrais para o design
do EriX.&lt;/p>
&lt;hr>
&lt;h2 id="o-problema-autoridade-ambiente">O problema: autoridade ambiente&lt;/h2>
&lt;p>Em sistemas tradicionais, processos frequentemente têm acesso a recursos por
meio de &lt;strong>autoridade ambiente&lt;/strong>.&lt;/p>
&lt;p>Autoridade ambiente significa que um programa pode acessar um recurso
simplesmente porque ele existe em um espaço de nomes compartilhado e o sistema
determina que o programa tem permissão para usá-lo.&lt;/p>
&lt;p>Por exemplo:&lt;/p>
&lt;ul>
&lt;li>Um processo pode abrir &lt;code>/etc/passwd&lt;/code> se tiver permissões suficientes.&lt;/li>
&lt;li>Um programa pode se conectar a um socket de rede se o sistema operacional
permitir.&lt;/li>
&lt;li>Um serviço pode acessar arquivos com base na identidade do usuário ou na
associação a grupos.&lt;/li>
&lt;/ul>
&lt;p>Em todos esses casos, a autoridade para acessar o recurso é &lt;strong>implícita&lt;/strong>.&lt;/p>
&lt;p>O processo não possui uma referência direta e explícita ao recurso. Em vez
disso, depende de:&lt;/p>
&lt;ul>
&lt;li>nomes globais (caminhos de arquivo, portas, identificadores de dispositivo)&lt;/li>
&lt;li>verificações de acesso (IDs de usuário, permissões, ACLs)&lt;/li>
&lt;/ul>
&lt;p>Esse modelo cria vários problemas:&lt;/p>
&lt;h3 id="1-problema-do-delegado-confuso">1. Problema do delegado confuso&lt;/h3>
&lt;p>Um programa pode acidentalmente usar sua autoridade de forma indevida em nome
de outro programa.&lt;/p>
&lt;p>Por exemplo, um serviço privilegiado pode ler um arquivo solicitado por um
cliente não confiável, mesmo que esse cliente não devesse ter acesso a ele.&lt;/p>
&lt;h3 id="2-autoridade-ampla-demais">2. Autoridade ampla demais&lt;/h3>
&lt;p>Programas frequentemente executam com mais permissões do que realmente
precisam. Isso aumenta o impacto de bugs ou comprometimentos.&lt;/p>
&lt;h3 id="3-raciocínio-difícil">3. Raciocínio difícil&lt;/h3>
&lt;p>É difícil determinar o que um processo pode fazer sem analisar o estado global,
as identidades de usuário e as políticas de controle de acesso.&lt;/p>
&lt;hr>
&lt;h2 id="a-ideia-central-capacidades">A ideia central: capacidades&lt;/h2>
&lt;p>Uma &lt;strong>capacidade&lt;/strong> é um token não falsificável que concede acesso a um objeto
específico com direitos específicos.&lt;/p>
&lt;p>Em vez de perguntar:&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;Este processo tem permissão para acessar este recurso?&amp;rdquo;&lt;/p>
&lt;/blockquote>
&lt;p>um sistema baseado em capacidades pergunta:&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;Este processo possui uma capacidade que autoriza esta operação?&amp;rdquo;&lt;/p>
&lt;/blockquote>
&lt;p>Se a resposta for não, a operação não pode prosseguir.&lt;/p>
&lt;hr>
&lt;h2 id="propriedades-das-capacidades">Propriedades das capacidades&lt;/h2>
&lt;p>Capacidades têm várias propriedades definidoras:&lt;/p>
&lt;h3 id="1-não-falsificabilidade">1. Não falsificabilidade&lt;/h3>
&lt;p>Um processo não pode criar uma capacidade válida do nada.&lt;/p>
&lt;p>Capacidades são criadas e gerenciadas pelo kernel, o que garante que não possam
ser falsificadas nem adivinhadas.&lt;/p>
&lt;hr>
&lt;h3 id="2-autoridade-explícita">2. Autoridade explícita&lt;/h3>
&lt;p>Toda autoridade é representada explicitamente por meio de capacidades.&lt;/p>
&lt;p>Se um processo pode executar uma operação, ele deve possuir uma capacidade que
a permita. Não existe acesso implícito por meio de espaços de nomes globais.&lt;/p>
&lt;hr>
&lt;h3 id="3-direitos-granulares">3. Direitos granulares&lt;/h3>
&lt;p>Capacidades podem codificar permissões específicas, como:&lt;/p>
&lt;ul>
&lt;li>acesso somente leitura&lt;/li>
&lt;li>acesso de escrita&lt;/li>
&lt;li>permissões de execução&lt;/li>
&lt;li>subconjuntos limitados de operações&lt;/li>
&lt;/ul>
&lt;p>Isso permite controle preciso sobre o que cada processo pode fazer.&lt;/p>
&lt;hr>
&lt;h3 id="4-transferibilidade">4. Transferibilidade&lt;/h3>
&lt;p>Capacidades podem ser transferidas entre processos, normalmente por meio de
&lt;strong>comunicação entre processos (IPC)&lt;/strong>.&lt;/p>
&lt;p>Isso permite delegação controlada de autoridade.&lt;/p>
&lt;hr>
&lt;h2 id="objetos-e-capacidades">Objetos e capacidades&lt;/h2>
&lt;p>Em um sistema baseado em capacidades, tudo é modelado como um &lt;strong>objeto&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>regiões de memória&lt;/li>
&lt;li>arquivos&lt;/li>
&lt;li>dispositivos&lt;/li>
&lt;li>endpoints de IPC&lt;/li>
&lt;li>processos&lt;/li>
&lt;/ul>
&lt;p>Uma capacidade é uma referência a um objeto combinada com um conjunto de
direitos.&lt;/p>
&lt;p>Um processo interage com o sistema invocando operações sobre objetos por meio
de suas capacidades.&lt;/p>
&lt;p>Não há necessidade de nomes globais como caminhos de arquivo ou identificadores
de dispositivo dentro do kernel. Todo acesso é mediado por capacidades.&lt;/p>
&lt;hr>
&lt;h2 id="como-sistemas-baseados-em-capacidades-funcionam">Como sistemas baseados em capacidades funcionam&lt;/h2>
&lt;p>Em alto nível, um sistema baseado em capacidades funciona assim:&lt;/p>
&lt;ol>
&lt;li>O kernel cria objetos e capacidades.&lt;/li>
&lt;li>Cada processo possui um &lt;strong>espaço de capacidades&lt;/strong> (frequentemente chamado de
&lt;em>CSpace&lt;/em>), que armazena suas capacidades.&lt;/li>
&lt;li>Um processo só pode operar sobre objetos para os quais possui capacidades.&lt;/li>
&lt;li>Capacidades podem ser transferidas entre processos por meio de IPC.&lt;/li>
&lt;li>O kernel impõe todas as verificações de capacidades.&lt;/li>
&lt;/ol>
&lt;p>Isso resulta em um sistema no qual a autoridade é:&lt;/p>
&lt;ul>
&lt;li>explícita&lt;/li>
&lt;li>localizada&lt;/li>
&lt;li>transferível&lt;/li>
&lt;li>fácil de analisar&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="exemplo-abrir-um-arquivo">Exemplo: abrir um arquivo&lt;/h2>
&lt;h3 id="modelo-tradicional">Modelo tradicional&lt;/h3>
&lt;p>Em um sistema tradicional:&lt;/p>
&lt;ol>
&lt;li>Um processo chama &lt;code>open(&amp;quot;/etc/config&amp;quot;)&lt;/code>&lt;/li>
&lt;li>O kernel verifica permissões:
&lt;ul>
&lt;li>ID de usuário&lt;/li>
&lt;li>associação a grupos&lt;/li>
&lt;li>bits de modo do arquivo&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Se permitido, um descritor de arquivo é retornado&lt;/li>
&lt;/ol>
&lt;p>A autoridade vem de &lt;strong>estado global e identidade&lt;/strong>.&lt;/p>
&lt;hr>
&lt;h3 id="modelo-baseado-em-capacidades">Modelo baseado em capacidades&lt;/h3>
&lt;p>Em um sistema baseado em capacidades:&lt;/p>
&lt;ol>
&lt;li>Um processo já deve possuir uma &lt;strong>capacidade de arquivo&lt;/strong>&lt;/li>
&lt;li>Ele usa essa capacidade para realizar operações de leitura ou escrita&lt;/li>
&lt;/ol>
&lt;p>Se o processo não tiver a capacidade, ele não poderá acessar o arquivo,
independentemente do nome que usar.&lt;/p>
&lt;p>Não existe etapa de busca global dentro do kernel.&lt;/p>
&lt;hr>
&lt;h2 id="delegação-e-menor-privilégio">Delegação e menor privilégio&lt;/h2>
&lt;p>Um dos aspectos mais poderosos de sistemas baseados em capacidades é a
&lt;strong>delegação&lt;/strong>.&lt;/p>
&lt;p>Um processo pode dar a outro processo um subconjunto de sua autoridade
transferindo uma capacidade.&lt;/p>
&lt;p>Por exemplo:&lt;/p>
&lt;ul>
&lt;li>Um servidor de arquivos dá a um cliente acesso somente leitura a um arquivo&lt;/li>
&lt;li>Um gerenciador de memória concede acesso a uma região específica de memória&lt;/li>
&lt;li>Um processo concede acesso a um endpoint de IPC&lt;/li>
&lt;/ul>
&lt;p>Isso viabiliza o &lt;strong>princípio do menor privilégio&lt;/strong>:&lt;/p>
&lt;blockquote>
&lt;p>Cada componente recebe apenas a autoridade de que realmente precisa.&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h2 id="eliminando-a-autoridade-ambiente">Eliminando a autoridade ambiente&lt;/h2>
&lt;p>Sistemas baseados em capacidades eliminam completamente a autoridade ambiente.&lt;/p>
&lt;p>Não há:&lt;/p>
&lt;ul>
&lt;li>espaços de nomes globais dentro do kernel&lt;/li>
&lt;li>acesso implícito baseado em identidade&lt;/li>
&lt;li>privilégios ocultos&lt;/li>
&lt;/ul>
&lt;p>Toda autoridade deve ser passada explicitamente.&lt;/p>
&lt;p>Isso torna muito mais fácil analisar:&lt;/p>
&lt;ul>
&lt;li>o que um processo pode fazer&lt;/li>
&lt;li>como a autoridade flui pelo sistema&lt;/li>
&lt;li>onde podem surgir problemas de segurança&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="revogação-um-problema-difícil">Revogação (um problema difícil)&lt;/h2>
&lt;p>Um dos desafios em sistemas baseados em capacidades é a &lt;strong>revogação&lt;/strong>.&lt;/p>
&lt;p>Depois que uma capacidade é dada a um processo, como ela pode ser retirada?&lt;/p>
&lt;p>Diferentes sistemas implementam revogação de maneiras diferentes:&lt;/p>
&lt;ul>
&lt;li>camadas de indireção&lt;/li>
&lt;li>rastreamento de referências&lt;/li>
&lt;li>árvores de capacidades&lt;/li>
&lt;li>mecanismos de versionamento&lt;/li>
&lt;/ul>
&lt;p>Revogação é uma área importante de pesquisa e será explorada em estágios
posteriores do EriX.&lt;/p>
&lt;hr>
&lt;h2 id="sistemas-baseados-em-capacidades-na-prática">Sistemas baseados em capacidades na prática&lt;/h2>
&lt;p>Ideias baseadas em capacidades não são novas. Vários sistemas as implementaram:&lt;/p>
&lt;ul>
&lt;li>KeyKOS / EROS&lt;/li>
&lt;li>seL4 (um micronúcleo formalmente verificado)&lt;/li>
&lt;li>CHERI (capacidades assistidas por hardware)&lt;/li>
&lt;li>Capsicum (extensões de capacidades para FreeBSD)&lt;/li>
&lt;/ul>
&lt;p>Esses sistemas demonstram que projetos baseados em capacidades são ao mesmo
tempo práticos e poderosos.&lt;/p>
&lt;hr>
&lt;h2 id="como-o-erix-usa-capacidades">Como o EriX usa capacidades&lt;/h2>
&lt;p>O EriX foi projetado desde o início como um &lt;strong>sistema baseado em capacidades&lt;/strong>.&lt;/p>
&lt;p>No EriX:&lt;/p>
&lt;ul>
&lt;li>toda autoridade é representada por meio de capacidades&lt;/li>
&lt;li>capacidades são fortemente tipadas&lt;/li>
&lt;li>capacidades são imutáveis depois de criadas&lt;/li>
&lt;li>capacidades são transferidas via IPC&lt;/li>
&lt;li>o kernel impõe não falsificabilidade e invariantes de segurança&lt;/li>
&lt;/ul>
&lt;p>Não há espaços de nomes globais dentro do kernel. Todo acesso a recursos é
mediado por capacidades.&lt;/p>
&lt;p>Isso se alinha ao objetivo mais amplo de tornar a autoridade:&lt;/p>
&lt;ul>
&lt;li>explícita&lt;/li>
&lt;li>mínima&lt;/li>
&lt;li>fácil de analisar&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="por-que-isso-importa">Por que isso importa&lt;/h2>
&lt;p>Sistemas baseados em capacidades fornecem uma base para construir:&lt;/p>
&lt;ul>
&lt;li>sistemas mais seguros&lt;/li>
&lt;li>arquiteturas mais modulares&lt;/li>
&lt;li>sistemas mais fáceis de analisar e verificar&lt;/li>
&lt;/ul>
&lt;p>Ao remover autoridade implícita e tornar todo acesso explícito, eles eliminam
classes inteiras de vulnerabilidades comuns em sistemas tradicionais.&lt;/p>
&lt;hr>
&lt;h2 id="olhando-adiante">Olhando adiante&lt;/h2>
&lt;p>Capacidades são um conceito fundamental no EriX. Em artigos futuros,
exploraremos como elas são implementadas na prática, incluindo:&lt;/p>
&lt;ul>
&lt;li>espaços de capacidades (CSpace)&lt;/li>
&lt;li>comunicação entre processos (IPC)&lt;/li>
&lt;li>gerenciamento de memória usando capacidades não tipadas&lt;/li>
&lt;li>delegação e grafos de autoridade&lt;/li>
&lt;/ul>
&lt;p>Entender capacidades é o primeiro passo para entender o restante do sistema.&lt;/p></content></item><item><title>Por que estou construindo um micronúcleo baseado em capacidades do zero</title><link>/pt/posts/erix-article-1/</link><pubDate>Wed, 11 Mar 2026 00:00:00 +0000</pubDate><guid>/pt/posts/erix-article-1/</guid><description>Os sistemas operacionais estão entre os programas mais complexos já construídos. Eles gerenciam memória, escalonam computação, controlam hardware e impõem os limites de segurança que protegem cada aplicação em execução em uma máquina.
Ainda assim, muitos dos sistemas operacionais dos quais dependemos hoje foram construídos sobre ideias arquitetônicas que remontam a várias décadas. Embora esses sistemas sejam extraordinariamente poderosos e bem testados, eles também carregam décadas de complexidade acumulada.
Este projeto explora uma direção diferente: construir um sistema operacional moderno de micronúcleo baseado em capacidades do zero, com forte foco em autoridade explícita, base de computação confiável (TCB) mínima e separação estrita entre núcleo e espaço de usuário.</description><content>&lt;p>Os sistemas operacionais estão entre os programas mais complexos já
construídos. Eles gerenciam memória, escalonam computação, controlam hardware
e impõem os limites de segurança que protegem cada aplicação em execução em
uma máquina.&lt;/p>
&lt;p>Ainda assim, muitos dos sistemas operacionais dos quais dependemos hoje foram
construídos sobre ideias arquitetônicas que remontam a várias décadas.
Embora esses sistemas sejam extraordinariamente poderosos e bem testados,
eles também carregam décadas de complexidade acumulada.&lt;/p>
&lt;p>Este projeto explora uma direção diferente: construir um &lt;strong>sistema
operacional moderno de micronúcleo baseado em capacidades do zero&lt;/strong>, com forte
foco em autoridade explícita, base de computação confiável (TCB) mínima e
separação estrita entre núcleo e espaço de usuário.&lt;/p>
&lt;p>Este sistema operacional se chama &lt;a href="https://git.erikinkinen.fi/erix">&lt;strong>EriX&lt;/strong>&lt;/a>.&lt;/p>
&lt;hr>
&lt;h2 id="por-que-construir-outro-sistema-operacional">Por que construir outro sistema operacional?&lt;/h2>
&lt;p>À primeira vista, construir um novo sistema operacional parece desnecessário.
Sistemas maduros como Linux, Windows e BSD já existem e alimentam bilhões de
dispositivos.&lt;/p>
&lt;p>No entanto, esses sistemas evoluíram sob restrições históricas.
Com o tempo, acumularam camadas de abstrações, mecanismos de compatibilidade
e interfaces legadas. Embora esses recursos sejam frequentemente necessários
em software do mundo real, eles também dificultam experimentar ideias
arquitetônicas fundamentalmente diferentes.&lt;/p>
&lt;p>Sistemas operacionais de pesquisa há muito tempo exploram abordagens
alternativas para o projeto de sistemas operacionais. Micronúcleos,
sistemas de capacidades e núcleos formalmente verificados demonstraram que é
possível construir sistemas menores, mais seguros e mais fáceis de raciocinar.&lt;/p>
&lt;p>O objetivo do EriX não é substituir os sistemas operacionais existentes.
Em vez disso, é uma exploração de como um sistema operacional moderno poderia
ser projetado se começarmos de primeiros princípios.&lt;/p>
&lt;hr>
&lt;h2 id="micronúcleos-e-a-base-de-computação-confiável">Micronúcleos e a base de computação confiável&lt;/h2>
&lt;p>Uma das ideias centrais por trás do EriX é a
&lt;strong>arquitetura de micronúcleo&lt;/strong>.&lt;/p>
&lt;p>Kernels monolíticos tradicionais incluem muitos serviços diretamente dentro do
próprio núcleo. Isso frequentemente inclui:&lt;/p>
&lt;ul>
&lt;li>controladores de dispositivos&lt;/li>
&lt;li>sistemas de arquivos&lt;/li>
&lt;li>pilhas de rede&lt;/li>
&lt;li>subsistemas de gerenciamento de processos&lt;/li>
&lt;/ul>
&lt;p>Embora essa abordagem possa ser eficiente, ela também aumenta o tamanho da
&lt;strong>base de computação confiável (TCB)&lt;/strong>. A TCB inclui cada parte de código que
precisa se comportar corretamente para que o sistema permaneça seguro e
confiável.&lt;/p>
&lt;p>Micronúcleos adotam uma abordagem diferente.&lt;/p>
&lt;p>Um micronúcleo mantém dentro do núcleo apenas os mecanismos mais fundamentais,
tipicamente incluindo:&lt;/p>
&lt;ul>
&lt;li>escalonamento de threads de execução&lt;/li>
&lt;li>gerenciamento de espaço de endereçamento&lt;/li>
&lt;li>comunicação entre processos (IPC)&lt;/li>
&lt;li>gerenciamento de capacidades&lt;/li>
&lt;li>tratamento de interrupções e exceções&lt;/li>
&lt;/ul>
&lt;p>Todo o resto roda em &lt;strong>espaço de usuário&lt;/strong>, incluindo controladores,
sistemas de arquivos e serviços de nível mais alto.&lt;/p>
&lt;p>Esse projeto reduz drasticamente a quantidade de código em que é necessário
confiar. Falhas em componentes de espaço de usuário têm menor probabilidade
de comprometer todo o sistema, e componentes individuais podem ser
reiniciados ou substituídos sem derrubar o núcleo.&lt;/p>
&lt;hr>
&lt;h2 id="segurança-baseada-em-capacidades">Segurança baseada em capacidades&lt;/h2>
&lt;p>Outro princípio central de projeto do EriX é a
&lt;strong>segurança baseada em capacidades&lt;/strong>.&lt;/p>
&lt;p>A maioria dos sistemas operacionais depende fortemente de
&lt;strong>autoridade ambiente&lt;/strong>. Nesses sistemas, processos frequentemente têm acesso
implícito a recursos com base em espaços de nomes globais, identidades de usuário
ou privilégios herdados.&lt;/p>
&lt;p>Por exemplo, um processo pode abrir um arquivo simplesmente porque conhece o
caminho do arquivo e o sistema operacional decide que o processo tem permissão
para acessá-lo.&lt;/p>
&lt;p>Sistemas de capacidades adotam uma abordagem diferente.&lt;/p>
&lt;p>Uma &lt;strong>capacidade&lt;/strong> é um token infalsificável que concede acesso a um objeto
específico com direitos específicos. Um processo só pode acessar um objeto se
possuir uma capacidade que autorize esse acesso.&lt;/p>
&lt;p>Capacidades têm várias propriedades importantes:&lt;/p>
&lt;ul>
&lt;li>Elas representam autoridade explicitamente.&lt;/li>
&lt;li>Elas podem ser transferidas entre processos.&lt;/li>
&lt;li>Elas podem restringir operações a um conjunto preciso de direitos.&lt;/li>
&lt;/ul>
&lt;p>Em um sistema baseado em capacidades, a autoridade flui por transferências
explícitas em vez de espaços de nomes globais. Isso torna o sistema mais fácil de
raciocinar e ajuda a eliminar classes inteiras de vulnerabilidades de
segurança.&lt;/p>
&lt;hr>
&lt;h2 id="por-que-rust">Por que Rust?&lt;/h2>
&lt;p>Sistemas operacionais são tradicionalmente escritos em C ou assembly.
Essas linguagens fornecem controle preciso sobre hardware e memória,
mas também tornam fácil introduzir bugs sutis.&lt;/p>
&lt;p>Bugs de segurança de memória, como uso após liberação, estouros de buffer e
corridas de dados, têm sido historicamente uma das maiores fontes de vulnerabilidades em
software de sistemas.&lt;/p>
&lt;p>EriX é escrito principalmente em &lt;strong>Rust&lt;/strong>.&lt;/p>
&lt;p>Rust fornece fortes garantias de segurança de memória enquanto ainda permite
controle de baixo nível sobre hardware. O modelo de propriedade da linguagem
ajuda a evitar muitas classes de bugs em tempo de compilação, enquanto seus
blocos &lt;code>unsafe&lt;/code> explícitos tornam operações potencialmente perigosas visíveis
e auditáveis.&lt;/p>
&lt;p>Usar Rust não elimina todos os erros possíveis, mas eleva significativamente
a linha de base de segurança na programação de sistemas.&lt;/p>
&lt;hr>
&lt;h2 id="um-sistema-operacional-de-sala-limpa">Um sistema operacional de sala limpa&lt;/h2>
&lt;p>Um aspecto incomum do projeto EriX é sua abordagem de
&lt;strong>desenvolvimento em sala limpa&lt;/strong>.&lt;/p>
&lt;p>Todos os componentes do sistema são implementados dentro do próprio projeto.
Nenhum código-fonte externo é copiado ou incorporado, e nenhuma biblioteca de
terceiros é usada.&lt;/p>
&lt;p>Essa restrição serve a vários propósitos:&lt;/p>
&lt;ul>
&lt;li>Ela garante que todo o sistema possa ser compreendido e auditado.&lt;/li>
&lt;li>Ela evita dependências ocultas e comportamentos inesperados.&lt;/li>
&lt;li>Ela força decisões arquitetônicas a serem explícitas, em vez de herdadas.&lt;/li>
&lt;/ul>
&lt;p>O desenvolvimento em sala limpa também transforma o projeto em um exercício
educacional. Cada subsistema, do carregador de inicialização ao gerenciador de memória,
precisa ser projetado e implementado deliberadamente.&lt;/p>
&lt;hr>
&lt;h2 id="um-objetivo-de-longo-prazo-auto-hospedagem">Um objetivo de longo prazo: auto-hospedagem&lt;/h2>
&lt;p>Um dos objetivos de longo prazo do EriX é a &lt;strong>auto-hospedagem&lt;/strong>.&lt;/p>
&lt;p>Um sistema é considerado auto-hospedado quando consegue compilar seu próprio
código-fonte usando ferramentas que rodam no próprio sistema.&lt;/p>
&lt;p>Para o EriX, isso significa que, eventualmente:&lt;/p>
&lt;ul>
&lt;li>o compilador Rust roda no EriX&lt;/li>
&lt;li>as ferramentas de compilação rodam no EriX&lt;/li>
&lt;li>todo o sistema operacional pode ser compilado nativamente dentro do EriX&lt;/li>
&lt;/ul>
&lt;p>Alcançar esse marco exige implementar muitas camadas de infraestrutura,
incluindo sistemas de arquivos, gerenciamento de processos e um ambiente de
espaço de usuário compatível com POSIX.&lt;/p>
&lt;hr>
&lt;h2 id="por-que-documentar-a-jornada">Por que documentar a jornada?&lt;/h2>
&lt;p>Construir um sistema operacional é um processo longo e complexo.
Muitas das percepções mais interessantes não aparecem no sistema final,
mas nas decisões, compromissos e erros encontrados ao longo do caminho.&lt;/p>
&lt;p>Este blog documenta o desenvolvimento do EriX à medida que ele evolui.
Posts futuros abordarão tópicos como:&lt;/p>
&lt;ul>
&lt;li>projetar um formato de imagem de inicialização&lt;/li>
&lt;li>implementar espaços de capacidades&lt;/li>
&lt;li>construir um sistema de IPC&lt;/li>
&lt;li>gerenciar autoridade de memória&lt;/li>
&lt;li>construir servidores em espaço de usuário&lt;/li>
&lt;/ul>
&lt;p>O objetivo é tornar o processo de desenvolvimento transparente e educativo.&lt;/p>
&lt;hr>
&lt;h2 id="olhando-adiante">Olhando adiante&lt;/h2>
&lt;p>O EriX ainda está em seus estágios iniciais. Grande parte do sistema ainda
precisa ser construída, e muitas decisões de projeto certamente evoluirão ao
longo do tempo.&lt;/p>
&lt;p>Mas os princípios orientadores já estão claros:&lt;/p>
&lt;ul>
&lt;li>núcleo mínimo&lt;/li>
&lt;li>autoridade explícita&lt;/li>
&lt;li>segurança baseada em capacidades&lt;/li>
&lt;li>modularidade estrita&lt;/li>
&lt;li>implementação em sala limpa&lt;/li>
&lt;/ul>
&lt;p>No próximo post, exploraremos uma das ideias centrais por trás do sistema:&lt;/p>
&lt;p>&lt;strong>o que são sistemas operacionais baseados em capacidades e por que eles importam.&lt;/strong>&lt;/p></content></item><item><title>Sobre mim</title><link>/pt/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/pt/about/</guid><description>Estudo tecnologia da informação na Universidade de Tampere. No meu tempo livre, contribuo para software livre e de código aberto, distribuições de software e projetos de sistemas baseados em capacidades, como EriX Project, AES, Cutie Shell Project e Droidian GNU/Linux.
Utilizei várias linguagens de programação. Por exemplo, C, C++, Python, JavaScript e Rust são linguagens com as quais tenho familiaridade por meio de trabalho prático. Também tenho experiência com linguagens de marcação comuns, como HTML e QML.</description><content>&lt;p>Estudo tecnologia da informação na &lt;a href="https://tuni.fi">Universidade de Tampere&lt;/a>. No meu tempo livre, contribuo para software livre e de código aberto, distribuições de software e projetos de sistemas baseados em capacidades, como EriX Project, AES, Cutie Shell Project e Droidian GNU/Linux.&lt;/p>
&lt;p>Utilizei várias linguagens de programação. Por exemplo, C, C++, Python, JavaScript e Rust são linguagens com as quais tenho familiaridade por meio de trabalho prático. Também tenho experiência com linguagens de marcação comuns, como HTML e QML. Além disso, utilizei frameworks de software conhecidos, incluindo Qt Framework.&lt;/p>
&lt;p>Além disso, contribuí para bibliotecas de software e escrevi documentação de referência para elas. Meu trabalho nesses projetos inclui tanto trabalho em equipe com outros contribuidores quanto pesquisa e implementação independentes.&lt;/p>
&lt;p>Tenho experiência com a metodologia DevOps, que enfatiza a integração e a automação de vários processos de desenvolvimento e entrega de software. Tanto no Droidian quanto no Cutie Shell Project, os patches são mesclados na branch principal o mais cedo possível. Adições maiores de funcionalidades são desenvolvidas inicialmente em branches de funcionalidade. No entanto, todas as branches de funcionalidade em andamento são rebaseadas na branch principal com frequência, para que possam ser mescladas a qualquer momento. Tanto a branch principal quanto as branches de funcionalidade são compiladas e empacotadas após cada commit. Além do repositório de produção, existem o repositório de homologação e repositórios de funcionalidade correspondentes a cada branch de funcionalidade. Esses repositórios de pacotes são usados para automatizar com facilidade a criação de um ambiente de testes.&lt;/p>
&lt;p>Também me interessam as línguas naturais e estudá-las. Como resultado, falo vários idiomas.&lt;/p>
&lt;h2 id="projetos">Projetos&lt;/h2>
&lt;p>&lt;strong>EriX Project&lt;/strong> : 2/2026-
&lt;br>&lt;img src="/img/erix.png" width="72" alt="EriX Project logo" />
&lt;br>&lt;a href="https://git.erikinkinen.fi/erix">https://git.erikinkinen.fi/erix&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;Um sistema operacional de micronúcleo, baseado em capacidades e desenvolvido em sala limpa, escrito inteiramente em Rust.&amp;rdquo;&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;p>&lt;strong>AES&lt;/strong> : 1/2026-
&lt;br>&lt;a href="https://git.erikinkinen.fi/erikinkinen/AES">https://git.erikinkinen.fi/erikinkinen/AES&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;AES (Authority Evolution Simulator) é um simulador de pesquisa para estudar como a autoridade evolui ao longo do tempo em sistemas baseados em capacidades.&amp;rdquo;&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;p>&lt;strong>Droidian GNU/Linux&lt;/strong> : 3/2021-
&lt;br>&lt;img src="/img/emblem-droidian.svg" width="72" alt="Droidian logo" />
&lt;br>&lt;a href="https://droidian.org/">https://droidian.org/&lt;/a> / &lt;a href="https://github.com/droidian/">https://github.com/droidian/&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;Droidian é uma distribuição GNU/Linux baseada em Debian para dispositivos móveis. O objetivo do Droidian é conseguir executar Debian em telefones Android. Isso é alcançado com o uso de tecnologias conhecidas, como libhybris e Halium.&amp;rdquo;&lt;/p>
&lt;/blockquote>
&lt;p>Um vídeo meu apresentando o Droidian no Volla Community Days 2021:&lt;/p>
&lt;iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/X9bASL_Q9Y8?start=884" title="YouTube video player" frameborder="0" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen>&lt;/iframe>
&lt;hr>
&lt;p>&lt;strong>Cutie Shell&lt;/strong> : 8/2021-
&lt;br>&lt;img src="/img/cutie.png" width="72" alt="Cutie Shell logo" />
&lt;br>&lt;a href="https://cutie-shell.org/">https://cutie-shell.org/&lt;/a> / &lt;a href="https://github.com/cutie-shell/">https://github.com/cutie-shell/&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;Cutie Shell tem como objetivo ser uma interface móvel bonita e fácil de usar para dispositivos Linux executando Halium ou Linux mainline. Nossa interface é inspirada no Sailfish OS da Jolla, mas não buscamos criar um clone. Uma grande diferença em relação ao Sailfish OS é que nosso código-fonte é totalmente aberto.&amp;rdquo;&lt;/p>
&lt;/blockquote>
&lt;p>Um vídeo meu apresentando o Cutie Shell no Volla Community Days 2023:&lt;/p>
&lt;iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/gAc3fA1edW4?start=14424" title="YouTube video player" frameborder="0" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen>&lt;/iframe>
&lt;p>Outro vídeo meu apresentando o progresso do Cutie Shell no Volla Community Days 2024:&lt;/p>
&lt;iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/7vF5647gNbo?start=17144" title="YouTube video player" frameborder="0" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen>&lt;/iframe>
&lt;h2 id="educação">Educação&lt;/h2>
&lt;p>&lt;strong>Universidade de Tampere&lt;/strong> : 9/2022-
&lt;br>Estudos de bacharelado em Tecnologia da Informação&lt;/p>
&lt;ul>
&lt;li>Atualmente, estou cursando o bacharelado e meu objetivo é concluir um mestrado.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Helsingin matematiikkalukio&lt;/strong> : 8/2018-5/2022
&lt;br>Ensino secundário geral finlandês&lt;/p>
&lt;h2 id="competências-linguísticas">Competências linguísticas&lt;/h2>
&lt;table>
&lt;tr>
&lt;td>Finlandês&lt;/td>
&lt;td>nativo&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Inglês&lt;/td>
&lt;td>avançado&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Espanhol&lt;/td>
&lt;td>avançado&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Catalão&lt;/td>
&lt;td>intermediário&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Sueco&lt;/td>
&lt;td>intermediário&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Francês&lt;/td>
&lt;td>básico&lt;/td>
&lt;/tr>
&lt;/table></content></item></channel></rss>