I agree with `drivers` vs. `capsules`. In particular, virtualization layers also live here. In general, anything that's not "special" would live in this directory, and it should really be a collection of capsules that we
maintain. They could eventually be subdivided further (in principal) to, e.g. "sensors", "virtualization", "net", etc.
Another downside to the name `capsules` is that it implies other components are not capsules (which is not true). But I think it's a better name than drivers regardless.
For `applications` vs. `userland`, my only reservation is that actually the main code that belongs here is userland library code (e.g. crt0, system call wrappers, `wait_for`, etc). In particular, an app developer should be able to build a static library for either a generic Tock app or a platform specific one (which includes interfaces for platform-specific drivers) and copy that to their app development directory (to support simple app development out of tree).
We should have applications here as well, but I think we might want to even restrict it to example-apps that work across platforms. One of the bummers I felt with TinyOS was that `apps` had an collection of apps that each only worked for 1 platform, and it's not at all clear which one builds on which.
Granted, the name of the directory doesn't necessarily affect this organization, and if "applications" is clearer regardless, I'm for it.