-
Notifications
You must be signed in to change notification settings - Fork 86
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
viewzoom and viewrotation inputs break API #92
Comments
Libmypaint Master Branch is going to be unstable for a bit. One of our contributors is working on bringing new parameters to the brush engine which viewzoom and viewrotation was one of them. On that note. @achadwick, I've had a note in the 1.4.x Development Project page about updating the ABI version number which another user pointed out awhile back. Do we need to make a habit of updating that every time we introduce a feature which may break other projects? |
When you change the behavior of a function, you are in fact creating a new library, and |
The .so library version is configured in our The GNU docs tell us to bump on releases, and we make releases of libmypaint. Quoting the link above:
Policy decision time. Do we consider this advice outdated for the purposes of continuous delivery? It's a guarded "yes" from me, btw., unless we can do what @mitchfoo suggested. Patches to make libmypaint.pc spit out different library names for the development mainline are welcome too. I think that's reasonable. You can use OTOH (and this is why I want that patch) we can't insist on "revision" being bumped by each new commit that doesn't mess with an interface. I reject any suggestion that each new behavioural change requires a new library basename, but I do not think @mitchfoo was saying that. |
Note that we already bake in the API major and minor version number.
What about
Which then becomes
? Conditionally suffixing LIBMYPAINT_API_PLATFORM_VERSION with something to indicate ABI instability between releases is pretty easy to do. |
The new code is in fact an API change in an incompatible manner, which forces the libmypaint API version to climb to 2.0.0 for the next release (Semantic Versioning rules should apply). I thought the next release would be 1.4.0, but it currently cannot be because things have changed incompatibly since 1.3.x on master. @briend : is this what you intended? Would you be willing to backtrack on the API change at the cost of more work to MyPaint projects (and introduce a stroke_to_with_zoom_and_scale() or something), or should we plough on towards 2.0? If we do, could we introduce an extensible futureproof struct-based stroke_to() API for a hypothetical libmypaint 2.0? Since we're discussing making the Python side of this a namedtuple and all, that might be nice. |
More reading from the Debian front that implicitly discourages bumping the soversion too frequently: https://www.debian.org/doc/debian-policy/ch-sharedlibs.html#s-sharedlibs-runtime. Each time we bump Decision (thrashed out on the #gimp IRC channel, will be documented in a libmypaint tl;dr: API versions on master increment as needed for the upcoming release as and when features and changes are added. ABI versions are always updated immediately before each release, and only then.
|
I didn't try to 100% follow your last comment because all the autofoo and libtool stuff fries |
@mitchfoo Give me a reference for that "must not", and I'll reopen. |
Libpng is from the stone age. If there were two different libpngs, with different API, and incompatible, I don't have a link, I'm just saying what GTK+, GIMP, GLib etc are doing it, and they all |
@mitchfoo "Perfect parallel installability". Please tell me what and what get to be installed in parallel. Two different majors? Two different minors withing the same major? The entire API version string? (For no particularly well thought-out reason, libmypaint's "API version" format is I'll consider it. Are you asking for a fresh /usr/include/libmypaintX.X and It will be the devil's own sausage factory getting autotools to do this from what we have, and I'm not looking forward to it.
|
From IRC:
|
Recent changes on master have changed the public API in a backwards- incompatible way. The next release will therefore be 2.0.0, not 1.4.0. Add a VERSIONING.md for reference. Closes mypaint#92.
Sorry about all this. . . I really did not expect such a huge issue. There is only one other thing I hoped to do that would break stuff, which is add pen barrel rotation input, but I suppose that is going to wait until we have a new flexible way to send inputs to libmypaint (3.0?). Theoretically we could have dozens of input types. It'd be awesome if libmypaint could just accept any number of inputs without updating definitions, etc. |
@briend I wouldn't worry too much about it. It was bound to happen since libmypaint is used by a number of projects. We just need to establish a guideline of when to update the API and how to Update the API. That way we avoid accidental breakage like we have Gimp right now. @achadwick also what do we want to do about ABI? @QuLogic mentioning that we would need to bump that when I merged in #57. |
IMO this would be an excellent 2.0 feature! The trick will be getting it working in a way that's introspectable, and which doesn't break API. Do do we implement our own opaque mapping type with strong private types (char *, double), or alter @odysseywestra
I am in the process of deciding where the version string goes in build products like the pkg-config .pc file and header locations, and how much of it should go there. Developers presumably are only interested in backwards compatibility when building new things. If anyone's building directly against master and expects perfect stability, that's their problem. Third parties wanting stability are already supported by git tags and signed release tarballs. |
See #94 for the way I'd like it to work. If everyone subscribed here could please examine that PR and make sure that it's sensible, and likely to work with their particular combinations, I'd be super grateful. I have other work depending on this elsewhere, so I will try to merge it by Monday AM. |
Recent changes on master have changed the public API in a backwards- incompatible way. The next release will therefore be 2.0.0, not 1.4.0. Add a VERSIONING.md for reference. Closes mypaint#92.
This will allow side-by-side installations of different libmypaint builds at the level of the minor version number. Closes mypaint#92.
Recent changes on master have changed the public API in a backwards- incompatible way. The next release will therefore be 2.0.0, not 1.4.0. Add a VERSIONING.md for reference. Closes mypaint#92.
This will allow side-by-side installations of different libmypaint builds at the level of the minor version number. Closes mypaint#92.
Recent changes on master have changed the public API in a backwards- incompatible way. The next release will therefore be 2.0.0, not 1.4.0. Add a VERSIONING.md for reference. Closes mypaint#92.
This will allow side-by-side installations of different libmypaint builds at the level of the minor version number. Closes mypaint#92.
Recent changes on master have changed the public API in a backwards- incompatible way. The next release will therefore be 2.0.0, not 1.4.0. Add a VERSIONING.md for reference. Closes mypaint#92.
This will allow side-by-side installations of different libmypaint builds at the level of the minor version number. Closes mypaint#92.
Hi,
we noticed that you broke the libmypaint API without a change to any version numbers. Was this supposed to happen?
See
https://bugzilla.gnome.org/show_bug.cgi?id=783936
The text was updated successfully, but these errors were encountered: