Hi Tom,
Sorry for the delay in replying to this. I found your percentages very
interesting, I did not know these tools existed.
Replying to your points inline.
On 11/08/2020 03:07, Tom Morris wrote:
> * There was apparently never a 2.6 release that I could find, just
> 2.6-RC2?
I think that's correct.
> * Packaging has changed so that there is no longer an
> operefine-x.y.jar but instead a bunch of .class files (at least
> for Linux which I used for this survey)
We could consider reintroducing jars, perhaps as separate artifacts that
people can use to build extensions. But I think it would be better to
upload these to Maven Central instead (as discussed elsewhere already,
https://github.com/OpenRefine/OpenRefine/issues/2254)
> * The Linux kit has tripled in size from 40MB to 130MB. The other
> distributions have changed proportionally less, but the Mac kit
> got up to 193MB in 3.4-beta2, but then dropped to 145MB in the
> current snapshot release, but I'm not sure why.
Perhaps the removal of test dependencies from the packaged artifacts.
>
> If we're going to continue to attempt to maintain a stable Java API
> there are things that we can do to help ourselves here including:
>
> * being more conservative about visibility of things so that
> developers can use the public/protected/private visibility to
> understand what they can rely on and what they can't
Yes, I would do this by listing the intended extension points and make
sure that everything that those extension points do not depend on are
hidden.
> * don't make internal third-party classes/interfaces part of the
> API. We got burned by this severely with the
json.org
> <
http://json.org> objects, so we shouldn't repeat the mistake
> with Jackson.
I'm open to proposals to isolate that, but I think this is going to be
fairly involved, duplicating a lot of the logic that Jackson provides
especially around deserialization of polymorphic types. It seems
difficult to do it without a performance loss too (switching back and
forth between String and JSON classes multiple times over the course of
a serialization).
That being said there are libraries which make their underlying JSON
library pluggable, I think (although I cannot remember which one exactly
right now, perhaps a Google library for Drive or Sheets).
> * audit the public APIs for additional trouble spots
> * document our intent for how long we'll support interfaces, what
> developers can expect, etc
>
> In addition to the Java APIs we've got other extension points that
> we've encouraged developers to write to including those for:
>
> * importers along with their associated file types, MIME types,
> and format guessers
> * exporters
> * commands & operations
> * UI menu items
> * extension modules (Butterfly) bundling some of the above
>
> There are also various miscellaneous internal structures like:
>
> * operation history format (JSON)
> * preferences
> * templating exporter templates
>
> So, which, if any, of these interfaces do we want to publish as
> stable for developers to use? What guarantees do we want to make?
> How much engineering effort are we willing to invest to make this
> supportable?
I would say all these extension points you listed above should be stable
within a given major version.
That has not been the case for 3.x, as our hand was forced (by license
and security issues). Perhaps we should have incremented the major
version for these changes? I think the main downside was to publish a
major version without big user-facing changes, perhaps users would have
been a bit confused.
Antonin