Re: Discuss backward compatibility for multilayer changes to v3 PDB API

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi!

On Sun, Feb 7, 2021 at 5:59 PM Lloyd Konneker via gimp-developer-list <
gimp-developer-list@xxxxxxxxx> wrote:

> The v3 PDB API has changes for multilayer capability.
> For example this signature change: gimp-edit-copy(drawable) =>
> gimp-edit-copy(drawableArray).
> This breaks some scripts in the GIMP repository and some third party
> plugins.
>
> To provide backward compatibility means allow existing scripts to work for
> a defined period.
> (say from 2.99 until 3.1).
>

Just for the record, there are no such versions: 2.99 and 3.1. Or to be
accurate, these are dev versions, they don't "count". Whatever is in 2.99
and whatever will be in 3.1 doesn't matter but for testing. We don't mind
too much broken stuff in these (we obviously prefer non-broken stuff, but
this won't stop us from releasing something for people to test the rest,
i.e. what is not broken).

As for API in particular, it means that API compatibility is a non-existent
concept there. We are heavily testing. The API may end up broken even
between 2 micro releases (like 2.99.4 to 2.99.6). This is what these
versions are for. What matters is only that we get the right API for GIMP
3.0.

That allows users time to adjust their scripts.
>

It had been decided long ago that the API could break for our GIMP 3.0
release. I mean, the multi-layer related functions you give are only the
tip of the iceberg. There are so many more changed functions, and in
particular all the base API for plug-ins are changed anyway. Now the old
base API don't even exist anymore. So anyway all plug-ins will have to be
updated. It's not even an "if" anymore, and it's not even related to
multi-layer selection (even without this, all plug-ins will have to be
updated).

I mean, it's already too late. We have not just started or anything. This
work on base API changes started more than 2 years ago (after we released
GIMP 2.10.0) and reverting this (losing 2+ years of work by several people
and using probably just as much to bring compatibility back) is not an
option as far as I'm concerned!


> If we don't provide backward compatibility, it is a logistics problem:
> third party script authors must prepare an updated copy of their scripts,
> and change over immediately when they change from 2.10 to 3.0.
>

Which is also why we have started to talk about this long before, made news
about this on GIMP website and we started to release dev versions. The
current dev API is unstable (as already said), but it's still close to what
will be released as stable. So plug-in developers are very welcome to start
porting. Whatever will change between now and finale stable GIMP 3.0 likely
won't be as much as what already changed between 2.10 and current dev
version.

We also plan to document the main changes, with porting docs, tutorial and
whatnot.
And also we hope to have the new extension platform by the time we release
GIMP 3, to help people port their plug-ins and upload them.

In the end, the change won't be so complicated. It may look scary, but in
the end, I don't think even the most complicated plug-ins will need much
more than 30 min to be ported. Ok maybe 1hour if reeeeaaaally you made a
hugely complicated plug-in, I don't know. Talking from experience of having
participated to port many of our core plug-ins.


> Some scripts in GIMP 2.99 are broken now since the API was changed but
> scripts were not updated.
> If we provide backward compatibility,
> the GIMP developers can fix the scripts in the repository at their leisure.
>

Are you talking about third-party scripts or the ones we provide? If the
core ones, of course we should port them before release. But not providing
a compatibility layer again. As said, GIMP 3 is our chance to improve our
API, 25 years of cruft, 25 years of evolution, new features, new usages, so
many things different. The goal is not to continue with double the mess.
Like if we talk about multi-layer related API, what? Do we want to propose
every layer API in double now? Both multi and single layer? Then do the
same when we finally make vectors and channels multi-selectable?

I'm not saying what you say is wrong. Of course, in an ideal setup, we try
to never break any past API. But in this ideal setup, we are more than a
handful of contributors. Right now, trying to do what you propose would be
like releasing GIMP 3.0 in 5 years. I don't think anyone wants this.

So yeah this is why we just decided long ago that API breakage was allowed
as it was a major version update. We don't do useless API breakage, but for
stuff like multi-layer selection, this just makes sense. It will be a new
ability of GIMP 3. Nobody wants our API not to be able to access this
feature. And we don't want to maintain double the functions.


> Because the name has stayed the same but the signature changed,
> to provide backward compatibility could be considered
> a problem of overloaded functions.
>
> One backward compatible solution is to implement overloading in scriptfu:
> whenever calling a PDB procedure, examine the actual arguments:
> if an arg is a single drawable, convert to a drawable array.
> (You could also do the same in GimpFu v3, if any.)
>

This feels like it would be a bug nest.


> An easier solution is to revert the signature change.
> Instead add a new PDB procedure gimp-edit-copy-multiple(drawableArray).
> Also redefine the body of gimp-edit-copy(drawable)
> to convert to an array and call the core function taking drawableArray.
>

Of course, what you propose is possible.  Maybe we could just do this
anyway. I'll think about it.


> In other words, the old gimp-edit-copy(drawable) becomes a 'convenience'
> procedure
> for the more generic gimp-edit-copy-multiple(drawableArray.)
> You could also think of it as a "compatibility" procedure and warn that it
> is deprecated.
>

A whole point of starting fresh with v3 API is not to start with deprecated
API. We will have the time to get new deprecated API (in possibly the next
25 years? 🤣). Should we really start directly with some?!


> Then if you don't want the PDB full of convenience/compatibility
> procedures,
> you could obsolete the procedure later (at say v3.1).
>

Again v3.1 won't exist (it will, but not really 😛). You mean 3.2.


> You could also argue that the original meaning of gimp-edit-copy is more
> natural.
> Few script authors are even thinking about multiple layers.
>

Because the concept didn't exist back then. Nobody was thinking about
multiple layers composited together (except for the full image). Now this
will exist in the GUI, so the API should have the concept too.


> Relation to issues on ScriptFu:
> This is issue #6026.
> Some other backward compatiblity issues are dealt with by MR 403, but not
> this one.
> A fix to scriptfu for #5402 is also necessary, but is not 'for backward
> compatibililty.'
>
> Some have suggested that ScriptFu could use GObject Introspection (using
> say Guile-GI)
> in which case all scripts would need to be rewritten to use GI
> at least to deal with the broken PDB calls.
> Some hard-core lisp programmer would also need to step forward
> to integrate Guile-GI (or some other) with ScriptFu.
>

Yes it was just an idea because from what I see, script-fu scripts are
seriously limited (PDB only basically). It would be nice if they had access
to the full libgimp* API (like Python and other languages have now).

Now that's just an idea I'm throwing. I don't think I'll want to spend too
much time on this and would love for someone else who actually cares about
GIMP's historical lisp support to step forward.

Jehan

_______________________________________________
> gimp-developer-list mailing list
> List address:    gimp-developer-list@xxxxxxxxx
> List membership:
> https://mail.gnome.org/mailman/listinfo/gimp-developer-list
> List archives:   https://mail.gnome.org/archives/gimp-developer-list
>


-- 
ZeMarmot open animation film
http://film.zemarmot.net
Liberapay: https://liberapay.com/ZeMarmot/
Patreon: https://patreon.com/zemarmot
Tipeee: https://www.tipeee.com/zemarmot
_______________________________________________
gimp-developer-list mailing list
List address:    gimp-developer-list@xxxxxxxxx
List membership: https://mail.gnome.org/mailman/listinfo/gimp-developer-list
List archives:   https://mail.gnome.org/archives/gimp-developer-list




[Index of Archives]     [Video For Linux]     [Photo]     [Yosemite News]     [gtk]     [GIMP for Windows]     [KDE]     [GEGL]     [Gimp's Home]     [Gimp on GUI]     [Gimp on Windows]     [Steve's Art]

  Powered by Linux