Ein eigenes Betriebssystem entwickeln

Ein Betriebssystem ermöglicht dem Benutzer die Interaktion mit der Hardware des Computers. Es besteht aus mehrere hunderttausend Codezeilen und wird im Allgemeinen mit Programmiersprachen wie C, C++ oder Assembler entwickelt.

Vorgehensweise

  1. Bevor du anfängst, solltest du dich mit Programmierung vertraut machen. Kenntnisse in Assembler sind unverzichtbar und ergänzend dazu wird eine weitere maschinennahe Programmiersprache wie C dringend empfohlen.
  2. Entscheide dich, auf welches Medium dein Betriebssystem geladen werden soll. Dazu kannst du ein CD-/DVD-/Flash-Laufwerk, eine Festplatte oder einen anderen Computer verwenden.
  3. Entscheide dich, welche Aufgaben dein Betriebssystem erledigen soll. Vor dem Start solltest du eine grobe Planung aufstellen, ob du ein voll funktionsfähiges Betriebssystem mit einer eigenen grafischen Oberfläche (GUI) oder eher etwas Simpleres entwickeln möchtest.
  4. Lege fest, welche Prozessorarchitektur von deinem Betriebssystem unterstützt werden soll. AI-32 und x86_64 sind die am häufigsten verwendeten Architekturen auf normalen Rechnern und damit wahrscheinlich deine beste Wahl.
  5. Treffe die Entscheidung, ob du dein Betriebssystem von Null beginnen möchtest oder ob du auf einen existierenden Kernel aufbauen möchtest. Linux from Scratch ist beispielsweise ein interessantes Projekt für diejenigen, die eine eigene Linux-Distribution entwickeln möchten.
  6. Lege fest, ob du deinen eigenen Bootloader verwenden möchtest oder einen bereits entwickelten wie Grand Unified Bootloader (GRUB). Da das Programmieren eines eigenen Bootloaders ein umfangreiches Wissen über Hardware und BIOS voraussetzt, verzögert es möglicherweise den Zeitplan für die Entwicklung des eigentlichen Kernels.
  7. Entscheide dich für eine Programmiersprache. Obwohl es durchaus möglich ist, ein Betriebssystem in Sprachen wie Pascal oder BASIC zu entwickeln, wirst du mit C oder Assembler besser beraten sein. Assembler ist absolut notwendig, da einige unverzichtbare Teile des Betriebssystems darauf aufbauen. Im Gegensatz dazu verwendet C++ einige Schlüsselwörter, die ein bereits vorhandenes Betriebssystem zur Ausführung benötigen.
    • Um ein Betriebssystem aus C oder C++ Code kompilieren zu können, benötigst du natürlich irgendeinen Compiler. Deshalb solltest du dir Anleitung/Handbuch/Dokumentation deines gewählten C/C++ Compilers durchlesen, unabhängig davon, ob diese mit dem Softwarepaket mitgeliefert wurde oder auf der Website des Entwicklers einsehbar ist. Du benötigst ein sehr umfassendes Wissen über deinen Compiler. Bei der Entwicklung in C++ solltest du dich außerdem mit dem Name Mangling und ABI des Compilers auskennen. Es wird erwartet, dass du die verschiedenen ausführbaren Formate (ELF, PE, COFF, Binärcode, usw.) verstehst und darüber Bescheid weißt, dass das Windows-Format (.exe) urheberrechtlich geschützt ist.
  8. Lege dich auf ein API (Application Programming Interface) fest. Eine gute Wahl ist POSIX, da es sehr gut dokumentiert ist. Alle Unix-System unterstützen POSIX zumindest teilweise, wodurch Unix-Programme leicht auf dein Betriebssystem portiert werden könnten.
  9. Plane den Aufbau deines Betriebssystems. Es gibt monolithische Kernel und Microkernel. Während bei monolithischen Kernel alle Dienste in den Kernel integriert werden, verfügt der Microkernel nur über grundlegende Funktionen und alle weiteren Dienste werden als Prozesse im Benutzer-Modus integriert. Im Allgemeinen sind monolithische Kernel schneller, aber Microkernel besitzen eine bessere Fehlerlokalisierung und Verlässlichkeit.
  10. Ziehe es in Erwägung, die Entwicklung in einem Team durchzuführen. Dadurch wird weniger Zeit benötigt, um mehr Probleme zu lösen, wodurch möglicherweise ein besseres Betriebssystem in weniger Zeit produziert werden kann.
  11. Lösche deine Festplatte niemals vollständig. Denke daran, dass eine Formatierung deines Laufwerks alle Daten unwiederbringlich löscht. Verwende GRUB oder einen anderen Bootloader, um dein System mit einem weiteren Betriebssystem im Dual-Boot-Modus zu betreiben, bis dein eigenes Betriebssystem vollkommen ausgereift ist.
  12. Starte klein. Beginne mit einfachen Dingen wie der Anzeige eines Texts oder Interrupts, bevor du dich an Dinge wie Speicherverwaltung und Multitasking wagst.
  13. Lege eine Sicherung des letzten funktionierenden Quellcodes an. Das dient als Sicherheitsmaßnahme, falls etwas schrecklich schief geht mit der aktuellen Version deines Betriebssystems oder deiner Entwicklung. Falls der PC abstürzt, ist es eine gute Idee, eine zweite Kopie für die Fehlerbehebung verfügbar zu haben.
  14. Überlege dir, die Tests deines Betriebssystem innerhalb einer virtuellen Maschine durchzuführen. Statt den Computer nach jeder Änderung bzw. nach jedem Datentransfer von deinem Entwicklungscomputer zu deinem Testcomputer neu starten zu müssen, kannst du eine virtuelle Maschine einrichten, die dein Betriebssystem innerhalb deines laufenden Betriebssystems anzeigt. Zu diesen VM-Anwendungen gehören VMWare (bietet ein kostenlos erhältiches Server-Produkt an), die Open-Source-Anwendung Bochs, Microsoft Virtual PC (nicht Linux-kompatibel) und xVM VirtualBox.
  15. Veröffentliche eine abschließende Testversion (Release Candidate). Das ermöglicht es den Benutzern, dich über mögliche Probleme mit deinem Betriebssystem zu informieren.
  16. Achte auf die Benutzerfreundlichkeit deines Systems und versuche diese Funktionen zu einem integralen Bestandteil deines Betriebssystems zu machen.

Tipps

  • Stelle sicher, dass die Implementierung von Sicherheitsfunktionen die oberste Priorität ist, wenn dein Betriebssystem jemals praktikabel sein soll.
  • Nachdem die Entwicklung abgeschlossen ist, solltest du darüber nachdenken, ob du den Quellcode schützt oder offen zugänglich machst.
  • Versuche nicht direkt zu Beginn deiner Programmierlaufbahn die Entwicklung eines Betriebssystems in Angriff zu nehmen. Falls du nicht bereits C, C++, Pascal oder eine ähnlich geeignete Programmiersprache im Schlaf beherrschst, einschließlich Pointer-Manipulation, maschinennahe Bitmanipulation, Bit-Shifting, Inline-Assemblercode, usw. bist du nicht bereit für die Entwicklung eines Betriebssystems.
  • Verwende Webseiten wie OSDev und OSDever, um dir bei der Entwicklung deines eigenen Betriebssystems zu helfen. Beachte dabei aber bitte, dass die OSDev.org-Community es vorziehen würde, wenn du ihr Wiki für Hilfe bemühst und nicht dem Forum beitrittst. Solltest du dich dazu entscheiden, ein Teil des Forums werden zu wollen, gelten folgende Voraussetzungen: Du brauchst ein umfassendes Wissen von C oder C++ und der x86-Assembler-Programmiersprache. Außerdem brauchst du ein allgemeines Verständnis von komplexen Programmierkonzepten, wie z.B. Linked Lists, Queues, usw. Die OSDev-Community legt in ihren Grundsätzen eindeutig fest, dass sich die Community nicht darum dreht, neue Programmierer bei der Hand zu nehmen. Falls du dich an die Entwicklung eines Betriebssystems wagst, wird von dir automatisch erwartet, dass du ein "Programmiergott" bist. Desweiteren musst du das Handbuch für die ausgewählte Prozessorarchitektur gelesen haben (Intel x86, ARM, MIPS, PPC, usw.) Diese Handbücher lassen sich mithilfe einer Google-Suche einfach finden ("Intel Manuals", "ARM Manuals", usw.) finden. Tritt nicht dem OSDEV-Forum bei und beginne damit, offensichtliche Fragen zu stellen. Das resultiert in Antworten wie "Lies die verdammte Anleitung". Für die meisten Fragen kannst du Wikipedia oder die zugehörigen Handbücher zu den verwendeten Werkzeugen lesen.
  • Wenn du einen einfachen Weg möchtest, überlege dir die Verwendung von Linux-Distributionen wie Fedora Revisor, Custom Nimble X, Puppy Remaster, PCLinuxOS mklivecd, SUSE Studio oder SUSE KIWI. Jedoch gehört das Betriebssystem dann zu der Firma, die diesen Dienst zuerst angeboten hat (obwohl du es gemäß der GNU General Public License kostenlos vertreiben, ändern und ausführen kannst).
  • Überprüfe auf mögliche Absturzquellen und andere Fehler. Diese lassen sich bei einem so komplexen Projekt meist nicht vollkommen ausschließen.
  • Es ist möglicherweise eine gute Wahl, eine komplette neue Partition für die Entwicklung deines Betriebssystems anzulegen.

Warnungen

  • Du wirst nicht innerhalb von zwei Wochen ein vollständiges System erstellen können. Beginne mit einem Betriebssystem, das eigenständig hochfahren kann, und mach dich dann erst an die coolen Funktionen.
  • Das sorglose Schreiben deines Betriebssystems auf die Festplatte kann diese unlesbar machen. Sei vorsichtig.
  • Erwarte nicht, dass sich ein ordentliches Betriebssystem einfach programmieren lässt. Es existieren eine Vielzahl an komplexen Wechselwirkungen. Falls dein Betriebssystem beispielsweise in der Lage sein soll, mehrere Kerne zu unterstützen, muss dein Speichermanager einen "Locking"-Mechanismus besitzen, der mehrere Kerne davon abhält, zur gleichen Zeit auf dieselbe Ressource zuzugreifen. Die Zugriffssperren benötigen die Präsenz eines Steuerprogramms, das sicherstellt, dass nur ein Prozessorkern zur gleichen Zeit Zugriff auf eine wichtige Ressource hat, während alle anderen Kerne warten müssen. Dieses Steuerprogramm benötigt wiederum einen Speichermanager. Dieser Fall verdeutlicht die festgefahrenen Abhängigkeiten. Es gibt keine eindeutige Lösung für diese Probleme, von jedem Programmierer eines Betriebssystems wird erwartet, dass er qualifiziert genug ist, um eine eigene Lösung zu entwickeln.
  • Wenn du eine unbedachte Aktion durchführst, zum Beispiel zufällige Bytes an zufällige I/O Ports sendest, wird dein Betriebssystem abstürzen und du beschädigst (in der Theorie) unter Umständen deine Hardware.

Was du brauchst

  • Einen Computer
  • Eine CPU mit der Architektur, für die du dein Betriebssystem entwickelst
  • Ausreichend Arbeitsspeicher (RAM) für deine virtuelle Maschine
  • Ein "Host"-Betriebssystem (für die Entwicklung des Quellcodes in Assembler und weiteren Programmiersprachen sowie in der frühen Phase zur Kompilierung und Erstellung von Programmpaketen, bis dein Betriebssystem sich selbst hosten kann).
  • Einen Code-Editor mit Syntax-Farbmarkierungen (falls du keine integrierte Entwicklungsumgebung hast)
  • Einen Compiler
  • Ein CD/DVD-Laufwerk
Information
Users of Guests are not allowed to comment this publication.