aboutsummaryrefslogtreecommitdiff
path: root/notes/api_versioning.txt
blob: 6e33a6b64c40a572cb4b4389761a78a86304a04d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

It would be nice if versioning could be:
* safe from developer errors
  (preferably 100% safe)
* preferably more or less fully automatic
* support backports
    - even from a 3rd party, such as a distributor.


Versioning can be done at different "levels":
* Module (=library)
    - Can lead to faster load times
* Symbol
    - Makes backport handling easier.
    - Functions can be added in any order.

Version info can be generated at different "places":
* By the library developers
    - verified either by the compiler or by the package repo
* By the compiler
    - and of course verified by the package repo
* At the package repo
    - i.e. implicitly or explicitly on upload
    - the upload CLI/API/UI could require approval of API additions,
      and API bumps due to incompatible changes.

Versions "types":
* Dotted versions, with backport support
    - e.g. 1.6.0, but also things backports like 1.4.9.2, or other
      kinds of formats such as 2024.09.30-git-12345abcde
    - it is easy to get these wrong, for example:
        - bumping the wrong component
          (e.g. from 1.1 to 1.2 instead of 2.0 or vice versa)
        - bumping to a final version too early
        - bumping to a "far-future" version accidentally
* Simple sequence numbers
    - This does not support backports, so it's rather limited
* Hash-based versions
    - Based on API contents.
    - Can support any number of preceeding versions (= subsets)
      and these can be added after-the-fact.
        - Could have infintely many subsets, but to be pragmatic, only
          actually used (uploaded or referenced) subsets should be
          allocated.
    - Handles backports flawlessly!

Maybe sort all functions by name... TODO


Development experience
----------------------

* It should be possible to change an interface while developing