\documentclass{beamer} \usepackage{ae,aecompl} \usepackage[english]{babel} \usepackage[T1]{fontenc} %% \usepackage{tikz} \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} \begin{frame}{... Must come downstream$^4$} \centering \includegraphics[width=1\textwidth]{graphs/gdb-fedora-schedules.png} \end{frame} %% \begin{frame}{... Must come downstream$^3$} %% \centering %% \begin{tikzpicture} %% % Horizontal line %% \draw (0, 0) -- (6, 0); %% % Vertical lines %% \foreach \x in {0,2,4,6} %% \draw (\x cm, 3pt) -- (\x cm, -3pt); %% % Dates %% \draw (0, 0) node[below] {\tiny{2018-09-05}}; %% \draw (2, 0) node[below] {\tiny{2018-10-30}}; %% \draw (4, 0) node[below] {\tiny{2019-04-30}}; %% \draw (6, 0) node[below] {\tiny{2019-05-11}}; %% % Releases %% \draw (0, 0) node[below=20pt] {\small{\color{blue}{GDB 8.2}}}; %% \draw (2, 0) node[below=20pt] {\small{Fedora 29}}; %% \draw (4, 0) node[below=20pt] {\small{Fedora 30}}; %% \draw (6, 0) node[below=20pt] {\small{\color{red}{GDB 8.3}}}; %% \end{tikzpicture} %% \end{frame} %% \begin{frame}{... Must come downstream$^3$} %% \centering %% \begin{tikzpicture} %% %% \draw [help lines] (0, 0) grid (10, 4); %% \draw (0, 0) rectangle (7, 4); %% \draw (2, 0) -- (2, 4); %% \draw (1, 3.5) node {GDB 8.2}; %% \draw (1, 2.5) node {Fedora 29}; %% \draw (1, 1.5) node {Fedora 30}; %% \draw (1, 0.5) node {GDB 8.3}; %% \draw [fill=blue] (2, 4) rectangle (3, 3); %% \draw (4, 3.5) node { \tiny{(2018-09-05)} }; %% \draw [fill=red] (3, 3) rectangle (4, 2); %% \draw (5, 2.5) node { \tiny{(2018-10-30)} }; %% \draw [fill=red] (5, 2) rectangle (6, 1); %% \draw [fill=blue] (6, 1) rectangle (7, 0); %% %% \draw [fill=blue] (2, 7.5) rectangle (4, 6.5); %% %% \draw [fill=red] (3, 5.5) rectangle (5, 4.5); %% %% \draw [fill=red] (6, 3.5) rectangle (8, 2.5); %% %% \draw [fill=blue] (9, 1.5) rectangle (10, 0.5); %% \end{tikzpicture} %% \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}