# OpenBSD

OpenBSD è un sistema operativo libero, open source, multipiattaforma, di tipo unix-like, derivato dalla Berkeley Software Distribution (4.4BSD). Nasce nel 1995 circa grazie a Theo de Raadt, che gestisce il progetto da Calgary in Canada. Il logo nonché la mascotte del progetto è Puffy, un Tetraodontidae, comunemente noto come pesce palla. Il team di sviluppo concentra i propri sforzi sulla portabilità, sulla standardizzazione e la correttezza del codice sorgente, sulla sicurezza proattiva e su un sistema di crittografia integrato: a tal proposito basti pensare che OpenSSH è stato creato ad-hoc proprio per OpenBSD e dal medesimo team di sviluppo. I punti di forza pertanto possono essere individuati nell'estrema cura sia della correttezza sia della sicurezza del codice sorgente, nonché nella qualità della documentazione a supporto del progetto stesso; la gestione iniziale del sistema, così come l'installazione, sono affidate alla shell di default ksh (Korn shell).

## Storia

L'idea della realizzazione di un nuovo sistema operativo prende corpo nel 1995 grazie all'informatico Canadese di origine sudafricana, Theo de Raadt, residente a Calgary nello stato di Alberta, a quel tempo già cofondatore nonché senior developer di NetBSD, il quale si allontanò dal gruppo di lavoro nel 1994, dopo non precisati dissidi interni alla squadra.
La fase iniziale del progetto attirò numerosi sviluppatori da tutto il mondo, interessati alla realizzazione di un sistema operativo, BSD derivato, che ponesse al centro del sistema stesso la sicurezza. I primi accorgimenti furono di lavorare in un repository CVS (Concurrent Versions System) pubblico in sola lettura in modo tale che il codice fosse sempre a disposizione di chiunque volesse visionarlo. Il primo commit, ovvero lo stato iniziale di un progetto allorquando i file che contraddistinguono il software sono inseriti nel ramo principale, è stato di fatto l'immissione in OpenBSD dell'albero dei sorgenti di NetBSD, ed è datato sabato 14 ottobre 1995 alle 16:36 UTC-7. Il 18 ottobre 2015, con la pubblicazione della versione 5.8, OpenBSD ha festeggiato venti anni di vita.

## Descrizione

Il sistema operativo OpenBSD è largamente utilizzato sia dagli ISP (Internet Service Provider) sia nei sistemi embedded, è stato il primo Sistema Operativo a implementare il protocollo IPsec (IP security), largamente utilizzato nelle VPN (Virtual Private Network). Resta una delle scelte principali nella realizzazione di sistemi ad elevata sicurezza, come firewall, grazie al suo PF (Packet Filter), nonché nei sistemi di controllo delle intrusioni IDS (Intrusion Detection System), così come nelle soluzioni server o come router.
OpenBSD è usato, così come tutti i sistemi operativi unix-like, anche come workstation per l'uso quotidiano, mediante l'installazione del server grafico X.org infatti si può avere un ambiente grafico basato su finestre, sul quale l'utente può scegliere se caricare o un window manager (fluxbox, Awesome, blackbox, Openbox, Enlightenment, etc.) oppure un desktop environment (KDE, GNOME, Xfce). Di default col server grafico X.org il sistema prevede cwm, un window manager leggero ma molto efficiente, scritto dal team di sviluppo di OpenBSD e comparso la prima volta nella versione 4.2.
Da FreeBSD, un altro sistema operativo storico della famiglia BSD, ha ereditato il concetto di port, che nel corso degli anni è stato adattato al progetto e del quale è divenuto un cardine imprescindibile. OpenBSD mette a disposizione degli utenti migliaia di applicazioni binarie precompilate, ovvero ciascun software viene in primis portato sulle diverse architetture, dopodiché si procede alla realizzazione del pacchetto binario per ciascuna di esse. La pacchettizzazione del software è utile agli sviluppatori per tener traccia delle applicazioni che necessitano di aggiornamento, modifica o rimozione. Per ciò che concerne il compilatore predefinito, OpenBSD ha utilizzato sin dall'inizio gcc (GNU Compiler Collection), ossia il compilatore creato da Richard Stallman in seno al Progetto GNU, tuttavia il 3 settembre 2016 sia LLVM (Low Level Virtual Machine) sia clang sono stati caricati nel cvs di OpenBSD, precisamente in current.

### Architetture supportate

L'installazione del sistema di base risulta essere estremamente solida e al contempo snella, sicché è possibile installarlo anche su piattaforme hardware non particolarmente performanti. Dalla versione 6.0, eccezionalmente pubblicata il 1º settembre 2016, le architetture supportate con continuità risultano essere le seguenti:
* alpha - Sistemi basati su alpha;
* amd64 - Sistemi basati su AMD a 64 bit;
* armv7 - Device basati su ARMv7;
* arm64 - Vari sistemi a 64-bit basati su ARM;
* hppa - Sistemi basati su PA-RISC (Hewlett-Packard Precision Architecture);
* i386 - Sistemi basati su Intel i386 e compatibili;
* landisk - Sistemi basati su SH4 IO-DATA Landisk;
* loongson - Sistemi basati su Loongson 2E, 2F;
* luna88k - Sistemi basati su Omron LUNA-88K, LUNA-88K2;
* macppc - Sistemi basati su Apple New World PowerPC;
* octeon - Sistemi basati su Cavium Octeon, MIPS64;
* sgi - Sistemi basati su SGI MIPS;
* sparc64 - Sistemi basati su Sun UltraSPARC a 64 bit;
Invece le architetture supportate in passato e che per diverse ragioni non seguono pubblicazioni stabili sono:
* amiga - Sistemi basati su Amiga e DraCo con supporto MMU;
* arc - Sistemi ARC compatibili con MIPS R4k e R5k5;
* armish - Alcuni sistemi basati su ARM;
* aviion - Sistemi basati su Motorola 881x0 AViiON. prodotti da Data General;
* cats - Sistemi basati su StrongARM 110;
* hp300 - SIstemi Hewlett-Packard serie HP 9000, e workstation 300 e 400;
* hppa64 - Sistemi Hewlett-Packard Precision Architecture (PA-RISC) a 64 bit;
* mac68k - Sistemi basati su Motorola 680x0 e Apple Macintosh con supporto MMU;
* mvme68k - Sistemi basati su Motorola 680x0 con supporto VME;
* mvme88k - Sistemi basati su Motorola 881x0 e supporto VME;
* palm - PDA basati su Palm/PXA;
* pegasos - Macchine Pegasos di Genesi Sarl. PowerPC-based, chip VIA sulla scheda madre;
* pmax - Sistemi Digital basati su MIPS;
* socppc - Sistemi Freescale PowerPC SoC;
* solbourne - Sistemi Solbourne IDT Sparc-like S3000, S4000 e S4000DX;
* sparc - Sistemi classe Sun sun4, sun4c, sun4e e sun4m basati su SPARC;
* sun3 - Sistemi di classe Sun sun3;
* vax - Sistemi Digital VAX-based;
* zaurus - PDA Sharp Zaurus C3x00;

### Versioni

Il sistema operativo OpenBSD comprende tre versioni
* -release, è la versione del sistema operativo in uscita ogni sei mesi. Corrisponde al set di CD ufficiali, se fossero ancora commercializzati;
* -stable, è la versione release più le patch di sicurezza o di correzione bug catalogate nella pagina web denominata errata del sito web di OpenBSD. Le patch non sono mai particolarmente invasive e solitamente riguardano tutte le architetture;
* -current, è la versione in continuo sviluppo, utilizzata per lo più dagli OpenBSD developers. Ogni sei mesi la current sarà taggata come la prossima versione. Le modifiche possono essere sostanziali.
Il termine stable è riferito alla stabilità delle API (Application Programming Interface), ovvero le funzioni che consentono la comunicazione tra le applicazioni e il sistema operativo non subiscono modifiche, sicché il sistema per ciò che concerne le chiamate di sistema risulterà e resterà stabile in tal senso fino alla versione successiva. Discorso diverso invece per current, in tal caso infatti le API possono essere aggiornate, rimosse o realizzate di nuove, essa è infatti l'ultima versione disponibile, laddove ciascun sviluppatore contribuisce al miglioramento del sistema operativo. La release infine rappresenta l'immagine della current in un preciso momento. Tra una versione e l'altra gli sviluppatori di OpenBSD pubblicano, per ogni architettura supportata, anche le cosiddette snapshots, che sono una sorta di versione ad interim, caratterizzate dall'essere un'immagine del branch current in un preciso istante. Esse si rivelano particolarmente utili per testare nuove funzionalità o per la correzione di eventuali bug. Possono essere scaricate dagli stessi mirror predisposti al download delle versioni, alla voce snapshots.

### Il processo di sviluppo

Il processo di sviluppo di OpenBSD vanta una certa libertà e una pressoché totale indipendenza nel design progettuale e delle relative tempistiche, per cui la crescita del sistema risulta essere del tutto autonoma rispetto agli abituali processi di sviluppo software. Tuttavia, nonostante autonomia e libertà, nello sviluppo del sistema operativo spicca la puntualità della pubblicazione di ogni nuova versione (semestrale), grazie a una metodologia produttiva collaudata da oltre vent'anni.
Vi è un periodo preparatorio prima che l'immagine di una current possa diventare la nuova pubblicazione ufficiale, tale periodo è definito soft-lock e si protrae nell'arco di circa tre settimane, durante il quale gli sviluppatori non potranno più modificare le API del sistema operativo, purtuttavia lo sviluppo continua, dopodiché si passa alla fase dei build dei packages per ogni tipo di architettura e di seguito viene annunciato il vero e proprio lock. Durante il periodo di lock, che può durare una o due settimane al massimo, si eseguono soltanto operazioni relative al testing e al bugfix del codice, pertanto non è consentito alcun commit. Allorquando anche questa fase sarà portata a termine, sarà creato un nuovo branch nel cvs che identificherà la nuova pubblicazionr stable del sistema operativo, di conseguenza l'albero dei sorgenti tornerà ad essere unlock, ovvero pronto per nuovi aggiornamenti e modifiche. È proprio in questo periodo peraltro che avvengono le modifiche più consistenti al sistema, che corrisponde alla fase immediatamente successiva all'unlock e in corrispondenza degli hackathon.
Lo sviluppo del sistema operativo non è pianificato mediante una timeline rigorosa, avviene piuttosto a seconda delle esigenze degli sviluppatori che, essendo tutti volontari, offrono il proprio contributo liberamente e senza vincoli, dedicando ciascuno di essi il proprio tempo libero agli aspetti tecnici che maggiormente gli aggradano o rispetto ai quali hanno maggior esperienza. Ogni developer non ha alcuna limitazione rispetto al numero di commit da inoltrare al cvs dell'albero dei sorgenti, tuttavia ciascuna modifica, prima del commit, deve essere sottoposta agli altri sviluppatori per essere valutata e quindi approvata. Tale modo di procedere garantisce che anche il cambiamento più banale sia stato controllato e testato da diversi sviluppatori.

## Sicurezza

Uno standard di sicurezza così elevato è stato raggiunto mediante un processo capillare di Code Audit, il team OpenBSD infatti è fortemente focalizzato verso un modello di sicurezza robusto, unito al tipico modello di sviluppo aperto. Nel mondo dei sistemi operativi, quelli Unix in particolare, OpenBSD è stato il primo a far proprio il concetto di full disclosure, cioè l’esposizione totale, mediante forum, mailing-list, siti e quant'altro, dei problemi relativi a difetti o bug del software. In seno ai core developers, infatti, vi è un team di audit composto da alcuni sviluppatori che si occupano, quotidianamente, di analizzare riga per riga il codice sorgente del sistema operativo, cercando bug e vulnerabilità. Grazie a questo processo è stato possibile scoprire nuove categorie di problemi legati alla sicurezza, facendo in tal modo da apripista verso un nuovo modo di concepire lo sviluppo dei sistemi operativi stessi. I risultati sono talmente evidenti che OpenBSD si è guadagnato sul campo l’appellativo di "secure by default".
Dalla versione 6.0 è stata eliminata, per ragioni di sicurezza, l'emulazione binaria con Linux. Dalla versione 6.1 dell'11 aprile 2017 è stato aggiunto, nei mirror che lo prevedono, il supporto di default ad https (HyperText Transfer Protocol over Secure Socket Layer), al fine di garantire maggior sicurezza allorquando si scaricano i file necessari per l'installazione o l'aggiornamento il sistema operativo.

### Il caso delle presunte backdoor dell'FBI

L' 11 dicembre 2010 Gregory Perry inviò una email a Theo de Raadt, dichiarando che l'FBI nei 10 anni appena trascorsi avrebbe pagato alcuni sviluppatori OpenBSD per inserire diverse backdoor nell'altrimenti inespugnabile codice del Framework Crittografico IPsec. Theo de Raadt seppur scettico rispetto al contenuto della email, la rese pubblica il 14 dicembre 2010, inoltrandola alla mailing list openbsd-tech così come a molti sviluppatori, al fine di effettuare un dettagliato controllo indipendente del codice del modulo IPsec. Nelle settimane seguenti non fu trovata alcuna backdoor, ma comunque il controllo accurato del framework permise di effettuare alcuni bugfix del codice migliorandolo ulteriormente.

### Slogan

Lo slogan di OpenBSD è stato, fino al 2002, "nessun buco di sicurezza in quasi 6 anni". Poi a causa di un exploit scoperto in OpenSSH, ovvero nel sistema di crittografia integrata su cui si basa OpenBSD, lo slogan è stato cambiato in: "un singolo buco di sicurezza remoto con l'installazione di default in oltre 8 anni", fino ad arrivare all'attuale "Solamente due buchi di sicurezza remoti con l'installazione di default da un casino di tempo!" (Only two remote holes in the default install, in a heck of a long time!), performance comunque di primissimo piano ed inavvicinabili per la gran parte degli altri sistemi operativi.

## Innovazioni software

Il sistema di base di OpenBSD comprende diverso software creato e mantenuto, dal 1995 ad oggi, dal team di sviluppo, spesso peraltro tali innovazioni, nel corso degli anni, sono diventate di uso comune anche su altri sistemi operativi, specie nell'ambito della sicurezza. Taluni software infatti sono stati totalmente integrati sia in diverse varianti di BSD, sia in altri sistemi unix-like.
Si annoverano tra i software maggiormente utilizzati, sia in ambito server sia in ambito desktop, i seguenti:
* OpenSSH, chiamato anche OpenBSD Secure Shell, è una suite di programmi (ssh, scp, sftp, sshd) per il protocollo SSH (SSH File Transfer Protocol o SFTP) atti alla protezione della sessione di rete mediante la cifratura del traffico. Consente diversi metodi di autenticazione e di tunneling sicuro. È stato creato nel 1999 e integrato l'anno stesso nella versione 2.6 di OpenBSD. Nasce come alternativa open source a Secure Shell suite, scritto da T.Ylönen della SSH Communications Security, divenuto nel frattempo proprietario.
* OpenSMTP, è un server per il protocollo SMTP (Simple Mail Transfer Protocol), così come definito nella RFC 5321, con una sintassi molto simile a PF. È stato importato nei repository di OpenBSD il 1º novembre 2008 e pubblicato con la versione 4.6 di OpenBSD. È snello, affidabile e sicuro, consente infatti una netta separazione dei privilegi, inoltre è in grado di gestire grandi code nel minor tempo possibile.
* OpenNTPD, è un'implementazione libera e facile da usare del protocollo NTP (Network Time Protocol). Consente la sincronizzazione dell'orologio del sistema (ora locale) con uno o più time server remoti utilizzando il Network Time Protocol, può agire peraltro esso stesso come un time server, ovvero ridistribuendo l'ora locale. È stato importato in OpenBSD il 31 maggio 2004 e pubblicato per la prima volta con OpenBSD 3.6.
* OpenIKED, è un'implementazione libera del protocollo IKEv2 (Internet Key Exchange Protocol Versione 2), che consente la mutua autenticazione tra due nodi, stabilisce e gestisce politiche di sicurezza IPsec VPN, negoziando tutti i parametri necessari per stabilire una o più security association (SA) mediante chiavi temporanee. Il protocollo IKEv2 è definito nella RFC 5996. È stato integrato nella versione 4.8 di OpenBSD, pubblicata il 1º novembre 2010.
* OpenBGPD, è una implementazione libera del protocollo di routing BGP (Border Gateway Protocol) versione 4, così come definito nella RFC 4271. Di fatto consente a un generico computer di essere utilizzato come se fosse un router, ovvero di scambiare dati con altri router parlando la lingua BGP. A corredo di OpenBGPD è stato creato anche OpenOSPFD, ossia un'implementazione con licenza ISC del protocollo OSPF (Open Shortest Path First), RFC 2328, una suite di software per il network routing. Utilizzata principalmente come demone di OpenBGPD. È stato importato nei repository CVS il 17 dicembre 2003 e pubblicato con la versione OpenBSD 3.5 del 1º maggio 2004.
* LibreSSL, è una versione open source del protocollo TLS (Transport Layer Security), così come definito dalla RFC 5246. È un fork dello stack TLS/crypto di OpenSSL, il cui scopo è di ammodernare il codice sorgente di base, migliorare la sicurezza e applicare le moderne pratiche di sviluppo software. Il progetto è iniziato il 13 aprile 2014 e pubblicato con la versione 5.6 di OpenBSD.
* PF (Packet Filter), è il firewall di default di OpenBSD. Il packet filtering (filtraggio di pacchetti) è un meccanismo di sicurezza che agisce controllando e selezionando i dati che transitano da e verso una rete. La selezione del traffico permesso o proibito viene effettuata in base all’esame dei pacchetti in transito sul sistema che agisce da filtro. È stato importato in OpenBSD il 24 giugno 2001 e pubblicato il 1º dicembre 2001 con la versione 3.0.
* AnonCVS, il CVS anonimo è meccanismo avanzato per la distribuzione in rete del codice sorgente, è costruito sopra il sistema di controllo revisione CVS. Consente accessi sicuri, in sola lettura e anonimi a repository CVS. OpenBSD lo utilizza per mantenere aggiornata la copia locale dei sorgenti rispetto ai cambiamenti che gli sviluppatori possono effettuare nel codice stesso. È stato creato da Chuck Cranor e Theo de Raadt nel 1995, sicché fa parte del progetto OpenBSD sin dalla prima versione.
* tmux, è un terminal multiplexer ossia un'applicazione che consente di utilizzare più terminali simultaneamente, permettendo a ciascun utente l'esecuzione di applicazioni in modo persistente, anche in remoto, sfruttando su ciascuno di essi l'output di riferimento. È diventato talmente popolare nel corso degli anni da essere considerato software di base nella maggior parte dei sistemi Unix-like. Il progetto nasce nel 2007 come alternativa moderna a GNU Screen, importato in OpenBSD il 1º giugno 2009 e pubblicato nella versione 4.6 del 1º maggio 2009.
* mandoc, è una suite di programmi per l'impaginazione di documentazione scritta in roff, ossia il linguaggio utilizzato storicamente per la formattazione delle pagine di manuale (manpage) dei sistemi BSD e in genere dei sistemi Unix e unix-like. Lo sviluppo del progetto ha visto la luce nel 2008, dopo la fase di sviluppo è stato importato nei repository CVS il 6 aprile 2009 e pubblicato con la versione 4.8 del sistema operativo.
* dhcpd, è l'abbreviazione di demone DHCP (Dynamic Host Configuration Protocol). Permette a un host di una rete tcp/ip di richiedere l'assegnazione automatica di un nuovo indirizzo ip, consente peraltro l'inoltro di informazioni circa la rete a cui l'host è connesso. Progetto iniziato nel 1995, importato in OpenBSD il 13 aprile 2004 e pubblicato per la prima volta con la versione 3.6 del 1º novembre 2004.
* spamd, è un demone anti spam leggero e particolarmente efficiente, infatti lavora direttamente sulle connessioni SMTP (Simple Mail Transfer Protocol) e il compito principale è di bloccare le e-mail false (fake-mail). È stato scritto per lavorare in congiunzione con PF (Packet Filter), per cui risulta essere particolarmente indicato nei sistemi POSIX. Sviluppato inizialmente da Bob Beck, è stato importato in OpenBSD il 21 dicembre 2002 e pubblicato l'anno seguente con la versione 3.3 del sistema operativo.

## Pubblicazione e distribuzione

Dalla versione 2.1 del 1997 la nuova versione stabile del sistema operativo segue una pubblicazione semestrale, e dal 2001 le date di tale pubblicazione sono state fissate al 1º maggio e al 1º novembre, tuttavia possono essere soggette a variazioni. È possibile ottenere la nuova versione di OpenBSD scaricando un'immagine ISO da uno dei tanti mirror attivi in ciascuno dei cinque continenti, dopodiché la si masterizza e infine si esegue il boot dal CD-ROM per l'installazione del sistema. Da notare che l'introduzione delle immagini ISO è relativamente recente, è stata introdotta infatti solo dalla versione 4.2 del 1º novembre 2007, prima di questa data si sarebbero dovute scaricare tutte le componenti software necessarie affinché ogni utente potesse costruirsi da solo l'immagine ISO per l'installazione.
A contorno della versione ufficiale il progetto OpenBSD ha messo disposizione degli utenti, sin dalla versione 2.1 del 1º giugno 1997, un set di CD ufficiali con un design personalizzato ad ogni nuova pubblicazione, in tal modo ciascun utente sarebbe stato libero di contribuire fattivamente al sostentamento del progetto acquistando il cofanetto coi CD ufficiali; a tal proposito, dal 2014, è stato aperto un nuovo portale dedicato esclusivamente all'archiviazione e alla commercializzazione dei CD ufficiali nonché al materiale relativo al sistema operativo stesso, che consiste in t-shirt, poster e altro. Tuttavia, dalla versione 6.1, la commercializzazione dei CD è stata sospesa, per cui la 6.0 è stata l'ultima versione a poter contare sui CD ufficiali. La decisione è stata presa in seno al progetto da Theo de Raadt in persona, per diverse ragioni, non ultima quella economica.

## Fondazione e donazioni

Le donazioni un tempo avvenivano come regali al fondatore del progetto Theo de Raadt ossia ad una persona unica, tale fattispecie nel corso degli anni si è rivelata complessa dal punto di vista amministrativo, soprattutto in considerazione delle donazioni derivanti da aziende che avrebbero dovuto motivare legalmente una spesa verso un singolo individuo, pertanto, per ovviare a questo inconveniente, dal 2007 è stata istituita la OpenBSD Foundation, registrata in Canada come una "Canadian Federally Incorporated Non-Profit", il cui obiettivo è di finanziare tutti i progetti relativi ad OpenBSD.
Quindi le donazioni di ogni ordine e grado sono gestite interamente dalla OpenBSD foundation, che si occupa principalmente della promozione di campagne fondi annuali, nonché dell'organizzazione degli Hackathon e di veicolare i fondi necessari ai vari progetti messi in campo da OpenBSD.

### Casi particolari

Il 17 dicembre 2013 in una accorata e-mail Theo de Raadt chiese pubblicamente aiuto per pagare 20.000 dollari americani di spese elettriche, ovvero il costo annuale per mantenere attiva l'intera infrastruttura, in caso contrario si sarebbe prospettato il concreto rischio, non solo di spegnere le macchine, ma probabilmente di dire la parola fine al progetto OpenBSD stesso. Il problema fu risolto grazie a una donazione di Mircea Popescu, sviluppatore Rumeno creatore di MPEx Bitcoin stock exchange, che donò 20.000 dollari in bitcoin alla OpenBSD foundation.

## Hackathon

Gli hackathon sono dei raduni riservati agli sviluppatori OpenBSD e interamente finanziati dal progetto, la OpenBSD foundation nel caso specifico. Lo scopo degli incontri è lo sviluppo cooperativo, normalmente durano una settimana circa, ma possono anche essere di due o tre giorni. Si svolgono in località sempre diverse nei cinque continenti affinché chiunque possa partecipare. Il progetto OpenBSD dedica da sempre particolare attenzione e risorse agli hackathon, poiché consentono, oltre alla conoscenza diretta dei membri del team, che permette di stabilire importanti relazioni interpersonali, di velocizzare esponenzialmente il processo di sviluppo, nonché di promuovere nuovi progetti o idee.
Il primo hackathon (c99) si è svolto a Calgary nello stato di Alberta (Canada) dal 4 giugno 1999 al 6 giugno 1999, parteciparono all'evento 10 sviluppatori, tra cui Theo de Raadt. L'ultimo incontro, p2k18: (ports and pledge hackathon), si è svolto dal 23 aprile 2018 al 26 aprile 2018 nella città di Nantes (Francia), con 24 sviluppatori. Gli hackathon sono anche un modo per relazionarsi con alcuni degli sviluppatori più attivi, uno di essi è Bob Beck storico esponente del progetto OpenBSD.