APT↔dpkg communication rework
Description of the project: APT-based tools like apt-get, aptitude, synaptic, … work with the user to figure out how their system should look like after they are done installing/removing packages and their dependencies. The actual installation/removal of packages is done by dpkg with the constrain that dependencies must be fulfilled at any point in time (e.g. to run maintainer scripts).
Historically APT has a super micro-management approach to this task which hasn't aged that well over the years mostly ignoring changes in dpkg and growing into an unmaintainable mess hardly anyone can debug and everyone fears to touch – especially as more and more requirements are tacked onto it like handling cycles and triggers, dealing with "important" packages first, package sources on removable media, touch minimal groups to be able to interrupt the process if needed (e.g. unattended-upgrades) which not only sky-rocket complexity but also can be mutually exclusive as you e.g. can't have minimal groups and minimal trigger executions at the same time.
Confirmed Mentor: Michael Vogt
Deliverables of the project: An architecture similar to the "External Dependency Solver Protocol" (EDSP) allowing different implementations (and hence strategies) to be used interchangeably starting with the current one and a second doing the minimal amount of work and instead trying to work closer together with dpkg.
Desirable skills: C++, Debian packaging experience, previous experience with APT & dpkg
What the intern will learn: Developing and maintaining software running on millions of computers, package management internals