Blob Blame History Raw
\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{A bit about licenses}
    \item{GNU}
    \item{Linux}
    \item{More than just code}
    \item{Upstream}
    \item{Downstream}
    \item{Tips and Tricks}
  \end{itemize}
\end{frame}

\section{What's Free Software?}
\begin{frame}{What's Free Software?}
  \begin{itemize}
    \item{In the beginning (until the '70s), we had \emph{public
        domain} code, and everything was shared.}
    \item{Infamous \emph{``Open Letter to Hobbyists''}, from Bill
      Gates, in 1976.}
    \item{\textbf{Richard M. Stallman} started the \textbf{Free
        Software Movement} in 1983.}
  \end{itemize}
\end{frame}

\begin{frame}{What's Free Software?$^2$}
  \centering

  Has anybody said \textbf{four freedoms}?
  \newline
  \pause
  \begin{enumerate}
    % Start counting at zero!
    \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?$^3$}
  \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} or \textbf{proprietary}.
\end{frame}

\begin{frame}{What's Free Software?$^4$}
  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{A bit about licenses}
\begin{frame}{A bit about licenses}
  In a nutshell, when we talk about Free Software licenses, we have
  two main types:
  \newline
  \begin{itemize}
    \item{\textbf{Copyleft} licenses: \emph{Share-alike} licenses,
      which guarantee that the work will be redistributed (modified or
      not) under the same terms as the original license.
      \textbf{GPLv3} is the main license in this field.}
    \item{\textbf{Permissive} licenses: Allow redistribution under
      other terms, \textbf{even non-free!}  Main licenses here are
      \textbf{Apache 2.0} and \textbf{MIT/Expat}.}
  \end{itemize}
\end{frame}

\begin{frame}{A bit about licenses$^2$}
  A more opinionated version?
  \newline
  \begin{itemize}
    \item{\textbf{Copyleft} licenses: Focus on \textbf{user freedom}.}
    \item{\textbf{Permissive} licenses: Focus on \textbf{developer
        freedom}.}
  \end{itemize}
\end{frame}

\section{The G from GNU}
\begin{frame}{The \texttt{G} from 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 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 GNU project).}
    \item{Personal opinion: main community tends to be toxic,
      reflecting the behaviour of Linus himself.}
  \end{itemize}
\end{frame}

\section{More than just code}
\begin{frame}{More than just code}
  We've been talking about \textbf{software projects}, which are
  basically \emph{source code} (actually, it's more than that!).
  But...  how are these projects organized?
  \pause
  \newline
  \newline
  Ultimately, the project's source code is the \textbf{product} that
  is generated by a community of people.  And as such, we need
  \textbf{tools} and \textbf{procedures} in order to better organize
  our efforts.
\end{frame}

\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},
          \textbf{Matrix} 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 an \textbf{RPM}
      (\textbf{R}PM \textbf{P}ackage \textbf{M}anager).}
      \pause
    \item{An RPM is generated from an \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}