site: end of line message, adesklets is not dead.
[adesklets.git] / doc / gdesklets / gdesklets.tex
blob4892ad60ad2ba0502a12bd06d95f73f80dc1bb59
1 \documentclass[letterpaper]{article}
3 \usepackage[latin1]{inputenc}
4 \usepackage{graphicx}
5 \usepackage{color}
6 \usepackage{amssymb}
7 \usepackage{supertabular}
8 \usepackage{bigcenter}
9 \usepackage[dvips,colorlinks=false,
10 linkbordercolor=1 1 1,urlbordercolor=1 1 1]{hyperref}
11 %\usepackage{draftcopy}
13 \title{Examination of gDesklets Dependencies}
14 \author{\href{mailto:syfou@users.sourceforge.net}{S.Fourmanoit}\and \href{mailto:exilejedi@users.sourceforge.net}{M.Pirnat}}
15 \date{Montréal and Cleveland, \today.}
16 \begin{document}
17 \maketitle
18 \section{Foreword}
19 This document tries to determine what is, at the time of writing, the minimal
20 set of dependencies required to compile and run gDesklets on an up-to-date
21 desktop system. The author spent several hours testing, as systematically as
22 time permitted, all possible avenues, following often-contradictory indications
23 provided by official documentation, emails, forums, automated build source,
24 how-tos and bug reports. It is not \emph{by any means} a canonical reference on
25 gDesklets installation, merely a report of what seems the current state of this
26 software regarding its dependency tree.
28 \section{Test system}
29 Most of the gDesklets user base uses Linux, although the software is also
30 supported on numerous other platforms; it is even being actively ported to
31 Windows. For the sake of this report, the author built a reference platform
32 using \href{http://www.gentoo.org}{Gentoo Linux}. The base system was built
33 from the Gentoo 2004.3 x86 Stage 1 tarball, and all the default profile USE
34 flags were cautiously adjusted to be\footnote{Flags in {\color[rgb]{1,0,0}red}
35 were selected, while those in {\color[rgb]{0,0,1}blue} were not.}: \\
37 \begin{supertabular}{lp{.8\linewidth}}
38 \textbf{Use flag} & \textbf{Description} \\
39 \hline \hline
40 {\color[rgb]{1,0,0}\textbf{+mmx}} & Adds support for optimizations for Pentium MMX and Athlon class processors \\
41 {\color[rgb]{1,0,0}\textbf{+3dnow}} & Adds support for 3dnow multimedia processor instructions \\
42 {\color[rgb]{1,0,0}\textbf{+x86}} & indicates that architecture is x86 \\
43 {\color[rgb]{1,0,0}\textbf{+nptl}} & Enable support for Native POSIX Threads Library \\
44 {\color[rgb]{1,0,0}\textbf{+nptlonly}} & Remove suport for previous pthread interface \\
45 {\color[rgb]{0,0,1}\textbf{-oss}} & Adds support for OSS (Open Sound System) \\
46 {\color[rgb]{0,0,1}\textbf{-apm}} & Adds APM (Advanced Power Management) support \\
47 {\color[rgb]{0,0,1}\textbf{-arts}} & Adds support for aRts: the KDE sound daemon \\
48 {\color[rgb]{0,0,1}\textbf{-avi}} & Adds Win32 AVI support and also adds avifile (Library for avi) support \\
49 {\color[rgb]{0,0,1}\textbf{-berkdb}} & Adds support for sys-libs/db (Berkeley DB for MySQL) \\
50 {\color[rgb]{1,0,0}\textbf{+bitmap-fonts}} & Adds support for Bitmapped fonts \\
51 {\color[rgb]{0,0,1}\textbf{-crypt}} & Add support for encryption -- using mcrypt or gpg where applicable \\
52 {\color[rgb]{0,0,1}\textbf{-cups}} & Add support for CUPS (Common Unix Printing System) \\
53 {\color[rgb]{0,0,1}\textbf{-emboss}} & Adds support for the European Molecular Biology Open Software Suite \\
54 {\color[rgb]{0,0,1}\textbf{-encode}} & Adds support for MEncoder or LaME encoder, wherever applicable \\
55 {\color[rgb]{0,0,1}\textbf{-fortran}} & Adds support for fortran (formally f77) \\
56 {\color[rgb]{0,0,1}\textbf{-font-server}} & N/A \\
57 {\color[rgb]{0,0,1}\textbf{-foomaticdb}} & Adds support for the foomatic printing driver database \\
58 {\color[rgb]{0,0,1}\textbf{-gdbm}} & Adds support for sys-libs/gdbm (GNU database libraries) \\
59 {\color[rgb]{0,0,1}\textbf{-gif}} & Adds GIF image support \\
60 {\color[rgb]{0,0,1}\textbf{-gnome}} & Adds GNOME support \\
61 {\color[rgb]{0,0,1}\textbf{-gpm}} & Adds support for sys-libs/gpm (Console-based mouse driver) \\
62 {\color[rgb]{0,0,1}\textbf{-gtk}} & Adds support for x11-libs/gtk+ (The GIMP Toolkit) \\
63 {\color[rgb]{0,0,1}\textbf{-gtk2}} & Use gtk+-2.0.0 over gtk+-1.2 in cases where a program supports both. \\
64 {\color[rgb]{0,0,1}\textbf{-imlib}} & Adds support for media-libs/imlib (Image loading and rendering library) \\
65 {\color[rgb]{0,0,1}\textbf{-ipv6}} & Adds support for IP version 6 \\
66 {\color[rgb]{0,0,1}\textbf{-jpeg}} & Adds JPEG image support \\
67 {\color[rgb]{0,0,1}\textbf{-kde}} & Adds support for kde-base/kde (K Desktop Enviroment) \\
68 {\color[rgb]{0,0,1}\textbf{-libg++}} & Adds C++ modules in dev-db/postgresql (libpq++) \\
69 {\color[rgb]{0,0,1}\textbf{-libwww}} & Adds libwww support (General purpose WEB API) \\
70 {\color[rgb]{0,0,1}\textbf{-mad}} & Adds support for mad (high-quality mp3 decoder library and cli frontend) \\
71 {\color[rgb]{0,0,1}\textbf{-mikmod}} & Adds libmikmod support to allow playing of SoundTracker-style music files \\
72 {\color[rgb]{0,0,1}\textbf{-motif}} & Adds motif support (x11-libs/openmotif x11-libs/lesstif) \\
73 {\color[rgb]{0,0,1}\textbf{-mpeg}} & Adds libmpeg3 support to various packages. \\
74 {\color[rgb]{1,0,0}\textbf{+ncurses}} & Adds ncurses support (console display library) \\
75 {\color[rgb]{1,0,0}\textbf{+nls}} & Adds Native Language Support (using gettext - GNU locale utilities) \\
76 {\color[rgb]{0,0,1}\textbf{-oggvorbis}} & Adds support for the OggVorbis audio encoding \\
77 {\color[rgb]{1,0,0}\textbf{+opengl}} & Adds support for OpenGL \\
78 {\color[rgb]{0,0,1}\textbf{-pam}} & Adds support PAM (Pluggable Authentication Modules) \\
79 {\color[rgb]{0,0,1}\textbf{-pdflib}} & Adds support for PDF (Portable Document Format) \\
80 {\color[rgb]{1,0,0}\textbf{+perl}} & Adds support/bindings for the Perl language. \\
81 {\color[rgb]{0,0,1}\textbf{-png}} & Adds support for libpng (PNG images) \\
82 {\color[rgb]{1,0,0}\textbf{+python}} & Adds support/bindings for the Python language \\
83 {\color[rgb]{0,0,1}\textbf{-qt}} & Adds support for the Qt library. \\
84 {\color[rgb]{0,0,1}\textbf{-quicktime}} & Adds support for OpenQuickTime \\
85 {\color[rgb]{1,0,0}\textbf{+readline}} & enables support for libreadline \\
86 {\color[rgb]{0,0,1}\textbf{-sdl}} & Adds support for Simple Direct Layer (media library) \\
87 {\color[rgb]{0,0,1}\textbf{-spell}} & Adds dictionary support \\
88 {\color[rgb]{1,0,0}\textbf{+ssl}} & Adds support for Secure Socket Layer connections \\
89 {\color[rgb]{0,0,1}\textbf{-svga}} & Adds support for SVGAlib (graphics library) \\
90 {\color[rgb]{1,0,0}\textbf{+tcpd}} & Adds support for TCP wrappers \\
91 {\color[rgb]{1,0,0}\textbf{+truetype}} & Adds support for FreeType and/or FreeType2 fonts \\
92 {\color[rgb]{1,0,0}\textbf{+truetype-fonts}} & Adds support for TrueType fonts \\
93 {\color[rgb]{1,0,0}\textbf{+type1-fonts}} & Adds support for Type1 fonts \\
94 {\color[rgb]{1,0,0}\textbf{+X}} & Adds support for X11 \\
95 {\color[rgb]{0,0,1}\textbf{-xml2}} & Check/Support flag for XML library (version 2) \\
96 {\color[rgb]{0,0,1}\textbf{-xmms}} & Check/Support for XMMS (X MultiMedia System) player. \\
97 {\color[rgb]{1,0,0}\textbf{+xv}} & Adds in optional support for the Xvideo extension \\
98 {\color[rgb]{1,0,0}\textbf{+zlib}} & Adds support for zlib (de)compression \\
99 \hline
100 \end{supertabular}
102 \ \\
103 \noindent As you can see, most of the flags present in default profile were
104 turned off to keep the system as spartan as possible. The glibc, binutils and
105 gcc packages were also upgraded to their latest stable\footnote{To the author's evaluation, of course.} versions, and the rest of the base system was recompiled
106 then pruned until it looked like this \ref{base}. About 251 MB of compressed
107 source files were used to build the test system (see \ref{packages}). When
108 complete, the base system filled 505 MB on disk, including all development
109 tools and headers, as well as a working X11 and window manager.
111 \begin{figure}[h]
112 \begin{bigcenter}
113 \fbox{
114 \begin{minipage}[h]{.5\linewidth}
115 \includegraphics[scale=0.5]{eps/system_1.eps}
116 \end{minipage}
117 \begin{minipage}[t]{.4\linewidth}
118 \includegraphics[scale=0.5]{eps/system_2.eps}
119 \end{minipage}}
120 \end{bigcenter}
121 \label{base}
122 \caption{Base test system complete dependency tree}
123 \end{figure}
125 \begin{figure}
126 \begin{bigcenter}
127 \fbox{\includegraphics[scale=0.5]{eps/packages.eps}}
128 \end{bigcenter}
129 \label{packages}
130 \caption{Source tarballs used during base system compilation}
131 \end{figure}
133 \clearpage
134 \section{gDesklets}
136 The local portage tree was updated for the last time on Thursday, March 17, at
137 03:33:19 EST, 2005, and the dependency tree for the latest gdesklets-core
138 available at that time is shown in the \ref{start} image. The complete
139 installation required 78 MB of source, and 300 MB on disk when the installation was finished. Once installed, every display the author tried ran fine. \\
141 \noindent As you can see, a lot of dependencies come from gnome-python.
142 Following various email advice and recommendations found on forums, the author
143 managed to alter the build process by manually removing dependencies to:
145 \begin{itemize}
146 \item gnome-base/nautilus
147 \item gnome-base/gnome-panel
148 \item gnome-base/libgnomeprint
149 \item nome-base/libgnomeprintui
150 \end{itemize}
152 \noindent Even with these dependencies removed, the author was still able to
153 get a mostly-working installation of gDesklets. Here, the author used a
154 snapshot from gDesklets' public CVS extracted on Wednesday, March 16 at
155 15:38:26 EST, 2005. The amount of source code needed was reduced to 51 MB, and
156 the final installed size on disk was 206 MB. It is good to note, though, that
157 not installing gnome-panel makes some displays (such as desklet-starterbar)
158 fail to start; unfortunately, the requirements for this component are
159 significant. \\
161 \noindent Numerous attempts to further reduce the dependency set were made,
162 without success. For instance, since gDesklets recently dropped gnome-vfs, it
163 would have been nice to avoid installing it, but the GNOME design is far from
164 orthogonal between components, and the use of one compoent often makes us fall
165 into various indirect and circular dependency problems. In this case, libbonobo
166 for one, could not be compiled without it.
168 \begin{figure}
169 \begin{bigcenter}
170 \fbox{
171 \begin{minipage}[h]{.72\linewidth}
172 \includegraphics[scale=0.5]{eps/gdesklets_start_1.eps}
173 \end{minipage}
174 \begin{minipage}[t]{.6\linewidth}
175 \includegraphics[scale=0.5]{eps/gdesklets_start_2.eps}
176 \end{minipage}}
177 \end{bigcenter}
178 \label{start}
179 \caption{Default dependency tree for gdesklets-core-0.3.1}
180 \end{figure}
182 \begin{figure}
183 \begin{bigcenter}
184 \fbox{\includegraphics[scale=0.5]{eps/gdesklets_end.eps}}
185 \end{bigcenter}
186 \caption{Reduced dependency tree for gdesklets-code-20050316}
187 \label{end}
188 \end{figure}
190 \clearpage
192 \section{Conclusion}
194 gDesklets is constantly evolving and getting imporvements of all kinds, and
195 both Christian Meyer and Martin Grimme, the co-maintainers of the software, are
196 working on significantly reducing their dependency set:
198 \begin{itemize}
199 \item gnomevfs is no longer essential to gDesklets, as urllib2 can be used
200 instead.
201 \item bonobo use is now deprecated and will be removed in version 0.40.
202 \item gconf will also be removed soon.
203 \end{itemize}
205 \noindent This is great news, as gDesklets evolves more and more toward a more
206 neutral (i.e. non GNOME-centric) world view\footnote{Not that there is anything
207 wrong with that, of course, but GNOME is not the everyone's preferred
208 environment.}, and has been runing well on numerous other window managers for
209 some time. That said, this report also shows that:
211 \begin{itemize}
212 \item gDesklets is not yet "GNOME free," and GNOME is a rather invasive desktop
213 environment--once you depend on a GNOME library, you often find yourself having
214 to install a lot of others, as they are frequently interconnected and
215 interdependent. The earlier tree graphs shown in the \ref{start} and \ref{end}
216 figures should be enough to convince anyone of that fact.
217 \item The author was lucky enough to have a sophisticated package management
218 system at his disposal. This kind of investigation would be possible manually,
219 but few users would have the patience to try this by hand. Most people who
220 want to use gDesklets will probably just install a complete GNOME desktop
221 anyway, as other methods are time-consuming and far from straightforward for
222 non-developers. This means that the improvements to the gDesklets codebase
223 will go largely unnoticed unless package maintainers from the various platforms
224 do a more precise job, which is very difficult (if not impossible) in a GNOME
225 context because gDesklets is not the only application that a generic desktop
226 has to care about.
227 \item At 206 MB out of a total of 711 MB on disk ($\approx 29\%$),
228 gDesklets is far from a light addition to the base system, even though that is
229 already a huge improvement from the author's initial experience.
230 \end{itemize}
232 $\blacksquare$
235 \end{document}