# Cooperative Linux

Cooperative Linux, ou coLinux est un logiciel libre qui permet au noyau Linux de fonctionner sous Microsoft Windows sans perte significative de performances.

## Description

Cette application a été écrite par Dan Aloni, un étudiant en informatique, avec l'aide d'autres développeurs. Elle est diffusée selon les termes de la licence GNU GPL.
coLinux se compose d'un noyau Linux, de quelques exécutables Windows dont un simulant une console et d'un adaptateur réseau virtuel, et peut tourner sous les systèmes d'exploitation Windows 2000 et supérieurs.
Il ne simule pas un PC virtuel complet comme VMware le fait : le processeur vidéo ou le processeur sonore de l'ordinateur hôte lui sont inaccessibles, mais il est possible d'utiliser un serveur X Window sous Windows, ou même X et VNC dans coLinux. De même, vous pouvez transférer les flux audio vers un serveur sous Windows qui les jouera à son tour.
KDE, GNOME et en fait la plupart des applications Linux fonctionnent sans le moindre souci, sauf si elles utilisent spécifiquement le matériel (comme l'exigerait une application reposant sur l'accélération OpenGL du processeur graphique, par exemple). Cooperative Linux n'est donc pas adapté à des jeux graphiques, mais plutôt à des applications serveur ou de simples applications de bureautique.
Les distributions Debian et Gentoo sont très populaires chez les utilisateurs de coLinux car des images pré-installées de ces distributions sont directement disponible. De même, Fedora est proposé sur le site officiel de coLinux et des utilisateurs ont réalisé des images de distributions Slackware et Mandriva pour leurs propres besoins. Il est également possible d'utiliser un système d’exploitation basé sur Linux installé sur une autre partition.

## Considérations techniques

Cooperative Linux utilise le concept — plutôt rarement utilisé à l'époque — d'une Cooperative Virtual Machine (CVM, machine virtuelle coopérative), contrairement aux machines virtuelles classiques qui ne tournent pas de façon privilégiée et restent sous le contrôle complet de la machine hôte.
Le terme Cooperative (coopératif, en coopération) est utilisé pour décrire deux entités travaillant de concert en parallèle, c’est-à-dire des coroutines. En ce sens, une description très générale de Cooperative Linux serait qu'il fait tourner deux noyaux de systèmes d'exploitation dans deux (grosses) coroutines. Dans ce mode, chaque noyau (Linux et NT) a son propre contexte processeur, et chaque noyau décide quand redonner le contrôle à son partenaire.
Cependant, seul un des noyaux peut avoir le contrôle physique sur le matériel, alors que l'autre doit se contenter d'abstractions fournies par des composants matériels virtuels. L'hôte peut être n'importe quel noyau de système d'exploitation qui peut fournir quelques fonctions de base (dite primitives ou de bas niveau) pour permettre au pilote de périphérique fourni par Cooperative Linux de tourner en mode CPL0 (dit aussi ring 0) et allouer de la mémoire, qui sera utilisée par le noyau Linux.
Cette approche spéciale par le mode CPL0 rend Cooperative Linux radicalement différent des autres méthodes de virtualisation de machines plus traditionnelles comme VMware, plex86 ou encore VirtualPC, et d'autres méthodes comme Xen : Toutes ces approches font tourner le système d'exploitation invité (ici, Linux) dans un mode moins privilégié que celui de son hôte.
L'approche utilisée par Cooperative Linux a permis une conception bien plus simple et son développement initial a ainsi duré moins d'un mois, entre la première modification d'un noyau Linux 2.4.23-pre9 jusqu'à un point où KDE puisse fonctionner.
Les seuls défauts de cette approche sont la stabilité et la sécurité. Si le noyau invité (coLinux) devient instable, il peut faire planter le système hôte (Windows). Cependant, on peut prendre des mesures comme l'arrêter proprement aux premiers signes critiques (Oops ou panic error). Concernant la sécurité, fournir un accès total (root) sur la partie Cooperative Linux peut certes donner un accès total (Administrateur) à la partie Windows qui joue le rôle d'hôte, par exemple en utilisant des modules de noyau spécialement écrits.
La plupart des modifications apportées au noyau par coLinux concernent la branche pour processeurs i386—la seule architecture supportée pour l'instant. Elles concernent surtout l'initialisation du noyau Linux. Les autres modifications concernent surtout l'ajout de drivers virtuels : cobd (Cooperative Linux block devices), conet (Cooperative Linux network), and cocon (Cooperative Linux console). Rester le plus près possible du noyau de base est un objectif avéré du projet Cooperative Linux en termes de conception, afin de minimiser l'impact et l'étendue de ces modifications.

## Architecture

* User-space
* noyau coLinux
* User-space
* noyau Windows
Microsoft Windows :
Matériel :

## Noyaux en user-space

User Mode Linux est un noyau Linux qui tourne dans l'espace utilisateur d'un système d'exploitation hôte basé sur Linux.
Cooperative Linux est un noyau Linux qui tourne dans l'espace utilisateur d'un système d'exploitation hôte Microsoft Windows.