Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 2ae379b

Browse files
committedMay 12, 2020
Draft of a "getting started" document for the OCI
Signed-off-by: Phil Estes <estesp@linux.vnet.ibm.com>
1 parent 0d2849d commit 2ae379b

File tree

1 file changed

+127
-0
lines changed

1 file changed

+127
-0
lines changed
 

‎GETTING_STARTED.md

+127
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
# Getting Started
2+
3+
While the [OCI Charter](./CHARTER.md) is our official governing document, many
4+
people have asked for a gentler introduction to the Open Container Initiative as
5+
well as general guidance on how to interact with the projects and specifications
6+
found under the OCI umbrella. This document attempts to be that starting point
7+
for those who may be new to the OCI, interested in participation, or who want to
8+
understand if a project is a fit for inclusion or contribution to the OCI.
9+
10+
## What is the OCI?
11+
12+
As our [website](https://opencontainers.org) states, chiefly the OCI is "an open
13+
governance structure for the express purpose of creating open industry standards
14+
around container formats and runtime." Created in 2015, the core initial purpose
15+
was to align Docker and other ecosystem players around a runtime and image
16+
specification that would become an industry baseline for how images are packaged
17+
and executed in OCI compliant runtimes.
18+
19+
Since that initial work, finalized in 1.0 specs in the summer of 2017, a
20+
distribution specification is now underway, based on the HTTP API of the initial
21+
Docker distribution (registry) project. In 2019, an "artifacts" project was
22+
approved by the TOB and will be used to define other artifact types (in addition
23+
to OCI images) which may be defined and stored in registries conforming to the
24+
OCI distribution spec.
25+
26+
## Who uses the OCI?
27+
28+
It makes the most sense to see consumers of OCI as fitting into a few specific
29+
categories: contributors/members, implementors, and end users.
30+
31+
**Contributors**, including the project maintainers, and member companies have a
32+
vested interest in bringing forward the "state of the art" with respect to the
33+
scope of the OCI. Currently this is of course limited to specifications around
34+
runtime, image, and distribution of containers. The artifacts repository and
35+
project is related to both image and distribution and is a natural expansion
36+
of OCI into ongoing experimentation with registries and cloud native tooling.
37+
Specifically, [artifacts](https://github.com/opencontainers/artifacts) expands the concept around the **what** when
38+
discussing non-OCI image content (Helm charts, Singularity container images,
39+
SPDX, source bundles, etc.) and registries.
40+
41+
**Implementors** own projects outside the OCI for which they have determined
42+
value in being "OCI compliant"; whether that's a registry, a unique container
43+
runtime, or an end-user tool that talks to registries. They take the OCI
44+
specifications and implement support for them in their project, and potentially
45+
will use the conformance suite within the OCI to validate their compliance to
46+
the specification(s).
47+
48+
**End Users** tend to gain value from the OCI specifications in an indirect
49+
way: they will expect projects and products that claim OCI compliance to
50+
interoperate smoothly with other projects and products which are OCI compliant.
51+
They will look to the OCI to continue maturing conformance and specifications
52+
to best support the cloud native ecosystem's goal of interoperability for
53+
runtimes, images, and distributing images and artifacts across clouds and
54+
platforms.
55+
56+
## What Types of Projects Exist within the OCI?
57+
58+
There has been some growth in the nature and use of the OCI since those
59+
initial meetings around the image and runtime specification in 2015. The
60+
following subsections define project categories which exist in the OCI today.
61+
62+
### Specifications
63+
64+
Clearly the image, runtime, and distribution specifications are the key
65+
reason for the existence of the OCI today. These standards are meant to
66+
provide a baseline to follow for implementors of runtimes, registries, and
67+
tools which interact with container images and registries.
68+
- [Runtime spec](https://github.com/opencontainers/runtime-spec)
69+
- [Image spec](https://github.com/opencontainers/image-spec)
70+
- [Distribution spec](https://github.com/opencontainers/distribution-spec)
71+
72+
### Spec Conformance Test
73+
74+
Conformance tests should provide a clear, end-user runnable test suite for
75+
implementors to use to determine and demonstrate that an implementing project
76+
or product meets the explicit definitions of the specification.
77+
- [OCI Conformance](https://github.com/opencontainers/oci-conformance)
78+
79+
The most advanced conformance implementation to date is for the new distribution specification. Additional work on image and runtime conformance is ongoing.
80+
81+
### Libraries
82+
83+
While hosting library code is not a common goal of the OCI, there are a few
84+
specific cases where small, non-end user focused, and tightly scoped libraries
85+
have been accepted into the OCI. The common denominator for these libraries are
86+
that they help implementors properly use features of the specifications:
87+
- [go-digest](https://github.com/opencontainers/go-digest)
88+
- [selinux](https://github.com/opencontainers/selinux)
89+
90+
Utilities and end-user UX-oriented code is most likely better targeted at other
91+
more broad communities like the [CNCF](https://cncf.io). While there are not
92+
explicit rules, a discussion with the TOB is warranted for projects looking to
93+
contribute a library to OCI.
94+
95+
### Reference Implementations
96+
97+
While theoretically a specification can have one or more reference
98+
implementations, the OCI runtime spec and the program, `runc`, have gone
99+
hand in hand simply due to the particulars around the founding of the OCI.
100+
101+
It is not inconceivable that more reference implementations would be
102+
contributed and supported within the OCI, but at this point, the only
103+
active and viable reference implementation within the OCI is the `runc`
104+
implementation of the runtime specification, based around the contributed
105+
**libcontainer** codebase contributed by Docker.
106+
- [runc](https://github.com/opencontainers/runc)
107+
108+
Runc is also unique in that it is an open source reference implementation,
109+
but also a core dependent ecosystem component underneath the majority of
110+
container engine implementations in use today.
111+
112+
For any future reference implementation to be adopted by the OCI, it would
113+
need to be kept in sync with the specification it implements. For a change
114+
to be accepted to the spec, the equivalent implementation would need to be
115+
authored and accepted as well.
116+
117+
## Should my Project be in the OCI?
118+
119+
The OCI receives proposals suggesting additions to the current suite
120+
of project types listed above. We understand that a perfect framework
121+
for determining inclusion or rejection of these proposals is an
122+
intangible goal. However, we list the following considerations to help
123+
guide future potential submissions.
124+
125+
1. The OCI, unlike the CNCF, is not directly chartered for the advancement, marketing, and support of general cloud native software projects.
126+
2. Projects consumed via a UI and/or with a significant end user experience component are unlikely to be a good fit for the OCI model.
127+
3. The OCI has an small but active and vibrant group of participants today; however the specifications and related projects are a small niche of the overall cloud native world, and seeking out the OCI to validate or grow a community around a young project is unlikely to be a viable model. The CNCF is much more suited to that aim given the sandbox and maturity model.

0 commit comments

Comments
 (0)
Please sign in to comment.