Replies: 6 comments
-
Version 2.1.0-M4 changed the protocol a bit, as it added some +1 for separating the version number from the support libraries. Also, I'd like to see separate changelogs for protocol and libraries. If versions get split, it would be nice if the support libraries get some API which exposes the supported BSP protocol version. |
Beta Was this translation helpful? Give feedback.
-
That I agree. But for splitting the spec and the libraries I am not quite sure it is good idea:
|
Beta Was this translation helpful? Give feedback.
-
I think traditionally this was also done because its... easier to maintain.
Could you expand a bit on what the burden is? I also sort of agree with @adpi2 that every time the actual spec changes there needs to be those changes reflected as well in the implementations, so I'm not convinced that we gain a lot by doing this. The only benefit I can see would be having bug fixes in the implementations wouldn't bump that spec when it's not needed. That might be nice, but again, if there isn't an actual burden I'm not sure it's worth it. |
Beta Was this translation helpful? Give feedback.
-
From a technical POV, there is no reserved version range for the implementations to evolve. That means, implementations can not be improved and released without changing the protocol version. Even "just" bumping their dependencies without bumping the protocol version is currently not supported. |
Beta Was this translation helpful? Give feedback.
-
Isn't it sufficient to just bump the "fix" part of versions if we want to change something in the implementation? |
Beta Was this translation helpful? Give feedback.
-
But that's only a matter of time until there emerges a library which doesn't live in this repo and we don't control its versioning scheme
That's not true. There have been bugs in bsp4j which can be fixed without touching the spec. Also, the smithy migration will probably start a period of changes to the libraries. Also: libraries have dependencies and we want to bump them from time to time.
How? On the contrary, in the Rust ecosystem all libraries are required to follow semver. There are libraries that act as "plugins" for other libraries (it's a similar relationship to the one between the BSP spec and its support libraries). Plugin authors simply publish a compatibility table: https://github.com/harudagondi/bevy_fundsp/#compatibility Also, that's the case in the LSP ecosystem: https://github.com/gluon-lang/lsp-types. Even lsp4j versioning scheme isn't tied to LSP version numbers: https://github.com/eclipse-lsp4j/lsp4j#supported-lsp-versions
For example, we want to replace the "old" testkit with the "new" one. That's a breaking change from the point of view from the testkit users POV, but an insignificant implementation detail from the point of view of every other component. What should we do with the version number?
IMO, yes. |
Beta Was this translation helpful? Give feedback.
-
Currently the architecture of this repository resembles a monorepo, as it consists of many independent components:
In January we "released" version v2.1.0-M4.
But that was a release of what? The protocol itself didn't change. Some dependencies were bumped. The biggest change was the new website generator.
I propose that we disentangle versioning/releasing schemes of each component.
I guess that it initially made sense to keep the protocol and the support library versions in lockstep. But now it's starting to become a burden - introducing a minor change to one of libraries shouldn't necessitate bumping the version of the protocol itself. And vice versa - rephrasing a sentence in the spec doesn't necessarily make the libraries incompatible with the new version of the protocol. This problem is going to grow bigger and bigger as more support libraries are added.
Changes to the website generator shouldn't affect the version number at all.
Beta Was this translation helpful? Give feedback.
All reactions