riandyrn / otelchi

OpenTelemetry instrumentation for go-chi/chi
Apache License 2.0
111 stars 35 forks source link

New Development Strategy #27

Open riandyrn opened 5 months ago

riandyrn commented 5 months ago

At first, we thought that the OpenTelemetry project would eventually slow its development pace and become more backward compatible like many Go libraries.

We intentionally waited for this moment to continue otelchi development. However, we were wrong; instead of slowing down, its evolution is becoming much faster. This makes otelchi quickly obsolete in the OpenTelemetry ecosystem. 😅

On the other hand, we cannot just make otelchi comply with the latest version of the OpenTelemetry Go library because we need to set the minimum Go requirement to at least 1.20, which will make this library inaccessible for many Go versions (1.16 - 1.19).

Yet, people usually start to implement tracing when their system is already proven to be stable. So changing the minimum Go version of the system to use the latest version of the otelchi could lead to many unseen (and possibly catastrophic) consequences.

With these constraints in mind, we would like to share the new development strategy for this library:

base otelchi version min go version semconv version otel version
0.6.0 ✅ 1.15-1.17 ~1.10.0~ 1.12.0 ~1.7.0~ 1.10.0
~0.7.0~ ~1.17~ ~1.12.0~ ~1.10.0~
0.7.0 ✅ 1.18 1.17.0 1.14.0
0.8.0 ✅ 1.19 ~1.17.0~ 1.20.0 ~1.19.0~ 1.24.0
~0.9.0~ ~1.20~ ~1.20.0~ ~1.24.0~

So, first, we will develop version 0.6.0 by adjusting the otelchi implementation with the versions of semconv and otel shown in the table. After version 0.6.0 seems stable, we will develop 0.7.0. This cycle repeats until 0.10.0.

So what happens if there is a bug in version 0.6.0? We will patch it and release version 0.6.1. Then, we will merge this patch into all versions after 0.6.1 whenever applicable.

After these versions are stable enough (no bugs), we will start following the compatibility policy chosen by OpenTelemetry, which is mentioned here.

Update:

riandyrn commented 5 months ago

Some may ask how I get the version mapping for the semconv, otel, and Go versions.

I get it from summarizing the repo of the otelchi sister library, which is otelmux.

Here is the summary for it:

go version otelmux version (max) semconv version (max) otel version (max)
1.16 1.7.0 1.10.0 (source) 1.7.0 (source)
1.17 1.10.0 1.12.0 (source) 1.10.0 (source)
1.18 1.15.0 1.17.0 (source) 1.14.0 (source)
1.19 1.20.0 1.17.0 (source) 1.19.0 (source)
1.20 1.24.0 1.20.0 (source) 1.24.0 (source)