|
7 | 7 |
|
8 | 8 | Open Application Model is a runtime-agnostic specification for modeling cloud native applications and building app-centric platforms. |
9 | 9 |
|
10 | | -Focused on application development and operation, _Open Application Model_ brings modular, extensible, and portable design to building application-first platforms on any underlying runtime system such as Kubernetes, cloud, or IoT devices. |
| 10 | +Focused on application development and operation, _Open Application Model_ brings modular, extensible, and portable design for creating application-first platforms on any infrastructures such as Kubernetes, cloud, or IoT devices. |
11 | 11 |
|
12 | | -> **NOTICE:** The current working draft of OAM specification (0.2.x release) is under pre-beta release, which means the specification is still under development but will keep backward compatibility in any further change. Interested in contributing? Take a look at the issues! We're looking for more great ideas on how to model cloud native applications. |
| 12 | +> **NOTICE:** The current working draft of OAM specification (0.2.x release) is under pre-beta release, which means the specification is still under development but will keep backward compatibility for any further change. |
13 | 13 |
|
14 | 14 | ## Introduction |
15 | 15 |
|
16 | | -Open Application Model provides a series of standard but extensible abstractions to model application in a self-contained approach, which means both the components and corresponding operational capabilities (named "traits") are considered as parts of a given application. This enables platform builders to create platforms around this model, with an app-centric mindset by natural, and essentially changes building platforms into developing components and traits for the application to run. |
| 16 | +Developers think in terms of application architecture, not of infrastructure. |
17 | 17 |
|
18 | | -In addition, categorizing runtime capabilities into modularized components and traits will also provide better discoverability, manageability and interoperability to these capabilities regardless the runtime systems they rely on. |
| 18 | +In a nutshell, Open Application Model defines standard but extensible abstractions to model applications in a "self-contained" approach, i.e. both runnable components and corresponding operational capabilities (named "traits") are considered as parts of the given application. This enables platform builders to create platforms around this unified model, with app-centric mindset by natural, and essentially changes building platforms into developing modularized components and traits for the application. |
19 | 19 |
|
20 | 20 | ![How it works][how-it-works] |
21 | 21 |
|
22 | | -In one word, Open Application Model empowers application platforms to provide standardized application centric primitives (e.g. Components and Traits) instead of exposing infrastructure details to end users, while retaining the high flexibility and extensibility for platform builders. This model won't lock you into any specific abstractions -- on the contrary, its primitives are designed to allow you to define the right level of abstraction depend on your own use case. |
| 22 | +In addition, Open Application Model won't lock you into any specific abstractions -- on the contrary, its primitives are designed to allow you to define the right level of abstraction depend on your own use case. |
23 | 23 |
|
24 | | -Open Application Model specification convention adopts [Kubernetes Resource Model](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/architecture/resource-management.md) which we believe will become the standard interface for the majority of platforms in the future. |
| 24 | +### A team-centric model |
25 | 25 |
|
26 | | -### Team-centric personas |
| 26 | +When it comes to the application centric primitives, we think it is important to separate concerns between the parts that developers are responsible for, and the parts that operators and platform engineers are responsible for. |
27 | 27 |
|
28 | | -When it comes to the application centric primitives, we think it is important to distinguish between the parts that developers are responsible for, and the parts that operators (or the platform itself) are responsible for. |
| 28 | +This is because in practice different levels of abstraction would apply to different personas. Also, if these primitives get muddled in the platform, a simple operational modification on wrong primitive would easily result in bugs, mishaps or even service outages. |
29 | 29 |
|
30 | | -This is because in practice different levels of abstraction would apply to different personas. Also, if these primitives get muddled in the platform, a careless operational modification on wrong primitive would easily result in bugs, mishaps or even service outages. |
31 | | - |
32 | | -Thus _Open Application Model_ defines different abstractions for different roles responsible for building and operating apps and maintaining infrastructure. |
| 30 | +Thus _Open Application Model_ defines different personas from building and operating apps to maintaining infrastructure. |
33 | 31 |
|
34 | 32 | * _Developers_ are responsible for writing business logic, describing what a microservice or component does, |
35 | 33 | and _how_ it can be configured. They are the domain experts on the code. |
36 | 34 | * _Application Operators_ are responsible for configuring the runtime aspects of |
37 | 35 | one or more of these microservices. They are the domain experts on the |
38 | | - platform. In fully automatic use cases (e.g. Serverless), application operator could be the platform itself. |
| 36 | + platform. In some use cases (e.g. Serverless), application operator could be the platform itself. |
39 | 37 | * _Infrastructure Operators_ also known as _Platform Builders_, are responsible for setting up and maintaining the |
40 | 38 | infrastructure within which applications run. They are the domain |
41 | 39 | experts on developing platform capabilities and infrastructure-level details. |
42 | 40 |
|
43 | 41 | For more details and user stories, see [introduction.md](./introduction.md). |
44 | 42 |
|
45 | | -## See it in action |
46 | | - |
47 | | -[OAM Kubernetes Runtime](https://github.com/crossplane/oam-kubernetes-runtime) is the officially maintained OAM plugin for Kubernetes, which is a [joint effort](https://cloudblogs.microsoft.com/opensource/2020/05/27/open-application-model-oam-v1alpha2-crossplane/) with [Crossplane](https://github.com/crossplane/crossplane) community. |
| 43 | +## Read the specification |
48 | 44 |
|
49 | | -## The Specification |
| 45 | +The following documents are available: |
50 | 46 |
|
51 | | - - [Notational Conventions](notational_convention.md) |
52 | | - - [Purpose and Goals](1.purpose_and_goals.md) |
53 | | - - [Overview and Terminology](2.overview_and_terminology.md) |
54 | | - - API Resource Specification |
55 | | - - Application Developers |
56 | | - - [Components](4.component.md) |
57 | | - - Application Operators |
58 | | - - [Application Scopes](5.application_scopes.md) |
59 | | - - [Traits](6.traits.md) |
60 | | - - [Application Configuration](7.application_configuration.md) |
61 | | - - Infrastructure Operators/Platform Builders |
62 | | - - [Workload Definition](3.workload.md) |
63 | | - - [Practical Considerations](8.practical_considerations.md) |
64 | | - - [Design Principles](9.design_principles.md) |
| 47 | +| | Latest Release | Working Draft | |
| 48 | +| :---------------------------- | :--------------------------------: | :----------------------------------------: | |
| 49 | +| **Core Specification:** | |
| 50 | +| OAM Specification | [v0.2.1](https://github.com/oam-dev/spec/blob/v0.2.1/SPEC_LATEST_STABLE.md) | [v0.2.2-WD](https://github.com/oam-dev/spec/blob/master/SPEC_WORKING_DRAFT.md) | |
| 51 | +| | |
| 52 | +| **Workloads** | |
| 53 | +| Containerized Workload | [v1alpha2](https://github.com/oam-dev/spec/blob/v0.2.1/core/workloads/containerized_workload/containerized_workload.md) | [v1alpha2-WD](https://github.com/oam-dev/spec/blob/master/core/workloads/containerized_workload/containerized_workload.md) | |
| 54 | +| | |
| 55 | +| **Traits** | |
| 56 | +| Manual Scaler | [v1alpha2](https://github.com/oam-dev/spec/blob/v0.2.1/core/traits/manual_scaler_trait.md) | [v1alpha2-WD](https://github.com/oam-dev/spec/blob/master/core/traits/manual_scaler_trait.md) | |
| 57 | +| | |
| 58 | +| **Scopes** | |
| 59 | +| Network Scope | [v1alpha2](https://github.com/oam-dev/spec/blob/v0.2.1/standard/scopes/network_scope.md) | [v1alpha2-WD](https://github.com/oam-dev/spec/blob/master/standard/scopes/network_scope.md) | |
| 60 | +| Health Scope | [v1alpha2](https://github.com/oam-dev/spec/blob/v0.2.1/standard/scopes/health_scope.md) | [v1alpha2-WD](https://github.com/oam-dev/spec/blob/master/standard/scopes/health_scope.md) | |
65 | 61 |
|
66 | | -## Versioning |
67 | 62 |
|
68 | | -Releases of the specification are versioned according to [Semantic Versioning 2.0](https://semver.org/spec/v2.0.0.html) and described in [OAM release page](https://github.com/oam-dev/spec/releases). Implementations of the specification are required to specify which version they implement. |
69 | 63 |
|
70 | | -### Changes to the API objects |
71 | | - |
72 | | -Changes to the API objects in this specification follows [on compatibility](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api_changes.md#on-compatibility) and [incompatible api changes](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api_changes.md#incompatible-api-changes) defined in Kubernetes API convention. It doesn't couple with release version of the specification. |
| 64 | +## See it in action |
73 | 65 |
|
74 | | -Changes to the change process (e.g. governance model, review/approve process etc) itself are not currently versioned but may be independently versioned in the future. |
| 66 | +[OAM Kubernetes Runtime](https://github.com/crossplane/oam-kubernetes-runtime) is the officially maintained OAM plugin for Kubernetes. This is a [joint effort](https://cloudblogs.microsoft.com/opensource/2020/05/27/open-application-model-oam-v1alpha2-crossplane/) with [Crossplane](https://github.com/crossplane/crossplane) community. |
75 | 67 |
|
76 | 68 |
|
77 | 69 | ## Community |
@@ -102,6 +94,8 @@ One of the easiest ways to contribute is to participate in discussions. There ar |
102 | 94 | | IM Channel | https://gitter.im/oam-dev/ | |
103 | 95 | | Twitter | [@oam_dev](https://twitter.com/oam_dev) | |
104 | 96 |
|
| 97 | +[how-it-works]: assets/how-it-works.png |
| 98 | + |
105 | 99 | ### Resources |
106 | 100 |
|
107 | 101 | Come find community blogs and conference talks about OAM in [community/talks_and_blogs.md](./community/talks_and_blogs.md). |
0 commit comments