This document describes the versioning policy for this repository. This policy is designed so the following goals can be achieved.
Users are provided a codebase of value that is stable and secure.
Versions will comply with semver 2.0 with the following exceptions.
New methods may be added to exported API interfaces. All exported interfaces that fall within this exception will include the following paragraph in their public documentation.
Warning: methods may be added to this interface in minor releases.
If a module is version v2 or higher, the major version of the module must be included as a /vN at the end of the module paths used in go.mod files (e.g., module go.opentelemetry.io/otel/v2, require go.opentelemetry.io/otel/v2 v2.0.1) and in the package import path (e.g., import "go.opentelemetry.io/otel/v2/trace"). This includes the paths used in go get commands (e.g., go get go.opentelemetry.io/otel/v2@v2.0.1). Note there is both a /v2 and a @v2.0.1 in that example. One way to think about it is that the module name now includes the /v2, so include /v2 whenever you are using the module name).
If a module is version v0 or v1, do not include the major version in either the module path or the import path.
Experimental modules still under active development will be versioned at v0 to imply the stability guarantee defined by semver.
Major version zero (0.y.z) is for initial development. Anything MAY change at any time. The public API SHOULD NOT be considered stable.
Mature modules for which we guarantee a stable public API will be versioned with a major version greater than v0.
Experimental modules will start their versioning at v0.0.0 and will increment their minor version when backwards incompatible changes are released and increment their patch version when backwards compatible changes are released.
All stable modules that use the same major version number will use the same entire version number.
v2 or higher, the major version of the module must be included as a /vN at the end of the module paths used in go.mod files (e.g., module go.opentelemetry.io/contrib/instrumentation/host/v2, require go.opentelemetry.io/contrib/instrumentation/host/v2 v2.0.1) and in the package import path (e.g., import "go.opentelemetry.io/contrib/instrumentation/host/v2"). This includes the paths used in go get commands (e.g., go get go.opentelemetry.io/contrib/instrumentation/host/v2@v2.0.1. Note there is both a /v2 and a @v2.0.1 in that example. One way to think about it is that the module name now includes the /v2, so include /v2 whenever you are using the module name).v0 or v1, do not include the major version in either the module path or the import path.Experimental modules still under active development will be versioned at v0 to imply the stability guarantee defined by semver.
Major version zero (0.y.z) is for initial development. Anything MAY change at any time. The public API SHOULD NOT be considered stable.
Mature modules for which we guarantee a stable public API and telemetry will be versioned with a major version greater than v0.
Experimental modules will start their versioning at v0.0.0 and will increment their minor version when backwards incompatible changes are released and increment their patch version when backwards compatible changes are released.
Stable contrib modules cannot depend on experimental modules from this project.
All stable contrib modules of the same major version with this project will use the same entire version as this project.
To better understand the implementation of the above policy the following example is provided. This project is simplified to include only the following modules and their versions:
otel: v0.14.0otel/trace: v0.14.0otel/metric: v0.14.0otel/baggage: v0.14.0otel/sdk/trace: v0.14.0otel/sdk/metric: v0.14.0These modules have been developed to a point where the otel/trace, otel/baggage, and otel/sdk/trace modules have reached a point that they should be considered for a stable release. The otel/metric and otel/sdk/metric are still under active development and the otel module depends on both otel/trace and otel/metric.
The otel package is refactored to remove its dependencies on otel/metric so it can be released as stable as well. With that done the following release candidates are made:
otel: v1.0.0-RC1otel/trace: v1.0.0-RC1otel/baggage: v1.0.0-RC1otel/sdk/trace: v1.0.0-RC1The otel/metric and otel/sdk/metric modules remain at v0.14.0.
A few minor issues are discovered in the otel/trace package. These issues are resolved with some minor, but backwards incompatible, changes and are released as a second release candidate:
otel: v1.0.0-RC2otel/trace: v1.0.0-RC2otel/baggage: v1.0.0-RC2otel/sdk/trace: v1.0.0-RC2Notice that all module version numbers are incremented to adhere to our versioning policy.
After these release candidates have been evaluated to satisfaction, they are released as version v1.0.0.
otel: v1.0.0otel/trace: v1.0.0otel/baggage: v1.0.0otel/sdk/trace: v1.0.0Since both the go utility and the Go module system support the semantic versioning definition of precedence, this release will correctly be interpreted as the successor to the previous release candidates.
Active development of this project continues. The otel/metric module now has backwards incompatible changes to its API that need to be released and the otel/baggage module has a minor bug fix that needs to be released. The following release is made:
otel: v1.0.1otel/trace: v1.0.1otel/metric: v0.15.0otel/baggage: v1.0.1otel/sdk/trace: v1.0.1otel/sdk/metric: v0.15.0Notice that, again, all stable module versions are incremented in unison and the otel/sdk/metric package, which depends on the otel/metric package, also bumped its version. This bump of the otel/sdk/metric package makes sense given their coupling, though it is not explicitly required by our versioning policy.
As we progress, the otel/metric and otel/sdk/metric packages have reached a point where they should be evaluated for stability. The otel module is reintegrated with the otel/metric package and the following release is made:
otel: v1.1.0-RC1otel/trace: v1.1.0-RC1otel/metric: v1.1.0-RC1otel/baggage: v1.1.0-RC1otel/sdk/trace: v1.1.0-RC1otel/sdk/metric: v1.1.0-RC1All the modules are evaluated and determined to a viable stable release. They are then released as version v1.1.0 (the minor version is incremented to indicate the addition of new signal).
otel: v1.1.0otel/trace: v1.1.0otel/metric: v1.1.0otel/baggage: v1.1.0otel/sdk/trace: v1.1.0otel/sdk/metric: v1.1.0