Skip to content

Commit 51caf54

Browse files
docs: add versioning note (#202)
1 parent f62d085 commit 51caf54

File tree

3 files changed

+59
-0
lines changed

3 files changed

+59
-0
lines changed

docs/CHANGELOG.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ Changed
2626
- The participant configuration ``TcpNoDelay`` now defaults to true. Please note, that this has performance implications.
2727
On Linux platforms this improves throughput, and latency in particular when used in combination with ``TcpQuickAck: true``.
2828

29+
Added
30+
~~~~~
31+
32+
- The documentation now contains a page that explains the upcoming new versioning scheme.
33+
2934

3035
[4.0.55] - 2025-01-31
3136
---------------------

docs/contents.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,6 @@ Contents
1515
utilities/utilities
1616
troubleshooting/troubleshooting
1717
faq/faq
18+
for-developers/versioning
1819
licenses/license
1920
CHANGELOG

docs/for-developers/versioning.md

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# Semantic Versioning
2+
3+
Version numbers of SIL Kit have the structure `<MAJOR>.<MINOR>.<PATCH>`, e.g., `4.0.55`.
4+
The structure is reminiscent of [semantic versioning], which also uses these same three components.
5+
For SIL Kit however, the version components had different meanings, largely as a relict from the
6+
project that evolved into SIL Kit in the distant past of 2022.
7+
8+
Going forward, SIL Kit will adopt [semantic versioning].
9+
10+
Therefore, we will increment the
11+
12+
- `MAJOR` version if we make any incompatible changes to the API, e.g.,
13+
- removing deprecated functionality,
14+
- `MINOR` version if we make any compatible changes to the API, e.g.,
15+
- adding functionality,
16+
- deprecating existing functionality,
17+
- `PATCH` version if we fix bugs, but keep the API compatible with the previous version.
18+
19+
The first version of SIL Kit using [semantic versioning] will be `5.0.0`.
20+
21+
## Commitments
22+
23+
We will **never**
24+
25+
- remove non-experimental functionality without deprecating it first for at least _one_ delivery,
26+
- break the ABI of exported symbols, e.g.,
27+
- by changing the signature of an exported function without changing its name in an incompatible manner,
28+
- by modifying structures defined in the header files and used in the signature of exported functions in an incompatible manner,
29+
- change the network protocol in an incompatible way such that the previous version **is not** able to
30+
detect the incompatibility and drop the connection.
31+
32+
## SIL Kit API
33+
34+
When the above definitions use the term API, we refer to the `C` API, which is declared in the `silkit/capi/...` include directory.
35+
36+
### Header-Only C++ API
37+
38+
The `C++` API, declared and defined in the `C++` headers in the `silkit` include directory, is a wrapper around the `C` API, following an hourglass pattern.
39+
It can be understood as a standalone header-only library, which depends on the `C` API.
40+
We currently make no statements about inter-version compatibility for the `C++` API.
41+
42+
### Experimental API
43+
44+
The `C` API contains functions and data types named `SilKit_Experimental_...`.
45+
These functions and data types are not subject to the versioning scheme.
46+
47+
- We will never **modify** function signatures or data types in an incompatible manner.
48+
This would break the ABI of the modified function and create extremely hard to diagnose issues in user code.
49+
- We may **remove** such functions or data types _without_ the major version increment and _without_ prior deprecation.
50+
51+
<!-- ========================================================================================== -->
52+
53+
[semantic versioning]: https://semver.org/

0 commit comments

Comments
 (0)