|
| 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