From 972791c8efa696607d9e12a5c7628aaae3319b99 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 7 Sep 2014 23:47:52 +0200 Subject: [PATCH] 2014 - A look into the past and future --- .../main.tex | 518 ++++++++++++++++++ .../res/bufferbloat.png | Bin 0 -> 36038 bytes render.sh | 3 + 3 files changed, 521 insertions(+) create mode 100644 2014_-_A_look_into_the_past_and_future/main.tex create mode 100644 2014_-_A_look_into_the_past_and_future/res/bufferbloat.png diff --git a/2014_-_A_look_into_the_past_and_future/main.tex b/2014_-_A_look_into_the_past_and_future/main.tex new file mode 100644 index 0000000..709f50d --- /dev/null +++ b/2014_-_A_look_into_the_past_and_future/main.tex @@ -0,0 +1,518 @@ + +\documentclass[serif,mathserif]{beamer} + +\usepackage{beamerthemesplit} + +\usetheme{default} +\useoutertheme{default} + +\usepackage[british]{babel} +\usepackage{amsmath} +\usepackage{amsfonts} +\usepackage{color} +\usepackage{epsfig} +\usepackage{marvosym} +\usepackage{texnansi} +\usepackage{verbatim} +\usepackage{xspace} + +% Make this a 16:9 presentation +\setlength{\paperwidth}{171 mm} +\setlength{\paperheight}{96 mm} +\setlength{\textwidth}{151 mm} +\setlength{\textheight}{86 mm} + +\usepackage[default,osfigures,scale=0.95]{opensans} +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenc} + +% Set sans-serif font. +%\renewcommand\sfdefault{phv} +%\renewcommand\familydefault{\sfdefault} + +% Define some colours. +\definecolor{myred}{rgb}{0.53,0.01,0} +\definecolor{mygrey}{rgb}{0.6,0.6,0.6} + +% Make a nice gradient as background. +\setbeamertemplate{background canvas}[vertical shading] +[bottom=black, middle=myred, top=myred] + +% Highlight elements in some sort of grey. +\setbeamercolor{structure}{fg=mygrey} +\setbeamercolor{normal text}{bg=black, fg=white} + +% Use round bullets in lists. +\setbeamertemplate{items}[circle] + +% Use bigger fonts for titles. +\setbeamerfont{title}{size=\Huge} +\setbeamerfont{frametitle}{size=\large} +\setbeamertemplate{frametitle}{ + \vspace{3mm} + \begin{centering} + \insertframetitle \par + \end{centering} +} + +% Don't clutter the pages with useless navigations. +\setbeamertemplate{navigation symbols}{} + +% Author information. +\author[Michael Tremer]{Michael Tremer} +\institute{IPFire Project} + +% The title of the presentation. +\title{A look into the past and future} +\subtitle{What happened in the last two years and where are we headed?} + +\date{September 20\textsuperscript{th}, 2014} + +\newcommand{\spacer}{\vspace{4 mm}} + +\newcommand{\screenshot}[1]{\centerline{% + \includegraphics[width=\textwidth]{#1}}} + +\newcommand{\slug}[1]{ + \vspace*{\fill} + + \begin{center} + \LARGE #1 + \end{center} + + \vspace*{\fill} +} + +\begin{document} + \maketitle + + %\section*{Outline} + %\frame{\tableofcontents} + + \section{Introduction} + + \begin{frame} + \slug{The IPFire project was founded in 2005} + \end{frame} + + \begin{frame} + \slug{On November 8th, 2007, IPFire 2.0 was released} + \end{frame} + + \begin{frame} + \slug{Since then, 82 Core Updates and + eight ``major'' versions have been released} + \end{frame} + + \begin{frame} + \slug{IPFire has become a stable and secure firewall distribution + with bleeding-edge features and a broad user base all over the world} + \end{frame} + + \begin{frame} + \slug{It is giving access to the Internet for thousands of students + in universities; and it is doing the same for only one user with + exactly the same code base} + \end{frame} + + \begin{frame} + \slug{It is not just a router or firewall; \\ + it is versatile, robust, and easy to manage} + \end{frame} + + \begin{frame} + \slug{IPFire is Open Source software \\ and free to use for everybody} + \end{frame} + + \begin{frame} + Unless stated otherwise, the shown data was collected from the + commits in the IPFire 2.x main repository (master branch) and + the Core Updates released since the last two years. + \end{frame} + + \section{Release history} + + \subsection{Updates} + + \begin{frame} + %\frametitle{Core Updates} + + \slug{Two major releases, 20 Core Updates \\ in the past two years} + \pause + + \vspace*{\fill} + \begin{center} + \begin{itemize} + \item IPFire 2.11 Core Update 62 to IPFire 2.15 Core Update 82 + \pause + \item Averages every five weeks (used to be every four weeks) + \pause + \item Security updates + \begin{itemize} + \item Four major security issues (1 kernel, 1 strongswan, 2 openssl) + \item Three minor security issues (apache, strongswan, openvpn) + \end{itemize} + \pause + \item Most of the users are running on a recent release + \end{itemize} + \end{center} + \end{frame} + + \section{User Base} + + \subsection{fireinfo} + + \begin{frame} + \frametitle{fireinfo} + + \begin{itemize} + \item A little bit more over ten thousand users send their hardware profile + \item We assume that these profiles are representative for all users + \end{itemize} + \end{frame} + + \subsection{Country statistics} + + \begin{frame} + %\frametitle{Countries} + + \slug{IPFire is running in 165 countries} + \pause + + \slug{...and most popular in Europe} + \pause + + \begin{center} + \vspace*{\fill} + { + \footnotesize + 48\% Germany, 8\% United States of America, 5\% Austria, 4\% Switzerland, + 3\% France, 3\% Italy, 2\% Russia, 2\% Indonesia, 1.6\% Canada, + 1.6\% Great Britain, 1.4\% South Africa, 1.4\% Australia, 1.3\% Poland, + 1.3\% Brasil + } + \vspace*{\fill} + + \url{http://fireinfo.ipfire.org/stats/geo} + \end{center} + \end{frame} + + \begin{frame} + %\frametitle{Countries} + + These statistics become very interesting when compared to the number + of citizens of the countries + \pause + + \begin{itemize} + \item Where are China (0.4\%) and India (0.68\%)? + \end{itemize} + \pause + + Possible explanations: + \begin{itemize} + \item English and German support forum + \item Good coverage of IPFire in German IT magazines + (c't, Linux Magazine, Linux User) + \item Some nationalities are more security-aware (``paranoid'') + \end{itemize} + \end{frame} + + \section{Development Statistics} + \begin{frame} + %\frametitle{Development Statistics} + + \slug{2801 commits in the main repository} + \pause + + \slug{A release branch (\texttt{master}), a development branch (\texttt{next}), + and several feature branches} + \end{frame} + + %% git shortlog --since="2 years ago" | grep -E "^[A-Za-z0-9]" + \begin{frame} + %\frametitle{Contributors} + %\pause + + \begin{center} + \slug{27 code contributors} + \pause + + \vspace*{\fill} + { + \footnotesize + 1084 Michael Tremer, + 844 Arne Fitzenreiter, + 564 Alexander Marx, + 78 Stefan Schantl, + 57 Alf Høgemark, + 51 Erik Kapfer, + 21 Timo Eissler, + 16 Jan Paul Tücking, + 16 Jörn-Ingo Weigert, + 17 Daniel Weismüller, + 13 Ben Schweikert, + 12 Ersan Yildirim, + 3 Jan Lentfer, + 3 Dominik Hassler, + 3 Dirk Wagner, + 3 Hans Horsten, + 2 Bernhard Bittner, + 2 Bernhard Bitsch, + 1 Thomas Ebert, + 1 Stefan Ferstl, + 1 Stefan Ernst, + 1 Logan Schmidt, + 1 Kim Wölfel, + 1 Kay-Michael Köhler, + 1 Julian McConnell, + 1 Jan Behrens, + 1 Axel Gembe + } + \pause + + \vspace*{\fill} + Three Core Developers, Eight Community Developers, 15 one-time contributors + \end{center} + \end{frame} + + + \section{Funding} + + \begin{frame} + %\frametitle{Funding} + + \slug{ + The IPFire project is funded only by donations \\ + and the work of volunteers + } + \end{frame} + + \begin{frame} + %\frametitle{Company funding} + + \slug{Company funding} + + \begin{center} + \begin{itemize} + \item The only companies who provide constant support are + Lightning Wire Labs and TX-Team + \begin{itemize} + \item From selling hardware appliances and support + \item Very few development work + \end{itemize} + \item Unfortunately we do not receive donations from other + companies selling hardware appliances to their customers + \begin{itemize} + \item In fact, companies don't donate much at all + (regardless if they use IPFire or make revenue of it) + \item They mostly support wishes on the wishlist + \end{itemize} + \end{itemize} + \end{center} + \end{frame} + + \begin{frame} + \slug{Home users donate smaller donations, but more often} + + \begin{center} + Not at all related to the usage statistics + \end{center} + \end{frame} + + \begin{frame} + %\frametitle{Where are we?} + + \slug{Where are we?} + + \begin{center} + \begin{itemize} + \item The developers don't need to fund the project with their + own money \\ - which is good :) + \pause + \item The basic expenses are paid: + \begin{itemize} + \item Hosting + \item Parts of this summit + \end{itemize} + \pause + \item but we can do so much more... + \end{itemize} + \end{center} + \pause + + \slug{If every IPFire user would give us one Euro per month, + we don't need to worry about funding - at all.} + \end{frame} + + \subsection{What do we need money for?} + + \begin{frame} + %\frametitle{What do we need money for?} + + \slug{Maintaining the distribution} + + \begin{center} + ... which takes hours per week and is almost invisible work. + This is where the Core Updates that fix your bugs and security + fixes come from. + \end{center} + \end{frame} + + \begin{frame} + %\frametitle{What do we need money for?} + + \slug{Hosting} + + \begin{center} + We are currently running two big machines in two different data + centers. Rack space for one of them is donated. + \end{center} + \end{frame} + + \begin{frame} + \begin{center} + development hardware, build machines, improving documentation, + hiring a community manager, doing a developer/user summit twice a year, + redesigning our web appearance, updating our way outdated forum + and wiki softwares, maintaining and enhancing the project infrastructure: + account system, get more statistics out of fireinfo; + represent the project on fairs \& exhibitions, make people aware of + the project and increase the number of users, do translations + \end{center} + \end{frame} + + \subsection{Wishlist} + + \begin{frame} + %\frametitle{Crowdfunding: Wishlist} + + \slug{Crowd funding} + + \begin{center} + \begin{itemize} + \item Works for collecting money for exciting features: + \begin{itemize} + \item tor + \item Microsoft Windows Active Directory proxy authentication + \end{itemize} + \item Does not work for funding the essentials + \end{itemize} + \end{center} + \end{frame} + + + \section{Features} + + \begin{frame} + \slug{Feature hightlights from the past two years...} + \end{frame} + + \subsection{grsecurity} + + \begin{frame} + \slug{grsecurity} + \pause + + \begin{center} + IPFire is the only free distribution that comes with grsecurity + enabled by default - even on ARM + \end{center} + \end{frame} + + \subsection{Bufferbloat} + + \begin{frame} + \slug{Bufferbloat} + + \begin{center} + \includegraphics[height=.8\textheight]{res/bufferbloat} + \end{center} + \end{frame} + + \subsection{New Firewall GUI} + + \begin{frame} + \slug{New Firewall GUI} + \end{frame} + + \subsection{Cryptography} + + \begin{frame} + \slug{We have been improved cryptography in IPFire \\ on many levels...} + \end{frame} + + \begin{frame} + \slug{We increased default RSA key sizes at all places} + \end{frame} + + \begin{frame} + \slug{IPsec VPNs with Elliptic Curves} + + \begin{center} + NIST and Brainpool + \end{center} + \end{frame} + + \begin{frame} + \slug{Alternative ciphers for OpenVPN and IPsec, because we don't + know who we can trust any more} + \end{frame} + + \begin{frame} + \slug{Entropy} + + \begin{center} + The IPFire system uses hardware random number generators and mixes + the output of them into the system's entropy pool. + \end{center} + \end{frame} + + \subsubsection{DNSSEC} + + \begin{frame} + \slug{DNSSEC} + \end{frame} + + \subsection{ARM} + + \begin{frame} + \slug{We have an ARM version of IPFire} + + \begin{center} + Only 3\% of all IPFire machines are running on ARM + \end{center} + \end{frame} + + \subsection{DDNS} + + \begin{frame} + \slug{DDNS} + \end{frame} + + \subsection{Miscellaneous} + + \begin{frame} + \slug{ + less installation images, + Wireless on RED, + DNS forwarding GUI, + tor, + 5 GHz wireless access points with radar detection, + OpenVPN per-client configuration, + new user interface style, + LTE/3G modem status page, + faster squidclamav + } + \end{frame} + + \section*{The End} + + \begin{frame} + \slug{Questions?} + + \begin{center} + \texttt{michael.tremer@ipfire.org} + \end{center} + \end{frame} +\end{document} diff --git a/2014_-_A_look_into_the_past_and_future/res/bufferbloat.png b/2014_-_A_look_into_the_past_and_future/res/bufferbloat.png new file mode 100644 index 0000000000000000000000000000000000000000..4e9cd857b7744da71e70cfac3e344be49057151b GIT binary patch literal 36038 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%0AOJH$5?SAt$}Vh9n{)Y{U-qMCp2TxkrjznVn7C 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 literal 0 Hc-jL100001 diff --git a/render.sh b/render.sh index 8b2b3fa..afee98b 100755 --- a/render.sh +++ b/render.sh @@ -3,10 +3,13 @@ PDFLATEX="pdflatex" TALKS="2012_-_Introduction_to_the_Pakfire_Build_Service" +TALKS="${TALKS} 2014_-_A_look_into_the_past_and_future" for talk in ${TALKS}; do ( pushd "${talk}" + [ "main.tex" -nt "main.pdf" ] || exit 0 + if ${PDFLATEX} main < /dev/null; then cat "main.pdf" > "../${talk}.pdf" fi -- 2.47.3