This post was coauthored by the DefCore chairs, Rob Hirschfeld & Joshua McKenty.
The OpenStack board, through the DefCore committee, has been working to define “core” for commercial users using a combination of minimum required capabilities (APIs) and code (Designated Sections). These minimums are decided on a per project basis so it can be difficult to visualize the impact on the overall effect on the Integrated Release.
We’ve created the patchwork onion graphic to help illustrate how core relates to the integrated release. While this graphic is pretty complex, it was important to find a visual way to show how different DefCore identifies distinct subsets of APIs and code from each project. This graphic tries to show how that some projects have no core APIs and/or code.
For OpenStack to grow, we need to have BOTH stability and innovation. We need to give clear guidance to the community what is stable foundation and what is exciting sandbox. Without that guidance, OpenStack is perceived as risky and unstable by users and vendors. The purpose of defining “Core” is to be specific in addressing that need so we can move towards interoperability.
Interoperability enables an ecosystem with multiple commercial vendors which is one of the primary goals of the OpenStack Foundation.
Originally, we thought OpenStack would have “core” and “non-core” projects and we baked that expectation into the bylaws. As we’ve progressed, it’s clear that we need a less binary definition. Projects themselves have a maturity cycle (ecosystem -> incubated -> integrated) and within the project some APIs are robust and stable while others are innovative and fluctuating.
Encouraging this mix of stabilization and innovation has been an important factor in our discussions about DefCore. Growing the user base requires encouraging stability and growing the developer base requires enabling innovation within the same projects.
The consequence is that we are required to clearly define subsets of capabilities (APIs) and implementation (code) that are required within each project. Designating 100% of the API or code as Core stifles innovation because stability dictates limiting changes while designating 0% of the code (being API only) lessens the need to upstream. Core reflects the stability and foundational nature of the code; unfortunately, many people incorrectly equate “being core” with the importance of the code, and politics ensues.
To combat the politics, DefCore has taken a transparent, principles-based approach to selecting core. You can read about in Rob’s upcoming “Ugly Babies” post (check back on 8/14) .