Historically, packages were kept in the subdirectory of
corresponding to the distribution that contained them. This turned out to
cause various problems, such as large bandwidth consumption on mirrors when
major changes were made.
Packages are now kept in a large "pool", structured according to the
name of the source package. To make this manageable, the pool is subdivided by
section (main, contrib, and non-free)
and by the first letter of the source package name. These directories contain
several files: the binary packages for each architecture, and the source
packages from which the binary packages were generated.
You can find out where each package is placed by executing a command like
apt-cache showsrc mypackagename and looking at the
"Directory:" line. For example, the
apache packages are
pool/main/a/apache/. Since there are so many
lib* packages, these are treated specially: for instance,
libpaper packages are stored in
dists directories are still used for the index files used by
apt. Also, at the time of writing, older
distributions have not been converted to use pools, so you'll see paths
containing distribution names such as potato or woody
in the "Directory" header field.
Normally, you won't have to worry about any of this, as new
and probably older
dpkg-ftp will handle it seamlessly. If you
want more information, see the
implementation of package pools.