Cooperative Linux
# Cooperative Linux

Cooperative Linux, spesso abbreviato in CoLinux, è un software che permette a Microsoft Windows e al kernel Linux di funzionare in contemporanea sullo stesso computer. Il progetto è basato sul sistema operativo Ubuntu.

Utilizza il concetto di Cooperative Virtual Machine (CVM, Macchina virtuale cooperativa). Contrariamente alle tradizionali macchine virtuali, quelle cooperative condividono le risorse esistenti nell'OS ospitante, ed entrambi i sistemi operativi, host e guest, hanno il pieno controllo sulla macchina (mentre nelle VM tradizionali il sistema operativo guest ha un controllo limitato).

## Panoramica

Il termine "cooperativa" indica due entità che lavorano in parallelo. Infatti Cooperative Linux trasforma i due sistemi operativi in due grandi coroutines, nelle quali ogni kernel decide quando ridare il controllo all'altro kernel. Il kernel Linux viene eseguito in ambiente Win32 come processo in modalità privilegiata. Il processo opera sull'hardware in multitasking cooperativo con il kernel Windows, assumendo quando necessario il controllo dell'MMU e servendosi di periferiche virtuali per la gestione dell'I/O. Questa tecnica lo differenzia da altri programmi di virtualizzazione (ad esempio VMware Workstation o VirtualBox) che realizzano una emulazione completa e stratificata dell'hardware con conseguente maggiore utilizzo di risorse.

Sebbene teoricamente entrambi i kernel hanno il pieno controllo dell'hardware, l'hardware dei moderni PC non è progettato per essere controllato da due sistemi operativi contemporaneamente, quindi nella realtà ciò viene emulato nel modo seguente: il kernel host controlla realmente l'hardware, mentre il kernel ospitato ha dei driver speciali per comunicare con l'host e fornire le periferiche al sistema operativo guest.

## Hardware emulato

* Connessione di rete ethernet via TAP-NDIS e SLIP.
