]> git.donarmstrong.com Git - cran2deb.git/blob - papers/useR2009/cran2deb.tex
split slides; talk about license hell
[cran2deb.git] / papers / useR2009 / cran2deb.tex
1
2 %% add 'handout' option for handouts, and pgfpages for 2-on-1
3 \documentclass[smaller,compress]{beamer}   
4 %\usepackage{pgfpages}
5 %\pgfpagesuselayout{2 on 1}[letterpaper,border shrink=5mm]
6 %\pgfpagesuselayout{4 on 1}[letterpaper,border shrink=5mm]
7 %\pgfpagesuselayout{2 on 1}[a4,border shrink=5mm]
8
9 \include{setup}  %% has all definitions etc
10
11 %\title[cran2deb: Automated CRAN to Debian packages generation]{cran2deb: A
12 %  system to automatically provide 1700+ CRAN packages as Debian binaries} 
13 \title[cran2deb: CRAN to Debian packages]{cran2deb:  A fully automated CRAN to \\
14   Debian package generation system} 
15 \subtitle{\textsl{UseR! 2009 Presentation}}
16 \subject{UseR! 2009 Presentation}
17 \author[Charles Blundell \and Dirk Eddelbuettel]{Charles Blundell\inst{1} \and Dirk Eddelbuettel\inst{2}}
18 \institute[Gatsby \and Debian]{\inst{1}Gatsby Computational Neuroscience Unit
19   \\ University College London, UK \and \inst{2}Debian and R Projects \\ Chicago,
20 IL, USA}
21 %\date[UseR! 2009]{Presentation at UseR! 2009 \\ Rennnes, France \\ July 2009}
22 \date[UseR! 2009 Presentation]{Universit\'{e} Rennes II, Agrocampus Ouest \\ Laboratoire de
23   Math\'{e}matiques Appliqu\'{e}es \\ 8-10 July 2009}
24
25
26 \begin{document}
27
28 \begin{frame}
29   \titlepage
30 \end{frame}
31
32 \begin{frame}
33   \frametitle{Overview}
34   \tableofcontents
35 \end{frame}
36
37 \section[Why]{Why: Background and Motivation}
38 \begin{frame}
39   \frametitle{About R -- and its repositories}
40   \framesubtitle{An open statistical language / environment -- with lots of
41     excellent code contributions}
42
43   A few key facts that are non-controversial at a \textsl{useR!} conference:
44   \begin{itemize} 
45   \item \R\ is now a standard for statistical applications and research
46   \item \textit{``Success has many fathers''}: several key drivers can
47     be identified as to why \R has done so well 
48   \item We would like to stress \textsl{repositories} and available packages here:
49     CRAN, as well as BioConductor and Omegahat.
50   \item CRAN has been one of the drivers: an open yet rigorously QA'ed
51     repository which has experienced tremendous growth
52   \end{itemize}
53 \end{frame}
54
55 \begin{frame}
56   \frametitle{CRAN Packages} %% NB Or shall we merge this with the preceding slide?
57   \framesubtitle{Exponential Growth}
58
59   \begin{columns}
60     \begin{column}{3in}
61       \begin{figure}
62         \includegraphics[height=6cm,transparent]{figures/Packages}
63
64         \begin{scriptsize}
65           Source: Fox (2008, 2009), our calculations
66         \end{scriptsize}
67       \end{figure}
68     \end{column}
69     \begin{column}{2in}
70       \begin{itemize} 
71         \item CRAN archive network growing by 40\% p.a., now at around 1750 packages
72
73         \item John Fox provided this chart in an invited lecture at the last
74         \emph{useR!} meetings.
75       \end{itemize}
76     \end{column}
77     \begin{column}{0.25in}
78       \phantom{XX}
79     \end{column}
80   \end{columns}  
81 \end{frame}
82
83 \begin{frame}
84   \frametitle{Debian and Ubuntu} % NB Maybe skip this slide?
85   \framesubtitle{Open Linux distributions}
86
87   A few key points:
88   \begin{itemize} 
89   \item Debian is \textsl{the} community-driven Linux distribution where
90     numerous volunteers provide over twenty-thousand packages for around
91     a dozen architectures.
92   \item Packages and package management ``just work'': with arguably the most
93     advanced and robust package management system, and a tremendous
94     build and test infrastructure.
95   \item Ubuntu has taken Debian, added a fair amount of spit and polish, as
96     well as regular bi-annual releases, and has rapidly gained mind- and
97     well as market-share as the Linux distribution to beat.
98   \item We also note that the CRAN backend is implemented on Debian.
99   \end{itemize}
100 \end{frame}
101
102 \begin{frame}
103   \frametitle{Why build Debian R packages?}
104   \framesubtitle{Combining R and Debian}
105   Bates, Eddelbuettel and Gebhard (UseR! 2004) listed a number of reason
106   that still hold:
107   \begin{itemize} 
108   \item \textbf{Dependencies} are resolved automatically: \textsl{it just
109       works}
110   \item \textbf{Convenience} of installing binary packages via
111     \texttt{apt-get} %is
112     %easier than building from source
113   \item \textbf{Quality control} as build daemons, automated rebuilds,
114     porting, ... all ensure that everything is pretty much buildable all the
115     time
116   \item \textbf{Scalability} as building one binary package and scripting
117     installation on a cluster beats doing lots of manual installations
118   \item \textbf{Common platform} as Debian forms the base for Ubuntu and
119     several other derivative or single-focus distributions
120   \item \textbf{Different architectures} ranging from small arm or MIPS based
121     systems to amd64, sparc64, hppa or even s390 mainframes
122   \item \textbf{Audience} given the reach of Debian and Ubuntu, large number
123     of users can be reached with little effort
124   \end{itemize}
125
126 \end{frame}
127
128 %\section{What is behind it?}
129 %\begin{frame}
130 %  \frametitle{So what is a Debian package?} % NB Maybe skip this?
131 %  \framesubtitle{And how do I build it?}
132 %
133 %  Building a Debian package is similar to using \texttt{R
134 %    CMD binary} etc:
135 %  \begin{itemize} 
136 %  \item Reads meta-information is read from the files in the debian/ directory
137 %    \begin{itemize} 
138 %    \item debian/control (similar to R's DESCRIPTION) lists names,
139 %      maintainers, build- and run-time dependencies
140 %    \item debian/copyright lists all author, license holders and copyright
141 %      statements 
142 %    \item debian/changelog provides current and past version numbers with a
143 %      list of  all changes in chronological fashion
144 %    \item debian/rules is a Makefile containing all steps to configure,
145 %      build, install, package-create and clean
146 %    \end{itemize}
147 %  \item Employs a number of external tools scripts and tools, can be used
148 %    interactively or in batch mode in chroot'ed 'clean rooms'
149 %  \end{itemize}
150 %\end{frame}
151
152
153 \section[How]{How: Key aspects of the approach and implementation}
154 \begin{frame}
155   \frametitle{Comparing two approaches}
156   \framesubtitle{What have we learned?}
157
158   Eddelbuettel, Vernazobres, Gebhard and M\"{o}ller (UseR 2007) implemented a
159   system which provides a basis for comparison:
160
161   \MedSkip
162
163   \begin{columns}
164     \begin{column}{2in}
165       \textsl{Then}
166       \begin{itemize}
167       \item Top-down approach 
168       \item Monolithic and large Perl program 
169       \item Meta-information encode directly as Perl hashes in program
170       \item Re-implementing chunks of what \R does in parsing archives
171       \item Not very robust
172       \end{itemize}
173     \end{column}      
174
175     \begin{column}{2in}
176       \textsl{Now}
177       \begin{itemize}
178       \item Bottom-up approach
179       \item Collection of \R and shell scripts, also lots of SQL
180       \item Re-using \R internal infrastructure as much as possible
181       \item Influenced by %Eddelbuettel's
182         \href{http://dirk.eddelbuettel.com/cranberries/}{CRANberries} and its
183         200 lines of \R code to monitor and summarize CRAN changes
184       \end{itemize}
185     \end{column}      
186   \end{columns}
187 \end{frame}
188
189 \begin{frame}
190   \frametitle{Technology Overview: Big Picture}
191   \framesubtitle{Key components}
192
193   Our cran2deb system is implemented as a collection of small tools:
194   \begin{itemize}
195   \item cran2deb itself is a wrapper script calling out to twenty-one other
196     'worker' scripts implementing the twenty-one basic high-level commands
197     \begin{itemize}
198     \item 'worker' scripts are written in \R (for littler), Korn/Bash shell,
199       and in the Plan9 shell rc
200     \item these scripts are small: the largest is 4 kb and only seven
201       are larger than 1 kb
202     \item this is recursive: 'help' is one of these scripts scanning for
203       doc-strings in the other scripts
204     \end{itemize}
205   \item cran2deb is also an R package that is being called by some of the R
206     scripts; the R package has just over 1500 lines of code, and it calls out
207     to R functionality from package utils and tools.
208   \end{itemize}
209 \end{frame}  
210
211 \begin{frame}
212   \frametitle{Technology Overview} 
213   \framesubtitle{A walk through}
214
215   What does cran2deb do:
216   \begin{itemize}
217   \item pulls new meta-data from CRAN via \texttt{available.packages()}
218   \item detects new (or changed) packages and builds each one via:
219     \begin{itemize}
220     \item map declared \R dependencies onto cran2deb packages
221     \item map free-form SystemRequirements onto Debian packages
222       \begin{itemize}
223       \item Rules for this shared among packages---many packages ``just work''.
224       \end{itemize}
225     \item add any undeclared dependencies (this applies to just 36 packages
226       and often entail only loading, say, MASS).
227     \item build each package in its own isolated, clean, fresh, up to date
228       build environment via pbuilder: this looks like a fresh install of
229       Debian and ensures correctness of dependencies. 
230     \end{itemize}
231   \end{itemize}
232 \end{frame}  
233
234 \begin{frame}
235   \frametitle{Technology Overview} 
236   \framesubtitle{A walk through: some details}
237
238   What does cran2deb do:
239   \begin{itemize}
240   \item checks package quality via Debian's lintian.
241   \item uses RSQLite backend for cran2deb state: everything from package
242     meta-information, blacklist of bad packages, to build logs. 
243   \item checks for a free license of a package before its built:
244     \begin{itemize}
245         \item initially we used handcrafted regular expressions to match
246                 licenses but people write (for example) GPL in too many ways!
247             \begin{itemize}
248                 \item license vs. licence
249                 \item see \texttt{http://www.gnu.org/GPL}
250                 \item initialised vs. its expansion (GPL vs. GNU general public license)
251                 \item (v, version) (2.0, 2) or (higher, later, newer, greater, above)
252                 \item typos of the above
253                 \item file LICENSE, reformatted in arbitrary ways
254             \end{itemize}
255         \item now we strip white space and perform other harmless transforms
256               and match SHA1 checksums to determine license.
257     \end{itemize}
258   \end{itemize}
259 \end{frame}  
260
261 \begin{frame}
262   \frametitle{Technology Overview} 
263   \framesubtitle{Continued}
264
265   Re-use, re-duce, re-cycle:
266
267   \begin{itemize}
268   \item \R's infrastructure is used to obtain the \R view of the world:
269     what packages and where, first approximation to dependencies.
270   \item All this uses the Debian build infrastructure, notably the
271     pbuilder chroot environment and the package management system
272   \item cran2deb sets the build environment up by invoking the proper Debian
273     scripts 
274   \item the `production line' of packages is fully automated via cron and report status
275     summaries by email
276   \item per-package patches are allowed (currently eleven packages have
277     mostly trivial patches)
278   \item source code is available via the r-forge subversion repository and archive
279   \end{itemize}
280
281 \end{frame}
282
283 \section[Status]{Status: Where are we now?}
284
285 \begin{frame}
286   \frametitle{Building 1700+ package}
287   \framesubtitle{Summary from a package views}
288
289   It's easy: basically \textsl{everything} builds and is available as a
290   Debian package (complete with full dependencies) --- apart from:
291
292   \begin{itemize}
293   \item 17 packages that are \textsl{not free enough}:\footnote{Generally these
294 do not allow commercial use, modification and/or distribution with the
295 exception of ConvCalendar which gives no modification or distribution rights.}
296     mclust, mclust02, ConvCalendar, SDDA, conf.design, isa2, optmatch,
297     rankreg, realized, rngwell19937, tnet, spatialkernel, Bhat, PTAk,
298     PredictiveRegression, RLadyBug, mapproj 
299   \item 1 package that is obsolete: xgobi
300   \item 2 package that break building packages via cran2deb:\footnote{They
301       take down the cronjob; we are stumped as to why.} dprep, EngrExpt
302   \item 1 package that is not built for 'other' reasons:\footnote{It contains
303       binary code.} sabreR
304   \end{itemize}
305 \end{frame}
306
307 \begin{frame}
308   \frametitle{Building 1700+ package}
309   \framesubtitle{Continued}
310
311   \begin{itemize}
312   \item 47 packages that have \textsl{unsatisfied
313       dependencies}:\footnote{Some require other commercial software, some
314       require software we classified\newline as non-free, some require BioConductor packages.}
315     ROracle, Rlsf, Rsge, CarbonEL, VhayuR, gputools, klaR, wgaim, svGUI,
316     RScaLAPACK, caMassClass, Rcplex, ADaCGH, DAAGbio, GFMaps, GOSim,
317     Metabonomic, classGraph, gcExplorer, logilasso, pcalg, celsius, multtest,
318     hopach, GExMap, LMGene, PCS, SubpathwayMiner, gene2pathway, PhViD,
319     SNPMaP, qdg, lsa, mpm, sisus, metaMA, clustTool, clustvarsel,
320     SpectralGEM, bayesCGH, crosshybDetector  
321   \item 8 package that (as of end of June) fail for unclassified reasons:
322     IDPmisc, Rsymphony, SuppDists, aroma.apd, aroma.core, aroma.affymetrix, cmprskContin, mvgraph
323   \end{itemize}
324
325   \MedSkip
326   \textsl{But everything else}---currently 1770 packages---builds and is
327   available via \texttt{apt-get} and other package management frontends!
328 \end{frame}  
329
330 \begin{frame}
331   \frametitle{Status and credits}
332   \framesubtitle{Ready for wider deployment and testing}
333
334   Who do we owe, and where is it at: 
335
336   \begin{itemize}
337   \item The ground-work was provided during Google Summer of Code (GSoC) 2008 under the
338     umbrella of the Debian project. We thank Google for the GSoC support.
339   \item Currently we are using a (small) Xen-instance on a server at WU Wien to host
340     two Debian pbuilder chroots and an archive. We thank WU Wien/CRAN for
341     hosting and cpu cycles.
342   \item 1700+ packages for i386 and amd64 on Debian testing
343   \item In daily use for the last few weeks!
344   \end{itemize}
345
346   \MedSkip
347   So just add one of these URLs:\newline
348   i386 \phantom{xx} : { \SmallSkip \scriptsize
349     \texttt{deb http://xmcorsairs.wu.ac.at/cran2deb/debian-i386 testing/}
350   } \newline
351   amd64 : { \SmallSkip \scriptsize
352     \texttt{deb http://xmcorsairs.wu.ac.at/cran2deb/debian-amd64 testing/}
353   }
354
355 \end{frame}
356
357 \section{Open Issues}
358 \begin{frame}
359   \frametitle{Question to be addressed}
360   \framesubtitle{These may not be showstoppers}
361
362   Things that still need to be sorted out:
363   \begin{itemize}
364   \item What can or cannot be (re-)distributed by CRAN and its mirrors?
365   \item What can or cannot be used (and/or modified) by all users?
366   \item Remaining external dependencies: 
367     \begin{itemize}
368       \item BioConductor is the single largest source: BioBase, RGraphviz, etc
369       \item Other external libraries or tools not in Debian 
370       \item Commercial external dependencies: SGE, LSF, Oracle, Vhayu
371     \end{itemize}
372   \item Builds for other architectures?
373   \item Builds for other Debian flavours such as Ubuntu?
374   \item Builds of other repositories: BioConductor? R-Forge?
375   \end{itemize}
376 \end{frame}
377
378 \end{document}
379
380 %%% Local Variables: 
381 %%% mode: latex
382 %%% TeX-master: t
383 %%% End: