# NetBSD

NetBSD ist ein Unix-Derivat und gehört zur Familie der BSD-Betriebssysteme. Es wird unter der freien BSD-Lizenz vertrieben.

## Überblick

Als erste Abspaltung von 386BSD war NetBSD im Jahr 1993 die zweite BSD-Variante, die als Open-Source-Betriebssystem veröffentlicht wurde. Bis heute wird es aktiv entwickelt und ist aufgrund seiner guten Portierbarkeit auf nahezu jedem Computer einsetzbar.
Mittlerweile ist NetBSD auf 57 Hardware-Plattformen portiert worden, unter anderem auf 32-Bit- und auf 64-Bit-Systeme mit Unterstützung für einen oder mehrere Prozessoren. Als universelles Betriebssystem für eine breite Palette von Anwendungszwecken konzipiert, kann NetBSD auf unterschiedlicher Hardware eingesetzt werden: auf Servern, Workstations, Desktop-PCs, Notebooks, PDAs und auf Embedded-Systemen. Dabei ist die Unterstützung aktueller Schnittstellen, Speichersysteme, Netzwerkprotokolle und Dateisysteme bereits integriert. Für Anwendungsprogramme steht das umfangreiche Paketsystem pkgsrc zur Verfügung. Außerdem sind virtuelle Maschinen mit NetBSD auf Xen möglich.

## Geschichte

NetBSD basiert wie FreeBSD auf 386BSD und 4.4BSD-lite. Das Projekt entstand, weil einige der 386BSD-Entwickler unzufrieden waren mit dem niedrigen Tempo und der Richtung, die die weitere Entwicklung nehmen sollte. Die vier Gründer des NetBSD-Projekts, Chris Demetriou, Theo de Raadt, Adam Glass und Charles Hannum, beschlossen, mit einem offeneren Entwicklungsmodell und mit der Konzentration auf portablen, sauberen und korrekten Quellcode einen anderen Weg zu gehen. Weil dem Internet die wichtigste Rolle bei der gemeinsamen Entwicklung und bei der Verteilung des Projekts zukam, schlug Theo de Raadt den Namen „NetBSD“ vor.
Der Quellcode von NetBSD war ab dem 21. März 1993 verfügbar, und mit NetBSD 0.8 erschien im April 1993 das erste offizielle Release. NetBSD 0.9 enthielt danach viele Verbesserungen und Korrekturen, beschränkte sich aber noch auf die PC-Plattform. NetBSD 1.0 vom Oktober 1994 war schließlich das erste Release für unterschiedliche Hardware-Architekturen: Als unterstützte Hardware-Plattformen waren nun HP 9000 Series 300, Amiga, 68k Macintosh, Sun-4c series und PC532 hinzugekommen.
1994 wurde mit Theo de Raadt einer der Gründer aus dem Projekt ausgeschlossen. Er rief daraufhin im Oktober 1995 das OpenBSD-Projekt ins Leben, das auf NetBSD 1.0 basieren sollte.
Die NetBSD-1.x-Versionen erschienen weiterhin in jährlichem Turnus, dazwischen wurden kleinere „patch“-Versionen veröffentlicht. Mit NetBSD 1.3 wurde 1998 auch die NetBSD-Paketverwaltung pkgsrc eingeführt. 1999 erschien NetBSD 1.4 mit fertiger Unterstützung für 16 verschiedene Hardware-Plattformen. Darüber hinausgehende Hardware-Unterstützung war außerdem schon im Quellcode verfügbar.
Im Dezember 2004 wurde NetBSD 2.0 veröffentlicht: Erstmals wurden Mehrprozessor-Systeme unterstützt (SMP). Eine weitere wichtige Neuerung von NetBSD 2.0 war die Einführung einer nativen Threads-Implementierung für alle Plattformen. Außerdem wurde mit diesem Release ein neues Nummerierungsschema eingeführt: Hauptreleases werden seither in der ersten Ziffer gezählt (NetBSD 2.0, 3.0 etc.) und nicht mehr wie früher in der zweiten (NetBSD 1.5, 1.6).
Im Juni 2008 änderte die NetBSD Foundation ihre Vierklausel-BSD-Lizenz zu einer zweiklausligen BSD-Lizenz. Dadurch wird die Kompatibilität mit GPL-lizenzierter Software verbessert und in Produkten, in denen Code der NetBSD Foundation verwendet wird, muss nicht mehr darauf hingewiesen werden, dass darin Software der NetBSD Foundation enthalten ist.
Im April 2009 wurde NetBSD 5 veröffentlicht, welches ein verbessertes Threading-Modell mit sich brachte. Von nun an ist X.Org das Standardfenstersystem, und neben verbesserter Hardwareunterstützung wurde auch das Kernel-Modul-Framework überarbeitet. Im März 2011 wurde bekannt gegeben, dass nun ein dreigliedriges System zur Priorisierung und Pflege der einzelnen Plattformen verfolgt wird.
Mit NetBSD 6 wurde npf eingeführt, ein Paketfilter, der auf den Betrieb von Mehrkernsystemen optimiert ist. Zudem wurde ein neues Kernel Module Framework eingeführt, welches nun standardmäßig aktiviert ist. Ebenso wurde Xen 2 zu Gunsten von Xen 3.1 entfernt und der Logical Volume Manager ist nun Teil des Basissystems.
In NetBSD 7 (veröffentlicht am 8. Oktober 2015) wurde der DRM/KMS-Code aus Linux 3.15 integriert, womit eine bessere Unterstützung von Intel- und Radeon-Grafikkarten ermöglicht wird. Verschiedene Boards mit Arm-Prozessor (z. B. Raspberry Pi 2, BeagleBoard) werden nun unterstützt. NetBSD 7 erhält mit blacklistd ein Intrusion Detection System. Seit dieser Version gibt es auch das von anderen Betriebssystemen bekannte Programm „service“, mit dem sich Daemonen starten und stoppen sowie deren Status abfragen lassen.
Am 17. Juli 2018 wurde NetBSD 8 veröffentlicht. Bedeutende Neuerungen im Kernel sind Unterstützung für USB 3.0, Maßnahmen gegen die CPU-Bugs Spectre und Meltdown und Address Space Layout Randomization (ASLR). Außerdem unterstützt NetBSD nun das Booten mittels EFI.
NetBSD 9 erschien am 14. Februar 2019. Dies ist die erste Version, die auf 64-Bit-Arm-Architekturen lauffähig ist. ASLR wurde auf den Kernel ausgeweitet (Kernel ASLR). Ab dieser Version gilt die ZFS-Implementierung als für den täglichen Gebrauch einsatzfähig, das Booten von ZFS-Datenträgern wird jedoch noch nicht unterstützt. Der DRM/KMS-Code wurde mit Linux 4.4 synchronisiert. Updates erschienen am 20. Oktober 2020 (NetBSD 9.1) und am 17. Mai 2021 (NetBSD 9.2).

## Merkmale

NetBSD ist ein unixoides Betriebssystem, bei dem die einzelnen Komponenten des Userland mit den Fähigkeiten des Kernels optimal abgestimmt sind. Dies wird dadurch erreicht, dass der Kernel und (fast) das ganze Userland aus einer Hand stammen. Großer Wert wird darauf gelegt, dass sich das System auf allen Architekturen gleich verhält.

### Aufbau

Für Benutzer, Anwendungen und Programmierer bietet NetBSD eine POSIX-kompatible Schnittstelle an, mit der viele Anwendungen von anderen unixoiden Systemen, etwa Linux und anderen BSD-Systemen, auf NetBSD laufen können.
NetBSD besteht aus einem kleinen Basissatz mit den wichtigsten Programmen. Weitere Applikationen können mit Hilfe der Paketverwaltung nachinstalliert werden, je nach Einsatzzweck des Rechners. Dies führt oft dazu, dass relativ viele Pakete nachinstalliert werden müssen. Im Gegenzug erhält man aber ein System, auf dem nichts „Unnötiges“ installiert ist. Ein lauffähiges Betriebssystem ohne grafische Oberfläche lässt sich mit der Standarddistribution in weniger als 300 MB realisieren.
Als Paketsystem kommt pkgsrc, die „NetBSD Packages Collection“, zum Einsatz. Diese bietet die Wahl, vorkompilierte Binärpakete zu installieren oder Programme selbst zu kompilieren. Pkgsrc ist auch auf verschiedene andere Betriebssysteme portiert worden, unter anderem auf FreeBSD, DragonFly BSD, Solaris und GNU/Linux.

### Gleiches Verhalten auf jeder Hardware

NetBSD ist ein Nachfolger des an der Universität von Berkeley in Kalifornien entwickelten BSD Unix. Als das BSD-Projekt nach der Veröffentlichung von 4.4BSD-Lite2 im Jahr 1995 eingestellt wurde, unterstützte es verschiedene Hardware-Plattformen, darunter IBM-kompatible PCs, aber auch Workstations von Hewlett-Packard, Sun Microsystems und Digital. Das NetBSD-Projekt hat sich dem Erhalt der Portabilität und dem Ausbau der Multiplattform-Fähigkeiten verschrieben.
Deshalb unterstützt NetBSD heute nicht nur viele „alte“ Computer-Architekturen, sondern läuft auch auf modernen Geräten mit Desktop-, Server- und Embedded-Hardware, wie beispielsweise AMD64, PowerPC, MIPS und Arm/XScale sowie Xen-basiert auf virtualisierter Hardware. Die Liste der unterstützten Hardware-Plattformen unterstreicht das Motto der NetBSD-Entwickler: „Of course it runs NetBSD“ („Natürlich läuft NetBSD darauf“).
Der Support für all diese Plattformen basiert auf einem einzigen Quellbaum. Dieser ist in maschinenabhängige und maschinenunabhängige Teile organisiert. Der maschinenabhängige Teil enthält die für jeweils eine Rechnerarchitektur spezifischen Teile, die die Verbindung zwischen der Hardware und den unabhängigen Teilen herstellen.
Diese Aufteilung, zusammen mit der zentralen Verwaltung der Quelltexte, ist der Grund dafür, warum neuentwickelte Lösungen sofort auf allen Plattformen verfügbar sind: Das aufwendige Rückportieren neuer Funktionen entfällt. Neue Funktionen und Fehlerkorrekturen im maschinenunabhängigen Code sind unmittelbar auf allen unterstützten Architekturen verfügbar.
Bei der Entwicklung neuer Gerätetreiber gilt dies ebenso. Eine PCI-Karte funktioniert deshalb auf IA-32, DEC Alpha, PowerPC, Sun SPARC und anderen Architekturen mit PCI-Unterstützung. Ein Ethernet-Chip, der auf verschiedenen PCI-, ISA- und USB-Geräten enthalten ist, erfordert nur einen einzigen Treiber, der dann über verschiedene Bus-Attachments angebunden wird.
Diese Plattformunabhängigkeit vereinfacht die Entwicklung. Für Linux muss der Code der Gerätetreiber für jede neue Architektur extra angepasst werden. NetBSD dagegen kann schneller auf neue Hardware-Architekturen portiert werden: So benötigten Entwickler für die Portierung von NetBSD auf den SuperH-Prozessor weniger als sechs Wochen, für Linux waren zwölf Wochen nötig. Die Portierung von NetBSD auf die AMD64-Architektur dauerte einen Monat, für Linux dauerte sie sechs Monate.
Um die gute Portierbarkeit von NetBSD zu unterstreichen und um zu zeigen, wie gut es für Embedded-Anwendungen geeignet ist, wurde 2005 von der Firma Technologic Systems der NetBSD-Toaster präsentiert. Damit wurde ein Projekt Realität, das zuvor jahrelang als Running Gag in der NetBSD-Szene die Runde machte: „NetBSD würde sogar auf einem Toaster laufen“.
Das Crosskompilieren von Kernel und Userland für langsame Plattformen kann seit dem Release von NetBSD 1.6 vollständig auf schnellere Rechner einer anderen Architektur ausgelagert werden.

## Funktionen
### Virtualisierung

Ein fester Bestand von NetBSD ab Version 3.0 ist Xen. Über pkgsrc können QEMU und VirtualBox nachinstalliert werden.

### Rump kernels

Mit NetBSD 5.0 wurden rump kernels – „Rumpfkernel“ – eingeführt, ein System, mit dem Treiber im Userspace ausgeführt werden können. Mittels dieser Technik ist es auch möglich, für NetBSD entwickelte Treiber unter anderen Systemen mit verschiedenen Kerneln zu verwenden.

### Storage

NetBSD verwendet als Dateisystem FFS mit Journaling, auch bekannt als WAPBL. Dies war eine Spende von Wasabi Systems. Im Rahmen eines GSoC-Projektes wurde zudem ein Logical Volume Manager entwickelt, der kompatibel zum von AIX stammenden Logical Volume Manager ist, weshalb auch die gleichen Werkzeuge verwendet werden können.
Mit NetBSD 6 hielt das Flashspeicher-Dateisystem CHFS, entwickelt vom Department of Software Engineering, Universität der Wissenschaften Szeged, Einzug. Ein experimenteller Port von ZFS wurde ebenfalls integriert.

## Lizenz

Der Kernel und ein großer Teil der Basis bestehen aus BSDL-Code. Im Gegensatz zu FreeBSD und OpenBSD wird aber auch der GCC in höheren Versionen, welcher unter der GPLv3 steht, verwendet. Ein Grund hierfür ist die breite Unterstützung exotischer Hardware.

## Distributionen und Derivate
### NetBSD-Distributionen

* BlackBSD: Live-CD; auf Sicherheitswerkzeuge spezialisiert; Fluxbox;
* g4u: Festplatten-Live-CD
* Jibbed: Live-CD;
* OS108: Desktop-Betriebssystem auf NetBSD-Basis;

### NetBSD-Derivate

* OpenBSD: größter Ableger von NetBSD;
* Debian GNU/NetBSD: eine Kombination aus Debian und dem NetBSD-Kernel; 2002 eingestellt;
* EdgeBSD: NetBSD-Ableger mit dem Primärziel in einigen Aspekten moderner zu sein als NetBSD an sich;
* Force10 Networks FTOS: Betriebssystem für Switches/Router der Force10 TeraScale E-Serie;
* Gentoo/NetBSD: eine Kombination aus Gentoo und dem NetBSD-Kernel;
* PolyBSD / pocketSAN: Basissystem für den Aufbau von Embedded-Systemen;
* SEOS: Betriebssystem der SmartEdge-Routerserie von Ericsson;