<?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>/it/</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="/it/index.xml" rel="self" type="application/rss+xml"/><item><title>Che cos'è un sistema operativo basato su capacità</title><link>/it/posts/erix-article-2/</link><pubDate>Thu, 16 Apr 2026 00:00:00 +0000</pubDate><guid>/it/posts/erix-article-2/</guid><description>I sistemi operativi moderni impongono confini di sicurezza tra processi, file, dispositivi e utenti. Tuttavia, il modo in cui questi confini vengono implementati varia in modo significativo tra diversi progetti di sistema.
La maggior parte dei sistemi operativi tradizionali si basa sul controllo di accesso basato sull&amp;rsquo;identità e sugli spazi dei nomi globali. I sistemi operativi basati su capacità adottano un approccio fondamentalmente diverso: rappresentano l&amp;rsquo;autorità in modo esplicito e la rendono un concetto di primo livello.</description><content>&lt;p>I sistemi operativi moderni impongono confini di sicurezza tra processi, file,
dispositivi e utenti. Tuttavia, il modo in cui questi confini vengono
implementati varia in modo significativo tra diversi progetti di sistema.&lt;/p>
&lt;p>La maggior parte dei sistemi operativi tradizionali si basa sul
&lt;strong>controllo di accesso basato sull&amp;rsquo;identità&lt;/strong> e sugli &lt;strong>spazi dei nomi
globali&lt;/strong>. I sistemi operativi basati su capacità adottano un approccio
fondamentalmente diverso: rappresentano l&amp;rsquo;autorità in modo esplicito e la
rendono un concetto di primo livello.&lt;/p>
&lt;p>Questo articolo introduce i sistemi basati su capacità, spiega in cosa
differiscono dai modelli tradizionali e descrive perché sono centrali per il
design di EriX.&lt;/p>
&lt;hr>
&lt;h2 id="il-problema-lautorità-ambientale">Il problema: l&amp;rsquo;autorità ambientale&lt;/h2>
&lt;p>Nei sistemi tradizionali, i processi hanno spesso accesso alle risorse tramite
l&amp;rsquo;&lt;strong>autorità ambientale&lt;/strong>.&lt;/p>
&lt;p>Autorità ambientale significa che un programma può accedere a una risorsa
semplicemente perché essa esiste in uno spazio dei nomi condiviso e il sistema
determina che il programma ha il permesso di usarla.&lt;/p>
&lt;p>Per esempio:&lt;/p>
&lt;ul>
&lt;li>Un processo può aprire &lt;code>/etc/passwd&lt;/code> se ha permessi sufficienti.&lt;/li>
&lt;li>Un programma può collegarsi a un socket di rete se il sistema operativo lo
consente.&lt;/li>
&lt;li>Un servizio può accedere ai file in base all&amp;rsquo;identità dell&amp;rsquo;utente o
all&amp;rsquo;appartenenza a un gruppo.&lt;/li>
&lt;/ul>
&lt;p>In tutti questi casi, l&amp;rsquo;autorità per accedere alla risorsa è &lt;strong>implicita&lt;/strong>.&lt;/p>
&lt;p>Il processo non possiede un riferimento diretto ed esplicito alla risorsa.
Invece, si basa su:&lt;/p>
&lt;ul>
&lt;li>nomi globali (percorsi di file, porte, identificatori di dispositivo)&lt;/li>
&lt;li>controlli di accesso (ID utente, permessi, ACL)&lt;/li>
&lt;/ul>
&lt;p>Questo modello crea diversi problemi:&lt;/p>
&lt;h3 id="1-problema-del-delegato-confuso">1. Problema del delegato confuso&lt;/h3>
&lt;p>Un programma può usare accidentalmente la propria autorità in modo improprio
per conto di un altro programma.&lt;/p>
&lt;p>Per esempio, un servizio privilegiato potrebbe leggere un file richiesto da un
client non affidabile, anche se quel client non dovrebbe avere accesso al file.&lt;/p>
&lt;h3 id="2-autorità-eccessivamente-ampia">2. Autorità eccessivamente ampia&lt;/h3>
&lt;p>I programmi spesso vengono eseguiti con più permessi di quanti ne abbiano
realmente bisogno. Questo aumenta l&amp;rsquo;impatto di bug o compromissioni.&lt;/p>
&lt;h3 id="3-difficile-da-analizzare">3. Difficile da analizzare&lt;/h3>
&lt;p>È difficile determinare cosa un processo sia autorizzato a fare senza analizzare
lo stato globale, le identità utente e le policy di controllo degli accessi.&lt;/p>
&lt;hr>
&lt;h2 id="lidea-centrale-le-capacità">L&amp;rsquo;idea centrale: le capacità&lt;/h2>
&lt;p>Una &lt;strong>capacità&lt;/strong> è un token non falsificabile che concede accesso a uno
specifico oggetto con specifici diritti.&lt;/p>
&lt;p>Invece di chiedere:&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;Questo processo ha il permesso di accedere a questa risorsa?&amp;rdquo;&lt;/p>
&lt;/blockquote>
&lt;p>un sistema basato su capacità chiede:&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;Questo processo possiede una capacità che autorizza questa operazione?&amp;rdquo;&lt;/p>
&lt;/blockquote>
&lt;p>Se la risposta è no, l&amp;rsquo;operazione non può procedere.&lt;/p>
&lt;hr>
&lt;h2 id="proprietà-delle-capacità">Proprietà delle capacità&lt;/h2>
&lt;p>Le capacità hanno diverse proprietà definitorie:&lt;/p>
&lt;h3 id="1-non-falsificabilità">1. Non falsificabilità&lt;/h3>
&lt;p>Un processo non può creare una capacità valida dal nulla.&lt;/p>
&lt;p>Le capacità vengono create e gestite dal kernel, il che garantisce che non
possano essere falsificate né indovinate.&lt;/p>
&lt;hr>
&lt;h3 id="2-autorità-esplicita">2. Autorità esplicita&lt;/h3>
&lt;p>Tutta l&amp;rsquo;autorità è rappresentata esplicitamente tramite capacità.&lt;/p>
&lt;p>Se un processo può eseguire un&amp;rsquo;operazione, deve possedere una capacità che la
consenta. Non esiste accesso implicito tramite spazi dei nomi globali.&lt;/p>
&lt;hr>
&lt;h3 id="3-diritti-granulari">3. Diritti granulari&lt;/h3>
&lt;p>Le capacità possono codificare permessi specifici, come:&lt;/p>
&lt;ul>
&lt;li>accesso in sola lettura&lt;/li>
&lt;li>accesso in scrittura&lt;/li>
&lt;li>permessi di esecuzione&lt;/li>
&lt;li>sottoinsiemi limitati di operazioni&lt;/li>
&lt;/ul>
&lt;p>Questo consente un controllo preciso su ciò che ogni processo può fare.&lt;/p>
&lt;hr>
&lt;h3 id="4-trasferibilità">4. Trasferibilità&lt;/h3>
&lt;p>Le capacità possono essere trasferite tra processi, tipicamente tramite
&lt;strong>comunicazione inter-processo (IPC)&lt;/strong>.&lt;/p>
&lt;p>Questo consente una delega controllata dell&amp;rsquo;autorità.&lt;/p>
&lt;hr>
&lt;h2 id="oggetti-e-capacità">Oggetti e capacità&lt;/h2>
&lt;p>In un sistema basato su capacità, tutto viene modellato come un &lt;strong>oggetto&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>regioni di memoria&lt;/li>
&lt;li>file&lt;/li>
&lt;li>dispositivi&lt;/li>
&lt;li>endpoint IPC&lt;/li>
&lt;li>processi&lt;/li>
&lt;/ul>
&lt;p>Una capacità è un riferimento a un oggetto combinato con un insieme di diritti.&lt;/p>
&lt;p>Un processo interagisce con il sistema invocando operazioni sugli oggetti
attraverso le proprie capacità.&lt;/p>
&lt;p>Non c&amp;rsquo;è bisogno di nomi globali come percorsi di file o identificatori di
dispositivo all&amp;rsquo;interno del kernel. Ogni accesso è mediato da capacità.&lt;/p>
&lt;hr>
&lt;h2 id="come-funzionano-i-sistemi-basati-su-capacità">Come funzionano i sistemi basati su capacità&lt;/h2>
&lt;p>A livello generale, un sistema basato su capacità funziona così:&lt;/p>
&lt;ol>
&lt;li>Il kernel crea oggetti e capacità.&lt;/li>
&lt;li>Ogni processo ha uno &lt;strong>spazio di capacità&lt;/strong> (spesso chiamato &lt;em>CSpace&lt;/em>),
che memorizza le sue capacità.&lt;/li>
&lt;li>Un processo può operare solo sugli oggetti per cui possiede capacità.&lt;/li>
&lt;li>Le capacità possono essere trasferite tra processi tramite IPC.&lt;/li>
&lt;li>Il kernel applica tutti i controlli di capacità.&lt;/li>
&lt;/ol>
&lt;p>Il risultato è un sistema in cui l&amp;rsquo;autorità è:&lt;/p>
&lt;ul>
&lt;li>esplicita&lt;/li>
&lt;li>localizzata&lt;/li>
&lt;li>trasferibile&lt;/li>
&lt;li>facile da analizzare&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="esempio-aprire-un-file">Esempio: aprire un file&lt;/h2>
&lt;h3 id="modello-tradizionale">Modello tradizionale&lt;/h3>
&lt;p>In un sistema tradizionale:&lt;/p>
&lt;ol>
&lt;li>Un processo chiama &lt;code>open(&amp;quot;/etc/config&amp;quot;)&lt;/code>&lt;/li>
&lt;li>Il kernel controlla i permessi:
&lt;ul>
&lt;li>ID utente&lt;/li>
&lt;li>appartenenza a un gruppo&lt;/li>
&lt;li>bit di modalità del file&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Se consentito, viene restituito un descrittore di file&lt;/li>
&lt;/ol>
&lt;p>L&amp;rsquo;autorità proviene da &lt;strong>stato globale e identità&lt;/strong>.&lt;/p>
&lt;hr>
&lt;h3 id="modello-basato-su-capacità">Modello basato su capacità&lt;/h3>
&lt;p>In un sistema basato su capacità:&lt;/p>
&lt;ol>
&lt;li>Un processo deve già possedere una &lt;strong>capacità di file&lt;/strong>&lt;/li>
&lt;li>Usa questa capacità per eseguire operazioni di lettura o scrittura&lt;/li>
&lt;/ol>
&lt;p>Se il processo non possiede la capacità, non può accedere al file, a
prescindere dal nome che usa.&lt;/p>
&lt;p>Non esiste un passaggio di ricerca globale all&amp;rsquo;interno del kernel.&lt;/p>
&lt;hr>
&lt;h2 id="delega-e-privilegio-minimo">Delega e privilegio minimo&lt;/h2>
&lt;p>Uno degli aspetti più potenti dei sistemi basati su capacità è la &lt;strong>delega&lt;/strong>.&lt;/p>
&lt;p>Un processo può dare a un altro processo un sottoinsieme della propria
autorità trasferendogli una capacità.&lt;/p>
&lt;p>Per esempio:&lt;/p>
&lt;ul>
&lt;li>Un file server concede a un client accesso in sola lettura a un file&lt;/li>
&lt;li>Un gestore della memoria concede accesso a una regione di memoria specifica&lt;/li>
&lt;li>Un processo concede accesso a un endpoint IPC&lt;/li>
&lt;/ul>
&lt;p>Questo abilita il &lt;strong>principio del privilegio minimo&lt;/strong>:&lt;/p>
&lt;blockquote>
&lt;p>Ogni componente riceve solo l&amp;rsquo;autorità di cui ha realmente bisogno.&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h2 id="eliminare-lautorità-ambientale">Eliminare l&amp;rsquo;autorità ambientale&lt;/h2>
&lt;p>I sistemi basati su capacità eliminano completamente l&amp;rsquo;autorità ambientale.&lt;/p>
&lt;p>Non ci sono:&lt;/p>
&lt;ul>
&lt;li>spazi dei nomi globali all&amp;rsquo;interno del kernel&lt;/li>
&lt;li>accesso implicito basato sull&amp;rsquo;identità&lt;/li>
&lt;li>privilegi nascosti&lt;/li>
&lt;/ul>
&lt;p>Ogni autorità deve essere passata esplicitamente.&lt;/p>
&lt;p>Questo rende molto più facile analizzare:&lt;/p>
&lt;ul>
&lt;li>che cosa un processo può fare&lt;/li>
&lt;li>come l&amp;rsquo;autorità fluisce attraverso il sistema&lt;/li>
&lt;li>dove possono sorgere potenziali problemi di sicurezza&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="revoca-un-problema-difficile">Revoca (un problema difficile)&lt;/h2>
&lt;p>Una delle sfide dei sistemi basati su capacità è la &lt;strong>revoca&lt;/strong>.&lt;/p>
&lt;p>Una volta che una capacità è stata data a un processo, come può essere tolta?&lt;/p>
&lt;p>Sistemi diversi implementano la revoca in modi diversi:&lt;/p>
&lt;ul>
&lt;li>livelli di indirezione&lt;/li>
&lt;li>tracciamento dei riferimenti&lt;/li>
&lt;li>alberi di capacità&lt;/li>
&lt;li>meccanismi di versioning&lt;/li>
&lt;/ul>
&lt;p>La revoca è un&amp;rsquo;importante area di ricerca e sarà esplorata nelle fasi
successive di EriX.&lt;/p>
&lt;hr>
&lt;h2 id="sistemi-basati-su-capacità-nella-pratica">Sistemi basati su capacità nella pratica&lt;/h2>
&lt;p>Le idee basate su capacità non sono nuove. Diversi sistemi le hanno
implementate:&lt;/p>
&lt;ul>
&lt;li>KeyKOS / EROS&lt;/li>
&lt;li>seL4 (un micro-nucleo verificato formalmente)&lt;/li>
&lt;li>CHERI (capacità assistite dall&amp;rsquo;hardware)&lt;/li>
&lt;li>Capsicum (estensioni di capacità per FreeBSD)&lt;/li>
&lt;/ul>
&lt;p>Questi sistemi dimostrano che i design basati su capacità sono sia pratici sia
potenti.&lt;/p>
&lt;hr>
&lt;h2 id="come-erix-usa-le-capacità">Come EriX usa le capacità&lt;/h2>
&lt;p>EriX è progettato fin dall&amp;rsquo;inizio come un &lt;strong>sistema basato su capacità&lt;/strong>.&lt;/p>
&lt;p>In EriX:&lt;/p>
&lt;ul>
&lt;li>tutta l&amp;rsquo;autorità è rappresentata tramite capacità&lt;/li>
&lt;li>le capacità sono fortemente tipizzate&lt;/li>
&lt;li>le capacità sono immutabili una volta create&lt;/li>
&lt;li>le capacità sono trasferite tramite IPC&lt;/li>
&lt;li>il kernel applica non falsificabilità e invarianti di sicurezza&lt;/li>
&lt;/ul>
&lt;p>Non ci sono spazi dei nomi globali all&amp;rsquo;interno del kernel. Ogni accesso alle
risorse è mediato da capacità.&lt;/p>
&lt;p>Questo si allinea con l&amp;rsquo;obiettivo più ampio di rendere l&amp;rsquo;autorità:&lt;/p>
&lt;ul>
&lt;li>esplicita&lt;/li>
&lt;li>minima&lt;/li>
&lt;li>facile da analizzare&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="perché-questo-conta">Perché questo conta&lt;/h2>
&lt;p>I sistemi basati su capacità forniscono una base per costruire:&lt;/p>
&lt;ul>
&lt;li>sistemi più sicuri&lt;/li>
&lt;li>architetture più modulari&lt;/li>
&lt;li>sistemi più facili da analizzare e verificare&lt;/li>
&lt;/ul>
&lt;p>Eliminando l&amp;rsquo;autorità implicita e rendendo esplicito ogni accesso, eliminano
intere classi di vulnerabilità comuni nei sistemi tradizionali.&lt;/p>
&lt;hr>
&lt;h2 id="guardando-avanti">Guardando avanti&lt;/h2>
&lt;p>Le capacità sono un concetto fondamentale in EriX. Nei prossimi articoli
esploreremo come vengono implementate nella pratica, inclusi:&lt;/p>
&lt;ul>
&lt;li>spazi di capacità (CSpace)&lt;/li>
&lt;li>comunicazione inter-processo (IPC)&lt;/li>
&lt;li>gestione della memoria usando capacità non tipizzate&lt;/li>
&lt;li>delega e grafi di autorità&lt;/li>
&lt;/ul>
&lt;p>Comprendere le capacità è il primo passo per comprendere il resto del sistema.&lt;/p></content></item><item><title>Perché sto costruendo un micro-nucleo basato su capacità da zero</title><link>/it/posts/erix-article-1/</link><pubDate>Wed, 11 Mar 2026 00:00:00 +0000</pubDate><guid>/it/posts/erix-article-1/</guid><description>I sistemi operativi sono tra i software più complessi mai costruiti. Gestiscono la memoria, pianificano il calcolo, controllano l&amp;rsquo;hardware e fanno rispettare i confini di sicurezza che proteggono ogni applicazione in esecuzione su una macchina.
Eppure molti dei sistemi operativi su cui facciamo affidamento oggi sono costruiti su idee architetturali che risalgono a diversi decenni fa. Sebbene questi sistemi siano straordinariamente potenti e collaudati, portano con sé anche decenni di complessità accumulata.</description><content>&lt;p>I sistemi operativi sono tra i software più complessi mai costruiti.
Gestiscono la memoria, pianificano il calcolo, controllano l&amp;rsquo;hardware e fanno
rispettare i confini di sicurezza che proteggono ogni applicazione in
esecuzione su una macchina.&lt;/p>
&lt;p>Eppure molti dei sistemi operativi su cui facciamo affidamento oggi sono
costruiti su idee architetturali che risalgono a diversi decenni fa.
Sebbene questi sistemi siano straordinariamente potenti e collaudati,
portano con sé anche decenni di complessità accumulata.&lt;/p>
&lt;p>Questo progetto esplora una direzione diversa: costruire &lt;strong>un sistema
operativo moderno a micro-nucleo, basato su capacità, da zero&lt;/strong>, con una forte
attenzione all&amp;rsquo;autorità esplicita, a una base di calcolo fidata (TCB) minima e
a una separazione rigorosa tra nucleo e spazio utente.&lt;/p>
&lt;p>Questo sistema operativo si chiama &lt;a href="https://git.erikinkinen.fi/erix">&lt;strong>EriX&lt;/strong>&lt;/a>.&lt;/p>
&lt;hr>
&lt;h2 id="perché-costruire-un-altro-sistema-operativo">Perché costruire un altro sistema operativo?&lt;/h2>
&lt;p>A prima vista, costruire un nuovo sistema operativo può sembrare inutile.
Sistemi maturi come Linux, Windows e BSD esistono già e alimentano miliardi di
dispositivi.&lt;/p>
&lt;p>Tuttavia, questi sistemi si sono evoluti sotto vincoli storici.
Nel tempo hanno accumulato strati di astrazioni, meccanismi di compatibilità
e interfacce legacy. Sebbene queste caratteristiche siano spesso necessarie
nel software reale, rendono anche difficile sperimentare idee architetturali
fondamentalmente diverse.&lt;/p>
&lt;p>I sistemi operativi di ricerca hanno esplorato a lungo approcci alternativi
alla progettazione dei sistemi operativi. I micro-nuclei, i sistemi a capacità e i nuclei
formalmente verificati hanno dimostrato che è possibile costruire sistemi più
piccoli, più sicuri e più facili da analizzare.&lt;/p>
&lt;p>L&amp;rsquo;obiettivo di EriX non è sostituire i sistemi operativi esistenti.
Piuttosto, è un&amp;rsquo;esplorazione di come potrebbe essere progettato un sistema
operativo moderno se partissimo dai primi principi.&lt;/p>
&lt;hr>
&lt;h2 id="micro-nucleo-e-base-di-calcolo-fidata">Micro-nucleo e base di calcolo fidata&lt;/h2>
&lt;p>Una delle idee centrali dietro EriX è l&amp;rsquo;&lt;strong>architettura a micro-nucleo&lt;/strong>.&lt;/p>
&lt;p>I nuclei monolitici tradizionali includono molti servizi direttamente
all&amp;rsquo;interno del nucleo stesso. Questi spesso includono:&lt;/p>
&lt;ul>
&lt;li>controllori di dispositivo&lt;/li>
&lt;li>filesystem&lt;/li>
&lt;li>stack di rete&lt;/li>
&lt;li>sottosistemi di gestione dei processi&lt;/li>
&lt;/ul>
&lt;p>Sebbene questo approccio possa essere efficiente, aumenta anche la dimensione
della &lt;strong>base di calcolo fidata (TCB)&lt;/strong>. La TCB include ogni parte di codice
che deve comportarsi correttamente affinché il sistema resti sicuro e
affidabile.&lt;/p>
&lt;p>I micro-nuclei adottano un approccio diverso.&lt;/p>
&lt;p>Un micro-nucleo mantiene nel nucleo solo i meccanismi più fondamentali,
tipicamente:&lt;/p>
&lt;ul>
&lt;li>schedulazione dei thread&lt;/li>
&lt;li>gestione dello spazio di indirizzamento&lt;/li>
&lt;li>comunicazione inter-processo (IPC)&lt;/li>
&lt;li>gestione delle capacità&lt;/li>
&lt;li>gestione di interrupt ed eccezioni&lt;/li>
&lt;/ul>
&lt;p>Tutto il resto gira in &lt;strong>spazio utente&lt;/strong>, inclusi controllori, filesystem e
servizi di livello superiore.&lt;/p>
&lt;p>Questa progettazione riduce drasticamente la quantità di codice di cui ci si deve
fidare. I guasti nei componenti in spazio utente hanno meno probabilità di
compromettere l&amp;rsquo;intero sistema, e i singoli componenti possono essere
riavviati o sostituiti senza mandare in crash il nucleo.&lt;/p>
&lt;hr>
&lt;h2 id="sicurezza-basata-su-capacità">Sicurezza basata su capacità&lt;/h2>
&lt;p>Un altro principio centrale di progettazione di EriX è la
&lt;strong>sicurezza basata su capacità&lt;/strong>.&lt;/p>
&lt;p>La maggior parte dei sistemi operativi si basa fortemente su
&lt;strong>autorità ambientale&lt;/strong>. In questi sistemi, i processi hanno spesso accesso
implicito alle risorse in base a spazi dei nomi globali, identità utente o
privilegi ereditati.&lt;/p>
&lt;p>Per esempio, un processo può aprire un file semplicemente perché conosce il
percorso del file e il sistema operativo decide che quel processo ha il
permesso di accedervi.&lt;/p>
&lt;p>I sistemi a capacità adottano un approccio diverso.&lt;/p>
&lt;p>Una &lt;strong>capacità&lt;/strong> è un token non falsificabile che concede accesso a uno
specifico oggetto con specifici diritti. Un processo può accedere a un oggetto
solo se possiede una capacità che autorizza quell&amp;rsquo;accesso.&lt;/p>
&lt;p>Le capacità hanno diverse proprietà importanti:&lt;/p>
&lt;ul>
&lt;li>Rappresentano l&amp;rsquo;autorità in modo esplicito.&lt;/li>
&lt;li>Possono essere trasferite tra processi.&lt;/li>
&lt;li>Possono limitare le operazioni a un insieme preciso di diritti.&lt;/li>
&lt;/ul>
&lt;p>In un sistema basato su capacità, l&amp;rsquo;autorità fluisce attraverso trasferimenti
espliciti invece che tramite spazi dei nomi globali. Questo rende il sistema più
facile da analizzare e aiuta a eliminare intere classi di vulnerabilità di
sicurezza.&lt;/p>
&lt;hr>
&lt;h2 id="perché-rust">Perché Rust?&lt;/h2>
&lt;p>I sistemi operativi sono tradizionalmente scritti in C o assembly.
Questi linguaggi offrono un controllo preciso su hardware e memoria, ma rendono
anche facile introdurre bug sottili.&lt;/p>
&lt;p>I bug di sicurezza della memoria, come uso dopo liberazione, overflow del buffer e corse di dati,
sono stati storicamente una delle maggiori fonti di vulnerabilità nel software
di sistema.&lt;/p>
&lt;p>EriX è scritto principalmente in &lt;strong>Rust&lt;/strong>.&lt;/p>
&lt;p>Rust fornisce forti garanzie sulla sicurezza della memoria pur consentendo un
controllo a basso livello dell&amp;rsquo;hardware. Il modello di proprietà del linguaggio
aiuta a prevenire molte classi di bug in fase di compilazione, mentre i blocchi
&lt;code>unsafe&lt;/code> espliciti rendono visibili e verificabili le operazioni
potenzialmente pericolose.&lt;/p>
&lt;p>Usare Rust non elimina tutti i possibili errori, ma alza in modo significativo
la soglia di sicurezza di base nella programmazione di sistema.&lt;/p>
&lt;hr>
&lt;h2 id="un-sistema-operativo-in-camera-bianca">Un sistema operativo in camera bianca&lt;/h2>
&lt;p>Un aspetto insolito del progetto EriX è il suo approccio di
&lt;strong>sviluppo in camera bianca&lt;/strong>.&lt;/p>
&lt;p>Tutti i componenti del sistema vengono implementati all&amp;rsquo;interno del progetto
stesso. Nessun codice sorgente esterno viene copiato o incorporato, e non
vengono usate librerie di terze parti.&lt;/p>
&lt;p>Questo vincolo ha diversi scopi:&lt;/p>
&lt;ul>
&lt;li>Garantisce che l&amp;rsquo;intero sistema possa essere compreso e verificato.&lt;/li>
&lt;li>Evita dipendenze nascoste e comportamenti inattesi.&lt;/li>
&lt;li>Costringe le decisioni architetturali a essere esplicite anziché ereditate.&lt;/li>
&lt;/ul>
&lt;p>Lo sviluppo in camera bianca trasforma inoltre il progetto in un esercizio
educativo. Ogni sottosistema, dal caricatore di avvio al gestore di memoria, deve
essere progettato e implementato deliberatamente.&lt;/p>
&lt;hr>
&lt;h2 id="un-obiettivo-a-lungo-termine-auto-ospitazione">Un obiettivo a lungo termine: auto-ospitazione&lt;/h2>
&lt;p>Uno degli obiettivi a lungo termine di EriX è &lt;strong>l&amp;rsquo;auto-ospitazione&lt;/strong>.&lt;/p>
&lt;p>Un sistema è considerato auto-ospitato quando può compilare il proprio codice
sorgente usando strumenti che girano sul sistema stesso.&lt;/p>
&lt;p>Per EriX, questo significa che alla fine:&lt;/p>
&lt;ul>
&lt;li>il compilatore Rust gira su EriX&lt;/li>
&lt;li>gli strumenti di compilazione girano su EriX&lt;/li>
&lt;li>l&amp;rsquo;intero sistema operativo può essere compilato nativamente dentro EriX&lt;/li>
&lt;/ul>
&lt;p>Raggiungere questo traguardo richiede l&amp;rsquo;implementazione di molti strati
infrastrutturali, inclusi filesystem, gestione dei processi e un ambiente
utente compatibile con POSIX.&lt;/p>
&lt;hr>
&lt;h2 id="perché-documentare-il-percorso">Perché documentare il percorso?&lt;/h2>
&lt;p>Costruire un sistema operativo è un processo lungo e complesso.
Molte delle intuizioni più interessanti non appaiono nel sistema finale,
ma nelle decisioni, nei compromessi e negli errori incontrati lungo il cammino.&lt;/p>
&lt;p>Questo blog documenta lo sviluppo di EriX mentre evolve.
I post futuri tratteranno temi come:&lt;/p>
&lt;ul>
&lt;li>progettare un formato di immagine di avvio&lt;/li>
&lt;li>implementare spazi di capacità&lt;/li>
&lt;li>costruire un sistema IPC&lt;/li>
&lt;li>gestire l&amp;rsquo;autorità della memoria&lt;/li>
&lt;li>costruire server in spazio utente&lt;/li>
&lt;/ul>
&lt;p>L&amp;rsquo;obiettivo è rendere il processo di sviluppo trasparente e formativo.&lt;/p>
&lt;hr>
&lt;h2 id="guardando-avanti">Guardando avanti&lt;/h2>
&lt;p>EriX è ancora nelle fasi iniziali. Gran parte del sistema deve ancora essere
costruita e molte decisioni di progettazione evolveranno sicuramente nel tempo.&lt;/p>
&lt;p>Ma i principi guida sono già chiari:&lt;/p>
&lt;ul>
&lt;li>nucleo minimo&lt;/li>
&lt;li>autorità esplicita&lt;/li>
&lt;li>sicurezza basata su capacità&lt;/li>
&lt;li>modularità rigorosa&lt;/li>
&lt;li>implementazione in camera bianca&lt;/li>
&lt;/ul>
&lt;p>Nel prossimo articolo esploreremo una delle idee centrali del sistema:&lt;/p>
&lt;p>&lt;strong>cosa sono i sistemi operativi basati su capacità e perché sono importanti.&lt;/strong>&lt;/p></content></item><item><title>Su di me</title><link>/it/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/it/about/</guid><description>Studio tecnologia dell&amp;rsquo;informazione presso l&amp;rsquo;Università di Tampere. Nel tempo libero contribuisco a software libero e open source, distribuzioni software e progetti di sistemi basati sulle capacità, come EriX Project, AES, Cutie Shell Project e Droidian GNU/Linux.
Ho utilizzato numerosi linguaggi di programmazione. Per esempio, C, C++, Python, JavaScript e Rust mi sono familiari grazie al lavoro pratico. Ho anche esperienza con linguaggi di markup comuni, come HTML e QML. Inoltre, ho utilizzato framework software noti, incluso Qt Framework.</description><content>&lt;p>Studio tecnologia dell&amp;rsquo;informazione presso &lt;a href="https://tuni.fi">l&amp;rsquo;Università di Tampere&lt;/a>. Nel tempo libero contribuisco a software libero e open source, distribuzioni software e progetti di sistemi basati sulle capacità, come EriX Project, AES, Cutie Shell Project e Droidian GNU/Linux.&lt;/p>
&lt;p>Ho utilizzato numerosi linguaggi di programmazione. Per esempio, C, C++, Python, JavaScript e Rust mi sono familiari grazie al lavoro pratico. Ho anche esperienza con linguaggi di markup comuni, come HTML e QML. Inoltre, ho utilizzato framework software noti, incluso Qt Framework.&lt;/p>
&lt;p>Inoltre, ho contribuito a librerie software e scritto documentazione di riferimento per esse. Il mio lavoro in questi progetti comprende sia il lavoro di squadra con altri contributori sia attività indipendenti di ricerca e implementazione.&lt;/p>
&lt;p>Ho esperienza con la metodologia DevOps, che enfatizza l&amp;rsquo;integrazione e l&amp;rsquo;automazione di vari processi di sviluppo e distribuzione del software. Sia in Droidian sia in Cutie Shell Project, le patch vengono unite nel branch principale il prima possibile. Le aggiunte di funzionalità più grandi vengono inizialmente sviluppate in branch di funzionalità. Tuttavia, tutti i branch di funzionalità in corso vengono rebaseati spesso sul branch principale, in modo che possano essere uniti in qualsiasi momento. Sia il branch principale sia i branch di funzionalità vengono compilati e pacchettizzati dopo ogni commit. Oltre al repository di produzione, esistono il repository di staging e repository di funzionalità corrispondenti a ciascun branch di funzionalità. Questi repository di pacchetti vengono usati per automatizzare facilmente la creazione di un ambiente di test.&lt;/p>
&lt;p>Mi interessano anche le lingue naturali e il loro apprendimento. Di conseguenza, parlo diverse lingue.&lt;/p>
&lt;h2 id="progetti">Progetti&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;Un sistema operativo a microkernel, basato sulle capacità e sviluppato in camera bianca, scritto interamente in 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) è un simulatore di ricerca per studiare come l&amp;rsquo;autorità evolve nel tempo nei sistemi basati sulle capacità.&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 è una distribuzione GNU/Linux basata su Debian per dispositivi mobili. L&amp;rsquo;obiettivo di Droidian è poter eseguire Debian sui telefoni Android. Ciò viene realizzato utilizzando tecnologie note come libhybris e Halium.&amp;rdquo;&lt;/p>
&lt;/blockquote>
&lt;p>Un video in cui presento Droidian al 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 mira a essere un&amp;rsquo;interfaccia mobile bella e facile da usare per dispositivi Linux che eseguono Halium o Linux mainline. La nostra interfaccia è ispirata al Sailfish OS di Jolla, ma non puntiamo a crearne un clone. Una differenza importante rispetto a Sailfish OS è che il nostro codice sorgente è completamente aperto.&amp;rdquo;&lt;/p>
&lt;/blockquote>
&lt;p>Un video in cui presento Cutie Shell al 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>Un altro video in cui presento i progressi di Cutie Shell al 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="istruzione">Istruzione&lt;/h2>
&lt;p>&lt;strong>Università di Tampere&lt;/strong> : 9/2022-
&lt;br>Studi di laurea triennale in Tecnologia dell&amp;rsquo;Informazione&lt;/p>
&lt;ul>
&lt;li>Attualmente sto studiando per la laurea triennale e il mio obiettivo è conseguire una laurea magistrale.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Helsingin matematiikkalukio&lt;/strong> : 8/2018-5/2022
&lt;br>Istruzione secondaria superiore generale finlandese&lt;/p>
&lt;h2 id="competenze-linguistiche">Competenze linguistiche&lt;/h2>
&lt;table>
&lt;tr>
&lt;td>Finlandese&lt;/td>
&lt;td>madrelingua&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Inglese&lt;/td>
&lt;td>avanzato&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Spagnolo&lt;/td>
&lt;td>avanzato&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Catalano&lt;/td>
&lt;td>intermedio&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Svedese&lt;/td>
&lt;td>intermedio&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Francese&lt;/td>
&lt;td>elementare&lt;/td>
&lt;/tr>
&lt;/table></content></item></channel></rss>