Toaruos est un système d'exploitation "complet" pour les PC x86-64 et le support expérimental pour ARMV8.
Alors que de nombreux Os indépendants, passe-temps et de recherche visent à expérimenter de nouveaux conceptions, Taruos est conçu comme une ressource éducative, fournissant un microcosme représentatif de fonctionnalité trouvé dans les principaux systèmes d'exploitation de bureau.
Le système d'exploitation comprend un noyau, un chargeur de démarrage, un linker d'objet partagé dynamique, une bibliothèque standard, son propre système de fenêtres composé, un langage de programmation dynamique composé de bytecode, un éditeur de code avancé et des dizaines d'autres utilitaires et des exemples d'applications.
Il n'y a pas de dépendances d'exécution externes et tous les code source requis, totalisant environ 100 000 lignes de (principalement) C, est inclus dans ce référentiel, à l'exception de Kuroko, qui vit séparément.
Démonstration de l'interface utilisateur de Toaruos et de certaines applications.
Je travaille sur Toaruos depuis plus d'une décennie maintenant, et mes objectifs ont changé au fil des ans.
Lorsque j'ai commencé le projet en décembre 2010, mon objectif était de "apprendre en faisant" - étudier les systèmes de type Unix en en faisant un à partir de zéro. J'avais contribué à Compiz, l'un des premiers gestionnaires de fenêtres de composition largement utilisés pour X11, quelques années auparavant, et un peu naturellement Taruos a gagné une interface graphique construite sur des concepts similaires dès le début.
Pour sa sortie d'origine 1.0 en 2015, Taruos n'était pas le système d'exploitation "complètement à partir de zéro" qu'il est devenu depuis. Newlib a fourni la LIBC, et l'interface graphique a été construite sur le Caire, le Libpng et le freetype. Au milieu de 2018, j'ai commencé un nouveau projet pour remplacer ces composants tiers, qui a finalement été achevé et fusionné pour devenir Toaruos 1.6.
Grâce au projet, Taruos a également attiré pas mal de développeurs de SG pour débutants qui ont essayé de l'utiliser comme référence. Le noyau de Taruos, cependant, était une source d'embarras personnel pour moi, et en avril 2021, après une longue pause, j'ai commencé à travailler sur un nouveau. Le résultat a été Misaka: un nouveau noyau 64 bits et compatible SMP. Misaka a été fusionné en mai et a commencé la série 1,99 de sorties bêta menant à Toaruos 2.0.
dlopen .Les projets suivants sont actuellement en cours:
Les utilisateurs généraux espérant construire des toaruos à partir de la source sont recommandés pour débarquer le référentiel sur GitHub et utiliser le pipeline GitHub CI.
Pour ceux qui cherchent à construire localement sur un hôte Linux configuré de manière appropriée avec Docker, un conteneur de construction est disponible. Le référentiel Toaruos doit être utilisé comme support de liaison à /root/misaka et util/build-in-docker.sh peut être exécuté dans ce conteneur pour terminer le processus de compilation:
git clone https://github.com/klange/toaruos
cd toaruos
git submodule update --init kuroko
docker pull toaruos/build-tools:1.99.x
docker run -v `pwd`:/root/misaka -w /root/misaka -e LANG=C.UTF-8 -t toaruos/build-tools:1.99.x util/build-in-docker.sh
Après avoir construit comme celui-ci, vous pouvez exécuter les différentes cibles des services publics ( make run , etc.). Essayez make shell pour exécuter un shell Toaruos à l'aide d'un port série avec Qemu.
Le Makefile utilise un outil Kuroko, auto-dep.krk , pour générer des makefiles supplémentaires pour les applications et les bibliothèques de l'espace utilisateur, résolvant automatiquement les dépendances en fonction des directives #include .
Dans une commande indéterminée, la bibliothèque C, le noyau, les bibliothèques et les applications d'espace utilisateur sont construits, combinés en archive compressée pour une utilisation en tant que Ramdisk, puis emballé dans une image du système de fichiers ISO9660.
base/usr/include , ainsi que des ressources graphiques pour le compositeur et le décorateur de fenêtres.Le système de fichiers racine est configuré comme suit:
bin : applications de premier parti.cdrom : point de montage pour le CD, si disponible.dev : Répertoire de périphérique virtuel, généré par le noyau.net : périphériques d'interface réseau.pex : Packet Exchange Hub, répertorie les services IPC accessibles.pts : Secondaires Pty, points de terminaison pour TTYS.etc : fichiers de configuration, scripts de démarrage.home : Répertoires d'utilisateurs.lib : bibliothèques premièrekuroko : modules Kuroko.mod : modules de noyau chargé.proc : fichiers virtuels qui présentent l'état du noyau.1 , etc .: Fichiers virtuels avec des informations d'état pour les processus individuels.src : Fichiers source, voir la section "Disposition du projet" ci-dessus.tmp : Monté comme un TMPFS de lecture / écriture normalement.usr : Ressources de l'espace utilisateurbin : applications tierces, normalement vides jusqu'à l'installation des packages.include : fichiers d'en-tête, y compris potentiellement ceux de packages tiers.lib : bibliothèques tierces. Devrait avoir libgcc_s.so par défaut.share : diverses ressources.bim : Syntaxe Falayage et thèmes de l'éditeur de texte.cursor : Sprites de curseur de souris.fonts : Fichiers de police TrueType. Les CD en direct sont expédiés avec Deja Vu Sans.games : dumping Ground pour les fichiers de ressources liés au jeu, comme DOOM WADS.help : fichiers de documentation pour l'application du navigateur d'aide.icons : icônes PNG, divisées en répertoires supplémentaires par taille.ttk : Ressources Spitesheet pour le décorateur de fenêtre et la bibliothèque de widgets.wallpapers : Fonds d'écran JPEG.var : Fichiers d'exécution, y compris le cache manifeste du gestionnaire de packages, les fichiers PID, certains fichiers de verrouillage, etc. La meilleure expérience de l'utilisateur final avec Toaruos sera réalisée dans l'une ou l'autre de ces machines virtuelles, car Taruos prend en charge leur dimensionnement automatique et positionnement absolu de souris.
Configurez une nouvelle machine virtuelle pour un "autre" invité 64 bits, fournissez-le au moins 1gib de RAM, attachez l'image du CD, retirez ou ignorez tous les disques durs et sélectionnez un Intel Gigabit Nic. Deux CPU ou plus sont également recommandés.
TOARUOS fonctionnant dans VirtualBox.
TOARUOS fonctionnant dans VMware Workstation Player.
Par défaut, le chargeur de démarrage transmettra un indicateur au pilote de périphérique VirtualBox pour désactiver la prise en charge "transparente" car l'implémentation a une surcharge de performances. Pour activer le mode transparent, utilisez le menu de chargeur de démarrage pour cocher l'option "VirtualBox sans couture" avant de démarrer. Le menu propose également des options pour désactiver le dimensionnement automatique d'affichage des clients si vous rencontrez des problèmes avec cette fonctionnalité.
La plupart du développement de Toaruos se produit à Qemu, car il offre le plus de flexibilité en matériel et la meilleure expérience de débogage. Une ligne de commande Qemu recommandée dans un hôte Ubuntu 20.04 est:
qemu-system-x86_64 -enable-kvm -m 1G -device AC97 -cdrom image.iso -smp 2
Remplacez -enable-kvm par -accel hvm ou -accel haxm le cas échéant sur les plates-formes hôtes sans KVM, ou supprimez-la pour essayer sous l'émulation du logiciel TCG de Qemu.
Notez que les options de ligne de commande QEMU ne sont pas stables et ces drapeaux peuvent produire des avertissements dans les versions plus récentes.
L'option -M q35 remplacera l'émulation du chipset PIIX par une plus récente, qui a l'effet secondaire de la commutation du contrôleur IDE pour une SATA. Cela peut entraîner des moments de démarrage plus rapides aux dépens de Toaruos sans pouvoir lire son propre CD à l'exécution jusqu'à ce que je termine mon pilote AHCI.
Taruos a été testé avec succès sur du matériel réel. Si les chargeurs BIOS ou EFI natifs ne fonctionnent pas, essayez de démarrer avec Grub. Toaruos est conforme aux spécifications "Multiboot" et "Multiboot 2" afin qu'elle puisse être chargée avec les commandes multiboot ou multiboot2 comme suit:
multiboot2 /path/to/misaka-kernel root=/dev/ram0 migrate vid=auto start=live-session
module2 /path/to/ramdisk.igz
set gfxpayload=keep
Taruos coulant nativement à partir d'un bâton USB sur un ThinkPad T410.
Toutes les parties de Toaruos se sont rendues à la disposition des termes de la licence de l'Université de l'Illinois / NCSA, qui est une licence permissive de style BSD. Sauf indication contraire, il s'agit de la licence d'origine et uniquement pour tous les fichiers de ce référentiel - ce n'est pas parce qu'un fichier n'a pas d'en-tête de copyright qu'il n'est pas sous cette licence. Taruos est conçu comme une référence éducative, et j'encourage l'utilisation de mon code, mais assurez-vous de suivre les exigences de la licence. Vous pouvez redistribuer le code sous la licence NCSA, ainsi que des modifications du code et la sous-licenciée dans d'autres termes (telles que le GPL ou une licence propriétaire), mais vous devez toujours inclure l'avis de droit d'auteur spécifié dans la licence ainsi que le texte intégral de la licence (ce n'est que quelques paragraphes) disponibles aux utilisateurs finaux.
Bien que la plupart des Taruos soient entièrement écrits par moi-même, assurez-vous d'inclure d'autres auteurs, le cas échéant, comme avec le sous-système audio de Mike ou les fonctions de chaîne de Dale.
Certains composants de Toaruos, tels que Kuroko ou BIM, ont des termes différents mais compatibles.
Taruos se reflète régulièrement sur plusieurs sites d'hébergement GIT.
#toaruos sur Libera ( irc.libera.chat )
Les applications et les bibliothèques individuelles peuvent être construites en installant le métapackage build-essential du référentiel, qui tirera gcc et binutils . Des sources sont disponibles dans le répertoire /src sur le CD en direct dans une disposition similaire à ce référentiel, et le script utilitaire auto-dep.krk est également disponible.
Pour construire des ramelles, des noyaux finalisés ou des images de CD, certains composants ne sont actuellement pas disponibles. En particulier, le script de build pour RamDisks est toujours écrit en Python et dépend de son module tarfile et de sa prise en charge zlib . Auparavant, avec une chaîne d'outils de compilateur capable, Toaruos 1.x a pu créer son propre noyau, l'espace utilisateur, les bibliothèques et le chargeur de démarrage, et les transformer en une image CD ISO fonctionnelle via un script Python qui a rempli une fonction similaire à MakeFile.
Taruos n'est pas actuellement capable de construire la plupart de ses ports, en raison de l'absence d'un coquille POSIX approprié et de la mise en œuvre. Ce sont des objectifs éventuels du projet.
Non, pas du tout. Il n'y a pas de code de Linux nulle part dans Toaruos, et les sources Linux n'étaient pas utilisées comme matériau de référence.
Taruos est un projet complètement indépendant, et tout le code de ce référentiel - qui est la base de code entière du système d'exploitation, y compris son noyau, ses chargeurs de démarrage, ses bibliothèques et ses applications - est original, écrit par moi-même et une poignée de contributeurs au cours de dix ans. L'historique complet de la source, remonter à quand Taruos n'était rien de plus qu'un "Hello World" de Baremetal peut être suivi à travers ce référentiel GIT.
Taruos est complet dans le sens où il couvre toute la gamme de fonctionnalités pour un système d'exploitation: ce n'est pas "juste un noyau" ou "juste un espace utilisateur".
Taruos n'est pas complet dans le sens d'être "fait".
Bien que je vise à prendre en charge les interfaces POSIX suffisamment bien pour que les logiciels soient portés, la mise en œuvre stricte de la norme n'est pas un objectif majeur du système d'exploitation, et la pleine conformité peut même être indésirable.
Taruos est un projet personnel, pas un projet communautaire. Les contributions sous forme de code doivent être discutées à l'avance. Les ports et autres travaux en dehors du dépôt sont cependant un excellent moyen d'aider.
Vous pouvez également aider en contribuant à Kuroko - ce qui explique pourquoi il est conservé comme un référentiel séparé.