Eine Reise in die Vergangenheit: MicroVAX, 4.3BSD, 386BSD und FreeBSD 1.0

Yamagi

Possessed With Psi Powers
Teammitglied
Vorweg: Dieser Beitrag ist sinnlos und Zeitverschwendung, aber ich muss
ihn nun einfach posten, denn dann kann ich mir einreden etwas produktives
getan zu haben. :)

Letzte Woche trat ein Kunde an mich heran, deutete auf eine sehr
staubige Kiste in der Ecke seiner IT-Installation und sagte, dass es
eine MicroVAX irgendwann aus den tiefsten 80er Jahren sei. Natürlich
war sie seit sehr, sehr langer Zeit nicht mehr im Einsatz, es ist wohl
keine Untertreibung, dass der Prozessor einer USB-Maus über mehr
Rechenleistung verfügt. Allerdings war das damals doch extrem teure
Gerät auch immer zu schade zum Wegwerfen. Darauf war angeblich ein
4.3BSD - ich konnte es erst nicht wirklich glauben, es seinerzeit vor
allem im akademischen Bereich zu finden war und Endkunden die Maschinen
eher mit VMS betrieben - und ich sollte mal schauen, ob das Ding noch
funktioniert. Ich kenne mich ja mit "BSD aus und so".

Da 4.3BSD gerade einmal zwei Jahre jünger ist als ich, dachte ich mir,
dass ich mich erst einmal einarbeiten sollte. Die Erfahrung sagt, dass
unbekannte Systeme immer eine gewisse Neigung dazu haben schnell kaputt
gefrickelt zu werden. Wieder zu Hause fragte ich dann Google und es gab
mir tatsächlich eine Antwort. Angeblich soll man mit SIMH [1] eine alte
VAX emulieren können und darin sogar 4.3BSD ausführen. Gesagt, getan,
recht schnell fand ich dann auch eine Anleitung [2].

Leider stürzte der Emulator gleich beim ersten Start ab. Ich kapierte es
allerdings nicht, dachte es sein eine Ausgabe des emulierten Systems. Am
Ende stellte sich heraus, dass der FreeBSD-Port von SIMH kaputt ist. Er
baut das Programm mit -O2 und bricht es damit. Also entsprechende
Änderungen vorgenommen, ein neuer Versuch und es startete. Nach der
Installation dann der erste Multiuserboot und ich fühlte mich gleich
wie zu Hause:

Code:
VAX780 simulator V3.8-1
Listening on port 8888 (socket 6)
Eth: opened em0
MAC=08:00:2B:CC:DD:EE
loading ra(0,0)boot
Boot               
: ra(0,0)vmunix
279844+80872+100324 start 0x12f8
4.3 BSD UNIX #1: Fri Jun  6 19:55:29 PDT 1986
    karels@monet.Berkeley.EDU:/usr/src/sys/GENERIC
real mem  = 8388608                               
SYSPTSIZE limits number of buffers to 140
avail mem = 7187456                      
using 140 buffers containing 524288 bytes of memory
mcr0 at tr1                                        
mcr1 at tr2
uba0 at tr3
hk0 at uba0 csr 177440 vec 210, ipl 15
rk0 at hk0 slave 0                    
rk1 at hk0 slave 1
rk2 at hk0 slave 2
rk3 at hk0 slave 3
uda0 at uba0 csr 172150 vec 774, ipl 15
ra0 at uda0 slave 0                    
zs0 at uba0 csr 172520 vec 224, ipl 15
ts0 at zs0 slave 0                    
dz0 at uba0 csr 160100 vec 300, ipl 15
de0 at uba0 csr 174510 vec 120, ipl 15
de0: hardware address 08:00:2b:cc:dd:ee
Changing root device to ra0a           
Automatic reboot in progress...
Fri Dec  5 04:59:39 PST 1986
/dev/ra0a: 342 files, 4224 used, 3205 free (21 frags, 398 blocks, 0.3% fragmentation)
/dev/rra0h: 4653 files, 35746 used, 102838 free (166 frags, 12834 blocks, 0.1% fragmentation)
/dev/rra0g: 2 files, 9 used, 245216 free (16 frags, 30650 blocks, 0.0% fragmentation)
Fri Dec  5 04:59:43 PST 1986
checking quotas: done.
starting system logger
checking for core dump... /a/crash: No such file or directory
Dec  5 04:59:44 vax savecore: /a/crash: No such file or directory

starting local daemons: namedDec  5 04:59:44 vax named[54]: No root Nameserver
 sendmail.
preserving editor files
clearing /tmp
standard daemons: update cron accounting.
starting network daemons: rwhod inetd printer.
Fri Dec  5 04:59:44 PST 1986


4.3 BSD UNIX (vax.happy.home.yamagi.org) (console)

login:

Die Ähnlichkeit der Bootausgabe des 4.3BSD mit der aktueller FreeBSD
Versionen ist deutlich zu sehen. Nach dem Login blieb es so. Zwar ist
das System chaotischer als FreeBSD, es liegen Dateien im /, Dinge die
nach /var gehören zum Teil in /usr, aber die Tools sind meist gleich.
Leider hat der Emulator ein eher grütziges Terminal.

Das sollte jedoch kein Problem sein. Einfach ein "ifconfig de0 inet
192.168.0.17" und schon konnte ich das Hostsystem pingen. Dann noch
telnetd gestartet und eingeloggt. Ein wenig gespielt, festgestellt dass
vi damals irgendwie noch anders als FreeBSDs nvi war, aber auch nicht
sehr. Mich dann ein wenig in /usr/games aufgehalten. Wieso liefert
FreeBSD eigentlich nicht alle BSD-Games aus? Gerade "adventure" und
"zork" sind Klassiker, "wargames" immerhin ein guter Witz.

Es ist dabei erstaunlich, wie schnell das System läuft. Wobei man
natürlich beachten muss, dass es hier trotz Emulator sicher um den
Faktor 100 oder mehr Leistung unter dem Hintern hat als auf
Originalhardware. Praktisch machen kann man damit allerdings nicht
viel, denn die damalige Software ist doch irgendwo veraltet und
der alte pcc baut keine aktuellen C-Programme durch.

Also stieg ich ein wenig in die Tiefen hinab. Auf den ersten Blick sieht
der Quellcode FreeBSD sehr ähnlich, wenn man ein wenig drin liest fällt
aber wieder auf, dass spätestens mit FreeBSD 5 und SMPng kein Stein auf
dem anderen geblieben ist. Daher dazu hier nun auch nicht mehr, es gibt
bereits genügend Doku. Zu empfehlen ist Kirk McKusicks "The Design and
Implementation of the BSD Operating System".

Eine Ausgabe der Prozesse kommt bekannt vor, auch wenn es deutlich
weniger als heute sind. Aber man musste auch mit viel weniger RAM
auskommen:

Code:
vax# ps auxww 
USER       PID %CPU %MEM   SZ  RSS TT STAT  TIME COMMAND
root        94  0.0  1.6  127  103 co S     0:00 -csh (csh)
root        84  0.0  0.7   59   41 ?  I     0:00 /etc/inetd
root        47  0.0  0.7   55   43 co I     0:00 /etc/syslogd
root         1  0.0  0.5   36   28 ?  I     0:00 init
root       101  0.0  0.3   30   14 06 I     0:00 - std.9600 tty06 (getty)
root       102  0.0  0.3   30   14 07 I     0:00 - std.9600 tty07 (getty)
root        98  0.0  0.3   30   14 03 I     0:00 - std.9600 tty03 (getty)
root        59  0.0  2.0  177  131 ?  I     0:00 /usr/lib/sendmail -bd -q30m
root        54  0.0  0.9   74   57 ?  I     0:00 /etc/named /etc/named.boot
root        80  0.0  0.8   49   47 ?  I     0:00 /etc/rwhod
root        72  0.0  0.5   40   27 ?  I     0:00 /etc/cron
root        95  0.0  0.3   30   14 00 I     0:00 - std.9600 tty00 (getty)
root        60  0.0  1.9  177  129 ?  I     0:00 -running queue (sendmail)
root         2  0.0  0.3 2048    0 ?  D     0:00 pagedaemon
root        69  0.0  0.1    5    3 ?  I     0:00 /etc/update
root         0  0.0  0.1    0    0 ?  D     0:00 swapper
root       115  0.0  1.2   97   78 co R     0:00 ps auxww
root        89  0.0  1.0   80   67 ?  I     0:00 /usr/lib/lpd
root        96  0.0  0.3   30   14 01 I     0:00 - std.9600 tty01 (getty)
root       100  0.0  0.3   30   14 05 I     0:00 - std.9600 tty05 (getty)
root        99  0.0  0.3   30   14 04 I     0:00 - std.9600 tty04 (getty)
root        97  0.0  0.3   30   14 02 I     0:00 - std.9600 tty02 (getty)

"swapper" ist der Kernel, er hieß noch bis FreeBSD 7 so. "pagedaemon"
ist Teil des VM. Ihn findet man so nicht mehr, da alle aktuellen BSDs
das VM ausgetauscht haben. FreeBSD zu dem von MACH (in den 90ern von
John Dyson grundlegend umgebaut und deutlich verbessert), NetBSD zu
einem Eigenbau. OpenBSD basiert auf NetBSD. "named" ist der gute BIND
in der Version vom 15.11.1985. "sendmail" kommt in Version vom 22.5.1986
zum Einsatz.

Alles in allem kann man zwar sagen, dass 4.3BSD nach heutigen Maßstäben
spartanisch sein mag, aber man versteht wieso es gern mal als die beste
jemals geschriebene Software bezeichnet wird. Dafür, dass 25 Jahre
vergangen sind, hat sich verdammt wenig geändert. Wer aktuelle Unixe
kennt - wobei Linux natürlich weniger als BSD - fühlt sich gleich zu
Hause. Daran können sich die "Alle 2 Jahre muss alles neu"-Fetischisten
im Bereich der GUI ein großes Stück abschneiden.

Das führte dann natürlich zu einer interessanten Frage. 4.3BSD nutzte
FFS (vor dem Aufspalten in die 3 Layer FFS, UFS und VFS) und die VAX war
Little Endian, also sollte FreeBSD es lesen können. Gesagt getan:

Code:
% mdconfig -a -t vnode -f /home/yamagi/vax/43bsd/rq.dsk
% mount /dev/md0 /mnt/
mount: /dev/md0 : Operation not permitted

Das sah nicht gut aus. Die dmesg sagte etwas von einem unsauberen
Dateisystem. Also weiß man, was zu tun ist:

Code:
% fsck_ffs /dev/md0
** /dev/md0
Format of file system is too old.
Must update to modern format using a version of fsck
from before 2002 with the command ``fsck -c 2''

"Mist", dachte ich mir. Tatsächlich fand ich schnell den Grund, beim
Sprung von FFS auf UFS1 wurde anscheinend was am internen Format
geändert. Warum allerdings die Option zum Konvertieren entfernt wurde,
ist mir nicht ganz klar. Es geschah im Rahmen von UFS2 [3]. Ich habe
dann einfach read only gemountet und war glücklich.

Code:
% mount -o ro /dev/md0 /mnt/
% mount
/dev/md0 on /mnt (ufs, NFS exported, local, read-only)

Natürlich brachte mir es nicht. Mein x86 kann keine VAX-Binaries
ausführen. Das führte zu der nächsten Idee. Die ältesten i386 Binaries
für ein BSD dürften in 386bsd enthalten sein, aus dem später FreeBSD und
NetBSD hervorgingen. Also Google angeworfen und ich wurde fündig.

Nun hatten alle BSDs vor FreeBSD 3.0 (wenigstens aus FreeBSD Sicht) aout
als Binaryformat, aus anderen Projekten wusste ich jedoch schon, dass
aout nie auf FreeBSD/amd64 portiert wurde. Ich glaube, es wäre auch nur
mit extremen Aufwand möglich. Daher habe ich erst einmal ein FreeBSD/i386
9.0-RC2 in einer VirtualBox installiert. Nun gibt es zwei Probleme:

1. Die Rückkompatiblität für (Free)BSD-Versionen vor FreeBSD 4.0 wurde
irgendwann mal aus GENERIC entfernt. Ist ja auch irgendwo
verständlich. Vorhanden ist sie aber natürlich noch.
2. Die "compat"-Ports für (Free)BSD 4 wurden ebenfalls mal entfernt.

Um das erste Problem zu lösen, habe ich also einen neuen Kernel gebaut,
der zusätzlich zu dem normalen GENERIC-Kram folgendes enthält:

Code:
options         COMPAT_43
options         COMPAT_43TTY

COMPAT_43 fasst die Rückkompatiblität für alle BSD-Versionen vor FreeBSD
4 zusammen "COMPAT_43TTY" bietet das zugehörige TTY-Interface.

Das zweite Problem stellt sich nicht. Die Kompatiblitätsports finden
sich im CVS (ich sollte davon echt mal Pakete bauen), da dynamisches
Linken aber erst mit FreeBSD 2 kam, braucht man sie nicht. Also einfach
den Kernel gebaut und neu gestartet. Anschließend noch die Unterstützung
für aout geladen:

Code:
% kldload aout

Dann die 386bsd CD gemountet und das System extrahiert. Bevor ich groß
mit einem chroot begann, wollte ich erst einmal teste:

Code:
% ./bin/csh
Abort

Gar nicht gut. Ein ktrace zeigte:

Code:
1065 ktrace   RET   ktrace 0
1065 ktrace   CALL  execve(0xbfbfee1b,0xbfbfecf8,0xbfbfed00)
1065 ktrace   NAMI  "./csh"

Da stürzt also schon der Image Activator ab. Eine kurze Diskussion auf
der Mailingliste ergab dann, dass FreeBSDs Errata EN-09:05 [4] durch das
Verhindern von mmap() auf NULL sehr alte aout-Binaries gebrochen hat.
Das läst sich aber lösen:

Code:
% sysctl security.bsd.map_at_zero=1

Tada, es funktionierte. Ich machte also ein chroot und schon war ich in
meinem 386bsd. Einen Moment staunte ich. Diese Binaries sind uralt und
dennoch funktionieren sie:

Code:
% ls /bin/csh
-r-xr-xr-x  1 bin  bin   132k Jul 13  1992 cs

Okay, das war auch trivial. Also ging ich einige nicht ganz so triviale
Dinge an. Schnell stellte ich fest, dass ich ein procfs nach /386bsd
mounten muss:

Code:
% ps
ps: kvm_openfiles: can't open /dev/drum

Das war irgendwo klar. Spätestens mit der Integration von Jails wurde
die Prozesstabelle grundlegend geändert, was ps brach. Hier scheitert er
allerdings schon an einem Device. "ifconfig" musste ich mir erst einmal
selbst bauen, aber dann:

Code:
% ifconfig em0
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX>
	inet 192.168.0.106 netmask ffffff00 broadcast 192.168.0.255

Gut, er zeigt nur einen Bruchteil der Flags an, aber immerhin. Daher:

Code:
% ifconfig em0 inet 192.168.0.17

Und zack war die SSH-Verbindung in die VM weg. Man kann also mit einem
Tool von 1992 in aktuellen FreeBSD-Versionen noch die IP-Adresse ändern.
Das beeindruckte mich dann doch sehr. Ich beschloss das ganze noch
einmal mit "FreeBSD 1.0" vom Dezember 1993 durchzuprobieren. Auch da das
gleiche Ergebnis.

Ein "make world" dauerte übrigens knappe 55 Sekunden, Computer sind seit
dem doch ein wenig schneller geworden. FreeBSD 1 hatte auch schon Ports,
immerhin 70 Stück. Zum Glück liegt der Source bei. Schnell die tcsh
installiert, meine tcshrc hineinkopiert und endlich mal eine gute Shell.
Danach noch ein wenig weiter gespielt.

Tatsächlich habe ich nur drei Probleme gefunden:
1. Einige kernelnahe Tools wie ps funktionieren nicht.
2. Der mkdir() Syscall hatte einen Bug, der von mkdir(1) als
Feature missbraucht wurde [5]. Man kann das leicht patchen. Oder
mkdir(1) aus FreeBSD 2 bauen.
3. Der Kernel unterstützte damals 30.000 als höchste PID, aktuelle
Kernel gehen bis 99.999. Einige Programme mögen es nicht, wenn ihre
PID größer 30.000 ist und explodieren.

Insgesamt aber eine sehr interessante Erfahrung und ein hervorragendes
Beispiel dafür, wie rückkompatibel FreeBSD ist. Da kann sich so manches
andere System eine große Scheibe von abschneiden. Ebenso beeindruckend,
wie wenig sich in den letzten 25 Jahren aus Nutzersicht geändert hat und
in meinen Augen ein gutes Beispiel dafür, wie wichtig und sinnvoll die
"Policy of least astonishment" (POLA) doch ist.

Leider stellte sich heute morgen heraus, dass die MicroVAX keinen Mucks
mehr von sich gibt. Strom hat sie, aber sonst passiert nichts. Es
leuchten nicht einmal die LEDs auf. Ich vermute, dass das Netzteil
kaputt ist. Wir haben beschlossen sie in Frieden dort stehen zu
lassen. :)

----

Das Image für den VAX-Emulator findet sich hier:
ftp://ftp.bsdforen.de/pub/BSDForen/community/retrobsd/43bsd_simh.tar.xz

Die Dateien sind im Einzelnen:
43.tap -> 4.3BSD Installationstape
boot.ini -> Emulator-Konfiguration
boot42 -> Der Bootloader
rq.dsk -> Die Festplatte

Zum Ausführen muss SIMH (unter FreeBSD emulators/simh)
installiert werden. Er muss allerdings OHNE "-O2" gebaut
werden, denn sonst funktioniert er nicht! Anschließend kann
man die Maschine starten:

Code:
% vax780 boot.ini

Wenn das Netzwerk genutzt werden soll, muss in der
boot.ini in Zeile 19 statt "em0" eure Netzwerkkarte
angegeben werden. Außerdem muss der Emulator
dann als root gestartet werden

Login: root
Passwort: Keines
IP-Adresse: 192.168.0.5 (kann in /etc/rc.local geändert werden)

----

386bsd findet sich unter:
http://ftp1.am.freebsd.org/pub/ancientBSD/386BSD/

FreeBSD 1.0 findet sich unter:
ftp://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/i386/ISO-IMAGES/FreeBSD-1.0-RELEASE/

----

1: http://simh.trailing-edge.com/
2: http://gunkies.org/wiki/Installing_4.3_BSD_on_SIMH
3: http://svnweb.freebsd.org/base/head/sbin/fsck_ffs/setup.c?r1=96475&r2=96483
4: http://security.freebsd.org/advisories/FreeBSD-EN-09:05.null.asc
5: http://unix.derkeiler.com/Mailing-Lists/FreeBSD/current/2004-02/0588.html
 
Zuletzt bearbeitet:
Super spannend, so was liebe ich ja total.

Für mich als Linux-Umsteiger wirklich erstaunlich, wie gut es bei BSD mit der Rückwärtskompatibilität aussieht.

Traurig eigentlich nur, dass sich am Ende die MicroVAX nicht zum Leben erwecken ließ, das wäre ein wenig Lohn für die "Arbeit" gewesen ;)
 
Okay, den kannte ich nicht. Dann kann ich nachher noch eine Liste an Links auf die Images nachliefern. Danke für den Hinweis. :)
 
So, ich habe das Emulator-Image hochgeladen und Links zu 386bsd sowie FreeBSD 1.0 eingefügt.
 
Ah! Gut, wusste garnicht, daß es einen Schalter dafür gibt... (hätt ich mir ja denken können *honk*) :D
 
SIMH ist unglaublich cool, wenn man alte Sachen oder sowas, wie OpenVMS ausprobieren will. Es gab auch einige Projekte, die telnet-Verbindungen zu alten Systemen anbieten. So etwas macht unglaublich Spaß. Allerdings sind viele davon mittlerweile down.

Deine Geschichte hat mich daran erinnert wieviel Spaß das immer gemacht hat. Es ist kaum in Worte zu fassen, wie genial es sich anfühlt ein neues System zu erforschen, auch wenn es alt ist. Das hat immer so etwas, wie damals, als man mit BSD oder Linux angefangen hat.

Ist zwar relativ OT, aber so geht es vielen mit Telehack, das viel atemberaubender ist als es zunächst aussieht. Ist auch immer wieder nett wenn man von Leuten liest, die sich selbst darin finden - da drin ist ein sehr großer Teil der Vergangenheit abgebildet und damit archiviert.

Achja, HP hat Hobbyist-Versionen von VMS, falls das mal jemand auf SIMH probieren will. Es gibt da eine Usergroup, die früher DECUS hieß und heute Connect heißt. Soweit ich weiß gibt es da eine kostenlose Mitgliedschaft mit der man da rankommt.

NeXTSTEP liegt bei mir auch schon seit etlichen Jahren im Kasten, aber man kommt ja zu nichts. ;)
 
Bob Supnik - Entwickler von SIMH - war übrigens lange Zeit in der Chipentwicklung von DEC tätig und dort unter anderem in hoher Position an MicroVAX und Alpha beteiligt. :)
 
Schon komisch das die soviel Windows Zeug auf der Webseite haben und UNIX nur am Rande erwähnen. Wenn die das in Ihrer Ausstellung auch so machen hat das mit der Geschichte von Computern eher wenig zu schaffen mehr so mit der Geschichte von MS. Diese Einseitigkeit immer ich fasse es nicht :apaul:
Gerade schwer nachvollziehbar. Ich finde da nicht so viel zu Windows.
 
Gerade schwer nachvollziehbar. Ich finde da nicht so viel zu Windows.

Ok, ich liefer mal 2 Beispiele zu Windows und dann noch einen Link auf die einzige Seite zeigt auf der ich was zu Unix gefunden habe.

Einmal Unter Wissenswertes
http://www.computermuseum-muenchen.de/dictionary/history/windows.html

Dann unter Software, hier gibt es 2 Seiten mit Windows Produkt listen
http://www.computermuseum-muenchen.de/software.html

Ich habe gerade gesehen das es sogar einen Bereich mit Linux gibt, auch wenn der sagen wir mal nicht ganz vollständig ist ;)

Unter Software und dann sonstiges findet man dann sogar die Systeme Unix System V 2.2, Solaris 2.4 und Minix 1.2 als namhafte UNIX Vertreter
http://www.computermuseum-muenchen.de/software/os/misc.html

Leider Kein Word über die Geschichte von UNIX.

Ich wollte jetzt keinen anti Windows rant starten, lediglich erwähnen das mir die Ausstellung doch sehr einseitig vorkommt. Auf jeden Fall auf der Webseite, die Ausstellung habe ich mir leider noch nicht ansehen können.
 
Zurück
Oben