Problems with building experimental / backport packages

I had some discussion what the problems are with building experimental packages, and why the current strategies to install packages are not good enough. I'm trying to summarize them here.

removing packages with dpkg is not enough

That's an easy one: If a experimental packages requires e.g. a new glibc, than this one is installed, and not removed after that build. So, my chroot is broken, and all packages that I build are now built against that too new glibc.

how to select the right package

This is a tougher one. How do I select whether to install package foo from unstable or experimental? There are two solutions:

  1. We install always the newest one: In this case, consider we have a newer package foo (just make it a library with bumped shlibs), and want to build package bar that build-depends foo (the old version in unstable is enough). With that approach, we will still install the newer foo, and every user of our package bar will need to take experimentals foo, though there is no technically need for it.
  2. We pin the older one: In this case, consider we have a newer package foo, and want to build package bar that build-depends on the newer one: apt will just fail to install the newer version, so we can't even compile.
  3. We pin the older one, except if the maintainer sends mail to a newer one (thanks to aj for this idea): [need to consider potential issues]