Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Semantic versions for milestones #276

Closed
mayurkale22 opened this issue Sep 30, 2019 · 8 comments
Closed

Semantic versions for milestones #276

mayurkale22 opened this issue Sep 30, 2019 · 8 comments
Assignees
Milestone

Comments

@mayurkale22
Copy link
Member

For the defined milestones, the semantic version of library release is not mentioned. I think we should add version numbers to make things consistent across the languages.

For example,

Release Version Patch 1 Patch 2 Patch n
Alpha v0.2 0.2.0 0.2.1 0.2.2 0.2.n
Alpha v0.3 0.3.0 0.3.1 0.3.2 0.3.n
Alpha v0.4 0.4.0 0.4.1 0.4.2 0.4.n
Beta v0.5 0.5.0 0.5.1 0.5.2 0.5.n
GA v1.0 1.0.0 1.0.1 1.0.2 1.0.n

Also, are we planning to keep API and SDK on the same versions? What if I changed (patch) the SDK, but not API? Should we still release API package with a new version?

Any thoughts?

@c24t
Copy link
Member

c24t commented Sep 30, 2019

One problem with this table that it ignore language-specific conventions for version numbers. For example, python has special semantics for pre-release versions. We were planning to release python as 0.1a.0, but can change this if we're trying to keep all clients in sync.

@c24t
Copy link
Member

c24t commented Sep 30, 2019

Also, are we planning to keep API and SDK on the same versions? What if I changed (patch) the SDK, but not API? Should we still release API package with a new version?

I wonder the same thing. If we're following major/minor/patch semantics, I'd assume that either package could get a patch update without affecting the other. Major and minor updates to the API would require a major or minor update to the SDK (or the SDK would need to depend on an old version of the API), but not vice-versa.

Another question is whether we're trying to keep the version of the clients in sync with the spec version. https://github.com/open-telemetry/opentelemetry-specification/blob/master/milestones.md#milestones seems to assume that we will, but that would mean that we can't release new major versions of clients without a corresponding major spec version change.

@tigrannajaryan
Copy link
Member

This is related to #246 and this proposal #115

You may want to comment on the original issue and review the proposal.

@tedsuo
Copy link
Contributor

tedsuo commented Oct 1, 2019

I haven't reviewed the other proposals in a while (looking now), but a quick two cents to get python unstuck:

High level description of our versioning (proposed)

  • Use a semver like schema - vX.Y.Z
  • The highest-order position mush match the spec. For pre-1.0, this means that v0.2.x release of an API or SDK package must match v0.2 of the spec.
  • Lower-order positions have no special meaning or relationship. So if you have a v0.2.x API and a v02.y SDK, x and y do not need to correlate in any way.
  • If a language has a special versioning scheme, that is fine provided that it does not impede or confuse any of the above requirements. A v0.2a.1 release of python can clearly match a v0.2 spec, so this is not a problem. However, if there is no special value in diverging from our chosen schema (AKA package managers do not actually care), then the original schema should always be used.

@tigrannajaryan
Copy link
Member

tigrannajaryan commented Oct 1, 2019

@tedsuo please have a look at #246

I think what you suggest was already suggested and drawbacks were discussed. It would be great if you have ideas on how to overcome the drawbacks.

@c24t
Copy link
Member

c24t commented Oct 1, 2019

Thanks @tedsuo.

  • The highest-order position mush match the spec. For pre-1.0, this means that v0.2.x release of an API or SDK package must match v0.2 of the spec.

I think we're going to run into a problem similar to #246 here. Where #246 describes the relationship between the SDK and API spec version, here the problem is between the API package version and API spec version. Following this would mean that we couldn't release major/minor updates to API packages without a corresponding spec change. I'll comment on #246 in detail.

  • A v0.2a.1 release of python can clearly match a v0.2 spec, so this is not a problem

For now we can release as 0.1a.0 since this doesn't preclude other versioning schemes. We just can't release a 0.1b.x or 0.2a.x without settling on one.

  • if there is no special value in diverging from our chosen schema...

I agree, it sounds like we're ultimately going to call this 0.1.0 in all languages.

@bruno-garcia
Copy link
Member

Second @c24t that although it's great to align these things, it comes with the cost of not being idiomatic. In .NET a alpha/beta/preview package would have something append to the version, i.e:

Preview: 1.0.0-alpha.
Non preview: 1.0.0 or 1.0.0.0.

I wouldn't be surprised if tools check if id matches something like ^\d+(\.\d+){1,3}$

@tigrannajaryan tigrannajaryan self-assigned this Oct 1, 2019
tigrannajaryan pushed a commit to tigrannajaryan/opentelemetry-specification that referenced this issue Oct 1, 2019
## Problem Description

We assume that API specification will have a version number.
We also assume that SDK's will implement a particular API version.

Library authors may want to make multiple SDK releases that are
implementing a particular API version. For example, we may start
with API version 1.0.0 and make an SDK release 1.0.0 that
implements that particular API.

Later library authors may want to make a bug fix in the SDK and
release 1.0.1. Note that this release implements the same API
version, there are no changes from API perspective. Now we are in
a situation when API and SDK versions diverged.

This diverging seems inevitable because most likely API versions
will change much less frequently than library authors will want
to make SDK releases that implement those particular API versions.

## Proposed Solution

Both API and SDK will semantic version numbers. API and SDK
version numbers will not be strictly coupled. SDK is free to have
a separate version number with one limitation: major version
number of the SDK must be the same as the major version number of
the API that the SDK implements.

For example SDKs 0.1.0, 0.2.3, 0.7.0 can all implement API 0.1.0,
but SDK 1.0.0 cannot implement API 0.1.0.

This weak coupling of version numbers allows language library
authors to make patch and minor version SDK releases
independently without the need to coordinate version numbers with
API specification. The requirement to use the same major version
number is aimed to minimize the element of surprise and avoid
spilling SDK version numbers into next major version in case we
decide the policy starting from certain major version in the future.

Because API and SDK version numbers are not strictly coupled every
SDK release must clearly specify API version number that it
implements. Language library authors must include this information
in SDK release notes. For example the release notes may say:
"SDK 0.3.4, implements API 0.1.0".

## Alternate Solutions

Two other solutions were considered but saw less support:

1. Complete decouple SDK and API version numbers. SDK can use any
version, including a different version number. The downside of this
solution is that it can create a situation when in the future if we
decide version labeling policy it may be too late since there may
exist SDKs versions that spill into the next major version. To keep
our options open the major version number restriction was proposed.

2. Couple major and minor version numbers of SDK and API, only allow
SDK to freely change patch version number and always use 0 patch
number for API versions. The downside of this solution is that SDK
releases can only make patch releases if they implement the same
API or they have to break the semantic versioning rule and allow
significant changes while only incrementing patch number.

Implements open-telemetry#276 and open-telemetry#246
@SergeyKanzhelev SergeyKanzhelev added this to the Alpha v0.2 milestone Oct 3, 2019
tigrannajaryan pushed a commit to tigrannajaryan/opentelemetry-specification that referenced this issue Oct 3, 2019
## Problem Description

We assume that API specification will have a version number.
We also assume that SDK's will implement a particular API version.

Library authors may want to make multiple SDK releases that are
implementing a particular API version. For example, we may start
with API version 1.0.0 and make an SDK release 1.0.0 that
implements that particular API.

Later library authors may want to make a bug fix in the SDK and
release 1.0.1. Note that this release implements the same API
version, there are no changes from API perspective. Now we are in
a situation when API and SDK versions diverged.

This diverging seems inevitable because most likely API versions
will change much less frequently than library authors will want
to make SDK releases that implement those particular API versions.

## Proposed Solution

Both API and SDK will semantic version numbers. API and SDK
version numbers will not be strictly coupled. SDK is free to have
a separate version number with one limitation: major version
number of the SDK must be the same as the major version number of
the API that the SDK implements.

For example SDKs 0.1.0, 0.2.3, 0.7.0 can all implement API 0.1.0,
but SDK 1.0.0 cannot implement API 0.1.0.

This weak coupling of version numbers allows language library
authors to make patch and minor version SDK releases
independently without the need to coordinate version numbers with
API specification. The requirement to use the same major version
number is aimed to minimize the element of surprise and avoid
spilling SDK version numbers into next major version in case we
decide the policy starting from certain major version in the future.

Because API and SDK version numbers are not strictly coupled every
SDK release must clearly specify API version number that it
implements. Language library authors must include this information
in SDK release notes. For example the release notes may say:
"SDK 0.3.4, implements API 0.1.0".

## Alternate Solutions

Two other solutions were considered but saw less support:

1. Complete decouple SDK and API version numbers. SDK can use any
version, including a different version number. The downside of this
solution is that it can create a situation when in the future if we
decide version labeling policy it may be too late since there may
exist SDKs versions that spill into the next major version. To keep
our options open the major version number restriction was proposed.

2. Couple major and minor version numbers of SDK and API, only allow
SDK to freely change patch version number and always use 0 patch
number for API versions. The downside of this solution is that SDK
releases can only make patch releases if they implement the same
API or they have to break the semantic versioning rule and allow
significant changes while only incrementing patch number.

Implements open-telemetry#276 and open-telemetry#246
bogdandrutu pushed a commit that referenced this issue Oct 5, 2019
* Proposal: API and SDK version labeling

## Problem Description

We assume that API specification will have a version number.
We also assume that SDK's will implement a particular API version.

Library authors may want to make multiple SDK releases that are
implementing a particular API version. For example, we may start
with API version 1.0.0 and make an SDK release 1.0.0 that
implements that particular API.

Later library authors may want to make a bug fix in the SDK and
release 1.0.1. Note that this release implements the same API
version, there are no changes from API perspective. Now we are in
a situation when API and SDK versions diverged.

This diverging seems inevitable because most likely API versions
will change much less frequently than library authors will want
to make SDK releases that implement those particular API versions.

## Proposed Solution

Both API and SDK will semantic version numbers. API and SDK
version numbers will not be strictly coupled. SDK is free to have
a separate version number with one limitation: major version
number of the SDK must be the same as the major version number of
the API that the SDK implements.

For example SDKs 0.1.0, 0.2.3, 0.7.0 can all implement API 0.1.0,
but SDK 1.0.0 cannot implement API 0.1.0.

This weak coupling of version numbers allows language library
authors to make patch and minor version SDK releases
independently without the need to coordinate version numbers with
API specification. The requirement to use the same major version
number is aimed to minimize the element of surprise and avoid
spilling SDK version numbers into next major version in case we
decide the policy starting from certain major version in the future.

Because API and SDK version numbers are not strictly coupled every
SDK release must clearly specify API version number that it
implements. Language library authors must include this information
in SDK release notes. For example the release notes may say:
"SDK 0.3.4, implements API 0.1.0".

## Alternate Solutions

Two other solutions were considered but saw less support:

1. Complete decouple SDK and API version numbers. SDK can use any
version, including a different version number. The downside of this
solution is that it can create a situation when in the future if we
decide version labeling policy it may be too late since there may
exist SDKs versions that spill into the next major version. To keep
our options open the major version number restriction was proposed.

2. Couple major and minor version numbers of SDK and API, only allow
SDK to freely change patch version number and always use 0 patch
number for API versions. The downside of this solution is that SDK
releases can only make patch releases if they implement the same
API or they have to break the semantic versioning rule and allow
significant changes while only incrementing patch number.

Implements #276 and #246

* PR fixes
@bogdandrutu
Copy link
Member

This issue was resolved in #280

SergeyKanzhelev pushed a commit to SergeyKanzhelev/opentelemetry-specification that referenced this issue Feb 18, 2020
* Proposal: API and SDK version labeling

## Problem Description

We assume that API specification will have a version number.
We also assume that SDK's will implement a particular API version.

Library authors may want to make multiple SDK releases that are
implementing a particular API version. For example, we may start
with API version 1.0.0 and make an SDK release 1.0.0 that
implements that particular API.

Later library authors may want to make a bug fix in the SDK and
release 1.0.1. Note that this release implements the same API
version, there are no changes from API perspective. Now we are in
a situation when API and SDK versions diverged.

This diverging seems inevitable because most likely API versions
will change much less frequently than library authors will want
to make SDK releases that implement those particular API versions.

## Proposed Solution

Both API and SDK will semantic version numbers. API and SDK
version numbers will not be strictly coupled. SDK is free to have
a separate version number with one limitation: major version
number of the SDK must be the same as the major version number of
the API that the SDK implements.

For example SDKs 0.1.0, 0.2.3, 0.7.0 can all implement API 0.1.0,
but SDK 1.0.0 cannot implement API 0.1.0.

This weak coupling of version numbers allows language library
authors to make patch and minor version SDK releases
independently without the need to coordinate version numbers with
API specification. The requirement to use the same major version
number is aimed to minimize the element of surprise and avoid
spilling SDK version numbers into next major version in case we
decide the policy starting from certain major version in the future.

Because API and SDK version numbers are not strictly coupled every
SDK release must clearly specify API version number that it
implements. Language library authors must include this information
in SDK release notes. For example the release notes may say:
"SDK 0.3.4, implements API 0.1.0".

## Alternate Solutions

Two other solutions were considered but saw less support:

1. Complete decouple SDK and API version numbers. SDK can use any
version, including a different version number. The downside of this
solution is that it can create a situation when in the future if we
decide version labeling policy it may be too late since there may
exist SDKs versions that spill into the next major version. To keep
our options open the major version number restriction was proposed.

2. Couple major and minor version numbers of SDK and API, only allow
SDK to freely change patch version number and always use 0 patch
number for API versions. The downside of this solution is that SDK
releases can only make patch releases if they implement the same
API or they have to break the semantic versioning rule and allow
significant changes while only incrementing patch number.

Implements open-telemetry#276 and open-telemetry#246

* PR fixes
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants