-
Notifications
You must be signed in to change notification settings - Fork 2.2k
This issue was moved to a discussion.
You can continue the conversation there. Go to discussion →
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
How does Score compare to OAM (Open Application Model)? #23
Comments
This XKCD is what I immediately thought of when I read the first para of "What is Score?" Thank you for posting this so I didn't have to. |
Ha! I posted the same meme to my colleague when I saw the project. But I don't think there is anything concerning about others having tried similar things. That's obvious; and always happens in our industry. The only observation I would make is that marketing something as a "thing to rule them all" leads only to a new standard as far as computing history is concerned. There isn't any evidence that I'm aware of where a player has come in and basically obsoleted a significant amount of competing data model standards. The standard that wins is the one that's adopted the most. |
That’s a very valid question! I’d recommend checking out these two articles that were published on the Score blog recently:
To summarise: OAM (Kubevela) and Score share a similar philosophy. Both advocate for workload/application-centric development. The main differences we found when looking over it: A: Score provides a tightly scoped workload spec for developers. Its focus lies on the individual developer and the workload in front of them: Its a single file that describes what the workload needs to run. Score keeps such a tight scope as its overarching goal lies in reducing cognitive load and creating focus for developers. This is the main reason for why we’ve pushed back on ideas for extending Score’s feature scope in the past - its simple by design. B: The Score Specification - C: A concrete pain point that Score targets resolves around configuration inconsistencies between local and remote environments. For example: As a developer you might work with lightweight tooling such as Docker Compose locally while deploying to remote environments running on advanced orchestrators such as K8s. Score enables developers to do so without risking configuration inconsistencies (= translation gaps / errors) as the generation of required config is taken care of by a Score Implementation (see here for an example). So far a quick summary of our observations! That being said, if anyone here has experience with OAM/Kubevela, it’ll be great to understand how both tools differ in more detail. Don’t hesitate to reach out, it’ll be great to chat about this further and keep the discussion going. And in regards to the other point about having several standards in place (xkcd): I totally agree, having different kind of specs out there helps teams understand which one fits their use case best. And while one might end up “coming out as a winner” would I argue that in the example of Score and OAM it makes sense for both to coexist next to each other. If you’re looking for a full blown CD platform, Kubevela might be your best bet. If you’re looking for a targeted solution to improve developer experience within your existing set up, you might want to have a look at Score. |
FYI the question "What about a score-oam integration?" has been added to the discussion forum: #44 |
@sujaya-sys your reply doesn't really answer the question I asked; you've focused on a specific OAM implementation rather than OAM as a specification. This also goes for the blog posts you linked to. I still can't see what the benefit of the Score abstraction provides to a developer? If a developer commits to a single implementation, such as Helm, it would require a higher cognitive load than just using Helm directly and offer no real benefits. Using different implementations, such as Helm and Compose, would add significant extra cognitive load as they are different enough in how they work and support different functionality. From the operations persona I can see even less of a reason to adopt or support Score as I can only see it increasing cognitive load and leaking abstractions. Feel free to make this a discussion, I'd have made it one if it was an option when I created the issue. |
The design of the OAM is directly driven by Kubevela. Specification and implementation are tightly coupled. This is why I referenced Kubevela in my comment, it allows to illustrate OAM concepts in a tangible way. If there's a need to differentiate more clearly between both, it'll be great to understand how the points mentioned above don't apply to the OAM:
That being said, there are definitely areas in which Score and OAM overlap as you mentioned in your initial comment. Both introduce a specification standard, are developer focused and platform-agnostic. The items above simply list differences while acknowledging that there are similarities.
Score shines in a multi-platform set up. For example: Docker Compose for local development, Kubernetes for a shared development environment and Google Cloud Run for integration tests. The same Score spec can be used to deploy a workload to each environment without the developer needing to get involved with the underlying platform. We're following the same approach as OAM here by aiming to provide a platform/vendor agnostic experience for the developer.
The cognitive load stays the same for the developer independently of the amount of implementations their team makes use of. The Score Specification is defined once and can be executed against different CLIs to automatically generate required configuration. The developer simply runs a different CLI depending on the target platform.
Score is solely focused on the developer experience. The cognitive load of the operations persona and any issues related to leaking abstractions depend on the teams infrastructure/platform set up. Score simply wants to set a standard for developer experience and leaves it to the ops team on how to set everything up behind the scenes. If your operations team works with some kind of internal developer platform that resolves configuration/resource requirements defined in Score automatically, you shouldn't run into any of the above named issues. Again, this totally depends on the maturity of your platform set up.
Agreed! @gguizza should we transform this into a discussion? It's definitely an interesting subject that would be great to explore further with a wider audience. |
@sujaya-sys I know OAM is currently being developed in parallel with KubeVela but I don't think that's a long term goal (see oam-dev/spec#475). What I'm seeing is that the Score spec could be defined as a functional subset of the OAM spec. The fundamental difference is Score mandating a container(s) spec as part of a workload while OAM allows any workload specification. The other missing pieces are strongly types scopes (between workloads) and strongly typed traits. It seems like at least on the spec side of things that both Scope and OAM are solving the exact same problem so the concepts should be pretty well aligned. My suggestions for the spec are as follows (based on the experience of building almost this exact system as part of an IDP).
|
This is helpful feedback. Thanks for sharing! I'll also share this with our team internally. A couple of things you mentioned, such as a |
@sujaya-sys with OAM independent of KubeVela (oam-dev/spec#475 (comment)) could there be collaboration between Score & OAM to define a common model? Given they're two projects solving the same problem but with different starting points and biases that would make sense. |
Agreed. Both models target a similar problem space and share similar views on how a solution could look like. We're always open to exploring opportunities for collaboration and knowledge exchange. However, as mentioned above, Score is limited by design and we're cautious about extending or modifying the spec as our main goal lies in reducing cognitive load for developers. Other differences such as OAM and Score not sharing the same approach to configuration management (overrides vs. dynamic injected values) would have to be explored in more detail. |
@sujaya-sys I think the danger for Score here is becoming an island, even if you want to primarily focus on developers there are still other roles needing to interact with the developers output. If you build the best tools possible for developers but forget about everyone else at best you've just shifted the pain "right", but at worse you've made someone else's task much harder. This goes against the DevOps spirit of not throwing things over the wall but collaborating on them and shifting "left" where possible. I think OAM shifts "left" defining application traits, which although not perfect is conceptually aligned with DevOps. Unfortunately I think Score is currently closer to shifting "right". |
This issue was moved to a discussion.
You can continue the conversation there. Go to discussion →
I'm interested as to how Score relates to the OAM (Open Application Model) specification? I've read the spec for both and can't help but notice the similarities and the paradox of both attempting to be the "One YAML to rule them all". I'm a big fan of the concept of having an application specification which is abstracted from the implementation (promise theory etc) but having multiple API specifications for this seems to be problematic from where I'm standing (please don't take the image the wrong way but it was the first thing which came to mind).
I'd be more than happy if you could explain why my initial observations are incorrect or how the nuances which I've missed make this less black and white? My current position on all of this is that I probably need to build my own abstraction as there isn't either a well established solution or a community consensus for establishing one (ironic given the image above right).
The text was updated successfully, but these errors were encountered: