From e23bf6979553f2e8e6cf2c392480de9fbc440e5d Mon Sep 17 00:00:00 2001 From: Sergio Durigan Junior Date: Wed, 8 May 2019 23:03:27 -0400 Subject: [PATCH] Initial commit. --- Makefile | 17 +++ free-sw-rh-interns.tex | 276 ++++++++++++++++++++++++++++++++++++++++ graphs/Makefile | 11 ++ graphs/package.dot | 6 + graphs/pull-request.dot | 8 ++ graphs/upstream.dot | 8 ++ 6 files changed, 326 insertions(+) create mode 100644 Makefile create mode 100644 free-sw-rh-interns.tex create mode 100644 graphs/Makefile create mode 100644 graphs/package.dot create mode 100644 graphs/pull-request.dot create mode 100644 graphs/upstream.dot diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..001e094 --- /dev/null +++ b/Makefile @@ -0,0 +1,17 @@ +PDF = free-sw-rh-interns.pdf +SUBDIRS = graphs + +SHELL := /bin/bash -O extglob + +all: $(SUBDIRS) $(PDF) + +.PHONY : all clean $(SUBDIRS) + +$(SUBDIRS): + $(MAKE) -C $@ all + +%.pdf: %.tex + pdflatex $< + +clean: + $(RM) *.{aux,log,nav,out,pdf,snm,toc} diff --git a/free-sw-rh-interns.tex b/free-sw-rh-interns.tex new file mode 100644 index 0000000..fed180b --- /dev/null +++ b/free-sw-rh-interns.tex @@ -0,0 +1,276 @@ +\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{itemize} + \item{The freedom to run the program as you wish, for any + purpose (freedom \texttt{\#0}).} + \pause + \item{The freedom to study how the program works, and change it so + it does your computing as you wish (freedom \texttt{\#1}). Access + to the source code is a precondition for this.} + \pause + \item{The freedom to redistribute copies so you can help others + (freedom \texttt{\#2}).} + \pause + \item{The freedom to distribute copies of your modified versions + to others (freedom \texttt{\#3}). 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{itemize} +\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} + +\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$} + \centering + 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...} + \centering + \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$} + \centering + 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} + \centering + \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} diff --git a/graphs/Makefile b/graphs/Makefile new file mode 100644 index 0000000..bca081d --- /dev/null +++ b/graphs/Makefile @@ -0,0 +1,11 @@ +.PHONY : all clean + +PNG_FILES = $(patsubst %.dot,%.png,$(wildcard *.dot)) + +all: $(PNG_FILES) + +%.png: %.dot + dot -Tpng $< -o $@ + +clean: + rm -f *.png diff --git a/graphs/package.dot b/graphs/package.dot new file mode 100644 index 0000000..094365b --- /dev/null +++ b/graphs/package.dot @@ -0,0 +1,6 @@ +digraph package { + graph [ dpi = 300 ]; + "Upstream Project" -> SRPM [label="Spec file\n Local patches"]; + SRPM -> RPM [label=" Build and Test"]; + RPM -> Binaries [label=" Install"]; +} diff --git a/graphs/pull-request.dot b/graphs/pull-request.dot new file mode 100644 index 0000000..60258b2 --- /dev/null +++ b/graphs/pull-request.dot @@ -0,0 +1,8 @@ +digraph pr { + graph [ dpi = 300 ]; + "Patch (git branch)" -> "Open pull-request" [label=" Via web, usually"]; + "Open pull-request" -> "Review"; + "Review" -> "Patch (git branch)" [label=" Adjustments needed?"]; + "Review" -> "Incorporate into main repository" [label=" Accepted?"]; + "Incorporate into main repository" -> "Ship to users" [label=" When release is stable"]; +} diff --git a/graphs/upstream.dot b/graphs/upstream.dot new file mode 100644 index 0000000..f378031 --- /dev/null +++ b/graphs/upstream.dot @@ -0,0 +1,8 @@ +digraph upstream { + graph [ dpi = 300 ]; + "Patch" -> "Send to Project" [label=" Mailing List\n Bug Tracker\n Pull Request"]; + "Send to Project" -> "Patch is reviewed"; + "Patch is reviewed" -> "Patch" [label=" Adjustments needed?"]; + "Patch is reviewed" -> "Push to official repository" [label=" Accepted?"]; + "Push to official repository" -> "Ship to users" [label=" When release is stable"]; +}