\input{configpres}

\title{Linux Kernel}
\maketitle

\subsection{Grundlagen}

\subsubsection{Facts}
\begin{frame}
\frametitle{Facts}
\begin{itemize}
\item Freie Software (GPL Version 2)
\item Auf vielen Plattformen lauffähig
\item Hohe Skalierbarkeit vom Handy bis zum Supercomputer
\item Große Anzahl integrierter Treiber
\item Einfache Entwicklung eigener Treiber
\item Codequalität auf hohem Niveau
\item Qualitätssicherung durch Code-Review unabhängiger Personen
\item hohes Entwicklungstempo
\item hervorragende Netzwerk-Fähigkeiten
\item Echtzeit-Fähigkeit leicht und sauber erreichbar
\end{itemize}
\end{frame}

\subsubsection{Umfang - Linux 4.16-rc5 (16.03.2018)}

\begin{frame}[fragile]
\frametitle{Lines of code by language}
\begin{verbatim}
ansic:    16.686.769 (97.83%)
asm:         295.663  (1.73%)
perl:         26.424  (0.15%)
sh:           19.168  (0.11%)
python:       15.685  (0.09%)
cpp:           4.919  (0.03%)
yacc:          4.600  (0.03%)
lex:           2.478  (0.01%)
awk:           1.387  (0.01%)
pascal:          231  (0.00%)
sed:               5  (0.00%)
\end{verbatim}
\end{frame}

\begin{frame}[fragile]
\frametitle{Lines of code per folder}
\begin{verbatim}
11.134.588  drivers  66%  c=11.124.729 asm=  2.744
 2.073.368  arch     11%  c= 1.778.733 asm=290.614
   869.993  fs        5%  c=   869.993
   775.712  sound     5%  c=   775.712
   712.404  net       5%  c=   712.404
   540.702  include   3%  c=   538.568
   286.340  tools     2%  c=   253.768
                     python=    12.196
                         sh=    11.354
                       perl=     4.012
   191.741  kernel    2%  c=   191.741
   101.006  lib       1%  c=   100.874
    83.858  mm        1%  c=    83.858
    81.386  crypto    1%  c=    81.386
    59.271  security  1%  c=    59.271
\end{verbatim}
\end{frame}


\subsubsection{Architektur}

\begin{frame}
\frametitle{Subsysteme}
\centering
\includegraphics[width=\textwidth]{images/linux-kernel-map.png}
\end{frame}


\begin{frame}
\frametitle{Treiber}
\centering
\includegraphics[width=0.8\textwidth]{images/Subsystems.png}
\end{frame}



\subsubsection{Maintainer}
\begin{frame}
\frametitle{Kernel Maintainer}
\begin{itemize}
\item Betreuer eines Subsystems oder Treibers
\pause
\item Verantwortlich für Weiterentwicklung
\pause
\item Review von Änderungsvorschlägen
\pause
\item Annehmen/Ablehnen von Änderungsvorschlägen
\pause
\item Weitergabe/Verwaltung angenommener Änderungen
\end{itemize}
\end{frame}

\begin{frame}
\frametitle{Linus Torvalds}
\includegraphics[height=5cm]{images/linus7.jpg}

Maintains: THE REST

Company: linuxfoundation
\end{frame}

\begin{frame}
\frametitle{Alan Cox}
\includegraphics[height=5cm]{images/alan.png}

Credits: NET2Debugged/NET3 author, Network layer debugging, Initial AX.25 and
IPX releases, Original Linux netatalk patches, Current 3c501 hacker, Watchdog 
timer drivers, Linux/SMP

Company: intel
\end{frame}

\begin{frame}
\frametitle{Andrew Morton}
\includegraphics[height=5cm]{images/morton.jpg}

Maintains: EXT3, JOURNALLING LAYER FOR BLOCK DEVICES (JBD)

Credits: Linux Quality Management

Company: Google
\end{frame}

\begin{frame}
\frametitle{Greg Kroah-Hartmann}
\includegraphics[height=5cm]{images/greg.jpg}

Maintains: SERIAL DRIVER, DRIVER CORE, KOBJECTS, DEBUGFS AND SYSFS, STABLE
BRANCH, STAGING SUBSYSTEM, TTY LAYER, USB SERIAL DRIVER, USB SUBSYSTEM,
USERSPACE I/O

Company: SuSE
\end{frame}

\begin{frame}
\frametitle{Christoph Hellwig}
\includegraphics[height=5cm]{images/hch.jpg}

Maintains: FREEVXFS FILESYSTEM, PERSONALITY HANDLING, SYSV FILESYSTEM, XFS
FILESYSTEM
Company: ??
\end{frame}

\begin{frame}
\frametitle{Thomas Gleixner}
\includegraphics[height=5cm]{images/tglx.jpg}

Maintains: HIGH-RESOLUTION TIMERS, CLOCKEVENTS, DYNTICKS, POSIX CLOCKS and
TIMERS, X86 ARCHITECTURE (32-BIT AND 64-BIT), PREEMPT RT

Company: linutronix
\end{frame}

\subsubsection{Entwicklungsprozess}
\begin{frame}
\frametitle{Entwicklungsprozess}
\begin{itemize}
\item Änderungsvorschläge in Form von Patchen
\pause
\item Review und Diskussion auf Mailinglisten
\item z.B. Subsystem Mailinglisten und LKML
\pause
\item strenge Richtlinien für Coding Style
\item siehe Documentation/CodingStyle im Kernel Source Tree
\pause
\item strenge Richtlinien für Form und Weitergabe von Patchen
\item scripts/checkpatch.pl zur Kontrolle verwenden!
\pause
\item Nur technische Argumente zählen!
\pause
\item Dokumentation siehe MAINTAINER Datei im Kernel Source Tree
\end{itemize}
\end{frame}

\subsubsection{Versionierung}
\begin{frame}
\frametitle{Versionierung (4.x)}
\begin{itemize}
\item 4.8.2 oder 4.9-rc1
\pause
\item 4. - historisch gegeben
\pause
\item .15 - aktuelle Version
\pause
\item .1 - Security Fix
\pause
\item .rc1 - Release Candidate
\end{itemize}
\end{frame}


\begin{frame}
\frametitle{Versionierung (0.x \dots 1.3.x)}
\begin{itemize}
\item 09.91-02.94: 0.01\dots0.99 kein definiertes Versionierungsschema
\item 03.94-03.94: 1.0 erster stabiler Kernel
\item 04.94-03.95: 1.1.x Entwicklerversion
\item 03.95-08.95: 1.2.x Stabiler Kernel Alpha, MIPS, SPARC
\item 06.95-05.96: 1.3.x Entwicklerversion MP Support
\end{itemize}
\end{frame}

\begin{frame}
\frametitle{Versionierung (2.0.x \dots 4.x)}
\begin{itemize}
\item 06.96-02.04: 2.0.x SMP Support
\item 09.96-01.99: 2.1.x Entwicklerversion
\item 01.99-02.04: 2.2.x Stabiler Kernel, IPv6
\item 05.99-05.00: 2.3.x Entwicklerversion
\item 01.01-12.08: 2.4.x Stabiler Kernel, USB, ACPI, iptables
\item 11.01-07.03: 2.5.x Entwicklerversion
\item 12.03-TODAY: 2.6.x, 3.x, 4.x neues Entwicklungsschema
\end{itemize}
Versionssprünge
\begin{itemize}
\item 05.11: 2.6.39\dots3.0
\item 02.15: 3.19\dots4.0
\end{itemize}
\end{frame}

\begin{frame}
	\includegraphics[height=6cm]{images/kernelversions.png}

	Quelle: http://article.sapub.org
\end{frame}


\subsubsection{Entwicklungstempo}
\begin{frame}
\frametitle{Linux 4.x}
\begin{itemize}
\item 8 \dots 10 weeks release cycle
\item \dots about 14,000 patches each cycle
\item \dots from about 1500 developers
\item \dots about 200 companies
\end{itemize}
\end{frame}

\begin{frame}
\includegraphics[height=7cm]{images/patches_per_hour.png}

Quelle: https://github.com/gregkh/kernel-development
\end{frame}

\begin{frame}
\includegraphics[height=9cm]{images/linux-kernel-development-companies.png}

Quelle: https://fossbytes.com
\end{frame}


\subsubsection{staging und next}
\begin{frame}
\frametitle{staging}
\begin{itemize}
\item Verzeichnis im Kernelsourcetree
\pause
\item erm\"oglicht Entwicklung im Mainline Tree
\pause
\item enth\"alt haupts\"achlich Treiber
\pause
\item Voraussetzung: aktive Weiterentwicklung im Code
\end{itemize}
\end{frame}

\begin{frame}[fragile]
\frametitle{next}
\begin{itemize}
\item \"Anderungen welche vermutlich in die n\"achste Version aufgenommen
werden
\item tracked andere Trees und quilt queues
\end{itemize}
\begin{lstlisting}
Feb-2008, Stephen Rothwell:
I hope to recreate this tree every day automatically.
In order to do this, any tree that has a conflict will
be dropped from that days tree.
The maintainer will be notified. I hope to provide some
clue as to what the conflict is with, but probably not
initially. I will attempt to build the tree between each
merge (and a failed build will again cause the offending
tree to be dropped). These builds will be necessarily
restricted to probably one architecture/config.
\end{lstlisting}
\end{frame}

\subsubsection{Konfiguration}
\begin{frame}[fragile]
\frametitle{Kernel-Konfiguration}
\begin{itemize}
\item Grosse Zahl von Konfigurations-Optionen
\pause
\item Speicherung in .config
\pause
\item Ändern der Konfiguration: make menuconfig
\pause
\item Informationen über Optionen in Kconfig-Dateien
\pause
\item Kernel-Buildsystem: Eigenes Subsystem mit eigenem Maintainer
\pause
\item Unterstützt explizit auch Cross-Compiling
\end{itemize}
\end{frame}

\input{tailpres}
