\input{confighandout} \subsection{Was ist Linux?} \subsubsection{Geschichtlicher Hintergrund} Fr\"uhe elektronische Rechner, wie der in Abbildung \ref{img:eniac} gezeigte ENIAC, waren nicht frei programmierbar. Sie wurden f\"ur einen bestimmten Zweck gebaut, der ENIAC beispielsweise zur Berechnung von ballistischen Flugbahnen. \begin{figure}[h] \centering \includegraphics[width=0.5\textwidth]{images/785px-Eniac.jpg} \caption{ENIAC (1947)} \label{img:eniac} \end{figure} Im Laufe der 50-er und 60-er Jahre entwickelten sich die Rechner schnell weiter, was vor allem durch die Erfindung des Transistors beschleunigt wurde. Mit der freien Programmierbarkeit kam gleichzeitig die Nachfrage nach einem Betriebssystem. Zum einen stellte man schnell fest, das bestimmte Operationen, etwa Ein- und Ausgabe-Funktionen, von nahezu jedem Programm immer wieder ben\"otigt wurden. Zum anderen hatte man bald den Wunsch nach gr\"o \ss erer Hardware-Unabh\"angigkeit, damit ein einmal geschriebenes Programm ohne gro\ss e \"Anderungen auf verschiedenen Rechnern laufen konnte. Die ersten Ans\"atze f\"ur ein universelles Betriebssystem blieben mehr oder weniger erfolglos. Die Entwickler verzettelten sich mit immer neuen Anforderungen und wenig durchdachten Konzepten. Die Systeme wurden un\"uberschaubar und f\"ur viele der damaligen Rechner zu gross. Erst das ab 1969 von Ken Thompson und Dennis Ritchie (Abbildung \ref{img:ken_ritchie}) entwickelte \emph{Unix} konnte sich auf breiter Ebene durchsetzen und zu einem Standard entwickeln. \begin{figure}[h] \centering \includegraphics[width=0.5\textwidth]{images/Thompson-sitting-Richie-standing-PDP11-1972.jpg} \caption{Ken Thompson (sitzend) und Dennis Ritchie an einer PDP11 (1972)} \label{img:ken_ritchie} \end{figure} In der zweiten H\"alfte der 70-er Jahre ver\"anderte sich der Computer-Markt radikal. Die Erfindung der integrierten Schaltung erm\"oglichte es, kleine und auch f\"ur Normalb\"urger erschwingliche Computer zu bauen. Dadurch entwickelte sich der bisher auf Hochschulen, Beh\"orden und Gro\ss betriebe beschr\"ankte Markt zum Massenmarkt. \begin{figure}[h] \centering \includegraphics[width=0.3\textwidth]{images/Apple2.jpg} \caption{Apple 2 (1977)} \label{img:apple2} \end{figure} Als etwas ausgereiftere Homecomputer wie der Apple 2 (Abbildung \ref{img:apple2}) zunehmend auch in Betrieben als Erg\"anzung zu den vorhandenen Gro\ss rechnern, beispielsweise als `intelligente' Terminals, eingesetzt wurden, beschloss IBM, Marktf\"uhrer bei Gro\ss rechnern, dem etwas entgegen zu setzen. Man entwickelte den IBM-PC, der 1981 erschien. Durch die sehr knappen Zeitvorgaben war es den Entwicklern nur m\"oglich, bereits am Markt befindliche Standard-Chips einzusetzen. Dadurch gelang es Firmen wie Compaq in kurzer Zeit, selbst ``IBM-kompatible'' Rechner auf den Markt zu werfen. Auch auf Unix hatte diese Entwicklung Einfluss. Bis dahin war Unix im universit\"aren Umfeld entwickelt worden. Die Rechte am Code besa\ss zwar AT+T, er wurde aber ohne weiteres kostenlos an Dritte weitergegeben, vor allem zu Ausbildungszwecken. Es gab ja fast niemanden, der einen Unix-f\"ahigen Computer besa\ss . Mit dem beginnenden Massenmarkt sah AT+T die Chance, mit Lizenzen Geld zu verdienen, und machte Unix zu Closed Source. Auch zu Ausbildungszwecken war der Code nicht mehr verf\"ugbar. Durch diese Lizenz\"anderung war es vielen Unix-Programmierern nicht mehr gestattet, ihre eigenen Programme zu nutzen. Einer von ihnen, Richard Stallman, gr\"undete daraufhin 1984 die \emph{Free Software Foundation} und begann, ein eigenes Unix namens \emph{GNU} v\"ollig neu zu schreiben. Um die eben gemachten Erfahrungen reicher, entwickelte er f\"ur den Code eine eigene Lizenz, die \emph{GNU Public License (GPL)}. Sie stellt sicher, dass bei Weitergabe eines Programms der Empf\"anger immer auch ein Recht auf den Sourcecode hat. Dem GNU-Projekt schlossen sich schnell weitere Programmierer an, und es gelang ihnen in relativ kurzer Zeit, die Grundlagen eines Unix-Systems zu erstellen. Dazu geh\"orten neben den vielen kleinen Unix-Systemprogrammen vor allem auch der Compiler gcc und der Editor Emacs. Beim Kernel war man weniger gl\"ucklich: Man entschied sich f\"ur ein zwar theoretisch interessantes, aber in der Praxis schlecht handhabbares Microkernel-Konzept. Dieser Kernel (\emph{GNU Hurd}) ist bis heute nicht produktiv einsetzbar... 1991 hatte der finnische Student Linus Torvalds einen Terminal-Emulator geschrieben, mit dem er von daheim per Modem auf den Unix-Rechner der Universit\"at zugreifen konnte. Als er immer mehr Funktionen hinzuf\"ugte, etwa einen Treiber zum Direktzugriff auf seine Harddisk, bemerkte er, dass er eigentlich auch gleich einen Betriebssystem-Kernel schreiben konnte. Er beschaffte sich die POSIX-Spezifikation, in der die Schnittstellen eines Unix-Kernels beschrieben sind, und implementierte eine Funktion nach der anderen. Nachdem dieser Kernel unter dem Namen \emph{Linux} ver\"offentlicht war, schlossen sich ebenfalls schnell hunderte von Programmierern an und arbeiteten an der Weiterentwicklung mit. Durch Kombination des GNU-Betriebssystems mit dem Linux-Kernel entstand so ein vollst\"andig aus freier Software bestehendes System. Der Begriff ``Linux'' bezeichnet also streng genommen nur den Kernel. Allerdings hat es sich mittlerweile im Sprachgebrauch eingeb\"urgert, das komplette System aus Programmen und Kernel als ``Linux'' zu bezeichnen. \subsubsection{Ein Betriebssystem f\"ur Gro\ss rechner} Unix war von Anfang an ein Betriebssystem, das f\"ur den Betrieb auf Gro\ss rechnern ausgelegt ist. Das verwundert nicht weiter, den zur Zeit seiner Entstehung gab es noch keine Einzelplatzrechner im Sinne des heutigen PC. Die mit dieser Anwendung verbundenen Design-Entscheidungen sind auch heute noch wirksam und bestimmen ma\ss geblich das Verhalten von Linux-Systemen. Durch die freie Verf\"ugbarkeit von Linux gab und gibt es ausserdem zahlreiche Anwender mit ganz unterschiedlichen Anforderungen. Von Cluster-basierten Datenbankservern bis zu kleinen batteriebetriebenen PDAs ist alles vertreten. Des weiteren werden sehr viele verschiedene Prozessor-Familien unterst\"utzt. Dadurch war der Kernel schon sehr fr\"uh 64-Bit- und Endian-fest. Diesem historischen Hintergrund ist es zu verdanken, dass der Linux-Kernel heute sehr gut mit verschiedensten Hardware-Eigenschaften skaliert. Aus dem selben Source-Code kann ein Kernel f\"ur einen Server mit 1024 CPU-Kernen oder ein Kernel f\"ur ein kleines Embedded-System konfiguriert und erzeugt werden. \subsubsection{Multiuser-Betrieb} Eine weitere wichtige Eigenschaft von Linux, die sich aus der Gro\ss rechner-Tradition ergibt, ist die Multitasking- und Multiuser-F\"ahigkeit. W\"ahrend Multitasking, also das quasi-gleichzeitige Ausf\"uhren mehrerer Programme, heute jedem Computer-Anwender als Selbstverst\"andlichkeit gilt, verdient der Multiuser-Betrieb n\"ahere Betrachtung. Multiuser-Betrieb bedeutet, dass mehrere Anwender \emph{gleichzeitig} mit dem System arbeiten k\"onnen. Jeder Anwender hat dabei den Eindruck, dass ihm das System allein geh\"ort. Das Betriebssystem muss dazu Funktionalit\"at bereitstellen, um die Datensicherheit zu gew\"ahrleisten und die gerechte Verteilung der Ressourcen unter den Benutzern sicherzustellen. Dazu geh\"ort unter anderem, dass alle Dateien und Verzeichnisse mit Benutzerkennungen versehen werden, die jedem Benutzer sinnvolles Arbeiten erm\"oglichen, aber gleichzeitig seinen Zugriff auf fremde Daten einschr\"anken. Diese Einschr\"ankungen m\"ussen im Kernel realisiert werden, damit sie nicht auf Anwenderebene umgangen werden k\"onnen. In Unix war diese Funktionalit\"at per Design schon immer vorhanden, w\"ahrend aus der Tradition der Einzelplatz-Rechner entstandene Betriebssysteme wie DOS oder Windows dies bis heute nicht leisten. Nat\"urlich ist die freie Lizenz von Linux hier ebenfalls von Vorteil. Propriet\"are Betriebssysteme haben schon aus Lizenzgr\"unden ein Problem damit, wenn mehrere Anwender einen Rechner nutzen k\"onnen. \subsubsection{Login} Beim Hochfahren eines Linux-Systems werden \"ublicherweise alle f\"ur den Systemstart vorgesehenen Programme automatisch gestartet, ohne dass dazu ein Benutzereingriff n\"otig w\"are. Durch Anpassung der daf\"ur verantwortlichen Startskripte kann man so auch seine eigenen Applikationen starten. An dieser Stelle hat man root-Rechte, also vollen Zugriff auf alle Ressourcen. M\"ochte nach dem Hochfahren ein Benutzer mit dem System arbeiten, so muss er dem System mitteilen, wer er ist, und dies gegebenenfalls durch einen Authentifizierungsprozess glaubhaft machen. Diesen Vorgang nennt man ``Login''. \begin{figure}[h] \centering \includegraphics[width=0.3\textwidth]{images/CPU_und_Terminals1-600px.png} \caption{Schematische Darstellung eines Gro\ss rechners} \label{img:mainframe} \end{figure} Abbildung \ref{img:mainframe} zeigt die Situation in schematischer Weise. Am Gro\ss rechner sind mehrere Terminals angeschlossen. Fr\"uher waren dies Fernschreiber, daher die Bezeichnung tty (von engl. teletype). Auf Abbildung \ref{img:ken_ritchie} kann man dies sehen -- da gab es noch keine Monitore. Unter Linux sind dies sogenannte \emph{virtuelle Terminals}. Selbst auf einem Laptop, der an nichts anderes angeschlossen ist, hat man mehrere solcher virtueller Terminals zur Verf\"ugung. Eines davon wird meist von der grafischen Oberfl\"ache benutzt. Zus\"atzlich gibt es weitere physikalische Terminals, so haben beispielsweise serielle Schnittstellen Bezeichnungen wie ttyS0, ttyS1 und so weiter. Jedes dieser Terminals ist v\"ollig autark, das heisst, man muss sich in jedem Terminal erneut einloggen und authentifizieren. Logins sind unter Linux auf mehreren Wegen m\"oglich. Ausser dem von Desktops her gewohnten Login am Bildschirm kann man sich auch mit Hilfe eines Terminal-Programms \"uber eine serielle Schnittstelle einloggen. Weit verbreitet sind auch Logins \"uber Netzwerkprotokolle wie ssh oder telnet. Da diese Login-M\"oglichkeiten unter Windows nicht \"ublich sind, kommt es hier h\"aufig zu Verst\"andnisschwierigkeiten. Als \"Ubung sollten Sie sich per ssh auf einem entfernten Rechner einloggen und dann ein Programm starten. Machen Sie sich klar, dass das Programm auf dem entfernten Rechner ausgef\"uhrt wird und nicht etwa auf dem Rechner, an dem Sie gerade sitzen. \newpage \subsubsection{Kontrollfragen} \begin{enumerate} \item Wie alt ist das Unix-Konzept mittlerweile? \item Seit wann gibt es den Linux-Kernel? \item Warum ist die Gro\ss rechner-Tradition von Linux auch f\"ur Embedded Systems von Vorteil? \item Was passiert beim Login-Vorgang? \end{enumerate} \input{tailhandout}