\documentclass{beamer}

\usepackage{ae,aecompl}
\usepackage[english]{babel}
\usepackage[T1]{fontenc}

\usepackage{url}
\usepackage{hyperref}
\usepackage{xcolor}
\usepackage[utf8]{inputenc}
\usepackage{textcomp} % for right arrow

\title{Free Software, upstream and downstream}
\author{Sergio Durigan Junior \\ \url{sergiodj@redhat.com}}
\date{\today}

\begin{document}

\begin{frame}
  \titlepage
  \begin{center}
    \tiny{Get the source-code at:\\
    \url{https://git.sergiodj.net/talks/free-sw-rh-interns.git/}}
  \end{center}
\end{frame}

\section{License}
\begin{frame}{License}
  \begin{itemize}
    \item{License: \textbf{Creative Commons Attribution 4.0
        International License (CC-BY-4.0)}}
    \item{\url{https://creativecommons.org/licenses/by/4.0/}}
  \end{itemize}
\end{frame}

\section{Agenda}
\begin{frame}{Agenda}
  \begin{itemize}
    \item{What is Free Software?}
    \item{GNU and Linux}
    \item{Upstream}
    \item{Downstream}
  \end{itemize}
\end{frame}


\section{What's Free Software?}
\begin{frame}{What's Free Software?}

  \centering
  Has anybody said \textbf{four freedoms}?
  \newline
  \pause
  \begin{enumerate}
    \setcounter{enumi}{-1}
    \item{The freedom to run the program as you wish, for any
      purpose.}
      \pause
    \item{The freedom to study how the program works, and change it so
      it does your computing as you wish. Access to the source code is
      a precondition for this.}
      \pause
    \item{The freedom to redistribute copies so you can help others.}
      \pause
    \item{The freedom to distribute copies of your modified versions
      to others. By doing this you can give the whole community a
      chance to benefit from your changes. Access to the source code
      is a precondition for this.}
  \end{enumerate}
\end{frame}

\begin{frame}{What's Free Software?$^2$}
  \textbf{Free Software} means software that respects users' freedom
  and community.  The users have the \textbf{freedom to run, copy,
  distribute, study, change and improve} the software.
  \newline
  \newline
  When a program fails to give any of these freedoms to the user, we
  say it is \textbf{non-free}.
\end{frame}

\begin{frame}{What's Free Software?$^3$}
  The \textbf{copyleft} concept was the smartest hack that Stallman
  has created.  It exploits how the copyright works, and turns it back
  against itself.
  \newline
  \newline
  The \textbf{GNU General Public License}, or \textbf{GPL}, is the
  tool with which we guarantee that the software freedom will
  be respected by everyone.
\end{frame}

\section{The G from GNU}
\begin{frame}{The \texttt{G} from \texttt{GNU}}
  \begin{itemize}
    \item{Created by \textbf{Richard M. Stallman} on 27 September
      1983.}
    \item{Aims at creating a fully Free operating system.}
    \item{Part of what we call the \textbf{GNU/Linux} operating
      system (but most people prefer to call it just \textbf{Linux}).}
      \pause
    \item{\texttt{glibc, gcc, gdb, binutils (ld, gas...), bash,
        coreutils (ls, cd, pwd, cat, sort, dd, df...), findutils,
        diffutils, clisp, libreboot, patch, tar, gzip, inetutils (ftp,
        telnet, rsh, tftp...), linux-libre, grep, sed, gettext,
        MediaGoblin, GNU Social, GNU R, GLPK, GnuPG, GNOME*, GIMP,
        grub, readline, Replicant, octave, screen, time, texinfo,
        sysutils (chgroup, chpasswd, passwd, nologin...), emacs}, and
      \textbf{many} more.}
  \end{itemize}
\end{frame}

\begin{frame}{The \texttt{G} from \texttt{GNU}$^2$}
  But of course, we are not in a contest.  I choose to call the system
  \textbf{GNU/Linux} not only because I think it is the right thing to
  do, but mainly to \textbf{raise awareness}.
\end{frame}

\section{Linux(x|s)}
\begin{frame}{Linu(x|s)}
  \begin{itemize}
    \item{Created in 1991 by \textbf{Linus Torvalds}.}
    \item{Has evolved to become perhaps the most successful example of
      Free and Open Source software collaboration.}
    \item{Unfortunately, is not entirely Free Software (binary blobs
      are/were shipped with the kernel; reason for the
      \textbf{Linux-libre} fork by the \texttt{GNU} project).}
    \item{Personal opinion: main community tends to be toxic,
      reflecting the behaviour of Linus himself.}
  \end{itemize}
\end{frame}

\section{All that goes upstream...}
\begin{frame}{All that goes upstream...}
  \textbf{Upstream} is the name we give to the actual Free Software
  projects that develop the programs.  For example, Linux,
  LibreOffice, GIMP, GDB, GTK.
  \newline
  \begin{itemize}
    \item{We also call them \textbf{upstream communities}.}
      \pause
    \item{In general, upstream projects have:}
      \begin{itemize}
        \item{\textbf{Mailing list}: Where users can post questions,
          and developers can discuss technical matters.}
        \item{\textbf{Bug tracking system}: \textbf{Bugzilla} is the
          most common, but there are others.}
        \item{\textbf{Source-code repository}: \textbf{git} is the
          most used nowadays.}
        \item{\textbf{IRC channel}: Where we communicate (mostly) in
          real time (some teams are migrating to \textbf{Mattermost}
          or \textbf{Slack} (non-free, argh)).}
      \end{itemize}
  \end{itemize}
\end{frame}

\begin{frame}{All that goes upstream...$^2$}
  \begin{itemize}
    \item{Upstream projects have a \textbf{release schedule}.}
      \pause
    \item{As Red Hat employees, we are members of these communities.}
      \pause
    \item{The \textbf{same rules} apply to us.}
      \pause
    \item{Red Hat sponsors ($\neq$ owns) some upstream communities.}
  \end{itemize}
\end{frame}

\begin{frame}{All that goes upstream...$^3$}
  \centering
  \includegraphics[width=0.5\textwidth]{graphs/upstream.png}
\end{frame}

\begin{frame}{All that goes upstream...$^4$}
  The so-called \textbf{forges} are very popular nowadays.
  \textbf{GitHub} and \textbf{GitLab} are widely used; they provide an
  integrated bug tracking system, but don't provide a mailing list
  equivalent.
  \newline
  \newline
  \textbf{Pagure} deserves a special mention, as it is Fedora's
  official forge.
  \newline
\end{frame}

\begin{frame}{All that goes upstream...$^5$}
  \centering
  \includegraphics[width=0.5\textwidth]{graphs/pull-request.png}
\end{frame}

\section{... Must come downstream}
\begin{frame}{... Must come downstream}
  \textbf{Downstream} is the name we give to the projects that
  \emph{package} the upstream projects.  For example, Fedora, RHEL,
  Debian, Ubuntu.  We also call them \textbf{distributions} (or
  \textbf{distros}).
  \begin{itemize}
    \item{At Red Hat, we are interested in \textbf{Fedora} and
      \textbf{RHEL} (\textbf{R}ed \textbf{H}at \textbf{E}nterprise
      \textbf{L}inux).}
      \pause
    \item{A Fedora \textbf{package} is called a \textbf{RPM}
      (\textbf{R}ed Hat \textbf{P}ackage \textbf{M}anager).}
      \pause
    \item{A RPM is generated from a \textbf{SRPM} (\textbf{S}ource
      RPM).}
      \pause
    \item{A SRPM is composed by a (usually) \textbf{stable} upstream
      release, \textbf{local patches} specific for the distro and a
      \textbf{spec file} with instructions for build/test the
      project.}
  \end{itemize}
\end{frame}

\begin{frame}{... Must come downstream$^2$}
  \centering
  \includegraphics[width=0.3\textwidth]{graphs/package.png}
\end{frame}

\begin{frame}{... Must come downstream$^3$}
  \begin{itemize}
    \item{The upstream project \textbf{must} be Free Software.}
      \pause
    \item{Fedora also has its own release schedule (6 months).}
      \pause
    \item{RHEL is created from stable Fedora packages.}
      \pause
    \item{In a way, you can say that Fedora is RHEL's upstream.}
      \pause
    \item{RHEL is our \emph{bread and butter}.  Bugs against it take
      the highest priority.}
  \end{itemize}
\end{frame}

\section{Tips and Tricks}
\begin{frame}{Tips and Tricks}
  \begin{itemize}
    \item{E-mail:}
      \pause
      \begin{itemize}
        \item{Do not top-post.}
        \item{No HTML!  \texttt{text/plain}}
        \item{Be polite.}
        \item{Be precise; good subject line.}
        \item{Reply-All instead of reply to list/author.}
      \end{itemize}
      \pause
    \item{IRC:}
      \pause
      \begin{itemize}
        \item{Use pastebin.}
        \item{Sometimes it is async.}
      \end{itemize}
      \pause
    \item{Patches:}
      \pause
      \begin{itemize}
        \item{Split into logical parts.}
        \item{Do not change formatting.}
        \item{Learn how the community prefers to receive them (mailing
          list, bugzilla, pull-request).}
        \item{Criticism about your patch $\neq$ criticism about you (or
          your family!).}
      \end{itemize}
  \end{itemize}
\end{frame}

\section{Questions?}
\begin{frame}{Questions?}
  \begin{center}
    Questions?
  \end{center}

  \begin{center}
    \url{sergiodj@redhat.com}
  \end{center}

  \begin{center}
    \texttt{sergiodj} on IRC
  \end{center}
\end{frame}

\end{document}
