More on the Software Stack & Components vs. Tools
Steve Parker has described a simple and logical classification scheme for components and tools related to software development. In essence, most software can be associated with a location on a vertical stack that represents low to high functionality. Low in this sense meaning closer to the hardware level (e.g. the Linux kernel), and high being related to a user facing, fully functional application. The stack is composed of a limited number of generic "way-point" categories, such as data or middle-ware, to establish reference points as one moves up or down the stack. This single hierarchy classification scheme should be sufficient in organizing a foundation or substrate of software without attempting to create the perfect categorization scheme (which is arguably impossible for any non trivial topic), or relying on complex or esoteric approaches to categorization.
We have designated the highest section of the stack as "packaged applications". This would be anything that is not a software component, and would not traditionally play a role in a living system. For example: Firefox, OpenOffice, etc. However, there is quite a bit of open source software that fits into that category of full user facing applications. It seems the stack would lose some of its value if all user-facing applications were at the top and not really differentiated in some way.
Consider MySQL Query Browser. It's a useful front-end tool for interacting with a MySQL database. If it were placed high on the stack in the miscellaneous range of "applications", its simple function as a database front-end would not be properly reflected. I would say that the MySQL Query Browser belongs near the MySQL database server itself in the "data" section, but with a slightly higher placement on the stack. This suggests that if a user-facing tool can be logically associated with a given range within the stack, then it belongs there. Ideally, the highest level "packaged applications" section would only contain applications that could not otherwise be reliably placed within lower ranges of the stack. The stack favors function over form.
There is one more simple addition to the stack model to help further classify software at all levels. We are viewing all software as a component or a tool. A component is a piece of software directly involved in the development process and plays a role at runtime; components participate in a living system. Examples: database servers, web development frameworks, code libraries, etc. A tool is a stand-alone, fully functional application or utility - such as MySQL Query Browser, but of course they do not have to be full GUI based applications (e.g. mytop).
I have not yet been able to think of something that falls into a gray area of both component and tool. Eclipse came to mind, but it is usually viewed as individual pieces of software anyway. Please let me know if you can think of something that fits both roles...