[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

xorg has big dependencies not needed by everyone



on a new jessie system, I have installed a minimal X11 that required
71MB of disk space, but after some investigation I have stripped down
the size to 25MB, saving the 64% of the needed disk space

further dependency tuning can saves a bunch of MB more and allows a
cleaner installation, based on the needs of the end user, that is
simpler to audit and debug too


* DETAILED DESCRIPTION

that system has an old radeon (r100), so to install xserver-xorg they
are needed these packages (72677KB):

libdrm-intel1 libdrm-nouveau2 libdrm-radeon1 libdrm2 libedit2
libegl1-mesa libelf1 libepoxy0 libevdev2 libexpat1 libfontenc1 libgbm1
libgl1-mesa-dri libgl1-mesa-glx libglapi-mesa libice6 libllvm3.5
libmtdev1 libpciaccess0 libpixman-1-0 libsm6 libwayland-client0
libwayland-server0 libx11-6 libx11-data libx11-xcb1 libxau6 libxaw7
libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-render0
libxcb-shape0 libxcb-sync1 libxcb-xfixes0 libxcb1 libxdamage1 libxdmcp6
libxext6 libxfixes3 libxfont1 libxkbfile1 libxmu6 libxpm4 libxshmfence1
libxt6 libxxf86vm1 x11-common x11-xkb-utils xserver-common
xserver-xorg-core xserver-xorg-input-evdev xserver-xorg-video-radeon 

the biggest package is libllvm3.5 that is 32MB, so I started to check
its usage in the installed packages, concluding that it is used by the
gallium infrastructure, that is not available on my hardware


to get around of the llvm package I modified (with dpkg-deb) the binary
packages libgl1-mesa-dri and libgbm1, splitting them in classic and
gallium flavors:

- libgl1-mesa-dri-classic contains the mega driver (i915 i965
  nouveaux_vieux radeon r200), has a size of 6MB and does not depends
  on libelf1 nor libllvm3.5

- libgl1-mesa-dri-gallium contains the gallium driver (kms_swrast
  nouveau r300 r600 radeonsi swrast vmwgfx), has a size of 8MB and does
  not depends on libdrm-intel1

- libgbm1 contains only the library, has a size of 100KB and does not
  depends on libdrm-nouveau2, libdrm-radeon1, libelf1, libgcc1,
  libllvm3.5 nor libstdc++6

- libgbm1-gallium contains only gbm_gallium_drm.so and has a size of 4MB

both libgl1-mesa-dri-classic and libgl1-mesa-dri-gallium provides
libgl1-mesa-dri, where instead libgbm1-gallium depends on libgbm1

with this setup I removed libedit2, libelf1 and libllvm3.5 (33787KB)
and the reduced size of the modified packages saved 12931KB more,
totalizing 46718KB of saved disk space, the 64% of the standard setup

I obviously tested only the "classic" setup, as it is the only
supported one on that hardware


* AFFECTED USERS

the classic drivers cover all the intel hardware, old radeon and nvidia
hardware, where the gallium covers only new radeon and nvidia hardware
and the software rendering (no 3d hardware), but many users prefer the
proprietary drivers instead (nearly all the nvidia users)

anyway all the non gallium users can take advantage of this setup, even
if only a minority cares about a finer dependency selection, as based on
popcon they seems to be 10% circa of the total X11 users:

https://qa.debian.org/popcon-graph.php?packages=xserver-xorg+xserver-xorg-video-all+xserver-xorg-video-intel+xserver-xorg-video-radeon+xserver-xorg-video-nouveau+&show_installed=on&want_legend=on&from_date=2014-01-01&to_date=&hlght_date=&date_fmt=%25Y-%25m&beenhere=1

the Debian mirrors bandwidth will be affected too, as some of the users
will not download and never upgrade the unneeded packages


* FURTHER CHANGES

users that does not need opengl (no games and no fancy 3d desktops) or
that does not have the hardware (vesa and fbdev for example) can take
advantage of a further split in the xserver-xorg-core package, as it
depends on libgl for the glx extension and libepoxy/libgbm/libegl for
the glamoregl module

we can make a new package for the glx and another for glamoregl or we
can adopt the wheezy way to do dependencies handling, that recommended
the libgl1-mesa-dri without an hard dependency (and we can do the same
thing with epoxy/gbm/egl)

anyway these changes will allow again to install X11 without needing
opengl nor egl (and thus the big llvm package)

further, egl seems to be not available with non-gallium hardware as
egl_dri2 is not included in libegl1-mesa-drivers, so egl and glamoregl
is completely unusable on that hardware


* ALTERNATIVE SOLUTIONS

if the package split is not comfortable from the developer view or the
end user view, the dependencies of the included modules (dri drivers,
gbm modules, x11 extensions and modules) can be downgraded from depends
to recommended, conforming to the policy:

- Depends: This declares an absolute dependency. A package will not be
  configured unless all of the packages listed in its Depends field
  have been correctly configured

- Recommends: This should list packages that would be found together
  with this one in all but unusual installations

https://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps

the users will not be affected by the change if they not explicitly
want it, as apt automatically install recommended packages since 2007:

https://lists.debian.org/debian-devel-announce/2007/08/msg00000.html


* CONCLUSION

Debian allows a fine grained package selection, with more than 58000
binary pakages in jessie (10K more than wheezy), many of them are very
small, since in the main archive area:

- 50% of the packages are under 248KB of installed size
- 75% are under 1MB
- 95% are under 10MB


this wonderful freedom given to the user is somewhat degraded by big
dependencies like that, which double the required disk space to install
one of the most used software (xserver-xorg is present on the 58% of
all debian installations)


I have not yet filed bug reports, as I do not want to flood you with
similar requests all to one maintainer and moreover I would like to
discuss with you and help implementing these changes for jessie or
jessie+1, so just tell me what to do

ciao!


Reply to: