# Cosmos (système d'exploitation)

Cosmos (C# Open Source Managed Operating System) est un outil de création de systèmes d'exploitation open-source écrit principalement en C# ainsi que de petites parties d'un langage de programmation assembleur de haut niveau appelé X#. Il utilise un compilateur connu sous le nom de IL2CPU pour traduire le langage CIL généré d'une application .NET en langage assembleur natif. Cosmos compile des programmes et des bibliothèques à l'aide d'IL2CPU pour créer un fichier exécutable démarrable. Le résultat peut être démarré à partir d'une clé USB, un CD-ROM, sur le réseau via PXE, par Hyper-V, ou dans une machine virtuelle (généralement VMWare ou Bochs).
Selon le site web de Cosmos, Cosmos est un acronyme pour C# Open Source Managed Operating System (Système d'exploitation géré Open-Source en C#). Cosmos ne compte pas pour le moment devenir un système d'exploitation à part entière, mais plutôt un outil pour aider les développeurs pour créer simplement et facilement leur propre système d'exploitation.
Les anciennes versions de Cosmos étaient classées en « Milestones », jusqu'au Milestone 5 (août 2010). Les versions de Cosmos sont divisées en deux types : les « User Kit » et les « Dev Kit ». Les « User Kit » sont des versions pré-packagées qui sont mises à jour à chaque modifications majeures. Les « Dev kit » sont simplement le code source de Cosmos qui doit être compilé manuellement, ce qui permet à l'utilisateur d'obtenir les dernières mises à jour du code (toutes les modifications des contributeurs, depuis la page github du projet), qui ne sont pas implémentés dans d'anciens « User Kit ». La plupart du travail sur Cosmos est actuellement porté sur le débogueur et l'intégration à Visual Studio. Le travail sur le noyau est centré sur les systèmes de fichiers, gestion de mémoire et développement d'une interface réseau. GRUB est utilisé comme chargeur d'amorçage.

## Intégration à Visual Studio

Un des atouts de Cosmos (contrairement à d'autres systèmes de ce type) est son intégration à Visual Studio. Le code peut être écrit, compilé, débogué et exécuté entièrement à travers Visual Studio. Visual Studio 2013, Visual Studio 2015 et Visual Studio 2017 sont supportés. Le port de Cosmos sur Visual Studio 2017 est désormais disponible, ce qui apporte un nouvel "Userkit" installable comprenant toutes les mises à jour depuis la version 20150918 (environ 900 modifications).

## Débogage

Cosmos peut être débogué sans encombre à travers Visual Studio, pendant une exécution en PXE ou dans une machine virtuelle. La plupart des fonctions standards de débogage sont présentes, comme les points d'arrêt. Additionnellement, le débogage peut être effectué par port série, en exécution sur une machine physique.

## Exécution

Cosmos utilise la virtualisation pour aider le développement en aidant les développeurs à tester leurs systèmes sans avoir à redémarrer leurs ordinateurs. Par défaut, VMWare Player est utilisé, dû à sa facilité d'utilisation en termes d'intégration. D'autres environnements sont supportés comme Bochs par exemple. Une image ISO est générée pour être gravée sur une clé USB ou un CD.
Le démarrage sur PXE est aussi supporté, permettant à des machines distantes d'exécuter Cosmos sur une connexion réseau.

## Compilation
### IL2CPU

Pour compiler le code IL .NET en assembleur, les développeurs de Cosmos ont créé IL2CPU, pour interpréter le IL et sortir des opérateurs x86.

## Écriture du code de Cosmos

Un système d'exploitation fait avec Cosmos commence en tant que projet .NET (une bibliothèque de classes).
Le développeur peut ensuite ajouter du code dans les fonctions BeforeRun (avant le démarrage) et Run (exécution) qui ont été pré-ajoutées dans le fichier Kernel.cs (noyau) :
Le code ci-dessus est celui qui est pré-inscrit dans un projet Cosmos. C'est une sorte "d'écho". Bien sûr, le développeur peut le remplacer par son propre code, en utilisant des fonctions du .NET Framework si elles ont au préalable été "pluggées" dans Cosmos, ou bien simplement les bibliothèques de Cosmos qui contiennent toutes sortes de classes d'objets comme des pilotes vidéo et d'entrée entre autres.

### Le Cosmos User Kit et Visual Studio

Le Cosmos User Kit est une partie de Cosmos créée pour faciliter la vie des développeurs avec Visual Studio. Il ajoute un nouveau type de projet à Visual Studio, appelé Cosmos Operating System. C'est une application console modifiée qui contient un code de démonstration par défaut.

## Compilation

Quand le code est terminé, il peut être compilé avec le compilateur .NET, qui convertit le code source (C# ou autre) en IL, "l'assembleur" du .NET Framework, et ce code IL sera compilé par le compilateur de Cosmos vers un langage machine natif (assembleur x86).

### Options de débogage

Cosmos offre un grand nombre d'options pour déboguer le système.

#### Images disques

Cette option écrit le système d'exploitation sur une image disque ISO, qui peut être chargée par des émulateurs ou gravée sur un CD-ROM.

#### Démarrage réseau PXE

Cette option autorise le système d'exploitation à être démarré sur un matériel physique. Les données sont envoyées via le réseau local à la machine cliente.