SlideShare a Scribd company logo
1 of 64
Download to read offline
Ten years analysing large code bases: a perspective
Roberto Di Cosmo
http://www.dicosmo.org
04/12/2015
EvoLille
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 1 / 45
Credits: joint work with...
Pietro Abate Jaap Boender Yacine Boufkhad
Stefano Zacchiroli Ralf Treinen Jérôme Vouillon
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 2 / 45
Outline
1 GNU/Linux Distributions: industrialising Free Software
2 Ten years studying and improving Package QA
Find uninstallable packages
Learning from the future of repositories
Find non co-installable packages
Find new non co-installable packages
Filter incoming packages
3 Taking a step back
Software is Fragile
4 Software Heritage
5 Call to action
6 Questions
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 3 / 45
Free Software, industrialised: distributions
Idea from FOSS in the 1990s: distributions are intermediate software
vendors between FOSS developers and users, offering to share upstream
tracking, integration, testing and QA among all of us
Project 1
Project 2
Project 3
FOSS Bazaar
User
installations
Server
side
Client
side
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 4 / 45
Free Software, industrialised: distributions
Idea from FOSS in the 1990s: distributions are intermediate software
vendors between FOSS developers and users, offering to share upstream
tracking, integration, testing and QA among all of us
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 4 / 45
Distributions: a “somehow” successful idea ...
Key notions: packages and package managers
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 5 / 45
Packages and their metadata
Package =
some files
some scripts
metadata
Identification
Inter-package rel.
Dependencies
Conflicts
Feature declarations
Other
Package maintainer
Textual descriptions
...
Example (package metadata)
Package: aterm
Version: 0.4.2-11
Section: x11
Installed-Size: 280
Maintainer: Göran Weinholt ...
Architecture: i386
Depends: libc6 (>= 2.3.2.ds1-4),
libice6 | xlibs (> 4.1.0), ...
Conflicts: suidmanager (< 0.50)
Provides: x-terminal-emulator
...
A package is the elemental component of modern distribution systems (not
FOSS-specific). A working system is deployed by installing a package set (≈ 2’000+
for modern FOSS distros)
.
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 6 / 45
Inter-package relationships get complex...
To play Backgammon...
Package: gnubg
Version: 0.14.3+20060923-4
Depends: gnubg-data, ttf-bitstream-
vera, libartsc0 (>= 1.5.0-1), . . . ,
libgl1-mesa-glx | libgl1, . . .
Conflicts: . . .
...pull a few strings
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 7 / 45
Inter-package relationships get complex...
To play Backgammon...
Package: gnubg
Version: 0.14.3+20060923-4
Depends: gnubg-data, ttf-bitstream-
vera, libartsc0 (>= 1.5.0-1), . . . ,
libgl1-mesa-glx | libgl1, . . .
Conflicts: . . .
...pull a few strings
Distributions grow superlinearly
Using and maintaining such large
software collections is becoming hard!
manual package review
semi-automated tools
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 7 / 45
Using and maintaining free software distributions is hard
We need advanced tools:
1 end user side – package managers
install packages and their dependencies, ...
...according to the user needs and policies
2 distribution editor side – QA infrastructure (our focus today)
find “broken” packages (now easy!)
find packages which impact large parts of the distribution
predict repository update woes
identify compatibility issues
...
With a big boost from the Mancoosi project1, we have made progress in
both areas.
Let’s focus on the distribution editor side
1
http://www.mancoosi.org
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 8 / 45
Outline
1 GNU/Linux Distributions: industrialising Free Software
2 Ten years studying and improving Package QA
Find uninstallable packages
Learning from the future of repositories
Find non co-installable packages
Find new non co-installable packages
Filter incoming packages
3 Taking a step back
Software is Fragile
4 Software Heritage
5 Call to action
6 Questions
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 9 / 45
Ensuring Quality throughout evolution
The Quality Assurance team and the release manager need to track tens of
thousands of packages, their bugs, their incompatibilities, etc. that change
every day.
It is important to catch as many installation-related errors as possible
before they hit the user and the BTS, and this requires automation.
Static analysis of package dependencies: the state of the art
find packages that cannot be installed at all, and...
spot the ones that surely need to be fixed (know who to blame)
provide advance warning for future problems
find the incompatibilities between packages
show how these incompatibilities evolve
automate package migration
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 10 / 45
QA 101: find individually broken packages
The installability problem
In a repository R, decide whether a package p can be installed in isolation
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 11 / 45
QA 101: find individually broken packages
The installability problem
In a repository R, decide whether a package p can be installed in isolation
Theorem
The installability problem is NP complete (Di Cosmo et al. ASE 2006)
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 11 / 45
QA 101: find individually broken packages
The installability problem
In a repository R, decide whether a package p can be installed in isolation
Theorem
The installability problem is NP complete (Di Cosmo et al. ASE 2006)
Solving tens of thousands of NP-complete problems?
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 11 / 45
QA 101: find individually broken packages
The installability problem
In a repository R, decide whether a package p can be installed in isolation
Theorem
The installability problem is NP complete (Di Cosmo et al. ASE 2006)
Solving tens of thousands of NP-complete problems?
In practice: recent SAT solvers handle current instances easily
few explicit conflicts (without conflicts, just dual Horn clauses)
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 11 / 45
QA 101: find individually broken packages
The installability problem
In a repository R, decide whether a package p can be installed in isolation
Theorem
The installability problem is NP complete (Di Cosmo et al. ASE 2006)
Solving tens of thousands of NP-complete problems?
In practice: recent SAT solvers handle current instances easily
few explicit conflicts (without conflicts, just dual Horn clauses)
A practical tool
rpmcheck/debcheck (Vouillon, 2006)
finds all broken packages and provides short explanations
fast: analyses ≈ 40 000 (binary) packages in minutes
In dose3 library as distcheck, by Pietro Abate et al.
Extensively used (Abate, Di Cosmo et al. MSR 2015)
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 11 / 45
QA 101, level 2: what can we say about the future?
Definition (outdated packages)
p is outdated if p is not installable, and it remains uninstallable no matter
how the other packages evolve (i.e. p’s maintainer has no excuses)
Definition (challengers)
p challenges q if upgrading p “forces” to upgrade q
What they have in common:
properties that hold in all installations of any future evolution of the
repository
seems unfeasible, but we can efficiently decide some properties of this
kind
Abate, Di Cosmo, Treinen, Zacchiroli
Learning from the Future of Component Repositories
CBSE 2012. Best paper award
Tools in the dose library now used in qa.debian.org/dose
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 12 / 45
QA 201: Package Co-Installability
Next step: interaction between packages
Example: is there any package which cannot be installed to-
gether with iceweasel? with kde-full?
Definition: a set of packages are co-installable if they can be installed
together.
all packages should be installable (individually!)
some package incompatibilities are expected
Can we summarise all incompatibility issues, and avoid browsing through
hundreds of hyperlinked pages?
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 13 / 45
Coinst
A simplification theory for repositories, based on the extraction of a
co-installability kernel, i.e. a repository much smaller than the original but
equivalent wrt co-installability.
Highlights:
reflexive/transitive dependency closure
equivalent classes and quotients
machine-checked proofs (in Coq!)
In a word: tough maths at work!
A tool: coinst (packaged in Debian)
Vouillon, Di Cosmo
On Software Components Co-Installability
ESEC/FSE 2011: Foundations of Software Engineering.
Best Artifact Award.
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 14 / 45
Co-Installability Graphs
coinst -root iceweasel -o graph.dot Packages_i386
iceweasel
xul-ext-sage
xul-ext-gnome-keyring
libasound2
xul-ext-greasemonkey
liboss4-salsa-asound2
coinst -root kde-full -o graph.dot Packages_i386
libphonon4 libqt4-phonon
kde-window-manager kwin-style-dekorator
libgps20 fso-gpsd
oxygen-icon-theme fdpowermon-icons
libasound2 liboss4-salsa-asound2
kde-full
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 15 / 45
libzookeeper-mt-dev libzookeeper-st-dev
zephyr-server zephyr-server-krb5 libzephyr4-krb5 libzephyr4
#
zabbix-proxy-mysql
zabbix-proxy-pgsql
zabbix-proxy-sqlite3
zabbix-server-mysql
zabbix-server-pgsql
xmpuzzles
xpuzzles
libasound2 (x 2355)
#
libxine-dev libxine2-dev
libxerces-c-dev (x 3)
libxerces-c2-dev (x 2)
xabacus
xmabacus
wims-extra-all
wims-extra-es
libgd2-xpm (x 103)
w3m-el-snapshot w3m-el
libtomcat6-java (x 10) libtomcat7-java (x 7)
#
systemd-sysv
systemd (x 3)
#
sysvinit
upstart
sysv-rc (x 4) file-rc
#
python-sugar-0.84 (x 2)
python-sugar-0.86 (x 2)
python-sugar-0.88 (x 2)
python-sugar-0.90 (x 2)
python-sugar-0.92
#
sugar-artwork-0.84
sugar-artwork-0.86
sugar-artwork-0.88
sugar-artwork-0.90
sugar-artwork-0.92
sudo sudo-ldap
stardict-gnome
stardict-gtk
#snort
∨
busybox-syslogd
dsyslog (x 5)
inetutils-syslogd
rsyslog (x 6)
socklog-run
klogd
syslog-ng-core (x 5)
snort-mysql
snort-pgsql
#snd-gtk-jack
snd-gtk-pulse
snd-nox (x 2)
libsnack2 (x 2) libsnack2-alsa
rxvt-ml
rxvt-beta
rxvt
libreadline6-dev (x 18)
libreadline-gplv2-dev (x 2)
#radiusd-livingston
#
radsecproxy
yardradius
quassel-data
quassel-data-kde4
libqt4-dbg (x 3)
qt-x11-free-dbg
gdb (x 15) gdb-minimal
python-xattr (x 8)
python-pyxattr (x 2)
python-sqlite (x 13)
python-pysqlite1.1 (x 2)
python-pyface (x 5)
python-traitsbackendwx
python-traitsbackendqt
python-envisage python-envisageplugins
python-pyorbit-omg python-omniorb-omg
#
libpt-dev
libjpeg8-dev (x 39)
unixodbc-dev (x 12)
libjpeg62-dev
libiodbc2-dev
libpt2.4.5-dev (x 2)
libpt-1.10.10-dev (x 2)
libportaudio-dev portaudio19-dev (x 4)
php5-mysql (x 22) php5-mysqlnd
libapache2-mod-php5 (x 3)
libapache2-mod-php5filter
∨
apache2-mpm-itk
apache2-mpm-prefork (x 4)
phonon-backend-null
phonon-backend-vlc (x 2)
phonon-backend-gstreamer (x 3)
libphonon4 (x 24) libqt4-phonon
libpcp3-dev (x 2)
libpgpool-dev
libpcp3 (x 18) pgpool2
python-vtk (x 5)
paraview-python
libhdf5-openmpi-1.8.4 (x 28)
#
libopenh323-1.18.0 (x 2)
libopenh323-1.18.0-develop
libopenmpi-dev (x 20)
libopal-dev
obex-data-server (x 3) obexd-server
libneon27-dev
libneon27-gnutls-dev
libkrb5-dev (x 30)
libgnutls-dev (x 44)
heimdal-dev
libelektra-dev (x 3)
libgnutls28-dev
mplayer (x 2)
mplayer2 (x 2)
moon-buggy moon-buggy-esd
minbif (x 2)
minbif-webcam
mew-bin
mew-beta-bin
libgl1-mesa-glx (x 17) libgl1-mesa-swx11 (x 4)
#
libmeep-dev
libmeep-mpi-dev
libmeep-openmpi-dev
maven2 maven
maatkit
percona-toolkit
#lsb
nullmailer
#
#
#
xmail
#
#
lpr
lprng
#
#live-config-runit
#
live-config-systemd
live-config-upstart
live-config-sysvinit
#
libnl-dev
libnl2-dev (x 6)
libnl-3-dev (x 5)
libiodbc2 (x 98)
odbc-postgresql (x 2)
libmyodbc
libmdbodbc1 (x 2)
tdsodbc
libhdf4-alt-dev
libhdf4-dev (x 2)
libgpod4 (x 42)
libgpod4-nogtk
libgdchart-gd2-noxpm
libgdchart-gd2-xpm
libgd2-noxpm
libgd-gd2-perl (x 28)
libgd-gd2-noxpm-perl
libswscale2
libswscale-extra-2
libavutil-extra-51
libpostproc52
libpostproc-extra-52
libavutil51
libavformat53
libavformat-extra-53 libavcodec-extra-53
libavfilter2
libavfilter-extra-2
libavdevice53
libavdevice-extra-53
libavcodec53
libalog0.3-full
libalog0.3-base (x 3)
gnat-4.4 (x 41)
gnat-4.6 (x 8)
#
lam4-dev
mpi-doc
#
mpich2-doc
openmpi-doc
lam-mpidoc
python-kombu (x 4)
python-cjson (x 2)
kdiff3
kdiff3-qt
oxygen-icon-theme fdpowermon-icons
kdesvn-kio-plugins
kdesdk-kio-plugins
tomcat6 (x 2) jenkins
libjack0 (x 2)
libjack-jackd2-0 (x 2)
#
racoon (x 3)
#
#
openswan (x 5)
strongswan-ikev2 (x 2)
strongswan-ikev1
inn (x 2)
inn2-inews
inn2-dev
#
#
inetutils-telnetd
#
krb5-telnetd
krb5-rsh-server
#
telnetd
#
telnetd-ssl
iputils-ping (x 22) inetutils-ping
#
inetutils-inetd
openbsd-inetd
rlinetd
xinetd
ike (x 2)
#
ifupdown (x 3)
netscript-2.4
netscript-2.4-upstart
icheck qtmobility-dev
iceape (x 4)
xul-ext-requestpolicy
mgetty-fax hylafax-client (x 4)
heimdal-servers (x 2)
#
#
#
inetutils-ftpd
krb5-ftpd
ftpd
ftpd-ssl
muddleftpd
proftpd-basic (x 19)
pure-ftpd
pure-ftpd-ldap
pure-ftpd-mysql
pure-ftpd-postgresql
twoftpd-run
runit (x 3) daemontools-run
vsftpd
wu-ftpd
wzdftpd (x 7)
libhdf5-lam-1.8.4
libhdf5-mpich-1.8.4
libhdf5-serial-1.8.4
sendmail-bin (x 3)
harden-servers (x 2) pyftpd
#
#
#
#
#
rpcbind (x 11)
rsh-server
rsh-redone-server
#
guile-1.6-dev
guile-1.8-dev (x 4)
guile-2.0-dev
gtalk (x 2)
inetutils-talkd
talkd
gss-man
#
grub-coreboot (x 2)
grub2-common
grub-efi-amd64
grub-efi-ia32 (x 2)
grub-ieee1275
grub-pc (x 4)
grub-legacy
#
libgrib-api-0d-1 (x 2)
libgrib-api-1.9.9 (x 5)
libgrib-api-data
perlmagick
graphicsmagick-libmagick-dev-compat
libmagickcore-dev (x 6)
graphicsmagick-imagemagick-compat octave-image
imagemagick (x 2)
gpivtools-mpi gpivtools
gpiv
gpiv-mpi
gpe-login
xdm
wdm
slim
kdm (x 2)
gnuspool (x 3) system-config-printer-udev
gnome-control-center (x 3)
gpe-conf (x 3)
gnome-control-center-data
capplets-data
git-daemon-run
git-daemon-sysvinit
gdm3 (x 2)
#
fusionforge-full
∨
exim4-daemon-heavy (x 3)
courier-mta (x 4)
postfix (x 14)
fusionforge-minimal
fusionforge-standard (x 2)
fuse (x 57)
loop-aes-utils
fso-gsm0710muxd gsm0710muxd
libgps20 (x 14)
fso-gpsd
fso-frameworkd (x 3)
libphone-utils0 (x 4)
#
fso-config-general
fso-config-gta01
fso-config-gta02
freeradius-common (x 8)
fontforge (x 2) fontforge-nox
fltk1.1-games
fltk1.3-games
filelight-l10n
kde-l10n-zhtw
kde-l10n-zhcn
kde-l10n-wa
kde-l10n-uk
kde-l10n-tr
kde-l10n-th
kde-l10n-sv
kde-l10n-sr
kde-l10n-sl
kde-l10n-sk
kde-l10n-ru
kde-l10n-ro
kde-l10n-ptbr
kde-l10n-pt
kde-l10n-pl
kde-l10n-pa
kde-l10n-nn
kde-l10n-nl
kde-l10n-nds
kde-l10n-nb
kde-l10n-mai
kde-l10n-lv
kde-l10n-lt
kde-l10n-ko
kde-l10n-kn (x 2)
kde-l10n-km
kde-l10n-kk
kde-l10n-ja
kde-l10n-it
kde-l10n-is
kde-l10n-id
kde-l10n-ia
kde-l10n-hu
kde-l10n-hr
kde-l10n-hi
kde-l10n-he
kde-l10n-gu
kde-l10n-gl
kde-l10n-ga
kde-l10n-fr
kde-l10n-fi
kde-l10n-eu
kde-l10n-et
kde-l10n-es
kde-l10n-engb
kde-l10n-el
kde-l10n-de
kde-l10n-da
kde-l10n-cs
kde-l10n-cavalencia
kde-l10n-ca
kde-l10n-bg
kde-l10n-ar
festvox-kdlpc16k
festvox-kdlpc8k
festvox-kallpc16k
festvox-kallpc8k
cman (x 3)
fence-agents
gamin (x 11)
libfam0 (x 3)
fam
#
exim4-config (x 4)
#
exim4-daemon-light (x 2)
rmail
#
evince (x 3)
evince-gtk
epiphany-browser (x 5)
swfdec-mozilla
#
emacs23 (x 2)
emacs23-lucid
emacs23-nox
#
#
libdap-dev
libdnet-dev (x 2)
libcurl4-gnutls-dev (x 24)
#
dma
esmtp-run
masqmail
msmtp-mta
ssmtp
#discount
libtext-markdown-perl (x 3)
markdown
isc-dhcp-server (x 4)
dhcp-helper isc-dhcp-relay (x 2)
libdb5.1-java (x 5)
libdb5.3-java (x 2)
#
libdb5.1-dev (x 5)
libdb4.8-dev
libdb5.3-dev (x 2)
dconf-tools
dconf
libcyrus-imap-perl24 (x 4)
kolab-libcyrus-imap-perl (x 3)
#cyrus-nntpd-2.4 (x 3)
cyrus-common (x 7)
kolab-cyrus-common
inn2
inn2-lfs
leafnode
sn
cyrus-imapd-2.4 (x 3)
#
uw-imapd
#
cyrus-clients-2.4 (x 2)
kolab-cyrus-clients
libcurl4-nss-dev (x 2)
libcurl4-openssl-dev
cups-client (x 15)
cups-bsd (x 2)
controlaula
ltsp-controlaula
gnome-font-viewer
console-tools (x 4)
kbd
console-setup (x 2)
console-setup-mini
libcoin60-doc
inventor-dev
libcoin60-dev
resource-agents (x 5) cluster-agents
citadel-server (x 2)
courier-pop (x 2)
dovecot-pop3d
kolab-cyrus-pop3d
mailutils-pop3d
popa3d
solid-pop3d
ipopd
courier-imap (x 2)
dovecot-imapd (x 2)
kolab-cyrus-imapd
mailutils-imap4d
cyrus-pop3d-2.4 (x 3)
citadel-mta (x 2)
ucspi-unix
check-mk-livestatus
cfingerd
efingerd
xfingerd
pawserv (x 2)
udhcpd
sysklogd
fingerd
libboost1.46-dev (x 18)
libboost1.48-dev (x 63)
libboost-mpi-python1.46.1
libboost-mpi-python1.48.0
bitlbee (x 2) bitlbee-libpurple
fp-compiler-2.4.4 (x 14)
binutils-gold
#
bidentd
ident2
nullidentd
oidentd
pidentd
cron (x 5)
bcron-run
bandwidthd bandwidthd-pgsql
openbabel (x 2) babel-1.4.0
#
atftpd
tftpd
tftpd-hpa
python-pyatspi
python-pyatspi2 (x 5)
asterisk-core-sounds-es-gsm asterisk-prompt-es-co
#
asterisk-voicemail
asterisk-voicemail-imapstorage
asterisk-voicemail-odbcstorage
iputils-arping (x 3)
arping
ardour
ardour-i686
apache2-prefork-dev
apache2-threaded-dev
#apache2-mpm-event
#
apache2-mpm-worker
torrus-apache2
libasound2-dev (x 2)
liboss4-salsa-dev
liboss-salsa-asound2
liboss4-salsa-asound2
xul-ext-adblock-plus (x 2)
libabiword-2.9-dev (x 4)
libace-foxreactor-dev (x 3)
acetoneiso
akonadi-kde-resource-googledata (x 358)
plasma-widget-amule (x 56)
libapq-postgresql-dbg (x 2)
auth2db (x 5)
auth2db-frontend (x 5)
banshee-extension-lirc (x 6)
bluedevil
libboost-all-dev (x 4)
libboost-mpi-dev (x 2)
libboost-mpi-python1.46-dev (x 2)
libboost-mpi1.46-dev
cdo (x 3)
libcegui-mk2-dev
libcheese-dev (x 4)
chemical-structures
cl-sql-odbc (x 2)
code-saturne (x 13)
connectomeviewer (x 2)
courier-faxmail
libcups2-dev (x 11)
libcupsdriver1-dev (x 9)
cyrus-admin-2.2 (x 5)
cyrus-clients-2.2
cyrus-replication (x 2) ∨
libdb5.1-java-gcj (x 2)
libdb5.3-java-gcj
libdevil-dev (x 39)
digikam-dbg (x 20)
docbookwiki
doodle-dbg (x 2)
libdose2-ocaml-dev (x 2)
e17-dev
libecore-dev (x 3)
libedje-dev
libeet-dev (x 3)
exim4 (x 3)
∨
fai-quickstart
∨
fileschanged ∨
libfluidsynth-dev (x 2)
fpc (x 2)
freeradius-iodbc
freevo (x 4)
fusionforge-plugin-blocks (x 25)
gforge-lists-mailman
python-gamera-dev (x 2)
∨
∨
∨
libgd-gd2-noxpm-ocaml-dev (x 2)
libgdal1-dev (x 3)
libgdb-dev
libgeda-dev
geogebra-kde (x 2)
glance (x 20)
gnome-osd
gnome-session (x 4)
gnome-utils
gosa (x 44)
goto-fai-backend
∨
gpe
gradle (x 2)
gross ∨
grub-choose-default ∨
grub-imageboot ∨
libgtkhtml3.14-dev (x 9)
libguichan-dev
hapm (x 3)
libhdf5-lam-dev
libhdf5-mpich-dev
libhdf5-serial-dev
libigstk4-dev (x 3)
illuminator-demo
imagemagick-dbg
jackd1 (x 2)
jackd2 (x 3)
jenkins-tomcat
libk3b-dev (x 7)
libkaya-gd-dev
libkaya-sdl-dev
kdeartwork (x 19)
kdepim-dbg (x 3)
kdeplasma-addons-dbg
kdesvn (x 2)
keystone (x 2)
kolabd
libalog-full-dbg (x 2)
libapache2-mod-log-sql (x 5)
ffmpeg-dbg (x 2)
libgd2-xpm-dev
libgdchart-gd2-noxpm-dev
libgdchart-gd2-xpm-dev
libgpod-dev
libgpod-nogtk-dev
libgnomeada2.14.2-dbg (x 2)
libmojomojo-perl
libphone-ui-20100517 (x 2)
libphone-ui-dev
libplayer-dev
libtuxcap-dev
ltsp-client
ltsp-server-standalone
libluabind-dev
libmagics++-dev (x 4)
libmapnik-dev (x 2)
maven-debian-helper
mdbtools-dbg
gnome (x 2)
gnome-core (x 2)
gnome-dbg
mew
mew-beta
monodevelop-debugger-gdb
mscore (x 2)
mysqmail-courier-logger
∨
mysqmail-dovecot-logger
mysqmail-pure-ftpd-logger
∨
nagiosgrapher
network-manager-strongswan
nova-compute-kvm
nova-network
octave-pkg-dev (x 2)
oggvideotools (x 2)
open-font-design-toolkit
libsaml2-dev (x 3)
libopenwalnut1-dev
libapache2-mod-passenger (x 2)
∨
libpcp-logsummary-perl (x 2)
pfqueue (x 2) ∨
robot-player-dev
python-fs
python-traitsgui ∨
qt-sdk
quassel (x 2)
quassel-client-kde4 (x 2)
r-base-core-dbg (x 2)
redhat-cluster-suite (x 2)
request-tracker3.8 (x 6)
sa-learn-cyrus ∨
sdpam
sepia
snd-gtk
∨
libsoqt4-dev
startupmanager
strongswan (x 2)
strongswan-starter
∨
python-jarabe-0.84 (x 6)
sucrose-0.84
sugar-emulator-0.84 (x 2)
python-jarabe-0.86 (x 4)
sucrose-0.86
sugar-emulator-0.86 (x 2)
python-jarabe-0.88 (x 4)
sucrose-0.88
sugar-emulator-0.88 (x 2)
python-jarabe-0.90 (x 4)
sucrose-0.90
sugar-emulator-0.90 (x 2)
sugar-browse-activity-0.86 (x 5) ∨
sugar-calculate-activity
∨
sugar-connect-activity (x 9) ∨
task-kde-desktop
task-lxde-desktop
tcos-tftp-dhcp
uucpsend
libkwebkit-dbg
ytalk
∨
∨
zoneminder
xmakemol xmakemol-gl
libxine1-doc libxine2-doc
xserver-xorg-input-mtrack xserver-xorg-input-multitouch
wmnd wmnd-snmp
wl
wl-beta
semi
vm (x 2)
gnus
libwine-gecko-dbg-unstable libwine-gecko-unstable
w3c-dtd-xhtml w3c-sgml-lib (x 2)
ucspi-tcp ucspi-tcp-ipv6
tk8.4-doc tk8.5-doc
texmacs-common (x 2) texmacs-extra-fonts
tcl-trf (x 2) tcl-trf-doc
tcl8.4-doc tcl8.5-doc
libtag1-rusxmms libtag1-vanilla
synce-hal (x 2) synce-serial
slapos-client python-zc.buildout
slurm-llnl (x 2) sinfo
#
qterm
torque-client
#
torque-client-x11
gridengine-client
slurm-llnl-torque
shorewall6-lite
uif
filtergen
ferm
#
shorewall-lite
fiaif
shorewall (x 2)
shorewall-init ∨
scid-rating-data scid-spell-data
#
rxvt-unicode (x 2)
rxvt-unicode-256color
rxvt-unicode-lite
ruby-bacon ruby-rspec-core (x 7)
libamrita-ruby1.8 (x 2) ruby-amrita2 (x 4)
rt-tests xenomai-runtime
libreadline5-dbg libreadline6-dbg
lib64readline-gplv2-dev lib64readline6-dev
#
ratbox-services-mysql
ratbox-services-pgsql
ratbox-services-sqlite
raptor-utils raptor2-utils
radiusclient1 (x 2)
libradiusclient-ng-dev
libradius1-dev
radare radare-gtk
libqwt-doc libqwt5-doc
libqwt-dev libqwt5-qt4-dev
python-quixote (x 2) python-quixote1 (x 2)
qca-dev libqca2-dev (x 2)
psi3 yagiuda
planet-venus racket (x 2)
pimd smcroute
php-apc php5-xcache
pennmush pennmush-mysql
orville-write xtell
openwince-jtag urjtag
opendnssec-enforcer-mysql (x 2) opendnssec-enforcer-sqlite3 (x 2)
olpc-kbdshim olpc-kbdshim-hal
libode-dev libode-sp-dev
oce-draw opencascade-draw
liboce-foundation-dev (x 5) libopencascade-foundation-dev (x 6)
#
nginx-extras (x 2)
nginx-full (x 2)
nginx-light (x 2)
nginx ∨
libnetpbm10-dev
libnetpbm9-dev
libpgm-dev
tftp tftp-hpa
telnet telnet-ssl
harden-clients
x2vnc
ftp-upload
ftp ftp-ssl
mtr mtr-tiny modemmanager (x 2) wader-core
libapache2-mod-wsgi libapache2-mod-wsgi-py3
mlterm mlterm-tiny
chasen-cannadic naist-jdic (x 2)ipadic
mcstrans policycoreutils (x 6)
myspell-hu hunspell-hu
#myspell-fr
myspell-fr-gut
hunspell-fr
myspell-da
hunspell-vi
hunspell-sr
hunspell-sh
hunspell-da
lzma xz-lzma
liblua50-socket2 luasocketliblua50-socket-dev
luasocket-dev
#
libxbase2.0-bin
dvb-apps (x 2)
libxdb-dev
libupnp3-dev (x 2) libupnp4-dev
libunique-doc libunique-3.0-doc
libsieve2-dev libmailutils-dev (x 2)
libsendmail-milter-perl libsendmail-pmilter-perl
libpam-ldap libpam-ldapd
libpam-heimdal libpam-krb5
libowfat-dev
libudt-dev
libcdb-dev
libodbc-ruby-doc ruby-odbc (x 10)
libnss-ldap libnss-ldapd
libnet-proxy-perl sslh
libmimedir-dev libmimedir-gnome-dev (x 2)
libev-libevent-dev libevent-dev
libapache2-authenntlm-perl libauthen-smb-perl (x 2)
libantlr3c-3.2-0 libantlr3c-antlrdbg-3.2-0
ldap2zone ldapdnsldap2dns
laptop-mode-tools noflushd
joe joe-jupp
#
ircd-hybrid
#
#
#
ircd-irc2
ircd-ircu
ngircd
inspircd (x 2)
dancer-ircd
charybdis
ircd-ratbox (x 2)
im-config im-switch
#
hunspell-de-ch
myspell-de-ch
hunspell-de-ch-frami
#
hunspell-de-at
myspell-de-at
hunspell-de-at-frami
#
myspell-de-de-oldspell
hunspell-de-de
myspell-de-de
hunspell-de-de-frami
hunspell-de-med ∨
ifrench ifrench-gut hwloc hwloc-nox
hunspell-ru myspell-ru
hunspell-en-us myspell-en-us
hunspell-tools myspell-tools
hello hello-debhelper
heimdal-docs krb5-doc
heimdal-clients (x 3)
otp
krb5-clients
#
kcc
krb5-user (x 4)
openafs-kpasswd
libgnutls26-dbg libgnutls28-dbg
#
gnome-ppp
openresolv
resolvconf
gnokii-smsd (x 3) smstools
gmt (x 2) gmt-manpages
gimp-dcraw gimp-ufraw
libgfs-1.3-2 (x 3) libgfs-mpi-1.3-2 (x 3)
gcc-mingw32
mingw32
mingw32-binutils
binutils-mingw-w64-x86-64
binutils-mingw-w64-i686
binutils-mingw-w64 (x 5)
#
libstdc++6-4.4-doc
libstdc++6-4.5-doc
libstdc++6-4.6-doc
#
libstdc++6-4.4-dbg
libstdc++6-4.5-dbg
libstdc++6-4.6-dbg
#
lib64stdc++6-4.4-dbg
lib64stdc++6-4.5-dbg
lib64stdc++6-4.6-dbg
libwnn-dev libwnn6-dev
freebsd-sendpr gnats-user (x 2)
freebsd-buildutils (x 2) pmake
foomatic-db foomatic-db-compressed-ppds
fookb-plainx fookb-wmaker
libfltk1.1-dev (x 3) libfltk1.3-dev (x 2)
flex flex-old
bison (x 2) bison++
pretzel (x 3)
firebird2.5-classic-common (x 2)
firebird2.5-super (x 2) firebird2.5-server-common (x 3)
firebird2.5-classic
firebird2.5-superclassic
firebird2.1-server-common (x 2)
firebird2.1-classic
firebird2.1-super
fb-music-high fb-music-low
ettercap-graphical ettercap-text-only
erlang-base erlang-base-hipe
elvis elvis-console
elinks-data (x 2) elinks-lite
libelf-dev (x 2) libelfg0-dev (x 2)libdwarf-dev libdw-dev
nscd unscd
ecm gmp-ecm
dvi2ps-fontdata-ptexfake ptex-base (x 6)
python-dnspython (x 5) linkchecker (x 2)
dicod (x 4) dictd
dico le-dico-de-rene-cougnenc
dhcpcd pump (x 2)
debget debian-goodies
#
dbskkd-cdb
skksearch
yaskkserv
libdb5.1-tcl libdb5.3-tcl
libdb5.1-stl-dev libdb5.3-stl-dev libdb5.1-sql-dev (x 2) libdb5.3-sql-dev
libsasl2-modules-gssapi-heimdal (x 2) libsasl2-modules-gssapi-mit (x 2)
libcunit1 (x 2) libcunit1-ncurses (x 2)
crossfire-maps crossfire-maps-small
crack crack-md5
cpufreqd powernowd
courier-maildrop (x 5) maildrop
conky-cli conky-std
libclutter-gtk-1.0-doc (x 2) libclutter-gtk-0.10-doc
libcloog-isl-dev libcloog-ppl-dev
#
chrony
ntp (x 2)
openntpd
python-cherrypy3 (x 4) python-cherrypy (x 3)
check-mk-config-icinga check-mk-config-nagios3
busybox (x 4) busybox-static
bootchart bootchart2
libboost1.46-doc libboost1.48-doc (x 2)
blends-doc cdd-doc
biff mailutils-comsatd
#
bacula-common-mysql (x 3)
bacula-common-pgsql (x 3)
bacula-common-sqlite3 (x 5)
libavahi-ui-dev libavahi-ui-gtk3-dev
#
aumix
aumix-gtk
oss-preserve
mpg123-el ∨
#
asterisk-core-sounds-fr-gsm
asterisk-prompt-fr-armelle
asterisk-prompt-fr-proformatique
#
apsfilter
magicfilter
printfilters-ppd
#
apcupsd (x 2)
nut-server (x 5)
powstatd
apache2-suexec apache2-suexec-custom
amavisd-new (x 3) phamm-ldap-amavis
#
aide
aide-dynamic
aide-xen
2ping (x 29205)
console-setup-freebsd MISSING DEP
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 16 / 45
libzookeeper-mt-dev libzookeeper-st-dev
zephyr-server zephyr-server-krb5 libzephyr4-krb5 libzephyr4
#
zabbix-proxy-mysql
zabbix-proxy-pgsql
zabbix-proxy-sqlite3
zabbix-server-mysql
zabbix-server-pgsql
xmpuzzles
xpuzzles
libasound2 (x 2355)
#
libxine-dev libxine2-dev
libxerces-c-dev (x 3)
libxerces-c2-dev (x 2)
xabacus
xmabacus
wims-extra-all
wims-extra-es
libgd2-xpm (x 103)
w3m-el-snapshot w3m-el
libtomcat6-java (x 10) libtomcat7-java (x 7)
#
systemd-sysv
systemd (x 3)
#
sysvinit
upstart
sysv-rc (x 4) file-rc
#
python-sugar-0.84 (x 2)
python-sugar-0.86 (x 2)
python-sugar-0.88 (x 2)
python-sugar-0.90 (x 2)
python-sugar-0.92
#
sugar-artwork-0.84
sugar-artwork-0.86
sugar-artwork-0.88
sugar-artwork-0.90
sugar-artwork-0.92
sudo sudo-ldap
stardict-gnome
stardict-gtk
#snort
∨
busybox-syslogd
dsyslog (x 5)
inetutils-syslogd
rsyslog (x 6)
socklog-run
klogd
syslog-ng-core (x 5)
snort-mysql
snort-pgsql
#snd-gtk-jack
snd-gtk-pulse
snd-nox (x 2)
libsnack2 (x 2) libsnack2-alsa
rxvt-ml
rxvt-beta
rxvt
libreadline6-dev (x 18)
libreadline-gplv2-dev (x 2)
#radiusd-livingston
#
radsecproxy
yardradius
quassel-data
quassel-data-kde4
libqt4-dbg (x 3)
qt-x11-free-dbg
gdb (x 15) gdb-minimal
python-xattr (x 8)
python-pyxattr (x 2)
python-sqlite (x 13)
python-pysqlite1.1 (x 2)
python-pyface (x 5)
python-traitsbackendwx
python-traitsbackendqt
python-envisage python-envisageplugins
python-pyorbit-omg python-omniorb-omg
#
libpt-dev
libjpeg8-dev (x 39)
unixodbc-dev (x 12)
libjpeg62-dev
libiodbc2-dev
libpt2.4.5-dev (x 2)
libpt-1.10.10-dev (x 2)
libportaudio-dev portaudio19-dev (x 4)
php5-mysql (x 22) php5-mysqlnd
libapache2-mod-php5 (x 3)
libapache2-mod-php5filter
∨
apache2-mpm-itk
apache2-mpm-prefork (x 4)
phonon-backend-null
phonon-backend-vlc (x 2)
phonon-backend-gstreamer (x 3)
libphonon4 (x 24) libqt4-phonon
libpcp3-dev (x 2)
libpgpool-dev
libpcp3 (x 18) pgpool2
python-vtk (x 5)
paraview-python
libhdf5-openmpi-1.8.4 (x 28)
#
libopenh323-1.18.0 (x 2)
libopenh323-1.18.0-develop
libopenmpi-dev (x 20)
libopal-dev
obex-data-server (x 3) obexd-server
libneon27-dev
libneon27-gnutls-dev
libkrb5-dev (x 30)
libgnutls-dev (x 44)
heimdal-dev
libelektra-dev (x 3)
libgnutls28-dev
mplayer (x 2)
mplayer2 (x 2)
moon-buggy moon-buggy-esd
minbif (x 2)
minbif-webcam
mew-bin
mew-beta-bin
libgl1-mesa-glx (x 17) libgl1-mesa-swx11 (x 4)
#
libmeep-dev
libmeep-mpi-dev
libmeep-openmpi-dev
maven2 maven
maatkit
percona-toolkit
#lsb
nullmailer
#
#
#
xmail
#
#
lpr
lprng
#
#live-config-runit
#
live-config-systemd
live-config-upstart
live-config-sysvinit
#
libnl-dev
libnl2-dev (x 6)
libnl-3-dev (x 5)
libiodbc2 (x 98)
odbc-postgresql (x 2)
libmyodbc
libmdbodbc1 (x 2)
tdsodbc
libhdf4-alt-dev
libhdf4-dev (x 2)
libgpod4 (x 42)
libgpod4-nogtk
libgdchart-gd2-noxpm
libgdchart-gd2-xpm
libgd2-noxpm
libgd-gd2-perl (x 28)
libgd-gd2-noxpm-perl
libswscale2
libswscale-extra-2
libavutil-extra-51
libpostproc52
libpostproc-extra-52
libavutil51
libavformat53
libavformat-extra-53 libavcodec-extra-53
libavfilter2
libavfilter-extra-2
libavdevice53
libavdevice-extra-53
libavcodec53
libalog0.3-full
libalog0.3-base (x 3)
gnat-4.4 (x 41)
gnat-4.6 (x 8)
#
lam4-dev
mpi-doc
#
mpich2-doc
openmpi-doc
lam-mpidoc
python-kombu (x 4)
python-cjson (x 2)
kdiff3
kdiff3-qt
oxygen-icon-theme fdpowermon-icons
kdesvn-kio-plugins
kdesdk-kio-plugins
tomcat6 (x 2) jenkins
libjack0 (x 2)
libjack-jackd2-0 (x 2)
#
racoon (x 3)
#
#
openswan (x 5)
strongswan-ikev2 (x 2)
strongswan-ikev1
inn (x 2)
inn2-inews
inn2-dev
#
#
inetutils-telnetd
#
krb5-telnetd
krb5-rsh-server
#
telnetd
#
telnetd-ssl
iputils-ping (x 22) inetutils-ping
#
inetutils-inetd
openbsd-inetd
rlinetd
xinetd
ike (x 2)
#
ifupdown (x 3)
netscript-2.4
netscript-2.4-upstart
icheck qtmobility-dev
iceape (x 4)
xul-ext-requestpolicy
mgetty-fax hylafax-client (x 4)
heimdal-servers (x 2)
#
#
#
inetutils-ftpd
krb5-ftpd
ftpd
ftpd-ssl
muddleftpd
proftpd-basic (x 19)
pure-ftpd
pure-ftpd-ldap
pure-ftpd-mysql
pure-ftpd-postgresql
twoftpd-run
runit (x 3) daemontools-run
vsftpd
wu-ftpd
wzdftpd (x 7)
libhdf5-lam-1.8.4
libhdf5-mpich-1.8.4
libhdf5-serial-1.8.4
sendmail-bin (x 3)
harden-servers (x 2) pyftpd
#
#
#
#
#
rpcbind (x 11)
rsh-server
rsh-redone-server
#
guile-1.6-dev
guile-1.8-dev (x 4)
guile-2.0-dev
gtalk (x 2)
inetutils-talkd
talkd
gss-man
#
grub-coreboot (x 2)
grub2-common
grub-efi-amd64
grub-efi-ia32 (x 2)
grub-ieee1275
grub-pc (x 4)
grub-legacy
#
libgrib-api-0d-1 (x 2)
libgrib-api-1.9.9 (x 5)
libgrib-api-data
perlmagick
graphicsmagick-libmagick-dev-compat
libmagickcore-dev (x 6)
graphicsmagick-imagemagick-compat octave-image
imagemagick (x 2)
gpivtools-mpi gpivtools
gpiv
gpiv-mpi
gpe-login
xdm
wdm
slim
kdm (x 2)
gnuspool (x 3) system-config-printer-udev
gnome-control-center (x 3)
gpe-conf (x 3)
gnome-control-center-data
capplets-data
git-daemon-run
git-daemon-sysvinit
gdm3 (x 2)
#
fusionforge-full
∨
exim4-daemon-heavy (x 3)
courier-mta (x 4)
postfix (x 14)
fusionforge-minimal
fusionforge-standard (x 2)
fuse (x 57)
loop-aes-utils
fso-gsm0710muxd gsm0710muxd
libgps20 (x 14)
fso-gpsd
fso-frameworkd (x 3)
libphone-utils0 (x 4)
#
fso-config-general
fso-config-gta01
fso-config-gta02
freeradius-common (x 8)
fontforge (x 2) fontforge-nox
fltk1.1-games
fltk1.3-games
filelight-l10n
kde-l10n-zhtw
kde-l10n-zhcn
kde-l10n-wa
kde-l10n-uk
kde-l10n-tr
kde-l10n-th
kde-l10n-sv
kde-l10n-sr
kde-l10n-sl
kde-l10n-sk
kde-l10n-ru
kde-l10n-ro
kde-l10n-ptbr
kde-l10n-pt
kde-l10n-pl
kde-l10n-pa
kde-l10n-nn
kde-l10n-nl
kde-l10n-nds
kde-l10n-nb
kde-l10n-mai
kde-l10n-lv
kde-l10n-lt
kde-l10n-ko
kde-l10n-kn (x 2)
kde-l10n-km
kde-l10n-kk
kde-l10n-ja
kde-l10n-it
kde-l10n-is
kde-l10n-id
kde-l10n-ia
kde-l10n-hu
kde-l10n-hr
kde-l10n-hi
kde-l10n-he
kde-l10n-gu
kde-l10n-gl
kde-l10n-ga
kde-l10n-fr
kde-l10n-fi
kde-l10n-eu
kde-l10n-et
kde-l10n-es
kde-l10n-engb
kde-l10n-el
kde-l10n-de
kde-l10n-da
kde-l10n-cs
kde-l10n-cavalencia
kde-l10n-ca
kde-l10n-bg
kde-l10n-ar
festvox-kdlpc16k
festvox-kdlpc8k
festvox-kallpc16k
festvox-kallpc8k
cman (x 3)
fence-agents
gamin (x 11)
libfam0 (x 3)
fam
#
exim4-config (x 4)
#
exim4-daemon-light (x 2)
rmail
#
evince (x 3)
evince-gtk
epiphany-browser (x 5)
swfdec-mozilla
#
emacs23 (x 2)
emacs23-lucid
emacs23-nox
#
#
libdap-dev
libdnet-dev (x 2)
libcurl4-gnutls-dev (x 24)
#
dma
esmtp-run
masqmail
msmtp-mta
ssmtp
#discount
libtext-markdown-perl (x 3)
markdown
isc-dhcp-server (x 4)
dhcp-helper isc-dhcp-relay (x 2)
libdb5.1-java (x 5)
libdb5.3-java (x 2)
#
libdb5.1-dev (x 5)
libdb4.8-dev
libdb5.3-dev (x 2)
dconf-tools
dconf
libcyrus-imap-perl24 (x 4)
kolab-libcyrus-imap-perl (x 3)
#cyrus-nntpd-2.4 (x 3)
cyrus-common (x 7)
kolab-cyrus-common
inn2
inn2-lfs
leafnode
sn
cyrus-imapd-2.4 (x 3)
#
uw-imapd
#
cyrus-clients-2.4 (x 2)
kolab-cyrus-clients
libcurl4-nss-dev (x 2)
libcurl4-openssl-dev
cups-client (x 15)
cups-bsd (x 2)
controlaula
ltsp-controlaula
gnome-font-viewer
console-tools (x 4)
kbd
console-setup (x 2)
console-setup-mini
libcoin60-doc
inventor-dev
libcoin60-dev
resource-agents (x 5) cluster-agents
citadel-server (x 2)
courier-pop (x 2)
dovecot-pop3d
kolab-cyrus-pop3d
mailutils-pop3d
popa3d
solid-pop3d
ipopd
courier-imap (x 2)
dovecot-imapd (x 2)
kolab-cyrus-imapd
mailutils-imap4d
cyrus-pop3d-2.4 (x 3)
citadel-mta (x 2)
ucspi-unix
check-mk-livestatus
cfingerd
efingerd
xfingerd
pawserv (x 2)
udhcpd
sysklogd
fingerd
libboost1.46-dev (x 18)
libboost1.48-dev (x 63)
libboost-mpi-python1.46.1
libboost-mpi-python1.48.0
bitlbee (x 2) bitlbee-libpurple
fp-compiler-2.4.4 (x 14)
binutils-gold
#
bidentd
ident2
nullidentd
oidentd
pidentd
cron (x 5)
bcron-run
bandwidthd bandwidthd-pgsql
openbabel (x 2) babel-1.4.0
#
atftpd
tftpd
tftpd-hpa
python-pyatspi
python-pyatspi2 (x 5)
asterisk-core-sounds-es-gsm asterisk-prompt-es-co
#
asterisk-voicemail
asterisk-voicemail-imapstorage
asterisk-voicemail-odbcstorage
iputils-arping (x 3)
arping
ardour
ardour-i686
apache2-prefork-dev
apache2-threaded-dev
#apache2-mpm-event
#
apache2-mpm-worker
torrus-apache2
libasound2-dev (x 2)
liboss4-salsa-dev
liboss-salsa-asound2
liboss4-salsa-asound2
xul-ext-adblock-plus (x 2)
libabiword-2.9-dev (x 4)
libace-foxreactor-dev (x 3)
acetoneiso
akonadi-kde-resource-googledata (x 358)
plasma-widget-amule (x 56)
libapq-postgresql-dbg (x 2)
auth2db (x 5)
auth2db-frontend (x 5)
banshee-extension-lirc (x 6)
bluedevil
libboost-all-dev (x 4)
libboost-mpi-dev (x 2)
libboost-mpi-python1.46-dev (x 2)
libboost-mpi1.46-dev
cdo (x 3)
libcegui-mk2-dev
libcheese-dev (x 4)
chemical-structures
cl-sql-odbc (x 2)
code-saturne (x 13)
connectomeviewer (x 2)
courier-faxmail
libcups2-dev (x 11)
libcupsdriver1-dev (x 9)
cyrus-admin-2.2 (x 5)
cyrus-clients-2.2
cyrus-replication (x 2) ∨
libdb5.1-java-gcj (x 2)
libdb5.3-java-gcj
libdevil-dev (x 39)
digikam-dbg (x 20)
docbookwiki
doodle-dbg (x 2)
libdose2-ocaml-dev (x 2)
e17-dev
libecore-dev (x 3)
libedje-dev
libeet-dev (x 3)
exim4 (x 3)
∨
fai-quickstart
∨
fileschanged ∨
libfluidsynth-dev (x 2)
fpc (x 2)
freeradius-iodbc
freevo (x 4)
fusionforge-plugin-blocks (x 25)
gforge-lists-mailman
python-gamera-dev (x 2)
∨
∨
∨
libgd-gd2-noxpm-ocaml-dev (x 2)
libgdal1-dev (x 3)
libgdb-dev
libgeda-dev
geogebra-kde (x 2)
glance (x 20)
gnome-osd
gnome-session (x 4)
gnome-utils
gosa (x 44)
goto-fai-backend
∨
gpe
gradle (x 2)
gross ∨
grub-choose-default ∨
grub-imageboot ∨
libgtkhtml3.14-dev (x 9)
libguichan-dev
hapm (x 3)
libhdf5-lam-dev
libhdf5-mpich-dev
libhdf5-serial-dev
libigstk4-dev (x 3)
illuminator-demo
imagemagick-dbg
jackd1 (x 2)
jackd2 (x 3)
jenkins-tomcat
libk3b-dev (x 7)
libkaya-gd-dev
libkaya-sdl-dev
kdeartwork (x 19)
kdepim-dbg (x 3)
kdeplasma-addons-dbg
kdesvn (x 2)
keystone (x 2)
kolabd
libalog-full-dbg (x 2)
libapache2-mod-log-sql (x 5)
ffmpeg-dbg (x 2)
libgd2-xpm-dev
libgdchart-gd2-noxpm-dev
libgdchart-gd2-xpm-dev
libgpod-dev
libgpod-nogtk-dev
libgnomeada2.14.2-dbg (x 2)
libmojomojo-perl
libphone-ui-20100517 (x 2)
libphone-ui-dev
libplayer-dev
libtuxcap-dev
ltsp-client
ltsp-server-standalone
libluabind-dev
libmagics++-dev (x 4)
libmapnik-dev (x 2)
maven-debian-helper
mdbtools-dbg
gnome (x 2)
gnome-core (x 2)
gnome-dbg
mew
mew-beta
monodevelop-debugger-gdb
mscore (x 2)
mysqmail-courier-logger
∨
mysqmail-dovecot-logger
mysqmail-pure-ftpd-logger
∨
nagiosgrapher
network-manager-strongswan
nova-compute-kvm
nova-network
octave-pkg-dev (x 2)
oggvideotools (x 2)
open-font-design-toolkit
libsaml2-dev (x 3)
libopenwalnut1-dev
libapache2-mod-passenger (x 2)
∨
libpcp-logsummary-perl (x 2)
pfqueue (x 2) ∨
robot-player-dev
python-fs
python-traitsgui ∨
qt-sdk
quassel (x 2)
quassel-client-kde4 (x 2)
r-base-core-dbg (x 2)
redhat-cluster-suite (x 2)
request-tracker3.8 (x 6)
sa-learn-cyrus ∨
sdpam
sepia
snd-gtk
∨
libsoqt4-dev
startupmanager
strongswan (x 2)
strongswan-starter
∨
python-jarabe-0.84 (x 6)
sucrose-0.84
sugar-emulator-0.84 (x 2)
python-jarabe-0.86 (x 4)
sucrose-0.86
sugar-emulator-0.86 (x 2)
python-jarabe-0.88 (x 4)
sucrose-0.88
sugar-emulator-0.88 (x 2)
python-jarabe-0.90 (x 4)
sucrose-0.90
sugar-emulator-0.90 (x 2)
sugar-browse-activity-0.86 (x 5) ∨
sugar-calculate-activity
∨
sugar-connect-activity (x 9) ∨
task-kde-desktop
task-lxde-desktop
tcos-tftp-dhcp
uucpsend
libkwebkit-dbg
ytalk
∨
∨
zoneminder
xmakemol xmakemol-gl
libxine1-doc libxine2-doc
xserver-xorg-input-mtrack xserver-xorg-input-multitouch
wmnd wmnd-snmp
wl
wl-beta
semi
vm (x 2)
gnus
libwine-gecko-dbg-unstable libwine-gecko-unstable
w3c-dtd-xhtml w3c-sgml-lib (x 2)
ucspi-tcp ucspi-tcp-ipv6
tk8.4-doc tk8.5-doc
texmacs-common (x 2) texmacs-extra-fonts
tcl-trf (x 2) tcl-trf-doc
tcl8.4-doc tcl8.5-doc
libtag1-rusxmms libtag1-vanilla
synce-hal (x 2) synce-serial
slapos-client python-zc.buildout
slurm-llnl (x 2) sinfo
#
qterm
torque-client
#
torque-client-x11
gridengine-client
slurm-llnl-torque
shorewall6-lite
uif
filtergen
ferm
#
shorewall-lite
fiaif
shorewall (x 2)
shorewall-init ∨
scid-rating-data scid-spell-data
#
rxvt-unicode (x 2)
rxvt-unicode-256color
rxvt-unicode-lite
ruby-bacon ruby-rspec-core (x 7)
libamrita-ruby1.8 (x 2) ruby-amrita2 (x 4)
rt-tests xenomai-runtime
libreadline5-dbg libreadline6-dbg
lib64readline-gplv2-dev lib64readline6-dev
#
ratbox-services-mysql
ratbox-services-pgsql
ratbox-services-sqlite
raptor-utils raptor2-utils
radiusclient1 (x 2)
libradiusclient-ng-dev
libradius1-dev
radare radare-gtk
libqwt-doc libqwt5-doc
libqwt-dev libqwt5-qt4-dev
python-quixote (x 2) python-quixote1 (x 2)
qca-dev libqca2-dev (x 2)
psi3 yagiuda
planet-venus racket (x 2)
pimd smcroute
php-apc php5-xcache
pennmush pennmush-mysql
orville-write xtell
openwince-jtag urjtag
opendnssec-enforcer-mysql (x 2) opendnssec-enforcer-sqlite3 (x 2)
olpc-kbdshim olpc-kbdshim-hal
libode-dev libode-sp-dev
oce-draw opencascade-draw
liboce-foundation-dev (x 5) libopencascade-foundation-dev (x 6)
#
nginx-extras (x 2)
nginx-full (x 2)
nginx-light (x 2)
nginx ∨
libnetpbm10-dev
libnetpbm9-dev
libpgm-dev
tftp tftp-hpa
telnet telnet-ssl
harden-clients
x2vnc
ftp-upload
ftp ftp-ssl
mtr mtr-tiny modemmanager (x 2) wader-core
libapache2-mod-wsgi libapache2-mod-wsgi-py3
mlterm mlterm-tiny
chasen-cannadic naist-jdic (x 2)ipadic
mcstrans policycoreutils (x 6)
myspell-hu hunspell-hu
#myspell-fr
myspell-fr-gut
hunspell-fr
myspell-da
hunspell-vi
hunspell-sr
hunspell-sh
hunspell-da
lzma xz-lzma
liblua50-socket2 luasocketliblua50-socket-dev
luasocket-dev
#
libxbase2.0-bin
dvb-apps (x 2)
libxdb-dev
libupnp3-dev (x 2) libupnp4-dev
libunique-doc libunique-3.0-doc
libsieve2-dev libmailutils-dev (x 2)
libsendmail-milter-perl libsendmail-pmilter-perl
libpam-ldap libpam-ldapd
libpam-heimdal libpam-krb5
libowfat-dev
libudt-dev
libcdb-dev
libodbc-ruby-doc ruby-odbc (x 10)
libnss-ldap libnss-ldapd
libnet-proxy-perl sslh
libmimedir-dev libmimedir-gnome-dev (x 2)
libev-libevent-dev libevent-dev
libapache2-authenntlm-perl libauthen-smb-perl (x 2)
libantlr3c-3.2-0 libantlr3c-antlrdbg-3.2-0
ldap2zone ldapdnsldap2dns
laptop-mode-tools noflushd
joe joe-jupp
#
ircd-hybrid
#
#
#
ircd-irc2
ircd-ircu
ngircd
inspircd (x 2)
dancer-ircd
charybdis
ircd-ratbox (x 2)
im-config im-switch
#
hunspell-de-ch
myspell-de-ch
hunspell-de-ch-frami
#
hunspell-de-at
myspell-de-at
hunspell-de-at-frami
#
myspell-de-de-oldspell
hunspell-de-de
myspell-de-de
hunspell-de-de-frami
hunspell-de-med ∨
ifrench ifrench-gut hwloc hwloc-nox
hunspell-ru myspell-ru
hunspell-en-us myspell-en-us
hunspell-tools myspell-tools
hello hello-debhelper
heimdal-docs krb5-doc
heimdal-clients (x 3)
otp
krb5-clients
#
kcc
krb5-user (x 4)
openafs-kpasswd
libgnutls26-dbg libgnutls28-dbg
#
gnome-ppp
openresolv
resolvconf
gnokii-smsd (x 3) smstools
gmt (x 2) gmt-manpages
gimp-dcraw gimp-ufraw
libgfs-1.3-2 (x 3) libgfs-mpi-1.3-2 (x 3)
gcc-mingw32
mingw32
mingw32-binutils
binutils-mingw-w64-x86-64
binutils-mingw-w64-i686
binutils-mingw-w64 (x 5)
#
libstdc++6-4.4-doc
libstdc++6-4.5-doc
libstdc++6-4.6-doc
#
libstdc++6-4.4-dbg
libstdc++6-4.5-dbg
libstdc++6-4.6-dbg
#
lib64stdc++6-4.4-dbg
lib64stdc++6-4.5-dbg
lib64stdc++6-4.6-dbg
libwnn-dev libwnn6-dev
freebsd-sendpr gnats-user (x 2)
freebsd-buildutils (x 2) pmake
foomatic-db foomatic-db-compressed-ppds
fookb-plainx fookb-wmaker
libfltk1.1-dev (x 3) libfltk1.3-dev (x 2)
flex flex-old
bison (x 2) bison++
pretzel (x 3)
firebird2.5-classic-common (x 2)
firebird2.5-super (x 2) firebird2.5-server-common (x 3)
firebird2.5-classic
firebird2.5-superclassic
firebird2.1-server-common (x 2)
firebird2.1-classic
firebird2.1-super
fb-music-high fb-music-low
ettercap-graphical ettercap-text-only
erlang-base erlang-base-hipe
elvis elvis-console
elinks-data (x 2) elinks-lite
libelf-dev (x 2) libelfg0-dev (x 2)libdwarf-dev libdw-dev
nscd unscd
ecm gmp-ecm
dvi2ps-fontdata-ptexfake ptex-base (x 6)
python-dnspython (x 5) linkchecker (x 2)
dicod (x 4) dictd
dico le-dico-de-rene-cougnenc
dhcpcd pump (x 2)
debget debian-goodies
#
dbskkd-cdb
skksearch
yaskkserv
libdb5.1-tcl libdb5.3-tcl
libdb5.1-stl-dev libdb5.3-stl-dev libdb5.1-sql-dev (x 2) libdb5.3-sql-dev
libsasl2-modules-gssapi-heimdal (x 2) libsasl2-modules-gssapi-mit (x 2)
libcunit1 (x 2) libcunit1-ncurses (x 2)
crossfire-maps crossfire-maps-small
crack crack-md5
cpufreqd powernowd
courier-maildrop (x 5) maildrop
conky-cli conky-std
libclutter-gtk-1.0-doc (x 2) libclutter-gtk-0.10-doc
libcloog-isl-dev libcloog-ppl-dev
#
chrony
ntp (x 2)
openntpd
python-cherrypy3 (x 4) python-cherrypy (x 3)
check-mk-config-icinga check-mk-config-nagios3
busybox (x 4) busybox-static
bootchart bootchart2
libboost1.46-doc libboost1.48-doc (x 2)
blends-doc cdd-doc
biff mailutils-comsatd
#
bacula-common-mysql (x 3)
bacula-common-pgsql (x 3)
bacula-common-sqlite3 (x 5)
libavahi-ui-dev libavahi-ui-gtk3-dev
#
aumix
aumix-gtk
oss-preserve
mpg123-el ∨
#
asterisk-core-sounds-fr-gsm
asterisk-prompt-fr-armelle
asterisk-prompt-fr-proformatique
#
apsfilter
magicfilter
printfilters-ppd
#
apcupsd (x 2)
nut-server (x 5)
powstatd
apache2-suexec apache2-suexec-custom
amavisd-new (x 3) phamm-ldap-amavis
#
aide
aide-dynamic
aide-xen
2ping (x 29205)
console-setup-freebsd MISSING DEP
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 16 / 45
Interactive graph viewers on
http:
//coinst.irill.org/
Ubuntu main: 7’000 packages, 31’000 dependencies
ubiquity-slideshow-kubuntuubiquity-slideshow-ubuntu
tk8.4-doctk8.5-doctcl8.4-doctcl8.5-doc
openbsd-inetdxinetd
network-manager-kdeplasma-widget-networkmanagement(x2)
libstdc++6-4.4-doclibstdc++6-4.5-doclibstdc++6-4.4-dbglibstdc++6-4.5-dbg
#libsdl1.2debian-all
libsdl1.2debian-alsa
libsdl1.2debian-esd
libsdl1.2debian-oss
libsdl1.2debian-pulseaudio
libreadline6-dev(x6)libreadline5-dev
libjpeg62-dev(x23)libjpeg8-dev
libgd2-noxpm
libgd2-xpm(x10)
libdb4.8-dev(x5)libdb4.7-dev(x2)
libcurl4-gnutls-dev(x4)libcurl4-openssl-dev
foomatic-db-compressed-ppds(x4)foomatic-db
apache2-prefork-dev
apache2-threaded-dev
libecore-dev
libedje-dev(x2)
libgd2-noxpm-dev
libgd2-xpm-dev
librdf0-dev
librpm-dev
ubuntu-desktop
ubuntu-netbook
libreadline5-dbglibreadline6-dbg
libqt4-dbg(x24)qt-x11-free-dbg
libneon27-devlibneon27-gnutls-dev
libjack-jackd2-0(x2)libjack0(x3)
libiodbc2-devunixodbc-dev
libgpod4(x9)libgpod4-nogtk(x2)
libgl1-mesa-glx(x8)libgl1-mesa-swx11(x3)
#
libclutter-1.0-0(x2)
libclutter-eglx-es11-1.0-0(x2)
libclutter-eglx-es20-1.0-0(x2)
libclutter-1.0-dev(x2)
libclutter-eglx-es11-1.0-dev
libclutter-eglx-es20-1.0-dev
libelf-dev(x3)libelfg0-dev
libdb4.7-java(x3)libdb4.8-java(x3)
lib64stdc++6-4.4-dbglib64stdc++6-4.5-dbg
lib64readline5-devlib64readline6-dev
hunspell-toolsmyspell-tools
hunspell-fr(x3)myspell-fr
hunspell-de-de(x3)myspell-de-de-oldspell
hellohello-debhelper
grubgrub-legacy-ec2
#
grub-efi-amd64
grub-efi-ia32(x2)
grub-pc
flexflex-old
exim4-daemon-heavy(x2)
exim4-daemon-light(x2)
exim4-config(x5)postfix(x9)
emacs23emacs23-nox
debconf-englishdebconf-i18n
#
bacula-common-mysql(x3)
bacula-common-pgsql(x3)
bacula-common-sqlite3(x3)
#
apache2-mpm-event
apache2-mpm-prefork(x2)
apache2-mpm-worker
eucalyptus-nc∨
abrowser(x7049)
http://coinst.irill.org
Running time: less than 10 seconds!
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 17 / 45
QA 301: New Co-Installability Issues
Compare two versions of a repository
New issues are more likely to be bugs
Can report precisely what changes caused an issue
Example a b
p q
Many new issues between packages p and q due to a single
new conflict between packages a and b.
Vouillon, Di Cosmo
Broken Sets in Software Repository Evolution
ICSE 2013
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 18 / 45
Finding New Co-Installability Issues
Tool coinst-upgrades
http://coinst.irill.org/upgrades
graphs illustrating each new issue
context: other packages involved, package popularities (popcon)
The new version of unoconv depends on any version of python3-uno
unoconv python3-uno python-uno
The new version of tdsodbc conflicts with any version of libiodbc2
tdsodbc libiodbc2
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 19 / 45
Finding New Co-Installability Issues
Tool coinst-upgrades
http://coinst.irill.org/upgrades
graphs illustrating each new issue
context: other packages involved, package popularities (popcon)
The new version of unoconv depends on any version of python3-uno
unoconv python3-uno python-uno
The new version of tdsodbc conflicts with any version of libiodbc2
tdsodbc libiodbc2
Package libiodbc2 had been unmaintained for years
Should not be a big issue if it gets removed, right?
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 19 / 45
Context is Crucial
tdsodbc libiodbc2
Depend on libiodbc2 (about 380 packages): kcolorchooser,
kdesdk-misc, kdevelop-php-docs, blinken, kdevelop, kmousetool, ktorrent,
kalgebra, konqueror, klipper, kchmviewer, mplayerthumbs, libsmokekutils3,
kjots, ksshaskpass, cantor, network-manager-kde, kbattleship, choqok,
kdesdk-dbg, krusader-dbg, libkdegames-dev, kmidimon, klettres,
quassel-kde4, libakonadi-ruby, konq-plugins, ktorrent-dbg, kiriki,
plasma-widgets-workspace, kvirc-dbg, konversation-dbg, libkiten-dev,
kdm-gdmcompat, plasma-netbook, libokular-ruby1.8, eqonomize,
kdenetwork-dbg, libsmokeplasma3, kspread, lokalize, korganizer, parley,
kfourinline, libsmokekde-dev, kfind, kdepim-groupware, ksnapshot,
libiodbc2-dev, plasma-runners-addons, libsmokekdeui4-3, printer-applet,
ark, kdeutils, kover, rocs, kdesvn-dbg, kdevplatform-dev, libkdepim4, ktron,
cantor-backend-sage, kinfocenter, ...
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 20 / 45
QA 501: package migration
Unstable
Testing
Conflicting goals
package should reach testing rapidly
keep testing as stable as possible
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 21 / 45
The comigrate tool
Supplement/Replace Britney
Generate hints that can be fed to Britney
Interactively investigate migration issues
Run it repeatedly, studying different scenarios
Report of issues preventing package migration
http://coinst.irill.org/report/
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 22 / 45
Tool Core: Computing Package Migrations
Boolean solver
(Co-)installability
analysis
Tentative migration
New constraints
Start with simple constraints
The Boolean solver generates a tentative migration
Check for (co-)installability issues; analyse these issues to generate
new constraints (“package A cannot migrate”, or “package A cannot
migrate without package B”)
Repeat until no more issue is found
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 23 / 45
Performance
Britney
Comigrate
(installability)
Comigrate
(co-installability)
Comigrate
(installability,
with caching)
Comigrate
(co-installability,
with caching)
3 5.5 10 18 30 55 100 180 300 550
Running time (seconds)
Data collected twice a day from 2013-06-24 to 2013-09-09
Missing datapoints: Britney can take more than 24 hours (Perl transition)....
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 24 / 45
Bibliography and tools excerpts
Di Cosmo, Leroy, Treinen, Vouillon et al
Managing the complexity of large free and open source package-based software distributions.
ASE 2006: Automated Software Engineering.
Di Cosmo and J. Vouillon.
On software component co-installability.
In ESEC/FSE 2011.
Abate, Di Cosmo, Treinen, Zacchiroli
Learning from the Future of Component Repositories
CBSE 2012: Component Based Software Engineering.
Vouillon, Dogguy, Di Cosmo.
Easing software component repository evolution.
ICSE 2014.
Abate, Di Cosmo, Gesbert, Le Fessant, Treinen, and Zacchiroli.
Mining component repositories for installability issues.
MSR 2015
Claes, Mens, Di Cosmo, and Vouillon.
A historical analysis of debian package incompatibilities.
MSR 2015
Tools
Cudf library: http://gforge.inria.fr/projects/cudf/
Dose library: http://gforge.inria.fr/projects/dose/
Coinst suite: http://coinst.irill.org
Debian QA: http://qa.debian.org/dose
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 25 / 45
Outline
1 GNU/Linux Distributions: industrialising Free Software
2 Ten years studying and improving Package QA
Find uninstallable packages
Learning from the future of repositories
Find non co-installable packages
Find new non co-installable packages
Filter incoming packages
3 Taking a step back
Software is Fragile
4 Software Heritage
5 Call to action
6 Questions
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 26 / 45
A recurring pattern
In all examples above
identify a real world problem whose solution requires a research effort
work hard to find a solution
implement a tool, validate it on real world cases
publish a research article
foster adoption (the hardest part!)
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 27 / 45
A recurring pattern
In all examples above
identify a real world problem whose solution requires a research effort
work hard to find a solution
implement a tool, validate it on real world cases
publish a research article
foster adoption (the hardest part!)
In a picture
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 27 / 45
A recurring pattern
In all examples above
identify a real world problem whose solution requires a research effort
work hard to find a solution
implement a tool, validate it on real world cases
publish a research article
foster adoption (the hardest part!)
In a picture Under the hood
Question:
What were the
technical prerequisites
that made this work possible?
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 27 / 45
Technical prerequisites
Availability
all the (history of) Debian packages (after 2005)
no technical restrictions
no legal restrictions on content or metadata
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 28 / 45
Technical prerequisites
Availability
all the (history of) Debian packages (after 2005)
no technical restrictions
no legal restrictions on content or metadata
Traceability
Debian packages have
unique identifier
reference central
repository
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 28 / 45
Technical prerequisites
Availability
all the (history of) Debian packages (after 2005)
no technical restrictions
no legal restrictions on content or metadata
Traceability
Debian packages have
unique identifier
reference central
repository
Uniformity
Debian packages: a central catalog with
uniform metadata structure
uniform naming and versioning
schema
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 28 / 45
Technical prerequisites
Availability
all the (history of) Debian packages (after 2005)
no technical restrictions
no legal restrictions on content or metadata
Traceability
Debian packages have
unique identifier
reference central
repository
Uniformity
Debian packages: a central catalog with
uniform metadata structure
uniform naming and versioning
schema
These are all essential features for reproducibility and for preservation...
... we need them for all software!
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 28 / 45
Availability: software is fragile
An example is worth a thousand words...
let’s see a few
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 29 / 45
Inconsiderate or malicious loss of code
The Year 2000 Bug ... uncovered an inconvenient truth
in 1999, an estimated 40% of companies had either lost, or
thrown away the original source code for their systems!
CodeSpaces: source code hosting, 2007-2014
Yes, for seven years all seemed ok.
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 30 / 45
Inconsiderate or malicious loss of code
The Year 2000 Bug ... uncovered an inconvenient truth
in 1999, an estimated 40% of companies had either lost, or
thrown away the original source code for their systems!
CodeSpaces: source code hosting, 2007-2014
Yes, for seven years all seemed ok.
No, they did not recover the data.
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 30 / 45
Business-driven loss of code support: Google
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 31 / 45
Business-driven loss of code support: Gitorious
From: Rolf Bjaanes <rolf@gitorious.org>
To: zack@upsilon.cc
Subject: Gitorious.org is dead, long live Gitorious.o
Message-Id: <30589491.20150416155909.552fdc4d164758
Hi zacchiro,
I’m Rolf Bjaanes, CEO of Gitorious, and you are re-
ceiving this email because you have a user on gito-
rious.org. As you may know, Gitorious was acquired
by GitLab [1] about a month ago (NDLR: 3/3/2015),
and we announced that Gitorious.org would be shut-
ting down at the end of May, 2015.
... Rolf
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 32 / 45
Traceability: disruption of the web of reference
Web links are not permanent (even permalinks)}
there is no general guarantee that a URL... which at one time
points to a given object continues to do so
T. Berners-Lee et al. Uniform Resource Locators. RFC 1738.
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 33 / 45
Traceability: disruption of the web of reference
Web links are not permanent (even permalinks)}
there is no general guarantee that a URL... which at one time
points to a given object continues to do so
T. Berners-Lee et al. Uniform Resource Locators. RFC 1738.
URLs used in articles decay!
Analysis of IEEE Computer (Computer), and the Communications of the ACM
(CACM): 1995-1999
the half-life of a referenced URL is approximately 4 years from its
publication date D. Spinellis. The Decay and Failures of URL
References.
Communications of the ACM, 46(1):71-77, January 2003.
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 33 / 45
Uniformity: nowhere to be seen
Reference repositor(ies)
Bitbucket
GitHub
Gitorious (no, scratch this)
Google Code (no, scratch this)
Maven
Sourceforge
your institution’s forge
your home page
...
And they are all diffent / incompatible
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 34 / 45
Outline
1 GNU/Linux Distributions: industrialising Free Software
2 Ten years studying and improving Package QA
Find uninstallable packages
Learning from the future of repositories
Find non co-installable packages
Find new non co-installable packages
Filter incoming packages
3 Taking a step back
Software is Fragile
4 Software Heritage
5 Call to action
6 Questions
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 35 / 45
The Software Heritage Project
Our mission
Collect, organise, preserve and share all the software that lies at the heart of
our culture and our society.
Provides exactly
availability
traceability
uniformity
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 36 / 45
We are working on the foundations
one infrastructure to build them all
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 37 / 45
Fostering wider education to computing
A global source referencing all software
a SourceBook for technological education
intrinsic persistent identifiers for stable course materials
extensive access to real-world documentation
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 38 / 45
Supporting more accessible and reproducible Science
A global library referencing all software used in all research fields
completes the infrastructure for Open Access in Science
provides intrinsic persistent identifiers needed for scientific
reproducibility
enables large scale, verifiable Software Studies
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 39 / 45
The Knowledge Conservancy Magic Triangle
The Knowledge Conservancy Magic Triangle
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 40 / 45
The Knowledge Conservancy Magic Triangle
The Knowledge Conservancy Magic Triangle
Legenda (links are important!)
articles: ArXiv, HAL, ...
data: Zenodo, ...
software: Software Heritage tackles this
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 40 / 45
Outline
1 GNU/Linux Distributions: industrialising Free Software
2 Ten years studying and improving Package QA
Find uninstallable packages
Learning from the future of repositories
Find non co-installable packages
Find new non co-installable packages
Filter incoming packages
3 Taking a step back
Software is Fragile
4 Software Heritage
5 Call to action
6 Questions
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 41 / 45
Need your help
make it easy to integrate your work
development workflow
publication workflow
contribute importers
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 42 / 45
Need your help
make it easy to integrate your work
development workflow
publication workflow
contribute importers
make it ok to integrate, from the legal point of view
make licences explicit
make licences of dependencies explicit
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 42 / 45
Need your help
make it easy to integrate your work
development workflow
publication workflow
contribute importers
make it ok to integrate, from the legal point of view
make licences explicit
make licences of dependencies explicit
make it useful for research
contribute to the API
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 42 / 45
Need your help
make it easy to integrate your work
development workflow
publication workflow
contribute importers
make it ok to integrate, from the legal point of view
make licences explicit
make licences of dependencies explicit
make it useful for research
contribute to the API
help us make Software Heritage sustainable
support/sponsorship
open process and collaboration
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 42 / 45
Focus on the legal issues
a plurality of concerns
Who owns the rights to your research?
articles, data, software
too often forgotten: metadata
Software Track in Science of Computer Programming, 2015
You own the software, but who owns the metadata?
we need to recover our rigths
it is possible!
compulsory exclusive copyright transfer for free
is illegal in France (art L. 131-4 of CPI)
is debatable in all jurisdictions
see Free Scientific Publication
paying the editors (OpenAire) is not a solution
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 43 / 45
Outline
1 GNU/Linux Distributions: industrialising Free Software
2 Ten years studying and improving Package QA
Find uninstallable packages
Learning from the future of repositories
Find non co-installable packages
Find new non co-installable packages
Filter incoming packages
3 Taking a step back
Software is Fragile
4 Software Heritage
5 Call to action
6 Questions
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 44 / 45
Questions
Questions?
Subscribe to
mailing list: swh-science@inria.fr
https://sympa.inria.fr/sympa/info/swh-science
Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 45 / 45

More Related Content

What's hot

Software Bertillonage: Finding the Provenance of an Entity
Software Bertillonage: Finding the Provenance of an EntitySoftware Bertillonage: Finding the Provenance of an Entity
Software Bertillonage: Finding the Provenance of an Entitymigod
 
Variability, Bugs, and Cognition
Variability, Bugs, and CognitionVariability, Bugs, and Cognition
Variability, Bugs, and CognitionAndrzej Wasowski
 
6 DevSecOps Hacks (femtech 2019)
6 DevSecOps Hacks (femtech 2019)6 DevSecOps Hacks (femtech 2019)
6 DevSecOps Hacks (femtech 2019)Patricia Aas
 
PuppetConf track overview: Puppet 4
PuppetConf track overview: Puppet 4PuppetConf track overview: Puppet 4
PuppetConf track overview: Puppet 4Puppet
 
Software Development Graveyard
Software Development GraveyardSoftware Development Graveyard
Software Development GraveyardErika Barron
 
Software Heritage: Archiving the Free Software Commons for Fun & Profit
Software Heritage: Archiving the Free Software Commons for Fun & ProfitSoftware Heritage: Archiving the Free Software Commons for Fun & Profit
Software Heritage: Archiving the Free Software Commons for Fun & ProfitSpeck&Tech
 
The trials and tribulations of providing engineering infrastructure
 The trials and tribulations of providing engineering infrastructure  The trials and tribulations of providing engineering infrastructure
The trials and tribulations of providing engineering infrastructure TechExeter
 
First python project
First python projectFirst python project
First python projectNeetu Jain
 
Open Source Compliance at Twitter
Open Source Compliance at TwitterOpen Source Compliance at Twitter
Open Source Compliance at TwitterChris Aniszczyk
 
Dev(Sec)Ops - Architecture for Security and Compliance
Dev(Sec)Ops - Architecture for Security and ComplianceDev(Sec)Ops - Architecture for Security and Compliance
Dev(Sec)Ops - Architecture for Security and ComplianceYi-Feng Tzeng
 
Open Source In Enterprises Apache2009 Beijing Jack Cai
Open Source In Enterprises Apache2009 Beijing Jack CaiOpen Source In Enterprises Apache2009 Beijing Jack Cai
Open Source In Enterprises Apache2009 Beijing Jack CaiOpenSourceCamp
 
What is Software Engineering Research Good For?
What is Software Engineering Research Good For?What is Software Engineering Research Good For?
What is Software Engineering Research Good For?Andrzej Wasowski
 
DevOps Days Kyiv 2019 -- continuous Infrafirstructure First //Kris buytaert
DevOps Days Kyiv 2019 -- continuous Infrafirstructure First //Kris buytaertDevOps Days Kyiv 2019 -- continuous Infrafirstructure First //Kris buytaert
DevOps Days Kyiv 2019 -- continuous Infrafirstructure First //Kris buytaertMykola Marzhan
 

What's hot (13)

Software Bertillonage: Finding the Provenance of an Entity
Software Bertillonage: Finding the Provenance of an EntitySoftware Bertillonage: Finding the Provenance of an Entity
Software Bertillonage: Finding the Provenance of an Entity
 
Variability, Bugs, and Cognition
Variability, Bugs, and CognitionVariability, Bugs, and Cognition
Variability, Bugs, and Cognition
 
6 DevSecOps Hacks (femtech 2019)
6 DevSecOps Hacks (femtech 2019)6 DevSecOps Hacks (femtech 2019)
6 DevSecOps Hacks (femtech 2019)
 
PuppetConf track overview: Puppet 4
PuppetConf track overview: Puppet 4PuppetConf track overview: Puppet 4
PuppetConf track overview: Puppet 4
 
Software Development Graveyard
Software Development GraveyardSoftware Development Graveyard
Software Development Graveyard
 
Software Heritage: Archiving the Free Software Commons for Fun & Profit
Software Heritage: Archiving the Free Software Commons for Fun & ProfitSoftware Heritage: Archiving the Free Software Commons for Fun & Profit
Software Heritage: Archiving the Free Software Commons for Fun & Profit
 
The trials and tribulations of providing engineering infrastructure
 The trials and tribulations of providing engineering infrastructure  The trials and tribulations of providing engineering infrastructure
The trials and tribulations of providing engineering infrastructure
 
First python project
First python projectFirst python project
First python project
 
Open Source Compliance at Twitter
Open Source Compliance at TwitterOpen Source Compliance at Twitter
Open Source Compliance at Twitter
 
Dev(Sec)Ops - Architecture for Security and Compliance
Dev(Sec)Ops - Architecture for Security and ComplianceDev(Sec)Ops - Architecture for Security and Compliance
Dev(Sec)Ops - Architecture for Security and Compliance
 
Open Source In Enterprises Apache2009 Beijing Jack Cai
Open Source In Enterprises Apache2009 Beijing Jack CaiOpen Source In Enterprises Apache2009 Beijing Jack Cai
Open Source In Enterprises Apache2009 Beijing Jack Cai
 
What is Software Engineering Research Good For?
What is Software Engineering Research Good For?What is Software Engineering Research Good For?
What is Software Engineering Research Good For?
 
DevOps Days Kyiv 2019 -- continuous Infrafirstructure First //Kris buytaert
DevOps Days Kyiv 2019 -- continuous Infrafirstructure First //Kris buytaertDevOps Days Kyiv 2019 -- continuous Infrafirstructure First //Kris buytaert
DevOps Days Kyiv 2019 -- continuous Infrafirstructure First //Kris buytaert
 

Viewers also liked

Social Media Basics & Application (for Indexers)
Social Media Basics & Application (for Indexers)Social Media Basics & Application (for Indexers)
Social Media Basics & Application (for Indexers)Sara Truscott
 
IBM Big Data References
IBM Big Data ReferencesIBM Big Data References
IBM Big Data ReferencesRob Thomas
 
The Regacy Chapter 5.4b Ink - Emma
The Regacy Chapter 5.4b Ink - EmmaThe Regacy Chapter 5.4b Ink - Emma
The Regacy Chapter 5.4b Ink - Emmaregacylady
 
Know Your Supplier - Rubber & Tyre Machinery World May 2016 Special
Know Your Supplier - Rubber & Tyre Machinery World May 2016 SpecialKnow Your Supplier - Rubber & Tyre Machinery World May 2016 Special
Know Your Supplier - Rubber & Tyre Machinery World May 2016 SpecialRubber & Tyre Machinery World
 
Algebra 2 powerpoint
Algebra 2 powerpointAlgebra 2 powerpoint
Algebra 2 powerpointroohal51
 
Rapport Doing Business 2015
Rapport Doing Business 2015Rapport Doing Business 2015
Rapport Doing Business 2015Franck Dasilva
 
Nc verification and re processing for collaborative machining
Nc verification and re processing for collaborative machiningNc verification and re processing for collaborative machining
Nc verification and re processing for collaborative machiningLiu PeiLing
 
7 Deadly Sins of Tech
7 Deadly Sins of Tech7 Deadly Sins of Tech
7 Deadly Sins of TechRob Dyke
 
Combine may 2013 for web
Combine may 2013 for webCombine may 2013 for web
Combine may 2013 for webPUNJABI SUMAN
 
python chapter 1
python chapter 1python chapter 1
python chapter 1Raghu nath
 
Profit from the cloud TM Parallels Dynamic Infrastructure And OpenStack.
Profit from the cloud TM Parallels Dynamic Infrastructure And OpenStack.Profit from the cloud TM Parallels Dynamic Infrastructure And OpenStack.
Profit from the cloud TM Parallels Dynamic Infrastructure And OpenStack.OpenVZ
 
цахим монгол
цахим монголцахим монгол
цахим монголod_tsetsegmaa
 

Viewers also liked (20)

Purposeful Africa Final
Purposeful Africa FinalPurposeful Africa Final
Purposeful Africa Final
 
Coordenadas089 wifi
Coordenadas089 wifiCoordenadas089 wifi
Coordenadas089 wifi
 
The Anatomy Of The Idea
The Anatomy Of The IdeaThe Anatomy Of The Idea
The Anatomy Of The Idea
 
Social Media Basics & Application (for Indexers)
Social Media Basics & Application (for Indexers)Social Media Basics & Application (for Indexers)
Social Media Basics & Application (for Indexers)
 
IBM Big Data References
IBM Big Data ReferencesIBM Big Data References
IBM Big Data References
 
Social Gaming in Asia
Social Gaming in AsiaSocial Gaming in Asia
Social Gaming in Asia
 
The Regacy Chapter 5.4b Ink - Emma
The Regacy Chapter 5.4b Ink - EmmaThe Regacy Chapter 5.4b Ink - Emma
The Regacy Chapter 5.4b Ink - Emma
 
Know Your Supplier - Rubber & Tyre Machinery World May 2016 Special
Know Your Supplier - Rubber & Tyre Machinery World May 2016 SpecialKnow Your Supplier - Rubber & Tyre Machinery World May 2016 Special
Know Your Supplier - Rubber & Tyre Machinery World May 2016 Special
 
Algebra 2 powerpoint
Algebra 2 powerpointAlgebra 2 powerpoint
Algebra 2 powerpoint
 
Rapport Doing Business 2015
Rapport Doing Business 2015Rapport Doing Business 2015
Rapport Doing Business 2015
 
ASD
ASDASD
ASD
 
Nc verification and re processing for collaborative machining
Nc verification and re processing for collaborative machiningNc verification and re processing for collaborative machining
Nc verification and re processing for collaborative machining
 
7 Deadly Sins of Tech
7 Deadly Sins of Tech7 Deadly Sins of Tech
7 Deadly Sins of Tech
 
Combine may 2013 for web
Combine may 2013 for webCombine may 2013 for web
Combine may 2013 for web
 
Spinal cord trauma
Spinal cord traumaSpinal cord trauma
Spinal cord trauma
 
python chapter 1
python chapter 1python chapter 1
python chapter 1
 
米羅
米羅米羅
米羅
 
Description of goods
Description of goodsDescription of goods
Description of goods
 
Profit from the cloud TM Parallels Dynamic Infrastructure And OpenStack.
Profit from the cloud TM Parallels Dynamic Infrastructure And OpenStack.Profit from the cloud TM Parallels Dynamic Infrastructure And OpenStack.
Profit from the cloud TM Parallels Dynamic Infrastructure And OpenStack.
 
цахим монгол
цахим монголцахим монгол
цахим монгол
 

Similar to Ten years analysing large code bases: a perspective

Mining Component Repositories for Installability Issues
Mining Component Repositories for Installability IssuesMining Component Repositories for Installability Issues
Mining Component Repositories for Installability IssuesRoberto Di Cosmo
 
Leveraging Solver Preferences to Tame your Package Manager
Leveraging Solver Preferences to Tame your Package ManagerLeveraging Solver Preferences to Tame your Package Manager
Leveraging Solver Preferences to Tame your Package ManagerRoberto Di Cosmo
 
Making Steaks from Sacred Cows
Making Steaks from Sacred CowsMaking Steaks from Sacred Cows
Making Steaks from Sacred CowsKevlin Henney
 
SFScon 2020 - Paolo Boldi - Software Ecosystems as Networks Advances on the F...
SFScon 2020 - Paolo Boldi - Software Ecosystems as Networks Advances on the F...SFScon 2020 - Paolo Boldi - Software Ecosystems as Networks Advances on the F...
SFScon 2020 - Paolo Boldi - Software Ecosystems as Networks Advances on the F...South Tyrol Free Software Conference
 
DockerCon SF 2015: Keynote Day 1
DockerCon SF 2015: Keynote Day 1DockerCon SF 2015: Keynote Day 1
DockerCon SF 2015: Keynote Day 1Docker, Inc.
 
SFScon19 - Paolo Boldi - Software Ecosystems as Networks the FASTEN project
SFScon19 - Paolo Boldi - Software Ecosystems as Networks the FASTEN projectSFScon19 - Paolo Boldi - Software Ecosystems as Networks the FASTEN project
SFScon19 - Paolo Boldi - Software Ecosystems as Networks the FASTEN projectSouth Tyrol Free Software Conference
 
Presentation of the FASTEN project, Conference SFScon, Bolzano, Italy
Presentation of the FASTEN project, Conference SFScon, Bolzano, Italy Presentation of the FASTEN project, Conference SFScon, Bolzano, Italy
Presentation of the FASTEN project, Conference SFScon, Bolzano, Italy Fasten Project
 
S.zacchiroli 20121205-fossa
S.zacchiroli 20121205-fossaS.zacchiroli 20121205-fossa
S.zacchiroli 20121205-fossahere_and_there
 
Understanding NuGet implementation for Enterprises
Understanding NuGet implementation for EnterprisesUnderstanding NuGet implementation for Enterprises
Understanding NuGet implementation for EnterprisesJ S Jodha
 
Cinfony - Bring cheminformatics toolkits into tune
Cinfony - Bring cheminformatics toolkits into tuneCinfony - Bring cheminformatics toolkits into tune
Cinfony - Bring cheminformatics toolkits into tunebaoilleach
 
Vulnerability Exploitation in Docker Container Environments
Vulnerability Exploitation in Docker Container EnvironmentsVulnerability Exploitation in Docker Container Environments
Vulnerability Exploitation in Docker Container EnvironmentsFlawCheck
 
Dev Environments: The Next Generation
Dev Environments: The Next GenerationDev Environments: The Next Generation
Dev Environments: The Next GenerationTravis Thieman
 
Effectively using Open Source with conda
Effectively using Open Source with condaEffectively using Open Source with conda
Effectively using Open Source with condaTravis Oliphant
 
codemotion-docker-2014
codemotion-docker-2014codemotion-docker-2014
codemotion-docker-2014Carlo Bonamico
 
20220603_pperego_openSUSE conference.pdf
20220603_pperego_openSUSE conference.pdf20220603_pperego_openSUSE conference.pdf
20220603_pperego_openSUSE conference.pdfPaolo Perego
 
Why everyone is excited about Docker (and you should too...) - Carlo Bonamic...
Why everyone is excited about Docker (and you should too...) -  Carlo Bonamic...Why everyone is excited about Docker (and you should too...) -  Carlo Bonamic...
Why everyone is excited about Docker (and you should too...) - Carlo Bonamic...Codemotion
 
Software Preservation: challenges and opportunities for reproductibility (Sci...
Software Preservation: challenges and opportunities for reproductibility (Sci...Software Preservation: challenges and opportunities for reproductibility (Sci...
Software Preservation: challenges and opportunities for reproductibility (Sci...Roberto Di Cosmo
 

Similar to Ten years analysing large code bases: a perspective (20)

Mining Component Repositories for Installability Issues
Mining Component Repositories for Installability IssuesMining Component Repositories for Installability Issues
Mining Component Repositories for Installability Issues
 
Leveraging Solver Preferences to Tame your Package Manager
Leveraging Solver Preferences to Tame your Package ManagerLeveraging Solver Preferences to Tame your Package Manager
Leveraging Solver Preferences to Tame your Package Manager
 
Composer
ComposerComposer
Composer
 
Making Steaks from Sacred Cows
Making Steaks from Sacred CowsMaking Steaks from Sacred Cows
Making Steaks from Sacred Cows
 
nullcon 2011 - Fuzzing with Complexities
nullcon 2011 - Fuzzing with Complexitiesnullcon 2011 - Fuzzing with Complexities
nullcon 2011 - Fuzzing with Complexities
 
SFScon 2020 - Paolo Boldi - Software Ecosystems as Networks Advances on the F...
SFScon 2020 - Paolo Boldi - Software Ecosystems as Networks Advances on the F...SFScon 2020 - Paolo Boldi - Software Ecosystems as Networks Advances on the F...
SFScon 2020 - Paolo Boldi - Software Ecosystems as Networks Advances on the F...
 
DockerCon SF 2015: Keynote Day 1
DockerCon SF 2015: Keynote Day 1DockerCon SF 2015: Keynote Day 1
DockerCon SF 2015: Keynote Day 1
 
SFScon19 - Paolo Boldi - Software Ecosystems as Networks the FASTEN project
SFScon19 - Paolo Boldi - Software Ecosystems as Networks the FASTEN projectSFScon19 - Paolo Boldi - Software Ecosystems as Networks the FASTEN project
SFScon19 - Paolo Boldi - Software Ecosystems as Networks the FASTEN project
 
Presentation of the FASTEN project, Conference SFScon, Bolzano, Italy
Presentation of the FASTEN project, Conference SFScon, Bolzano, Italy Presentation of the FASTEN project, Conference SFScon, Bolzano, Italy
Presentation of the FASTEN project, Conference SFScon, Bolzano, Italy
 
S.zacchiroli 20121205-fossa
S.zacchiroli 20121205-fossaS.zacchiroli 20121205-fossa
S.zacchiroli 20121205-fossa
 
Understanding NuGet implementation for Enterprises
Understanding NuGet implementation for EnterprisesUnderstanding NuGet implementation for Enterprises
Understanding NuGet implementation for Enterprises
 
Cinfony - Bring cheminformatics toolkits into tune
Cinfony - Bring cheminformatics toolkits into tuneCinfony - Bring cheminformatics toolkits into tune
Cinfony - Bring cheminformatics toolkits into tune
 
Vulnerability Exploitation in Docker Container Environments
Vulnerability Exploitation in Docker Container EnvironmentsVulnerability Exploitation in Docker Container Environments
Vulnerability Exploitation in Docker Container Environments
 
Dev Environments: The Next Generation
Dev Environments: The Next GenerationDev Environments: The Next Generation
Dev Environments: The Next Generation
 
Effectively using Open Source with conda
Effectively using Open Source with condaEffectively using Open Source with conda
Effectively using Open Source with conda
 
Pwnstaller
PwnstallerPwnstaller
Pwnstaller
 
codemotion-docker-2014
codemotion-docker-2014codemotion-docker-2014
codemotion-docker-2014
 
20220603_pperego_openSUSE conference.pdf
20220603_pperego_openSUSE conference.pdf20220603_pperego_openSUSE conference.pdf
20220603_pperego_openSUSE conference.pdf
 
Why everyone is excited about Docker (and you should too...) - Carlo Bonamic...
Why everyone is excited about Docker (and you should too...) -  Carlo Bonamic...Why everyone is excited about Docker (and you should too...) -  Carlo Bonamic...
Why everyone is excited about Docker (and you should too...) - Carlo Bonamic...
 
Software Preservation: challenges and opportunities for reproductibility (Sci...
Software Preservation: challenges and opportunities for reproductibility (Sci...Software Preservation: challenges and opportunities for reproductibility (Sci...
Software Preservation: challenges and opportunities for reproductibility (Sci...
 

Recently uploaded

Organic farming with special reference to vermiculture
Organic farming with special reference to vermicultureOrganic farming with special reference to vermiculture
Organic farming with special reference to vermicultureTakeleZike1
 
Biological classification of plants with detail
Biological classification of plants with detailBiological classification of plants with detail
Biological classification of plants with detailhaiderbaloch3
 
STOPPED FLOW METHOD & APPLICATION MURUGAVENI B.pptx
STOPPED FLOW METHOD & APPLICATION MURUGAVENI B.pptxSTOPPED FLOW METHOD & APPLICATION MURUGAVENI B.pptx
STOPPED FLOW METHOD & APPLICATION MURUGAVENI B.pptxMurugaveni B
 
ECG Graph Monitoring with AD8232 ECG Sensor & Arduino.pptx
ECG Graph Monitoring with AD8232 ECG Sensor & Arduino.pptxECG Graph Monitoring with AD8232 ECG Sensor & Arduino.pptx
ECG Graph Monitoring with AD8232 ECG Sensor & Arduino.pptxmaryFF1
 
Dubai Calls Girl Lisa O525547819 Lexi Call Girls In Dubai
Dubai Calls Girl Lisa O525547819 Lexi Call Girls In DubaiDubai Calls Girl Lisa O525547819 Lexi Call Girls In Dubai
Dubai Calls Girl Lisa O525547819 Lexi Call Girls In Dubaikojalkojal131
 
Pests of castor_Binomics_Identification_Dr.UPR.pdf
Pests of castor_Binomics_Identification_Dr.UPR.pdfPests of castor_Binomics_Identification_Dr.UPR.pdf
Pests of castor_Binomics_Identification_Dr.UPR.pdfPirithiRaju
 
GENERAL PHYSICS 2 REFRACTION OF LIGHT SENIOR HIGH SCHOOL GENPHYS2.pptx
GENERAL PHYSICS 2 REFRACTION OF LIGHT SENIOR HIGH SCHOOL GENPHYS2.pptxGENERAL PHYSICS 2 REFRACTION OF LIGHT SENIOR HIGH SCHOOL GENPHYS2.pptx
GENERAL PHYSICS 2 REFRACTION OF LIGHT SENIOR HIGH SCHOOL GENPHYS2.pptxRitchAndruAgustin
 
Manassas R - Parkside Middle School 🌎🏫
Manassas R - Parkside Middle School 🌎🏫Manassas R - Parkside Middle School 🌎🏫
Manassas R - Parkside Middle School 🌎🏫qfactory1
 
Microphone- characteristics,carbon microphone, dynamic microphone.pptx
Microphone- characteristics,carbon microphone, dynamic microphone.pptxMicrophone- characteristics,carbon microphone, dynamic microphone.pptx
Microphone- characteristics,carbon microphone, dynamic microphone.pptxpriyankatabhane
 
Four Spheres of the Earth Presentation.ppt
Four Spheres of the Earth Presentation.pptFour Spheres of the Earth Presentation.ppt
Four Spheres of the Earth Presentation.pptJoemSTuliba
 
Topic 9- General Principles of International Law.pptx
Topic 9- General Principles of International Law.pptxTopic 9- General Principles of International Law.pptx
Topic 9- General Principles of International Law.pptxJorenAcuavera1
 
GenAI talk for Young at Wageningen University & Research (WUR) March 2024
GenAI talk for Young at Wageningen University & Research (WUR) March 2024GenAI talk for Young at Wageningen University & Research (WUR) March 2024
GenAI talk for Young at Wageningen University & Research (WUR) March 2024Jene van der Heide
 
User Guide: Magellan MX™ Weather Station
User Guide: Magellan MX™ Weather StationUser Guide: Magellan MX™ Weather Station
User Guide: Magellan MX™ Weather StationColumbia Weather Systems
 
CHROMATOGRAPHY PALLAVI RAWAT.pptx
CHROMATOGRAPHY  PALLAVI RAWAT.pptxCHROMATOGRAPHY  PALLAVI RAWAT.pptx
CHROMATOGRAPHY PALLAVI RAWAT.pptxpallavirawat456
 
GLYCOSIDES Classification Of GLYCOSIDES Chemical Tests Glycosides
GLYCOSIDES Classification Of GLYCOSIDES  Chemical Tests GlycosidesGLYCOSIDES Classification Of GLYCOSIDES  Chemical Tests Glycosides
GLYCOSIDES Classification Of GLYCOSIDES Chemical Tests GlycosidesNandakishor Bhaurao Deshmukh
 
OECD bibliometric indicators: Selected highlights, April 2024
OECD bibliometric indicators: Selected highlights, April 2024OECD bibliometric indicators: Selected highlights, April 2024
OECD bibliometric indicators: Selected highlights, April 2024innovationoecd
 
The dark energy paradox leads to a new structure of spacetime.pptx
The dark energy paradox leads to a new structure of spacetime.pptxThe dark energy paradox leads to a new structure of spacetime.pptx
The dark energy paradox leads to a new structure of spacetime.pptxEran Akiva Sinbar
 
User Guide: Pulsar™ Weather Station (Columbia Weather Systems)
User Guide: Pulsar™ Weather Station (Columbia Weather Systems)User Guide: Pulsar™ Weather Station (Columbia Weather Systems)
User Guide: Pulsar™ Weather Station (Columbia Weather Systems)Columbia Weather Systems
 

Recently uploaded (20)

AZOTOBACTER AS BIOFERILIZER.PPTX
AZOTOBACTER AS BIOFERILIZER.PPTXAZOTOBACTER AS BIOFERILIZER.PPTX
AZOTOBACTER AS BIOFERILIZER.PPTX
 
Organic farming with special reference to vermiculture
Organic farming with special reference to vermicultureOrganic farming with special reference to vermiculture
Organic farming with special reference to vermiculture
 
Biological classification of plants with detail
Biological classification of plants with detailBiological classification of plants with detail
Biological classification of plants with detail
 
STOPPED FLOW METHOD & APPLICATION MURUGAVENI B.pptx
STOPPED FLOW METHOD & APPLICATION MURUGAVENI B.pptxSTOPPED FLOW METHOD & APPLICATION MURUGAVENI B.pptx
STOPPED FLOW METHOD & APPLICATION MURUGAVENI B.pptx
 
Let’s Say Someone Did Drop the Bomb. Then What?
Let’s Say Someone Did Drop the Bomb. Then What?Let’s Say Someone Did Drop the Bomb. Then What?
Let’s Say Someone Did Drop the Bomb. Then What?
 
ECG Graph Monitoring with AD8232 ECG Sensor & Arduino.pptx
ECG Graph Monitoring with AD8232 ECG Sensor & Arduino.pptxECG Graph Monitoring with AD8232 ECG Sensor & Arduino.pptx
ECG Graph Monitoring with AD8232 ECG Sensor & Arduino.pptx
 
Dubai Calls Girl Lisa O525547819 Lexi Call Girls In Dubai
Dubai Calls Girl Lisa O525547819 Lexi Call Girls In DubaiDubai Calls Girl Lisa O525547819 Lexi Call Girls In Dubai
Dubai Calls Girl Lisa O525547819 Lexi Call Girls In Dubai
 
Pests of castor_Binomics_Identification_Dr.UPR.pdf
Pests of castor_Binomics_Identification_Dr.UPR.pdfPests of castor_Binomics_Identification_Dr.UPR.pdf
Pests of castor_Binomics_Identification_Dr.UPR.pdf
 
GENERAL PHYSICS 2 REFRACTION OF LIGHT SENIOR HIGH SCHOOL GENPHYS2.pptx
GENERAL PHYSICS 2 REFRACTION OF LIGHT SENIOR HIGH SCHOOL GENPHYS2.pptxGENERAL PHYSICS 2 REFRACTION OF LIGHT SENIOR HIGH SCHOOL GENPHYS2.pptx
GENERAL PHYSICS 2 REFRACTION OF LIGHT SENIOR HIGH SCHOOL GENPHYS2.pptx
 
Manassas R - Parkside Middle School 🌎🏫
Manassas R - Parkside Middle School 🌎🏫Manassas R - Parkside Middle School 🌎🏫
Manassas R - Parkside Middle School 🌎🏫
 
Microphone- characteristics,carbon microphone, dynamic microphone.pptx
Microphone- characteristics,carbon microphone, dynamic microphone.pptxMicrophone- characteristics,carbon microphone, dynamic microphone.pptx
Microphone- characteristics,carbon microphone, dynamic microphone.pptx
 
Four Spheres of the Earth Presentation.ppt
Four Spheres of the Earth Presentation.pptFour Spheres of the Earth Presentation.ppt
Four Spheres of the Earth Presentation.ppt
 
Topic 9- General Principles of International Law.pptx
Topic 9- General Principles of International Law.pptxTopic 9- General Principles of International Law.pptx
Topic 9- General Principles of International Law.pptx
 
GenAI talk for Young at Wageningen University & Research (WUR) March 2024
GenAI talk for Young at Wageningen University & Research (WUR) March 2024GenAI talk for Young at Wageningen University & Research (WUR) March 2024
GenAI talk for Young at Wageningen University & Research (WUR) March 2024
 
User Guide: Magellan MX™ Weather Station
User Guide: Magellan MX™ Weather StationUser Guide: Magellan MX™ Weather Station
User Guide: Magellan MX™ Weather Station
 
CHROMATOGRAPHY PALLAVI RAWAT.pptx
CHROMATOGRAPHY  PALLAVI RAWAT.pptxCHROMATOGRAPHY  PALLAVI RAWAT.pptx
CHROMATOGRAPHY PALLAVI RAWAT.pptx
 
GLYCOSIDES Classification Of GLYCOSIDES Chemical Tests Glycosides
GLYCOSIDES Classification Of GLYCOSIDES  Chemical Tests GlycosidesGLYCOSIDES Classification Of GLYCOSIDES  Chemical Tests Glycosides
GLYCOSIDES Classification Of GLYCOSIDES Chemical Tests Glycosides
 
OECD bibliometric indicators: Selected highlights, April 2024
OECD bibliometric indicators: Selected highlights, April 2024OECD bibliometric indicators: Selected highlights, April 2024
OECD bibliometric indicators: Selected highlights, April 2024
 
The dark energy paradox leads to a new structure of spacetime.pptx
The dark energy paradox leads to a new structure of spacetime.pptxThe dark energy paradox leads to a new structure of spacetime.pptx
The dark energy paradox leads to a new structure of spacetime.pptx
 
User Guide: Pulsar™ Weather Station (Columbia Weather Systems)
User Guide: Pulsar™ Weather Station (Columbia Weather Systems)User Guide: Pulsar™ Weather Station (Columbia Weather Systems)
User Guide: Pulsar™ Weather Station (Columbia Weather Systems)
 

Ten years analysing large code bases: a perspective

  • 1. Ten years analysing large code bases: a perspective Roberto Di Cosmo http://www.dicosmo.org 04/12/2015 EvoLille Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 1 / 45
  • 2. Credits: joint work with... Pietro Abate Jaap Boender Yacine Boufkhad Stefano Zacchiroli Ralf Treinen Jérôme Vouillon Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 2 / 45
  • 3. Outline 1 GNU/Linux Distributions: industrialising Free Software 2 Ten years studying and improving Package QA Find uninstallable packages Learning from the future of repositories Find non co-installable packages Find new non co-installable packages Filter incoming packages 3 Taking a step back Software is Fragile 4 Software Heritage 5 Call to action 6 Questions Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 3 / 45
  • 4. Free Software, industrialised: distributions Idea from FOSS in the 1990s: distributions are intermediate software vendors between FOSS developers and users, offering to share upstream tracking, integration, testing and QA among all of us Project 1 Project 2 Project 3 FOSS Bazaar User installations Server side Client side Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 4 / 45
  • 5. Free Software, industrialised: distributions Idea from FOSS in the 1990s: distributions are intermediate software vendors between FOSS developers and users, offering to share upstream tracking, integration, testing and QA among all of us Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 4 / 45
  • 6. Distributions: a “somehow” successful idea ... Key notions: packages and package managers Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 5 / 45
  • 7. Packages and their metadata Package = some files some scripts metadata Identification Inter-package rel. Dependencies Conflicts Feature declarations Other Package maintainer Textual descriptions ... Example (package metadata) Package: aterm Version: 0.4.2-11 Section: x11 Installed-Size: 280 Maintainer: Göran Weinholt ... Architecture: i386 Depends: libc6 (>= 2.3.2.ds1-4), libice6 | xlibs (> 4.1.0), ... Conflicts: suidmanager (< 0.50) Provides: x-terminal-emulator ... A package is the elemental component of modern distribution systems (not FOSS-specific). A working system is deployed by installing a package set (≈ 2’000+ for modern FOSS distros) . Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 6 / 45
  • 8. Inter-package relationships get complex... To play Backgammon... Package: gnubg Version: 0.14.3+20060923-4 Depends: gnubg-data, ttf-bitstream- vera, libartsc0 (>= 1.5.0-1), . . . , libgl1-mesa-glx | libgl1, . . . Conflicts: . . . ...pull a few strings Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 7 / 45
  • 9. Inter-package relationships get complex... To play Backgammon... Package: gnubg Version: 0.14.3+20060923-4 Depends: gnubg-data, ttf-bitstream- vera, libartsc0 (>= 1.5.0-1), . . . , libgl1-mesa-glx | libgl1, . . . Conflicts: . . . ...pull a few strings Distributions grow superlinearly Using and maintaining such large software collections is becoming hard! manual package review semi-automated tools Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 7 / 45
  • 10. Using and maintaining free software distributions is hard We need advanced tools: 1 end user side – package managers install packages and their dependencies, ... ...according to the user needs and policies 2 distribution editor side – QA infrastructure (our focus today) find “broken” packages (now easy!) find packages which impact large parts of the distribution predict repository update woes identify compatibility issues ... With a big boost from the Mancoosi project1, we have made progress in both areas. Let’s focus on the distribution editor side 1 http://www.mancoosi.org Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 8 / 45
  • 11. Outline 1 GNU/Linux Distributions: industrialising Free Software 2 Ten years studying and improving Package QA Find uninstallable packages Learning from the future of repositories Find non co-installable packages Find new non co-installable packages Filter incoming packages 3 Taking a step back Software is Fragile 4 Software Heritage 5 Call to action 6 Questions Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 9 / 45
  • 12. Ensuring Quality throughout evolution The Quality Assurance team and the release manager need to track tens of thousands of packages, their bugs, their incompatibilities, etc. that change every day. It is important to catch as many installation-related errors as possible before they hit the user and the BTS, and this requires automation. Static analysis of package dependencies: the state of the art find packages that cannot be installed at all, and... spot the ones that surely need to be fixed (know who to blame) provide advance warning for future problems find the incompatibilities between packages show how these incompatibilities evolve automate package migration Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 10 / 45
  • 13. QA 101: find individually broken packages The installability problem In a repository R, decide whether a package p can be installed in isolation Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 11 / 45
  • 14. QA 101: find individually broken packages The installability problem In a repository R, decide whether a package p can be installed in isolation Theorem The installability problem is NP complete (Di Cosmo et al. ASE 2006) Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 11 / 45
  • 15. QA 101: find individually broken packages The installability problem In a repository R, decide whether a package p can be installed in isolation Theorem The installability problem is NP complete (Di Cosmo et al. ASE 2006) Solving tens of thousands of NP-complete problems? Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 11 / 45
  • 16. QA 101: find individually broken packages The installability problem In a repository R, decide whether a package p can be installed in isolation Theorem The installability problem is NP complete (Di Cosmo et al. ASE 2006) Solving tens of thousands of NP-complete problems? In practice: recent SAT solvers handle current instances easily few explicit conflicts (without conflicts, just dual Horn clauses) Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 11 / 45
  • 17. QA 101: find individually broken packages The installability problem In a repository R, decide whether a package p can be installed in isolation Theorem The installability problem is NP complete (Di Cosmo et al. ASE 2006) Solving tens of thousands of NP-complete problems? In practice: recent SAT solvers handle current instances easily few explicit conflicts (without conflicts, just dual Horn clauses) A practical tool rpmcheck/debcheck (Vouillon, 2006) finds all broken packages and provides short explanations fast: analyses ≈ 40 000 (binary) packages in minutes In dose3 library as distcheck, by Pietro Abate et al. Extensively used (Abate, Di Cosmo et al. MSR 2015) Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 11 / 45
  • 18. QA 101, level 2: what can we say about the future? Definition (outdated packages) p is outdated if p is not installable, and it remains uninstallable no matter how the other packages evolve (i.e. p’s maintainer has no excuses) Definition (challengers) p challenges q if upgrading p “forces” to upgrade q What they have in common: properties that hold in all installations of any future evolution of the repository seems unfeasible, but we can efficiently decide some properties of this kind Abate, Di Cosmo, Treinen, Zacchiroli Learning from the Future of Component Repositories CBSE 2012. Best paper award Tools in the dose library now used in qa.debian.org/dose Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 12 / 45
  • 19. QA 201: Package Co-Installability Next step: interaction between packages Example: is there any package which cannot be installed to- gether with iceweasel? with kde-full? Definition: a set of packages are co-installable if they can be installed together. all packages should be installable (individually!) some package incompatibilities are expected Can we summarise all incompatibility issues, and avoid browsing through hundreds of hyperlinked pages? Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 13 / 45
  • 20. Coinst A simplification theory for repositories, based on the extraction of a co-installability kernel, i.e. a repository much smaller than the original but equivalent wrt co-installability. Highlights: reflexive/transitive dependency closure equivalent classes and quotients machine-checked proofs (in Coq!) In a word: tough maths at work! A tool: coinst (packaged in Debian) Vouillon, Di Cosmo On Software Components Co-Installability ESEC/FSE 2011: Foundations of Software Engineering. Best Artifact Award. Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 14 / 45
  • 21. Co-Installability Graphs coinst -root iceweasel -o graph.dot Packages_i386 iceweasel xul-ext-sage xul-ext-gnome-keyring libasound2 xul-ext-greasemonkey liboss4-salsa-asound2 coinst -root kde-full -o graph.dot Packages_i386 libphonon4 libqt4-phonon kde-window-manager kwin-style-dekorator libgps20 fso-gpsd oxygen-icon-theme fdpowermon-icons libasound2 liboss4-salsa-asound2 kde-full Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 15 / 45
  • 22. libzookeeper-mt-dev libzookeeper-st-dev zephyr-server zephyr-server-krb5 libzephyr4-krb5 libzephyr4 # zabbix-proxy-mysql zabbix-proxy-pgsql zabbix-proxy-sqlite3 zabbix-server-mysql zabbix-server-pgsql xmpuzzles xpuzzles libasound2 (x 2355) # libxine-dev libxine2-dev libxerces-c-dev (x 3) libxerces-c2-dev (x 2) xabacus xmabacus wims-extra-all wims-extra-es libgd2-xpm (x 103) w3m-el-snapshot w3m-el libtomcat6-java (x 10) libtomcat7-java (x 7) # systemd-sysv systemd (x 3) # sysvinit upstart sysv-rc (x 4) file-rc # python-sugar-0.84 (x 2) python-sugar-0.86 (x 2) python-sugar-0.88 (x 2) python-sugar-0.90 (x 2) python-sugar-0.92 # sugar-artwork-0.84 sugar-artwork-0.86 sugar-artwork-0.88 sugar-artwork-0.90 sugar-artwork-0.92 sudo sudo-ldap stardict-gnome stardict-gtk #snort ∨ busybox-syslogd dsyslog (x 5) inetutils-syslogd rsyslog (x 6) socklog-run klogd syslog-ng-core (x 5) snort-mysql snort-pgsql #snd-gtk-jack snd-gtk-pulse snd-nox (x 2) libsnack2 (x 2) libsnack2-alsa rxvt-ml rxvt-beta rxvt libreadline6-dev (x 18) libreadline-gplv2-dev (x 2) #radiusd-livingston # radsecproxy yardradius quassel-data quassel-data-kde4 libqt4-dbg (x 3) qt-x11-free-dbg gdb (x 15) gdb-minimal python-xattr (x 8) python-pyxattr (x 2) python-sqlite (x 13) python-pysqlite1.1 (x 2) python-pyface (x 5) python-traitsbackendwx python-traitsbackendqt python-envisage python-envisageplugins python-pyorbit-omg python-omniorb-omg # libpt-dev libjpeg8-dev (x 39) unixodbc-dev (x 12) libjpeg62-dev libiodbc2-dev libpt2.4.5-dev (x 2) libpt-1.10.10-dev (x 2) libportaudio-dev portaudio19-dev (x 4) php5-mysql (x 22) php5-mysqlnd libapache2-mod-php5 (x 3) libapache2-mod-php5filter ∨ apache2-mpm-itk apache2-mpm-prefork (x 4) phonon-backend-null phonon-backend-vlc (x 2) phonon-backend-gstreamer (x 3) libphonon4 (x 24) libqt4-phonon libpcp3-dev (x 2) libpgpool-dev libpcp3 (x 18) pgpool2 python-vtk (x 5) paraview-python libhdf5-openmpi-1.8.4 (x 28) # libopenh323-1.18.0 (x 2) libopenh323-1.18.0-develop libopenmpi-dev (x 20) libopal-dev obex-data-server (x 3) obexd-server libneon27-dev libneon27-gnutls-dev libkrb5-dev (x 30) libgnutls-dev (x 44) heimdal-dev libelektra-dev (x 3) libgnutls28-dev mplayer (x 2) mplayer2 (x 2) moon-buggy moon-buggy-esd minbif (x 2) minbif-webcam mew-bin mew-beta-bin libgl1-mesa-glx (x 17) libgl1-mesa-swx11 (x 4) # libmeep-dev libmeep-mpi-dev libmeep-openmpi-dev maven2 maven maatkit percona-toolkit #lsb nullmailer # # # xmail # # lpr lprng # #live-config-runit # live-config-systemd live-config-upstart live-config-sysvinit # libnl-dev libnl2-dev (x 6) libnl-3-dev (x 5) libiodbc2 (x 98) odbc-postgresql (x 2) libmyodbc libmdbodbc1 (x 2) tdsodbc libhdf4-alt-dev libhdf4-dev (x 2) libgpod4 (x 42) libgpod4-nogtk libgdchart-gd2-noxpm libgdchart-gd2-xpm libgd2-noxpm libgd-gd2-perl (x 28) libgd-gd2-noxpm-perl libswscale2 libswscale-extra-2 libavutil-extra-51 libpostproc52 libpostproc-extra-52 libavutil51 libavformat53 libavformat-extra-53 libavcodec-extra-53 libavfilter2 libavfilter-extra-2 libavdevice53 libavdevice-extra-53 libavcodec53 libalog0.3-full libalog0.3-base (x 3) gnat-4.4 (x 41) gnat-4.6 (x 8) # lam4-dev mpi-doc # mpich2-doc openmpi-doc lam-mpidoc python-kombu (x 4) python-cjson (x 2) kdiff3 kdiff3-qt oxygen-icon-theme fdpowermon-icons kdesvn-kio-plugins kdesdk-kio-plugins tomcat6 (x 2) jenkins libjack0 (x 2) libjack-jackd2-0 (x 2) # racoon (x 3) # # openswan (x 5) strongswan-ikev2 (x 2) strongswan-ikev1 inn (x 2) inn2-inews inn2-dev # # inetutils-telnetd # krb5-telnetd krb5-rsh-server # telnetd # telnetd-ssl iputils-ping (x 22) inetutils-ping # inetutils-inetd openbsd-inetd rlinetd xinetd ike (x 2) # ifupdown (x 3) netscript-2.4 netscript-2.4-upstart icheck qtmobility-dev iceape (x 4) xul-ext-requestpolicy mgetty-fax hylafax-client (x 4) heimdal-servers (x 2) # # # inetutils-ftpd krb5-ftpd ftpd ftpd-ssl muddleftpd proftpd-basic (x 19) pure-ftpd pure-ftpd-ldap pure-ftpd-mysql pure-ftpd-postgresql twoftpd-run runit (x 3) daemontools-run vsftpd wu-ftpd wzdftpd (x 7) libhdf5-lam-1.8.4 libhdf5-mpich-1.8.4 libhdf5-serial-1.8.4 sendmail-bin (x 3) harden-servers (x 2) pyftpd # # # # # rpcbind (x 11) rsh-server rsh-redone-server # guile-1.6-dev guile-1.8-dev (x 4) guile-2.0-dev gtalk (x 2) inetutils-talkd talkd gss-man # grub-coreboot (x 2) grub2-common grub-efi-amd64 grub-efi-ia32 (x 2) grub-ieee1275 grub-pc (x 4) grub-legacy # libgrib-api-0d-1 (x 2) libgrib-api-1.9.9 (x 5) libgrib-api-data perlmagick graphicsmagick-libmagick-dev-compat libmagickcore-dev (x 6) graphicsmagick-imagemagick-compat octave-image imagemagick (x 2) gpivtools-mpi gpivtools gpiv gpiv-mpi gpe-login xdm wdm slim kdm (x 2) gnuspool (x 3) system-config-printer-udev gnome-control-center (x 3) gpe-conf (x 3) gnome-control-center-data capplets-data git-daemon-run git-daemon-sysvinit gdm3 (x 2) # fusionforge-full ∨ exim4-daemon-heavy (x 3) courier-mta (x 4) postfix (x 14) fusionforge-minimal fusionforge-standard (x 2) fuse (x 57) loop-aes-utils fso-gsm0710muxd gsm0710muxd libgps20 (x 14) fso-gpsd fso-frameworkd (x 3) libphone-utils0 (x 4) # fso-config-general fso-config-gta01 fso-config-gta02 freeradius-common (x 8) fontforge (x 2) fontforge-nox fltk1.1-games fltk1.3-games filelight-l10n kde-l10n-zhtw kde-l10n-zhcn kde-l10n-wa kde-l10n-uk kde-l10n-tr kde-l10n-th kde-l10n-sv kde-l10n-sr kde-l10n-sl kde-l10n-sk kde-l10n-ru kde-l10n-ro kde-l10n-ptbr kde-l10n-pt kde-l10n-pl kde-l10n-pa kde-l10n-nn kde-l10n-nl kde-l10n-nds kde-l10n-nb kde-l10n-mai kde-l10n-lv kde-l10n-lt kde-l10n-ko kde-l10n-kn (x 2) kde-l10n-km kde-l10n-kk kde-l10n-ja kde-l10n-it kde-l10n-is kde-l10n-id kde-l10n-ia kde-l10n-hu kde-l10n-hr kde-l10n-hi kde-l10n-he kde-l10n-gu kde-l10n-gl kde-l10n-ga kde-l10n-fr kde-l10n-fi kde-l10n-eu kde-l10n-et kde-l10n-es kde-l10n-engb kde-l10n-el kde-l10n-de kde-l10n-da kde-l10n-cs kde-l10n-cavalencia kde-l10n-ca kde-l10n-bg kde-l10n-ar festvox-kdlpc16k festvox-kdlpc8k festvox-kallpc16k festvox-kallpc8k cman (x 3) fence-agents gamin (x 11) libfam0 (x 3) fam # exim4-config (x 4) # exim4-daemon-light (x 2) rmail # evince (x 3) evince-gtk epiphany-browser (x 5) swfdec-mozilla # emacs23 (x 2) emacs23-lucid emacs23-nox # # libdap-dev libdnet-dev (x 2) libcurl4-gnutls-dev (x 24) # dma esmtp-run masqmail msmtp-mta ssmtp #discount libtext-markdown-perl (x 3) markdown isc-dhcp-server (x 4) dhcp-helper isc-dhcp-relay (x 2) libdb5.1-java (x 5) libdb5.3-java (x 2) # libdb5.1-dev (x 5) libdb4.8-dev libdb5.3-dev (x 2) dconf-tools dconf libcyrus-imap-perl24 (x 4) kolab-libcyrus-imap-perl (x 3) #cyrus-nntpd-2.4 (x 3) cyrus-common (x 7) kolab-cyrus-common inn2 inn2-lfs leafnode sn cyrus-imapd-2.4 (x 3) # uw-imapd # cyrus-clients-2.4 (x 2) kolab-cyrus-clients libcurl4-nss-dev (x 2) libcurl4-openssl-dev cups-client (x 15) cups-bsd (x 2) controlaula ltsp-controlaula gnome-font-viewer console-tools (x 4) kbd console-setup (x 2) console-setup-mini libcoin60-doc inventor-dev libcoin60-dev resource-agents (x 5) cluster-agents citadel-server (x 2) courier-pop (x 2) dovecot-pop3d kolab-cyrus-pop3d mailutils-pop3d popa3d solid-pop3d ipopd courier-imap (x 2) dovecot-imapd (x 2) kolab-cyrus-imapd mailutils-imap4d cyrus-pop3d-2.4 (x 3) citadel-mta (x 2) ucspi-unix check-mk-livestatus cfingerd efingerd xfingerd pawserv (x 2) udhcpd sysklogd fingerd libboost1.46-dev (x 18) libboost1.48-dev (x 63) libboost-mpi-python1.46.1 libboost-mpi-python1.48.0 bitlbee (x 2) bitlbee-libpurple fp-compiler-2.4.4 (x 14) binutils-gold # bidentd ident2 nullidentd oidentd pidentd cron (x 5) bcron-run bandwidthd bandwidthd-pgsql openbabel (x 2) babel-1.4.0 # atftpd tftpd tftpd-hpa python-pyatspi python-pyatspi2 (x 5) asterisk-core-sounds-es-gsm asterisk-prompt-es-co # asterisk-voicemail asterisk-voicemail-imapstorage asterisk-voicemail-odbcstorage iputils-arping (x 3) arping ardour ardour-i686 apache2-prefork-dev apache2-threaded-dev #apache2-mpm-event # apache2-mpm-worker torrus-apache2 libasound2-dev (x 2) liboss4-salsa-dev liboss-salsa-asound2 liboss4-salsa-asound2 xul-ext-adblock-plus (x 2) libabiword-2.9-dev (x 4) libace-foxreactor-dev (x 3) acetoneiso akonadi-kde-resource-googledata (x 358) plasma-widget-amule (x 56) libapq-postgresql-dbg (x 2) auth2db (x 5) auth2db-frontend (x 5) banshee-extension-lirc (x 6) bluedevil libboost-all-dev (x 4) libboost-mpi-dev (x 2) libboost-mpi-python1.46-dev (x 2) libboost-mpi1.46-dev cdo (x 3) libcegui-mk2-dev libcheese-dev (x 4) chemical-structures cl-sql-odbc (x 2) code-saturne (x 13) connectomeviewer (x 2) courier-faxmail libcups2-dev (x 11) libcupsdriver1-dev (x 9) cyrus-admin-2.2 (x 5) cyrus-clients-2.2 cyrus-replication (x 2) ∨ libdb5.1-java-gcj (x 2) libdb5.3-java-gcj libdevil-dev (x 39) digikam-dbg (x 20) docbookwiki doodle-dbg (x 2) libdose2-ocaml-dev (x 2) e17-dev libecore-dev (x 3) libedje-dev libeet-dev (x 3) exim4 (x 3) ∨ fai-quickstart ∨ fileschanged ∨ libfluidsynth-dev (x 2) fpc (x 2) freeradius-iodbc freevo (x 4) fusionforge-plugin-blocks (x 25) gforge-lists-mailman python-gamera-dev (x 2) ∨ ∨ ∨ libgd-gd2-noxpm-ocaml-dev (x 2) libgdal1-dev (x 3) libgdb-dev libgeda-dev geogebra-kde (x 2) glance (x 20) gnome-osd gnome-session (x 4) gnome-utils gosa (x 44) goto-fai-backend ∨ gpe gradle (x 2) gross ∨ grub-choose-default ∨ grub-imageboot ∨ libgtkhtml3.14-dev (x 9) libguichan-dev hapm (x 3) libhdf5-lam-dev libhdf5-mpich-dev libhdf5-serial-dev libigstk4-dev (x 3) illuminator-demo imagemagick-dbg jackd1 (x 2) jackd2 (x 3) jenkins-tomcat libk3b-dev (x 7) libkaya-gd-dev libkaya-sdl-dev kdeartwork (x 19) kdepim-dbg (x 3) kdeplasma-addons-dbg kdesvn (x 2) keystone (x 2) kolabd libalog-full-dbg (x 2) libapache2-mod-log-sql (x 5) ffmpeg-dbg (x 2) libgd2-xpm-dev libgdchart-gd2-noxpm-dev libgdchart-gd2-xpm-dev libgpod-dev libgpod-nogtk-dev libgnomeada2.14.2-dbg (x 2) libmojomojo-perl libphone-ui-20100517 (x 2) libphone-ui-dev libplayer-dev libtuxcap-dev ltsp-client ltsp-server-standalone libluabind-dev libmagics++-dev (x 4) libmapnik-dev (x 2) maven-debian-helper mdbtools-dbg gnome (x 2) gnome-core (x 2) gnome-dbg mew mew-beta monodevelop-debugger-gdb mscore (x 2) mysqmail-courier-logger ∨ mysqmail-dovecot-logger mysqmail-pure-ftpd-logger ∨ nagiosgrapher network-manager-strongswan nova-compute-kvm nova-network octave-pkg-dev (x 2) oggvideotools (x 2) open-font-design-toolkit libsaml2-dev (x 3) libopenwalnut1-dev libapache2-mod-passenger (x 2) ∨ libpcp-logsummary-perl (x 2) pfqueue (x 2) ∨ robot-player-dev python-fs python-traitsgui ∨ qt-sdk quassel (x 2) quassel-client-kde4 (x 2) r-base-core-dbg (x 2) redhat-cluster-suite (x 2) request-tracker3.8 (x 6) sa-learn-cyrus ∨ sdpam sepia snd-gtk ∨ libsoqt4-dev startupmanager strongswan (x 2) strongswan-starter ∨ python-jarabe-0.84 (x 6) sucrose-0.84 sugar-emulator-0.84 (x 2) python-jarabe-0.86 (x 4) sucrose-0.86 sugar-emulator-0.86 (x 2) python-jarabe-0.88 (x 4) sucrose-0.88 sugar-emulator-0.88 (x 2) python-jarabe-0.90 (x 4) sucrose-0.90 sugar-emulator-0.90 (x 2) sugar-browse-activity-0.86 (x 5) ∨ sugar-calculate-activity ∨ sugar-connect-activity (x 9) ∨ task-kde-desktop task-lxde-desktop tcos-tftp-dhcp uucpsend libkwebkit-dbg ytalk ∨ ∨ zoneminder xmakemol xmakemol-gl libxine1-doc libxine2-doc xserver-xorg-input-mtrack xserver-xorg-input-multitouch wmnd wmnd-snmp wl wl-beta semi vm (x 2) gnus libwine-gecko-dbg-unstable libwine-gecko-unstable w3c-dtd-xhtml w3c-sgml-lib (x 2) ucspi-tcp ucspi-tcp-ipv6 tk8.4-doc tk8.5-doc texmacs-common (x 2) texmacs-extra-fonts tcl-trf (x 2) tcl-trf-doc tcl8.4-doc tcl8.5-doc libtag1-rusxmms libtag1-vanilla synce-hal (x 2) synce-serial slapos-client python-zc.buildout slurm-llnl (x 2) sinfo # qterm torque-client # torque-client-x11 gridengine-client slurm-llnl-torque shorewall6-lite uif filtergen ferm # shorewall-lite fiaif shorewall (x 2) shorewall-init ∨ scid-rating-data scid-spell-data # rxvt-unicode (x 2) rxvt-unicode-256color rxvt-unicode-lite ruby-bacon ruby-rspec-core (x 7) libamrita-ruby1.8 (x 2) ruby-amrita2 (x 4) rt-tests xenomai-runtime libreadline5-dbg libreadline6-dbg lib64readline-gplv2-dev lib64readline6-dev # ratbox-services-mysql ratbox-services-pgsql ratbox-services-sqlite raptor-utils raptor2-utils radiusclient1 (x 2) libradiusclient-ng-dev libradius1-dev radare radare-gtk libqwt-doc libqwt5-doc libqwt-dev libqwt5-qt4-dev python-quixote (x 2) python-quixote1 (x 2) qca-dev libqca2-dev (x 2) psi3 yagiuda planet-venus racket (x 2) pimd smcroute php-apc php5-xcache pennmush pennmush-mysql orville-write xtell openwince-jtag urjtag opendnssec-enforcer-mysql (x 2) opendnssec-enforcer-sqlite3 (x 2) olpc-kbdshim olpc-kbdshim-hal libode-dev libode-sp-dev oce-draw opencascade-draw liboce-foundation-dev (x 5) libopencascade-foundation-dev (x 6) # nginx-extras (x 2) nginx-full (x 2) nginx-light (x 2) nginx ∨ libnetpbm10-dev libnetpbm9-dev libpgm-dev tftp tftp-hpa telnet telnet-ssl harden-clients x2vnc ftp-upload ftp ftp-ssl mtr mtr-tiny modemmanager (x 2) wader-core libapache2-mod-wsgi libapache2-mod-wsgi-py3 mlterm mlterm-tiny chasen-cannadic naist-jdic (x 2)ipadic mcstrans policycoreutils (x 6) myspell-hu hunspell-hu #myspell-fr myspell-fr-gut hunspell-fr myspell-da hunspell-vi hunspell-sr hunspell-sh hunspell-da lzma xz-lzma liblua50-socket2 luasocketliblua50-socket-dev luasocket-dev # libxbase2.0-bin dvb-apps (x 2) libxdb-dev libupnp3-dev (x 2) libupnp4-dev libunique-doc libunique-3.0-doc libsieve2-dev libmailutils-dev (x 2) libsendmail-milter-perl libsendmail-pmilter-perl libpam-ldap libpam-ldapd libpam-heimdal libpam-krb5 libowfat-dev libudt-dev libcdb-dev libodbc-ruby-doc ruby-odbc (x 10) libnss-ldap libnss-ldapd libnet-proxy-perl sslh libmimedir-dev libmimedir-gnome-dev (x 2) libev-libevent-dev libevent-dev libapache2-authenntlm-perl libauthen-smb-perl (x 2) libantlr3c-3.2-0 libantlr3c-antlrdbg-3.2-0 ldap2zone ldapdnsldap2dns laptop-mode-tools noflushd joe joe-jupp # ircd-hybrid # # # ircd-irc2 ircd-ircu ngircd inspircd (x 2) dancer-ircd charybdis ircd-ratbox (x 2) im-config im-switch # hunspell-de-ch myspell-de-ch hunspell-de-ch-frami # hunspell-de-at myspell-de-at hunspell-de-at-frami # myspell-de-de-oldspell hunspell-de-de myspell-de-de hunspell-de-de-frami hunspell-de-med ∨ ifrench ifrench-gut hwloc hwloc-nox hunspell-ru myspell-ru hunspell-en-us myspell-en-us hunspell-tools myspell-tools hello hello-debhelper heimdal-docs krb5-doc heimdal-clients (x 3) otp krb5-clients # kcc krb5-user (x 4) openafs-kpasswd libgnutls26-dbg libgnutls28-dbg # gnome-ppp openresolv resolvconf gnokii-smsd (x 3) smstools gmt (x 2) gmt-manpages gimp-dcraw gimp-ufraw libgfs-1.3-2 (x 3) libgfs-mpi-1.3-2 (x 3) gcc-mingw32 mingw32 mingw32-binutils binutils-mingw-w64-x86-64 binutils-mingw-w64-i686 binutils-mingw-w64 (x 5) # libstdc++6-4.4-doc libstdc++6-4.5-doc libstdc++6-4.6-doc # libstdc++6-4.4-dbg libstdc++6-4.5-dbg libstdc++6-4.6-dbg # lib64stdc++6-4.4-dbg lib64stdc++6-4.5-dbg lib64stdc++6-4.6-dbg libwnn-dev libwnn6-dev freebsd-sendpr gnats-user (x 2) freebsd-buildutils (x 2) pmake foomatic-db foomatic-db-compressed-ppds fookb-plainx fookb-wmaker libfltk1.1-dev (x 3) libfltk1.3-dev (x 2) flex flex-old bison (x 2) bison++ pretzel (x 3) firebird2.5-classic-common (x 2) firebird2.5-super (x 2) firebird2.5-server-common (x 3) firebird2.5-classic firebird2.5-superclassic firebird2.1-server-common (x 2) firebird2.1-classic firebird2.1-super fb-music-high fb-music-low ettercap-graphical ettercap-text-only erlang-base erlang-base-hipe elvis elvis-console elinks-data (x 2) elinks-lite libelf-dev (x 2) libelfg0-dev (x 2)libdwarf-dev libdw-dev nscd unscd ecm gmp-ecm dvi2ps-fontdata-ptexfake ptex-base (x 6) python-dnspython (x 5) linkchecker (x 2) dicod (x 4) dictd dico le-dico-de-rene-cougnenc dhcpcd pump (x 2) debget debian-goodies # dbskkd-cdb skksearch yaskkserv libdb5.1-tcl libdb5.3-tcl libdb5.1-stl-dev libdb5.3-stl-dev libdb5.1-sql-dev (x 2) libdb5.3-sql-dev libsasl2-modules-gssapi-heimdal (x 2) libsasl2-modules-gssapi-mit (x 2) libcunit1 (x 2) libcunit1-ncurses (x 2) crossfire-maps crossfire-maps-small crack crack-md5 cpufreqd powernowd courier-maildrop (x 5) maildrop conky-cli conky-std libclutter-gtk-1.0-doc (x 2) libclutter-gtk-0.10-doc libcloog-isl-dev libcloog-ppl-dev # chrony ntp (x 2) openntpd python-cherrypy3 (x 4) python-cherrypy (x 3) check-mk-config-icinga check-mk-config-nagios3 busybox (x 4) busybox-static bootchart bootchart2 libboost1.46-doc libboost1.48-doc (x 2) blends-doc cdd-doc biff mailutils-comsatd # bacula-common-mysql (x 3) bacula-common-pgsql (x 3) bacula-common-sqlite3 (x 5) libavahi-ui-dev libavahi-ui-gtk3-dev # aumix aumix-gtk oss-preserve mpg123-el ∨ # asterisk-core-sounds-fr-gsm asterisk-prompt-fr-armelle asterisk-prompt-fr-proformatique # apsfilter magicfilter printfilters-ppd # apcupsd (x 2) nut-server (x 5) powstatd apache2-suexec apache2-suexec-custom amavisd-new (x 3) phamm-ldap-amavis # aide aide-dynamic aide-xen 2ping (x 29205) console-setup-freebsd MISSING DEP Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 16 / 45
  • 23. libzookeeper-mt-dev libzookeeper-st-dev zephyr-server zephyr-server-krb5 libzephyr4-krb5 libzephyr4 # zabbix-proxy-mysql zabbix-proxy-pgsql zabbix-proxy-sqlite3 zabbix-server-mysql zabbix-server-pgsql xmpuzzles xpuzzles libasound2 (x 2355) # libxine-dev libxine2-dev libxerces-c-dev (x 3) libxerces-c2-dev (x 2) xabacus xmabacus wims-extra-all wims-extra-es libgd2-xpm (x 103) w3m-el-snapshot w3m-el libtomcat6-java (x 10) libtomcat7-java (x 7) # systemd-sysv systemd (x 3) # sysvinit upstart sysv-rc (x 4) file-rc # python-sugar-0.84 (x 2) python-sugar-0.86 (x 2) python-sugar-0.88 (x 2) python-sugar-0.90 (x 2) python-sugar-0.92 # sugar-artwork-0.84 sugar-artwork-0.86 sugar-artwork-0.88 sugar-artwork-0.90 sugar-artwork-0.92 sudo sudo-ldap stardict-gnome stardict-gtk #snort ∨ busybox-syslogd dsyslog (x 5) inetutils-syslogd rsyslog (x 6) socklog-run klogd syslog-ng-core (x 5) snort-mysql snort-pgsql #snd-gtk-jack snd-gtk-pulse snd-nox (x 2) libsnack2 (x 2) libsnack2-alsa rxvt-ml rxvt-beta rxvt libreadline6-dev (x 18) libreadline-gplv2-dev (x 2) #radiusd-livingston # radsecproxy yardradius quassel-data quassel-data-kde4 libqt4-dbg (x 3) qt-x11-free-dbg gdb (x 15) gdb-minimal python-xattr (x 8) python-pyxattr (x 2) python-sqlite (x 13) python-pysqlite1.1 (x 2) python-pyface (x 5) python-traitsbackendwx python-traitsbackendqt python-envisage python-envisageplugins python-pyorbit-omg python-omniorb-omg # libpt-dev libjpeg8-dev (x 39) unixodbc-dev (x 12) libjpeg62-dev libiodbc2-dev libpt2.4.5-dev (x 2) libpt-1.10.10-dev (x 2) libportaudio-dev portaudio19-dev (x 4) php5-mysql (x 22) php5-mysqlnd libapache2-mod-php5 (x 3) libapache2-mod-php5filter ∨ apache2-mpm-itk apache2-mpm-prefork (x 4) phonon-backend-null phonon-backend-vlc (x 2) phonon-backend-gstreamer (x 3) libphonon4 (x 24) libqt4-phonon libpcp3-dev (x 2) libpgpool-dev libpcp3 (x 18) pgpool2 python-vtk (x 5) paraview-python libhdf5-openmpi-1.8.4 (x 28) # libopenh323-1.18.0 (x 2) libopenh323-1.18.0-develop libopenmpi-dev (x 20) libopal-dev obex-data-server (x 3) obexd-server libneon27-dev libneon27-gnutls-dev libkrb5-dev (x 30) libgnutls-dev (x 44) heimdal-dev libelektra-dev (x 3) libgnutls28-dev mplayer (x 2) mplayer2 (x 2) moon-buggy moon-buggy-esd minbif (x 2) minbif-webcam mew-bin mew-beta-bin libgl1-mesa-glx (x 17) libgl1-mesa-swx11 (x 4) # libmeep-dev libmeep-mpi-dev libmeep-openmpi-dev maven2 maven maatkit percona-toolkit #lsb nullmailer # # # xmail # # lpr lprng # #live-config-runit # live-config-systemd live-config-upstart live-config-sysvinit # libnl-dev libnl2-dev (x 6) libnl-3-dev (x 5) libiodbc2 (x 98) odbc-postgresql (x 2) libmyodbc libmdbodbc1 (x 2) tdsodbc libhdf4-alt-dev libhdf4-dev (x 2) libgpod4 (x 42) libgpod4-nogtk libgdchart-gd2-noxpm libgdchart-gd2-xpm libgd2-noxpm libgd-gd2-perl (x 28) libgd-gd2-noxpm-perl libswscale2 libswscale-extra-2 libavutil-extra-51 libpostproc52 libpostproc-extra-52 libavutil51 libavformat53 libavformat-extra-53 libavcodec-extra-53 libavfilter2 libavfilter-extra-2 libavdevice53 libavdevice-extra-53 libavcodec53 libalog0.3-full libalog0.3-base (x 3) gnat-4.4 (x 41) gnat-4.6 (x 8) # lam4-dev mpi-doc # mpich2-doc openmpi-doc lam-mpidoc python-kombu (x 4) python-cjson (x 2) kdiff3 kdiff3-qt oxygen-icon-theme fdpowermon-icons kdesvn-kio-plugins kdesdk-kio-plugins tomcat6 (x 2) jenkins libjack0 (x 2) libjack-jackd2-0 (x 2) # racoon (x 3) # # openswan (x 5) strongswan-ikev2 (x 2) strongswan-ikev1 inn (x 2) inn2-inews inn2-dev # # inetutils-telnetd # krb5-telnetd krb5-rsh-server # telnetd # telnetd-ssl iputils-ping (x 22) inetutils-ping # inetutils-inetd openbsd-inetd rlinetd xinetd ike (x 2) # ifupdown (x 3) netscript-2.4 netscript-2.4-upstart icheck qtmobility-dev iceape (x 4) xul-ext-requestpolicy mgetty-fax hylafax-client (x 4) heimdal-servers (x 2) # # # inetutils-ftpd krb5-ftpd ftpd ftpd-ssl muddleftpd proftpd-basic (x 19) pure-ftpd pure-ftpd-ldap pure-ftpd-mysql pure-ftpd-postgresql twoftpd-run runit (x 3) daemontools-run vsftpd wu-ftpd wzdftpd (x 7) libhdf5-lam-1.8.4 libhdf5-mpich-1.8.4 libhdf5-serial-1.8.4 sendmail-bin (x 3) harden-servers (x 2) pyftpd # # # # # rpcbind (x 11) rsh-server rsh-redone-server # guile-1.6-dev guile-1.8-dev (x 4) guile-2.0-dev gtalk (x 2) inetutils-talkd talkd gss-man # grub-coreboot (x 2) grub2-common grub-efi-amd64 grub-efi-ia32 (x 2) grub-ieee1275 grub-pc (x 4) grub-legacy # libgrib-api-0d-1 (x 2) libgrib-api-1.9.9 (x 5) libgrib-api-data perlmagick graphicsmagick-libmagick-dev-compat libmagickcore-dev (x 6) graphicsmagick-imagemagick-compat octave-image imagemagick (x 2) gpivtools-mpi gpivtools gpiv gpiv-mpi gpe-login xdm wdm slim kdm (x 2) gnuspool (x 3) system-config-printer-udev gnome-control-center (x 3) gpe-conf (x 3) gnome-control-center-data capplets-data git-daemon-run git-daemon-sysvinit gdm3 (x 2) # fusionforge-full ∨ exim4-daemon-heavy (x 3) courier-mta (x 4) postfix (x 14) fusionforge-minimal fusionforge-standard (x 2) fuse (x 57) loop-aes-utils fso-gsm0710muxd gsm0710muxd libgps20 (x 14) fso-gpsd fso-frameworkd (x 3) libphone-utils0 (x 4) # fso-config-general fso-config-gta01 fso-config-gta02 freeradius-common (x 8) fontforge (x 2) fontforge-nox fltk1.1-games fltk1.3-games filelight-l10n kde-l10n-zhtw kde-l10n-zhcn kde-l10n-wa kde-l10n-uk kde-l10n-tr kde-l10n-th kde-l10n-sv kde-l10n-sr kde-l10n-sl kde-l10n-sk kde-l10n-ru kde-l10n-ro kde-l10n-ptbr kde-l10n-pt kde-l10n-pl kde-l10n-pa kde-l10n-nn kde-l10n-nl kde-l10n-nds kde-l10n-nb kde-l10n-mai kde-l10n-lv kde-l10n-lt kde-l10n-ko kde-l10n-kn (x 2) kde-l10n-km kde-l10n-kk kde-l10n-ja kde-l10n-it kde-l10n-is kde-l10n-id kde-l10n-ia kde-l10n-hu kde-l10n-hr kde-l10n-hi kde-l10n-he kde-l10n-gu kde-l10n-gl kde-l10n-ga kde-l10n-fr kde-l10n-fi kde-l10n-eu kde-l10n-et kde-l10n-es kde-l10n-engb kde-l10n-el kde-l10n-de kde-l10n-da kde-l10n-cs kde-l10n-cavalencia kde-l10n-ca kde-l10n-bg kde-l10n-ar festvox-kdlpc16k festvox-kdlpc8k festvox-kallpc16k festvox-kallpc8k cman (x 3) fence-agents gamin (x 11) libfam0 (x 3) fam # exim4-config (x 4) # exim4-daemon-light (x 2) rmail # evince (x 3) evince-gtk epiphany-browser (x 5) swfdec-mozilla # emacs23 (x 2) emacs23-lucid emacs23-nox # # libdap-dev libdnet-dev (x 2) libcurl4-gnutls-dev (x 24) # dma esmtp-run masqmail msmtp-mta ssmtp #discount libtext-markdown-perl (x 3) markdown isc-dhcp-server (x 4) dhcp-helper isc-dhcp-relay (x 2) libdb5.1-java (x 5) libdb5.3-java (x 2) # libdb5.1-dev (x 5) libdb4.8-dev libdb5.3-dev (x 2) dconf-tools dconf libcyrus-imap-perl24 (x 4) kolab-libcyrus-imap-perl (x 3) #cyrus-nntpd-2.4 (x 3) cyrus-common (x 7) kolab-cyrus-common inn2 inn2-lfs leafnode sn cyrus-imapd-2.4 (x 3) # uw-imapd # cyrus-clients-2.4 (x 2) kolab-cyrus-clients libcurl4-nss-dev (x 2) libcurl4-openssl-dev cups-client (x 15) cups-bsd (x 2) controlaula ltsp-controlaula gnome-font-viewer console-tools (x 4) kbd console-setup (x 2) console-setup-mini libcoin60-doc inventor-dev libcoin60-dev resource-agents (x 5) cluster-agents citadel-server (x 2) courier-pop (x 2) dovecot-pop3d kolab-cyrus-pop3d mailutils-pop3d popa3d solid-pop3d ipopd courier-imap (x 2) dovecot-imapd (x 2) kolab-cyrus-imapd mailutils-imap4d cyrus-pop3d-2.4 (x 3) citadel-mta (x 2) ucspi-unix check-mk-livestatus cfingerd efingerd xfingerd pawserv (x 2) udhcpd sysklogd fingerd libboost1.46-dev (x 18) libboost1.48-dev (x 63) libboost-mpi-python1.46.1 libboost-mpi-python1.48.0 bitlbee (x 2) bitlbee-libpurple fp-compiler-2.4.4 (x 14) binutils-gold # bidentd ident2 nullidentd oidentd pidentd cron (x 5) bcron-run bandwidthd bandwidthd-pgsql openbabel (x 2) babel-1.4.0 # atftpd tftpd tftpd-hpa python-pyatspi python-pyatspi2 (x 5) asterisk-core-sounds-es-gsm asterisk-prompt-es-co # asterisk-voicemail asterisk-voicemail-imapstorage asterisk-voicemail-odbcstorage iputils-arping (x 3) arping ardour ardour-i686 apache2-prefork-dev apache2-threaded-dev #apache2-mpm-event # apache2-mpm-worker torrus-apache2 libasound2-dev (x 2) liboss4-salsa-dev liboss-salsa-asound2 liboss4-salsa-asound2 xul-ext-adblock-plus (x 2) libabiword-2.9-dev (x 4) libace-foxreactor-dev (x 3) acetoneiso akonadi-kde-resource-googledata (x 358) plasma-widget-amule (x 56) libapq-postgresql-dbg (x 2) auth2db (x 5) auth2db-frontend (x 5) banshee-extension-lirc (x 6) bluedevil libboost-all-dev (x 4) libboost-mpi-dev (x 2) libboost-mpi-python1.46-dev (x 2) libboost-mpi1.46-dev cdo (x 3) libcegui-mk2-dev libcheese-dev (x 4) chemical-structures cl-sql-odbc (x 2) code-saturne (x 13) connectomeviewer (x 2) courier-faxmail libcups2-dev (x 11) libcupsdriver1-dev (x 9) cyrus-admin-2.2 (x 5) cyrus-clients-2.2 cyrus-replication (x 2) ∨ libdb5.1-java-gcj (x 2) libdb5.3-java-gcj libdevil-dev (x 39) digikam-dbg (x 20) docbookwiki doodle-dbg (x 2) libdose2-ocaml-dev (x 2) e17-dev libecore-dev (x 3) libedje-dev libeet-dev (x 3) exim4 (x 3) ∨ fai-quickstart ∨ fileschanged ∨ libfluidsynth-dev (x 2) fpc (x 2) freeradius-iodbc freevo (x 4) fusionforge-plugin-blocks (x 25) gforge-lists-mailman python-gamera-dev (x 2) ∨ ∨ ∨ libgd-gd2-noxpm-ocaml-dev (x 2) libgdal1-dev (x 3) libgdb-dev libgeda-dev geogebra-kde (x 2) glance (x 20) gnome-osd gnome-session (x 4) gnome-utils gosa (x 44) goto-fai-backend ∨ gpe gradle (x 2) gross ∨ grub-choose-default ∨ grub-imageboot ∨ libgtkhtml3.14-dev (x 9) libguichan-dev hapm (x 3) libhdf5-lam-dev libhdf5-mpich-dev libhdf5-serial-dev libigstk4-dev (x 3) illuminator-demo imagemagick-dbg jackd1 (x 2) jackd2 (x 3) jenkins-tomcat libk3b-dev (x 7) libkaya-gd-dev libkaya-sdl-dev kdeartwork (x 19) kdepim-dbg (x 3) kdeplasma-addons-dbg kdesvn (x 2) keystone (x 2) kolabd libalog-full-dbg (x 2) libapache2-mod-log-sql (x 5) ffmpeg-dbg (x 2) libgd2-xpm-dev libgdchart-gd2-noxpm-dev libgdchart-gd2-xpm-dev libgpod-dev libgpod-nogtk-dev libgnomeada2.14.2-dbg (x 2) libmojomojo-perl libphone-ui-20100517 (x 2) libphone-ui-dev libplayer-dev libtuxcap-dev ltsp-client ltsp-server-standalone libluabind-dev libmagics++-dev (x 4) libmapnik-dev (x 2) maven-debian-helper mdbtools-dbg gnome (x 2) gnome-core (x 2) gnome-dbg mew mew-beta monodevelop-debugger-gdb mscore (x 2) mysqmail-courier-logger ∨ mysqmail-dovecot-logger mysqmail-pure-ftpd-logger ∨ nagiosgrapher network-manager-strongswan nova-compute-kvm nova-network octave-pkg-dev (x 2) oggvideotools (x 2) open-font-design-toolkit libsaml2-dev (x 3) libopenwalnut1-dev libapache2-mod-passenger (x 2) ∨ libpcp-logsummary-perl (x 2) pfqueue (x 2) ∨ robot-player-dev python-fs python-traitsgui ∨ qt-sdk quassel (x 2) quassel-client-kde4 (x 2) r-base-core-dbg (x 2) redhat-cluster-suite (x 2) request-tracker3.8 (x 6) sa-learn-cyrus ∨ sdpam sepia snd-gtk ∨ libsoqt4-dev startupmanager strongswan (x 2) strongswan-starter ∨ python-jarabe-0.84 (x 6) sucrose-0.84 sugar-emulator-0.84 (x 2) python-jarabe-0.86 (x 4) sucrose-0.86 sugar-emulator-0.86 (x 2) python-jarabe-0.88 (x 4) sucrose-0.88 sugar-emulator-0.88 (x 2) python-jarabe-0.90 (x 4) sucrose-0.90 sugar-emulator-0.90 (x 2) sugar-browse-activity-0.86 (x 5) ∨ sugar-calculate-activity ∨ sugar-connect-activity (x 9) ∨ task-kde-desktop task-lxde-desktop tcos-tftp-dhcp uucpsend libkwebkit-dbg ytalk ∨ ∨ zoneminder xmakemol xmakemol-gl libxine1-doc libxine2-doc xserver-xorg-input-mtrack xserver-xorg-input-multitouch wmnd wmnd-snmp wl wl-beta semi vm (x 2) gnus libwine-gecko-dbg-unstable libwine-gecko-unstable w3c-dtd-xhtml w3c-sgml-lib (x 2) ucspi-tcp ucspi-tcp-ipv6 tk8.4-doc tk8.5-doc texmacs-common (x 2) texmacs-extra-fonts tcl-trf (x 2) tcl-trf-doc tcl8.4-doc tcl8.5-doc libtag1-rusxmms libtag1-vanilla synce-hal (x 2) synce-serial slapos-client python-zc.buildout slurm-llnl (x 2) sinfo # qterm torque-client # torque-client-x11 gridengine-client slurm-llnl-torque shorewall6-lite uif filtergen ferm # shorewall-lite fiaif shorewall (x 2) shorewall-init ∨ scid-rating-data scid-spell-data # rxvt-unicode (x 2) rxvt-unicode-256color rxvt-unicode-lite ruby-bacon ruby-rspec-core (x 7) libamrita-ruby1.8 (x 2) ruby-amrita2 (x 4) rt-tests xenomai-runtime libreadline5-dbg libreadline6-dbg lib64readline-gplv2-dev lib64readline6-dev # ratbox-services-mysql ratbox-services-pgsql ratbox-services-sqlite raptor-utils raptor2-utils radiusclient1 (x 2) libradiusclient-ng-dev libradius1-dev radare radare-gtk libqwt-doc libqwt5-doc libqwt-dev libqwt5-qt4-dev python-quixote (x 2) python-quixote1 (x 2) qca-dev libqca2-dev (x 2) psi3 yagiuda planet-venus racket (x 2) pimd smcroute php-apc php5-xcache pennmush pennmush-mysql orville-write xtell openwince-jtag urjtag opendnssec-enforcer-mysql (x 2) opendnssec-enforcer-sqlite3 (x 2) olpc-kbdshim olpc-kbdshim-hal libode-dev libode-sp-dev oce-draw opencascade-draw liboce-foundation-dev (x 5) libopencascade-foundation-dev (x 6) # nginx-extras (x 2) nginx-full (x 2) nginx-light (x 2) nginx ∨ libnetpbm10-dev libnetpbm9-dev libpgm-dev tftp tftp-hpa telnet telnet-ssl harden-clients x2vnc ftp-upload ftp ftp-ssl mtr mtr-tiny modemmanager (x 2) wader-core libapache2-mod-wsgi libapache2-mod-wsgi-py3 mlterm mlterm-tiny chasen-cannadic naist-jdic (x 2)ipadic mcstrans policycoreutils (x 6) myspell-hu hunspell-hu #myspell-fr myspell-fr-gut hunspell-fr myspell-da hunspell-vi hunspell-sr hunspell-sh hunspell-da lzma xz-lzma liblua50-socket2 luasocketliblua50-socket-dev luasocket-dev # libxbase2.0-bin dvb-apps (x 2) libxdb-dev libupnp3-dev (x 2) libupnp4-dev libunique-doc libunique-3.0-doc libsieve2-dev libmailutils-dev (x 2) libsendmail-milter-perl libsendmail-pmilter-perl libpam-ldap libpam-ldapd libpam-heimdal libpam-krb5 libowfat-dev libudt-dev libcdb-dev libodbc-ruby-doc ruby-odbc (x 10) libnss-ldap libnss-ldapd libnet-proxy-perl sslh libmimedir-dev libmimedir-gnome-dev (x 2) libev-libevent-dev libevent-dev libapache2-authenntlm-perl libauthen-smb-perl (x 2) libantlr3c-3.2-0 libantlr3c-antlrdbg-3.2-0 ldap2zone ldapdnsldap2dns laptop-mode-tools noflushd joe joe-jupp # ircd-hybrid # # # ircd-irc2 ircd-ircu ngircd inspircd (x 2) dancer-ircd charybdis ircd-ratbox (x 2) im-config im-switch # hunspell-de-ch myspell-de-ch hunspell-de-ch-frami # hunspell-de-at myspell-de-at hunspell-de-at-frami # myspell-de-de-oldspell hunspell-de-de myspell-de-de hunspell-de-de-frami hunspell-de-med ∨ ifrench ifrench-gut hwloc hwloc-nox hunspell-ru myspell-ru hunspell-en-us myspell-en-us hunspell-tools myspell-tools hello hello-debhelper heimdal-docs krb5-doc heimdal-clients (x 3) otp krb5-clients # kcc krb5-user (x 4) openafs-kpasswd libgnutls26-dbg libgnutls28-dbg # gnome-ppp openresolv resolvconf gnokii-smsd (x 3) smstools gmt (x 2) gmt-manpages gimp-dcraw gimp-ufraw libgfs-1.3-2 (x 3) libgfs-mpi-1.3-2 (x 3) gcc-mingw32 mingw32 mingw32-binutils binutils-mingw-w64-x86-64 binutils-mingw-w64-i686 binutils-mingw-w64 (x 5) # libstdc++6-4.4-doc libstdc++6-4.5-doc libstdc++6-4.6-doc # libstdc++6-4.4-dbg libstdc++6-4.5-dbg libstdc++6-4.6-dbg # lib64stdc++6-4.4-dbg lib64stdc++6-4.5-dbg lib64stdc++6-4.6-dbg libwnn-dev libwnn6-dev freebsd-sendpr gnats-user (x 2) freebsd-buildutils (x 2) pmake foomatic-db foomatic-db-compressed-ppds fookb-plainx fookb-wmaker libfltk1.1-dev (x 3) libfltk1.3-dev (x 2) flex flex-old bison (x 2) bison++ pretzel (x 3) firebird2.5-classic-common (x 2) firebird2.5-super (x 2) firebird2.5-server-common (x 3) firebird2.5-classic firebird2.5-superclassic firebird2.1-server-common (x 2) firebird2.1-classic firebird2.1-super fb-music-high fb-music-low ettercap-graphical ettercap-text-only erlang-base erlang-base-hipe elvis elvis-console elinks-data (x 2) elinks-lite libelf-dev (x 2) libelfg0-dev (x 2)libdwarf-dev libdw-dev nscd unscd ecm gmp-ecm dvi2ps-fontdata-ptexfake ptex-base (x 6) python-dnspython (x 5) linkchecker (x 2) dicod (x 4) dictd dico le-dico-de-rene-cougnenc dhcpcd pump (x 2) debget debian-goodies # dbskkd-cdb skksearch yaskkserv libdb5.1-tcl libdb5.3-tcl libdb5.1-stl-dev libdb5.3-stl-dev libdb5.1-sql-dev (x 2) libdb5.3-sql-dev libsasl2-modules-gssapi-heimdal (x 2) libsasl2-modules-gssapi-mit (x 2) libcunit1 (x 2) libcunit1-ncurses (x 2) crossfire-maps crossfire-maps-small crack crack-md5 cpufreqd powernowd courier-maildrop (x 5) maildrop conky-cli conky-std libclutter-gtk-1.0-doc (x 2) libclutter-gtk-0.10-doc libcloog-isl-dev libcloog-ppl-dev # chrony ntp (x 2) openntpd python-cherrypy3 (x 4) python-cherrypy (x 3) check-mk-config-icinga check-mk-config-nagios3 busybox (x 4) busybox-static bootchart bootchart2 libboost1.46-doc libboost1.48-doc (x 2) blends-doc cdd-doc biff mailutils-comsatd # bacula-common-mysql (x 3) bacula-common-pgsql (x 3) bacula-common-sqlite3 (x 5) libavahi-ui-dev libavahi-ui-gtk3-dev # aumix aumix-gtk oss-preserve mpg123-el ∨ # asterisk-core-sounds-fr-gsm asterisk-prompt-fr-armelle asterisk-prompt-fr-proformatique # apsfilter magicfilter printfilters-ppd # apcupsd (x 2) nut-server (x 5) powstatd apache2-suexec apache2-suexec-custom amavisd-new (x 3) phamm-ldap-amavis # aide aide-dynamic aide-xen 2ping (x 29205) console-setup-freebsd MISSING DEP Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 16 / 45 Interactive graph viewers on http: //coinst.irill.org/
  • 24. Ubuntu main: 7’000 packages, 31’000 dependencies ubiquity-slideshow-kubuntuubiquity-slideshow-ubuntu tk8.4-doctk8.5-doctcl8.4-doctcl8.5-doc openbsd-inetdxinetd network-manager-kdeplasma-widget-networkmanagement(x2) libstdc++6-4.4-doclibstdc++6-4.5-doclibstdc++6-4.4-dbglibstdc++6-4.5-dbg #libsdl1.2debian-all libsdl1.2debian-alsa libsdl1.2debian-esd libsdl1.2debian-oss libsdl1.2debian-pulseaudio libreadline6-dev(x6)libreadline5-dev libjpeg62-dev(x23)libjpeg8-dev libgd2-noxpm libgd2-xpm(x10) libdb4.8-dev(x5)libdb4.7-dev(x2) libcurl4-gnutls-dev(x4)libcurl4-openssl-dev foomatic-db-compressed-ppds(x4)foomatic-db apache2-prefork-dev apache2-threaded-dev libecore-dev libedje-dev(x2) libgd2-noxpm-dev libgd2-xpm-dev librdf0-dev librpm-dev ubuntu-desktop ubuntu-netbook libreadline5-dbglibreadline6-dbg libqt4-dbg(x24)qt-x11-free-dbg libneon27-devlibneon27-gnutls-dev libjack-jackd2-0(x2)libjack0(x3) libiodbc2-devunixodbc-dev libgpod4(x9)libgpod4-nogtk(x2) libgl1-mesa-glx(x8)libgl1-mesa-swx11(x3) # libclutter-1.0-0(x2) libclutter-eglx-es11-1.0-0(x2) libclutter-eglx-es20-1.0-0(x2) libclutter-1.0-dev(x2) libclutter-eglx-es11-1.0-dev libclutter-eglx-es20-1.0-dev libelf-dev(x3)libelfg0-dev libdb4.7-java(x3)libdb4.8-java(x3) lib64stdc++6-4.4-dbglib64stdc++6-4.5-dbg lib64readline5-devlib64readline6-dev hunspell-toolsmyspell-tools hunspell-fr(x3)myspell-fr hunspell-de-de(x3)myspell-de-de-oldspell hellohello-debhelper grubgrub-legacy-ec2 # grub-efi-amd64 grub-efi-ia32(x2) grub-pc flexflex-old exim4-daemon-heavy(x2) exim4-daemon-light(x2) exim4-config(x5)postfix(x9) emacs23emacs23-nox debconf-englishdebconf-i18n # bacula-common-mysql(x3) bacula-common-pgsql(x3) bacula-common-sqlite3(x3) # apache2-mpm-event apache2-mpm-prefork(x2) apache2-mpm-worker eucalyptus-nc∨ abrowser(x7049) http://coinst.irill.org Running time: less than 10 seconds! Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 17 / 45
  • 25. QA 301: New Co-Installability Issues Compare two versions of a repository New issues are more likely to be bugs Can report precisely what changes caused an issue Example a b p q Many new issues between packages p and q due to a single new conflict between packages a and b. Vouillon, Di Cosmo Broken Sets in Software Repository Evolution ICSE 2013 Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 18 / 45
  • 26. Finding New Co-Installability Issues Tool coinst-upgrades http://coinst.irill.org/upgrades graphs illustrating each new issue context: other packages involved, package popularities (popcon) The new version of unoconv depends on any version of python3-uno unoconv python3-uno python-uno The new version of tdsodbc conflicts with any version of libiodbc2 tdsodbc libiodbc2 Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 19 / 45
  • 27. Finding New Co-Installability Issues Tool coinst-upgrades http://coinst.irill.org/upgrades graphs illustrating each new issue context: other packages involved, package popularities (popcon) The new version of unoconv depends on any version of python3-uno unoconv python3-uno python-uno The new version of tdsodbc conflicts with any version of libiodbc2 tdsodbc libiodbc2 Package libiodbc2 had been unmaintained for years Should not be a big issue if it gets removed, right? Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 19 / 45
  • 28. Context is Crucial tdsodbc libiodbc2 Depend on libiodbc2 (about 380 packages): kcolorchooser, kdesdk-misc, kdevelop-php-docs, blinken, kdevelop, kmousetool, ktorrent, kalgebra, konqueror, klipper, kchmviewer, mplayerthumbs, libsmokekutils3, kjots, ksshaskpass, cantor, network-manager-kde, kbattleship, choqok, kdesdk-dbg, krusader-dbg, libkdegames-dev, kmidimon, klettres, quassel-kde4, libakonadi-ruby, konq-plugins, ktorrent-dbg, kiriki, plasma-widgets-workspace, kvirc-dbg, konversation-dbg, libkiten-dev, kdm-gdmcompat, plasma-netbook, libokular-ruby1.8, eqonomize, kdenetwork-dbg, libsmokeplasma3, kspread, lokalize, korganizer, parley, kfourinline, libsmokekde-dev, kfind, kdepim-groupware, ksnapshot, libiodbc2-dev, plasma-runners-addons, libsmokekdeui4-3, printer-applet, ark, kdeutils, kover, rocs, kdesvn-dbg, kdevplatform-dev, libkdepim4, ktron, cantor-backend-sage, kinfocenter, ... Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 20 / 45
  • 29. QA 501: package migration Unstable Testing Conflicting goals package should reach testing rapidly keep testing as stable as possible Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 21 / 45
  • 30. The comigrate tool Supplement/Replace Britney Generate hints that can be fed to Britney Interactively investigate migration issues Run it repeatedly, studying different scenarios Report of issues preventing package migration http://coinst.irill.org/report/ Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 22 / 45
  • 31. Tool Core: Computing Package Migrations Boolean solver (Co-)installability analysis Tentative migration New constraints Start with simple constraints The Boolean solver generates a tentative migration Check for (co-)installability issues; analyse these issues to generate new constraints (“package A cannot migrate”, or “package A cannot migrate without package B”) Repeat until no more issue is found Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 23 / 45
  • 32. Performance Britney Comigrate (installability) Comigrate (co-installability) Comigrate (installability, with caching) Comigrate (co-installability, with caching) 3 5.5 10 18 30 55 100 180 300 550 Running time (seconds) Data collected twice a day from 2013-06-24 to 2013-09-09 Missing datapoints: Britney can take more than 24 hours (Perl transition).... Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 24 / 45
  • 33. Bibliography and tools excerpts Di Cosmo, Leroy, Treinen, Vouillon et al Managing the complexity of large free and open source package-based software distributions. ASE 2006: Automated Software Engineering. Di Cosmo and J. Vouillon. On software component co-installability. In ESEC/FSE 2011. Abate, Di Cosmo, Treinen, Zacchiroli Learning from the Future of Component Repositories CBSE 2012: Component Based Software Engineering. Vouillon, Dogguy, Di Cosmo. Easing software component repository evolution. ICSE 2014. Abate, Di Cosmo, Gesbert, Le Fessant, Treinen, and Zacchiroli. Mining component repositories for installability issues. MSR 2015 Claes, Mens, Di Cosmo, and Vouillon. A historical analysis of debian package incompatibilities. MSR 2015 Tools Cudf library: http://gforge.inria.fr/projects/cudf/ Dose library: http://gforge.inria.fr/projects/dose/ Coinst suite: http://coinst.irill.org Debian QA: http://qa.debian.org/dose Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 25 / 45
  • 34. Outline 1 GNU/Linux Distributions: industrialising Free Software 2 Ten years studying and improving Package QA Find uninstallable packages Learning from the future of repositories Find non co-installable packages Find new non co-installable packages Filter incoming packages 3 Taking a step back Software is Fragile 4 Software Heritage 5 Call to action 6 Questions Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 26 / 45
  • 35. A recurring pattern In all examples above identify a real world problem whose solution requires a research effort work hard to find a solution implement a tool, validate it on real world cases publish a research article foster adoption (the hardest part!) Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 27 / 45
  • 36. A recurring pattern In all examples above identify a real world problem whose solution requires a research effort work hard to find a solution implement a tool, validate it on real world cases publish a research article foster adoption (the hardest part!) In a picture Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 27 / 45
  • 37. A recurring pattern In all examples above identify a real world problem whose solution requires a research effort work hard to find a solution implement a tool, validate it on real world cases publish a research article foster adoption (the hardest part!) In a picture Under the hood Question: What were the technical prerequisites that made this work possible? Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 27 / 45
  • 38. Technical prerequisites Availability all the (history of) Debian packages (after 2005) no technical restrictions no legal restrictions on content or metadata Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 28 / 45
  • 39. Technical prerequisites Availability all the (history of) Debian packages (after 2005) no technical restrictions no legal restrictions on content or metadata Traceability Debian packages have unique identifier reference central repository Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 28 / 45
  • 40. Technical prerequisites Availability all the (history of) Debian packages (after 2005) no technical restrictions no legal restrictions on content or metadata Traceability Debian packages have unique identifier reference central repository Uniformity Debian packages: a central catalog with uniform metadata structure uniform naming and versioning schema Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 28 / 45
  • 41. Technical prerequisites Availability all the (history of) Debian packages (after 2005) no technical restrictions no legal restrictions on content or metadata Traceability Debian packages have unique identifier reference central repository Uniformity Debian packages: a central catalog with uniform metadata structure uniform naming and versioning schema These are all essential features for reproducibility and for preservation... ... we need them for all software! Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 28 / 45
  • 42. Availability: software is fragile An example is worth a thousand words... let’s see a few Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 29 / 45
  • 43. Inconsiderate or malicious loss of code The Year 2000 Bug ... uncovered an inconvenient truth in 1999, an estimated 40% of companies had either lost, or thrown away the original source code for their systems! CodeSpaces: source code hosting, 2007-2014 Yes, for seven years all seemed ok. Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 30 / 45
  • 44. Inconsiderate or malicious loss of code The Year 2000 Bug ... uncovered an inconvenient truth in 1999, an estimated 40% of companies had either lost, or thrown away the original source code for their systems! CodeSpaces: source code hosting, 2007-2014 Yes, for seven years all seemed ok. No, they did not recover the data. Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 30 / 45
  • 45. Business-driven loss of code support: Google Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 31 / 45
  • 46. Business-driven loss of code support: Gitorious From: Rolf Bjaanes <rolf@gitorious.org> To: zack@upsilon.cc Subject: Gitorious.org is dead, long live Gitorious.o Message-Id: <30589491.20150416155909.552fdc4d164758 Hi zacchiro, I’m Rolf Bjaanes, CEO of Gitorious, and you are re- ceiving this email because you have a user on gito- rious.org. As you may know, Gitorious was acquired by GitLab [1] about a month ago (NDLR: 3/3/2015), and we announced that Gitorious.org would be shut- ting down at the end of May, 2015. ... Rolf Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 32 / 45
  • 47. Traceability: disruption of the web of reference Web links are not permanent (even permalinks)} there is no general guarantee that a URL... which at one time points to a given object continues to do so T. Berners-Lee et al. Uniform Resource Locators. RFC 1738. Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 33 / 45
  • 48. Traceability: disruption of the web of reference Web links are not permanent (even permalinks)} there is no general guarantee that a URL... which at one time points to a given object continues to do so T. Berners-Lee et al. Uniform Resource Locators. RFC 1738. URLs used in articles decay! Analysis of IEEE Computer (Computer), and the Communications of the ACM (CACM): 1995-1999 the half-life of a referenced URL is approximately 4 years from its publication date D. Spinellis. The Decay and Failures of URL References. Communications of the ACM, 46(1):71-77, January 2003. Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 33 / 45
  • 49. Uniformity: nowhere to be seen Reference repositor(ies) Bitbucket GitHub Gitorious (no, scratch this) Google Code (no, scratch this) Maven Sourceforge your institution’s forge your home page ... And they are all diffent / incompatible Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 34 / 45
  • 50. Outline 1 GNU/Linux Distributions: industrialising Free Software 2 Ten years studying and improving Package QA Find uninstallable packages Learning from the future of repositories Find non co-installable packages Find new non co-installable packages Filter incoming packages 3 Taking a step back Software is Fragile 4 Software Heritage 5 Call to action 6 Questions Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 35 / 45
  • 51. The Software Heritage Project Our mission Collect, organise, preserve and share all the software that lies at the heart of our culture and our society. Provides exactly availability traceability uniformity Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 36 / 45
  • 52. We are working on the foundations one infrastructure to build them all Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 37 / 45
  • 53. Fostering wider education to computing A global source referencing all software a SourceBook for technological education intrinsic persistent identifiers for stable course materials extensive access to real-world documentation Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 38 / 45
  • 54. Supporting more accessible and reproducible Science A global library referencing all software used in all research fields completes the infrastructure for Open Access in Science provides intrinsic persistent identifiers needed for scientific reproducibility enables large scale, verifiable Software Studies Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 39 / 45
  • 55. The Knowledge Conservancy Magic Triangle The Knowledge Conservancy Magic Triangle Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 40 / 45
  • 56. The Knowledge Conservancy Magic Triangle The Knowledge Conservancy Magic Triangle Legenda (links are important!) articles: ArXiv, HAL, ... data: Zenodo, ... software: Software Heritage tackles this Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 40 / 45
  • 57. Outline 1 GNU/Linux Distributions: industrialising Free Software 2 Ten years studying and improving Package QA Find uninstallable packages Learning from the future of repositories Find non co-installable packages Find new non co-installable packages Filter incoming packages 3 Taking a step back Software is Fragile 4 Software Heritage 5 Call to action 6 Questions Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 41 / 45
  • 58. Need your help make it easy to integrate your work development workflow publication workflow contribute importers Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 42 / 45
  • 59. Need your help make it easy to integrate your work development workflow publication workflow contribute importers make it ok to integrate, from the legal point of view make licences explicit make licences of dependencies explicit Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 42 / 45
  • 60. Need your help make it easy to integrate your work development workflow publication workflow contribute importers make it ok to integrate, from the legal point of view make licences explicit make licences of dependencies explicit make it useful for research contribute to the API Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 42 / 45
  • 61. Need your help make it easy to integrate your work development workflow publication workflow contribute importers make it ok to integrate, from the legal point of view make licences explicit make licences of dependencies explicit make it useful for research contribute to the API help us make Software Heritage sustainable support/sponsorship open process and collaboration Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 42 / 45
  • 62. Focus on the legal issues a plurality of concerns Who owns the rights to your research? articles, data, software too often forgotten: metadata Software Track in Science of Computer Programming, 2015 You own the software, but who owns the metadata? we need to recover our rigths it is possible! compulsory exclusive copyright transfer for free is illegal in France (art L. 131-4 of CPI) is debatable in all jurisdictions see Free Scientific Publication paying the editors (OpenAire) is not a solution Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 43 / 45
  • 63. Outline 1 GNU/Linux Distributions: industrialising Free Software 2 Ten years studying and improving Package QA Find uninstallable packages Learning from the future of repositories Find non co-installable packages Find new non co-installable packages Filter incoming packages 3 Taking a step back Software is Fragile 4 Software Heritage 5 Call to action 6 Questions Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 44 / 45
  • 64. Questions Questions? Subscribe to mailing list: swh-science@inria.fr https://sympa.inria.fr/sympa/info/swh-science Roberto Di Cosmo (INRIA/Paris Diderot) Analysing large code bases EvoLille 2015 45 / 45