Minix in Qemu

Ich möchte das Betriebssystem Minix in der Version 3 im Laufe dieses Jahres ein wenig genauer unter die Lupe nehmen.
Minix basiert auf einem µKernel (im Gegensatz zu monolithischen Betriebssystemen wie Windows, Linux, BSD), der lediglich 3800 Zeilen Code umfasst. Ein einziger Mensch kann ihn also komplett verstehen. Wenn man bedenkt, dass auf 1000 Zeilen Code durchschnittlich 6 Bugs zu beklagen sind und monolithische Kernel Millionen Zeilen Code umfassen (Linux wahrscheinlich um die 4 Millionen und immer mehr kommt hinzu), dann wird klar, dass die Idee des µKernel ziemlich schlau ist.
Abgesehen von einigen grundlegenden Mechanismen (Interrupt Handling, Scheduler, Prozesse starten/stoppen) ist die gesamte Funktionalität (Driver, Files, Memory, Network, Shell) in User-space Prozesse ausgelagert, die von einem Reincarnation Server überwacht werden. Schmiert ein Prozess ab, wird er vom Reincarnation Server wieder gestartet.

In einem ersten Schritt nun Minix in einer virtuellen Qemu-Maschine laufen lassen (unter Ubuntu):

  1. Minix Image holen

    $ wget --tries=inf http://cd.minix3.org/download/IDE-3.1.1.iso.bz2
    $ bunzip2 IDE-3.1.1.iso.bz2
  2. Qemu installieren

    # aptitude install qemu
  3. Qemu Image bauen

    $ qemu-img create minix.img 1G
  4. Minix installieren

    $ qemu -localtime -net user -net nic -m 128 -cdrom IDE-3.1.1.iso -hda minix.img -boot d
  5. Minix starten

    $ qemu -localtime -net user -net nic -m 128 -cdrom IDE-3.1.1.iso -hda minix.img -boot c

Läuft schon sehr flott.
Hier noch das grundlegende Minix Paper.
Und wers wirklich wissen will, der muss das Buch Operating Systems Design and Implementation (3rd Edition) von Tanenbaum und Woodhull lesen. Liegt bei mir irgendwo rum. Ich werde es lesen. Noch dieses Jahr.

Gesegneter Code

Die fantastische Datenbanksoftware Sqlite, hochgeeignet, um viele viele schwierige Probleme zu lösen, ist unter der Public Domain veröffentlich (d.h. der Autor verzichtet vollumfänglich auf seine Urheberrechte). Statt einer Lizenz hat der geniale Kopf hinter diesem Projekt, Dr. Richard Hipp, eine Segnung in den Source Code eingefügt:

May you do good and not evil
May you find forgiveness for yourself and forgive others
May you share freely, never taking more than you give.

GPL vs. LGPL

Wurde in letzter Zeit häufig diskutiert, deshalb hier die Wikipedia-Erklärung:

Im Gegensatz zur GPL darf bei der LGPL auch geschlossener (d. h. proprietärer) Code mit dem LGPL-Code kombiniert werden, allerdings nur, wenn folgende Bedingung eingehalten wird: Ein Programm, das LGPL-Code zusammen mit eigenem proprietärem Code verwendet, muss so aufgebaut sein, dass jeder Endnutzer den quelloffenen LGPL-Code (oder modifizierte Versionen davon) in das endgültige Programm (selbstständig) linken kann. Dies kann entweder durch dynamisches Linken geschehen (wo der LGPL-Code in einer dynamischen Bibliothek verwendet wird); dann kann der Endnutzer eine eigene dynamische Bibliothek (Linux-Jargon: Shared Object) des LGPL-Teils erstellen (beispielsweise aus einer modifizierten Version des LGPL-Codes) und nutzen. Oder es kann durch statisches Linken geschehen – dann bekommt ein Endnutzer typischerweise die Objektdateien (oder Quelltext) des proprietären Codes und die Sourcen des LGPL-Codes und kann diese zusammenlinken.