What core values do you use when you design software? For VxWorks, we defined the core values to be small footprint, scalable and modular functionality, high performance, low latency and determinism, and reliability. Enumerating the core values for software is pretty useful – it allows you to evaluate designs or technology at a high level to see if there is a good fit for a specific problem (OK, opportunity) domain.
When Wind River needs to leverage some software technology from one product into another, one of the things we consider is the set of core values to see if there is a match. This helps us identify any integration problems or technology re-work that might arise from combining the software. For example, a network stack from an open source “best-effort” operating system that was designed for optimal throughput might not align well with respect to the low latency or footprint core values of a real-time operating system like VxWorks.
Most software component management infrastructures, such as Yum, seem to focus on managing interface dependencies and resolving design-time and run-time dependencies. I agree this is very useful stuff but in the device software space we need to consider core value alignment as well.
Core values are interesting pieces of meta-data that are properties of the software which are not immediately visible upon inspection of the software. It would be interesting if there was a way of tagging software components with meta-data that would describe the software core values and other software attributes which are sometimes hard to detect (such as intellectual property rights). Then, when we have a domain-specific set of requirements for software, we could find and leverage software components using queries that were much more sophisticated than simply considering interfaces. Is anyone aware of any open technology initiatives which would help in this area?