% Présentation de GNU/Hurd (à l'origine pour la Linux Party 2006 de Slyunix).

\documentclass[10pt]{beamer}

\usepackage[latin1]{inputenc}
\usepackage[english,francais]{babel}
\usepackage{graphicx}
\usepackage{url}

\usetheme{Berkeley}
\usenavigationsymbolstemplate{}

\let\urlorig\url
\renewcommand{\url}[1]{
   \begin{otherlanguage}{english}{\small \urlorig{#1}}\end{otherlanguage}\
}

\title{GNU/Hurd}
\author{Richard Braun}

\begin{document}

\begin{frame}
\frametitle{\includegraphics[scale=1.5]{hurd-logo.eps}}
\titlepage
\end{frame}

\begin{frame}
\frametitle{Table des matières}
\tableofcontents
\end{frame}

\section{Introduction}

\subsection{Concepts classiques d'un système d'exploitation}

\begin{frame}
\frametitle{Concepts classiques d'un système d'exploitation}
\begin{itemize}
\item Séparation du système en 2 modes (noyau et utilisateur)
\item Le noyau gère toutes les opérations nécéssitant des privilèges (accès à
      certaines parties de la mémoire, entrées/sorties matérielles, exécution
      de certaines instructions systèmes)
\item Les applications effectuent des appels systèmes pour demander au noyau
      l'exécution d'opérations nécéssitant des privilèges
\item Le noyau contient les drivers et fait l'abstraction entre les appels
      logiques (appel système {\it read} par exemple) et physiques (lecture d'un
      secteur sur disque)
\end{itemize}
\end{frame}

\begin{frame}
\frametitle{Concepts classiques d'un système d'exploitation}
\begin{figure}
\includegraphics[scale=0.4]{monolithique.eps}
\caption{Séparation des privilèges dans un système à noyau monolithique}
\end{figure}
\end{frame}

\subsection{Les micro-noyaux}

\begin{frame}
\frametitle{Les micro-noyaux}
\begin{itemize}
\item Le noyau gère la communication entre les processus (mécanisme d'IPC -
      {\it Inter-Process Communication}), et contient un gestionnaire basique de
      mémoire et d'ordonnancement
\item Un ou plusieurs serveurs gèrent les accès au matériel, au système de
      fichiers, au réseau, etc...
\item Les applications effectuent des RPC ({\it Remote-Procedure Call}) au
      serveur responsable d'une tâche pour demander l'exécution des opérations
      requises
\end{itemize}
\end{frame}

\subsection{Systèmes à micro-noyau multiserveurs}

\begin{frame}
\frametitle{Systèmes à micro-noyau multiserveurs}
\begin{figure}
\centering
\includegraphics[scale=0.4]{multiserveur.eps}
\caption{Séparation des privilèges dans un système à micro-noyau multiserveur}
\end{figure}
\end{frame}

\subsubsection{Avantages}

\begin{frame}
\frametitle{Avantages}
\begin{itemize}
\item Meilleure abstraction du matériel
\item Système très modulaire
\item Stabilité et sécurité accrues
\end{itemize}
\end{frame}

\subsubsection{Inconvénients}

\begin{frame}
\frametitle{Inconvénients}
\begin{itemize}
\item Un IPC est une opération coûteuse
\item Référencement des serveurs complexe
\item Les interfaces entre le noyau et les serveurs, ainsi qu'entre les
      applications et les serveurs sont difficiles à corriger
\item Compatibilité avec le standard POSIX difficile à mettre en oeuvre
\end{itemize}
\end{frame}

\section{Le projet GNU/Hurd}

\begin{frame}
\frametitle{Le projet GNU/Hurd}
Le projet GNU/Hurd a été fondé en 1991 par Thomas Bushnell, et a pour but
de mettre en pratique les principes du projet GNU (essentiellement redonner la
liberté aux utilisateurs tout en restant compatible POSIX).

Les améliorations apportées par la conception du Hurd résultent des divers
constats qui ont été faits au cour du temps concernant l'utilisation des
systèmes Unix classiques.

Les principaux concepts novateurs du Hurd sont les translators et la sécurité
par jeton d'authentification.
\end{frame}

\subsection{Les translators}

\begin{frame}
\frametitle{Les translators}
\begin{itemize}
\item Programme associé à un noeud du VFS
\item Permet d'utiliser le VFS comme service de noms
\item Utilise la gestion classique des permissions de fichiers (ce qui permet
      à des utilisateurs non privilégiés de monter des systèmes de fichiers)
\item Translators passifs : le translator est exécuté lors d'un accès au noeud
      associé s'il n'était pas actif avant (ce qui permet le redémarrage
      automatique d'un service après un éventuel plantage)
\item Les translators sont des programmes ordinaires, qui se débuggent comme
      n'importe quel programme (par opposition au noyau, dont le débuggage est
      particulier et difficile)
\item Exemples de translators : ftpfs, xmlfs, ext2fs, pfinet, exec, magic
\end{itemize}
\end{frame}

\subsection{La sécurité par jeton d'authentification}

\begin{frame}
\frametitle{La sécurité par jeton d'authentification}
\begin{itemize}
{\small
\item Un jeton est un droit permettant à une application d'effectuer certaines
      actions
\item On peut imaginer des jetons pour tout type d'action (allant des UIDs/GIDs
      classiques à un "droit d'émettre des paquets ICMP" par exemple)
\item Le serveur /hurd/auth gère les tokens, et est connu et considéré comme
      fiable par toutes les applications
\item Une application peut être exécutée sans aucun jeton, c'est-à-dire aucun
      droit particulier hormis ceux qui sont concédés à toutes les applications
\item Exemple d'application : un serveur FTP en attente de clients peut tourner
      sans UID/GID, et ne demandera le jeton correspondant qu'après avoir reçu
      un couple login/password du client (sous Unix, il faut obtenir l'UID root
      pour ensuite changer son UID vers celui souhaité)
\item Un translator (comme toute application) ne peut pas donner des droits
      qu'il ne possède pas. Un utilisateur peut donc monter des systèmes
      de fichiers contenant des binaires ayant le bit SUID sans compromission
      de la sécurité du système
}
\end{itemize}
\end{frame}

\subsection{Etat actuel et projets futurs}

\begin{frame}
\frametitle{Etat actuel et projets futurs}
\begin{itemize}
\item GNU/Hurd fonctionne
\item Debian GNU/Hurd K10 inclut la moitié des packages Debian (environ 4 CDs),
      dont XOrg
\item GNU Mach est un micro-noyau lent et buggé, ce qui a amené au port du Hurd
      vers d'autres micro-noyaux (L4 et Coyotos) qui permettront à terme
      d'utiliser des pilotes de périphériques en espace utilisateur
\end{itemize}
\end{frame}

\section{L'association HurdFR}

\begin{frame}
\frametitle{L'association HurdFR}
\begin{itemize}
\item Association loi 1901 pour la promotion du Hurd
\item Rassemble les utilisateurs francophones du Hurd
\item Participe au développement du Hurd
\item Met à disposition des ressources telles que des {\it hurdbox} pour
      permettre aux membres de tester le Hurd, leurs travaux, etc...
\item Participe à des évènements (essentiellement tournés vers le libre)
      tels que Solutions Linux
\end{itemize}
\end{frame}

\section{Conclusion}

\begin{frame}
\frametitle{Conclusion}
\begin{itemize}
\item \url{http://www.gnu.org/} - Le projet GNU
\item \url{http://hurd.gnu.org/} - GNU/Hurd
\item \url{http://www.debian.org/ports/hurd} - Debian GNU/Hurd
\item \url{http://www.l4ka.org/} - L4
\item \url{http://coyotos.org/} - Coyotos
\item \url{http://www.hurdfr.org/} - l'association HurdFR \\ (\#hurdfr @ freenode)
\end{itemize}

Présentation réalisée avec \LaTeX\ et la classe BEAMER. \\~\\

Je remercie Gaël Le Mignot pour sa présentation GNU/Hurd dont la présente est
inspirée (\url{http://kilobug.free.fr/hurd/pres-fr/}).
\end{frame}

\end{document}
