# Versioning

This document defines the stability guarantees offered by
the OpenTelemetry .NET Automatic Instrumentation,
along with the rules and procedures for meeting those guarantees.

This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html)
with one exception described [here](#compatibility-with-opentelemetry-net-and-other-dependencies).

## Release candidates

Release candidates are having the `-rc.N` pre-release label.

## Beta releases

Beta (experimental) releases are having the `-beta.N` pre-release label.

## Compatibility with OpenTelemetry .NET and other dependencies

OpenTelemetry .NET Automatic Instrumentation is built on top of
[OpenTelemetry .NET](https://github.com/open-telemetry/opentelemetry-dotnet).
Unfortunately, this may cause dependency version conflicts
if the instrumented application is referencing the same assemblies
as OpenTelemetry .NET Automatic Instrumentation.

The [troubleshooting document](troubleshooting.md) describes
how to resolve such conflicts.

This may be seen as a "breaking change" from the user
perspective, but unfortunately it is currently unavoidable
and bumping a major version during each dependency version bump
would be an overkill.

## Semantic Conventions stability

See [here](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/versioning-and-stability.md#semantic-conventions-stability).

## Major version bump

There are a few cases when a major bump may occur.

* Breaking change of a stable functionality or configuration.
* Removal of a stable functionality or configuration.

**Exception:** Changes related to instrumentation libraries are handled
the same way as experimental features.

Major versions bumps are avoided.

## Minor version bump

Most changes result in a minor version bump.

* Addition of new functionality, configuration, or instrumentation library.
* Making experimental functionality or configuration stable.
* Backwards compatible change in a stable functionality or configuration.
* Deprecation of a stable functionality.
* Dependency bump which may affect the user.

Changes related to the instrumentation libraries:

* Change (can be breaking) in a supported instrumentation library's
  functionality or configuration.
* Removal or deprecation of an instrumentation library.

Changes related to the experimental features:

* Change (can be breaking) in an experimental functionality or configuration.
* Removal of an experimental functionality or configuration.

### Patch version bump

Patch versions make no changes that would require recompilation
or potentially break application code.
The following are examples of patch fixes.

* Bug fixes that do not require minor version bumps per rules above.
* Security fixes.

## Version numbers before 1.0.0

We simply convert the Semantic Versioning scheme from
`MAJOR.MINOR.PATCH` to `0.MAJOR.MINOR`.

The changes that would bump the patch version
are bumping the minor version instead.
