On Sun, Sep 23, 2018 at 3:22 PM Peter Nabbefeld <peter.nabbef...@gmx.de>
wrote:

> 1) Yes, usually the API is reasonably stable in most areas after being
> used as a friend-only API for some releases, so if it is difficult to
> change, this will be a rare event. So, You'll have rarely to do many
> changes and can do some effort in these rare cases, if really necessary.
> IMHO that should be fine.
>

So, I thought one of the modules we are talking about here is csl.api, but
it turned out that *is* a public API currently (which, frankly, scares me a
little bit). So I took a look at gsf.testrunner and the last API change
appears to be from 2015 (according to apichanges.xml), which does not seem
to be *that* long ago.


>
> 2) About Your inline comment: Well, it may happen, that functionality
> will be weighted more than API design. OTOH, I'd see this as an issue
> for a compatibility layer: Let the old API stay alive, while creating a
> new one. Then deprecate it, and remove the compatibility layer one or
> two major releases of NB later.
>
This way I'd expect modules to be stable, but also more usable by the
> community.
>

Given two major release may be 6 months in our current scheme, this sounds
neither particularly stable, nor particularly convenient for someone doing
the change (creating a compatibility layer is likely to have a fairly high
cost).

Jan


>
> Kind regards
>
> Peter
>
>
> Am 23.09.18 um 13:49 schrieb Jan Lahoda:
> > So, if I understand correctly, the view is a combination of c) ("it is OK
> > if doing changes to the API is difficult", like writing compatibility
> > layers, more elaborate migration tutorials, updating existing plugins
> etc.)
> > and b) (making an occasional incompatible change).
> >
> > I think I am fine with that, I just want to ensure the consequences are
> > understood. It is of course absolutely possible that a specific API won't
> > need any enhancements, and so will be fine.
> >
> > One more comment inline.
> >
> > On Sun, Sep 23, 2018 at 12:55 PM Peter Nabbefeld <peter.nabbef...@gmx.de
> >
> > wrote:
> >
> >> The problem here is:
> >>
> >> 1. If every API is friend-only, nobody will be able to depend on those
> >> without first becoming a friend. Or You have to depend on implementation
> >> version. So, these APIs will never be reviewed by the broader community
> >> and will never be ready for usage.
> >>
> >
> >> 2. If the API is public, You may break other implementors plugins.
> >> You'll usually never do that to just annoy them, but because You've got
> >> some serious problem without changing it. As a result, the API should
> >> become more stable, more usable, and of better quality in general.
> >>
> > Not sure about this: when an API is not designed to be enhancible
> > compatibly, and is not sufficient (i.e. needs to be enhanced), I suspect
> > preference will be given to making the change compatibly, even at the
> cost
> > of making the API less nice. So, over time, the API will probably be more
> > complete, but possibly less clean.
> >
> > Thanks,
> >      Jan
> >
> > Probably, for the time the major version of NB doesn't change, there
> >> should be a compatibility layer, if possible.
> >>
> >> 3. If the API changes, there needs of course to be a migration tutorial,
> >> which must be upgraded if there are still any questions around about how
> >> to upgrade the plugin.
> >>
> >> 4. Plugin developers are: plugin developers, so it should not be a big
> >> issue for them to update their dependent module, if there's a tutorial.
> >>
> >> 5. As sometimes developers loose interest in further maintaining their
> >> plugin, there should be the source available somewhere, so other
> >> developers could take care of those. Ideally, the plugins should also be
> >> licensed under AL2.0, so they could be supplied in some Apache contrib
> >> repository.
> >>
> >> So, IMHO modules should be friend-only for a maximum of 2 or 3 releases.
> >> After this, I'd expect them to be reasonable stable to make them public,
> >> so the community could experiment with those and probably make proposals
> >> for a better API. If the API changes then, most developers depending on
> >> the module will even be happy about the new possibilities. But they
> >> should also tell, if some change may make their usage of the module
> >> impossible, of course, so the problems could be considered early.
> >>
> >> Kind regards
> >>
> >> Peter
> >>
> >>
> >>
> >> Am 23.09.18 um 12:04 schrieb Jan Lahoda:
> >>> On Sun, Sep 23, 2018 at 11:03 AM Christian Lenz <
> christian.l...@gmx.net>
> >>> wrote:
> >>>
> >>>> Hey guys,
> >>>>
> >>>> please see my last 3 comments of this ticket. It explains, why it is
> >>>> important to have public APIs instead of Friends:
> >>>>
> >>
> https://issues.apache.org/jira/browse/NETBEANS-1035?focusedCommentId=16574478&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-16574478
> >>>>
> >>> My personal opinion only.
> >>>
> >>> I think noone doubts the a public API is better for plugins. However, I
> >>> think that it is necessary that at least one of the following is true:
> >>> a) someone signs up to make a proper public API, that we will be able
> to
> >>> enhance compatibly
> >>> b) we accept that there are smaller or bigger incompatible API changes
> >>> (size of the incompatible change depends on the nature of the change
> and
> >> of
> >>> the existing API)
> >>> c) we accept that some changes to the API will be very difficult to do
> >>> (compatibly), maybe even so difficult that they won't be made (so
> >> difficult
> >>> that noone will sign up to do the change)
> >>>
> >>> So, I wonder what are the views of others on these.
> >>>
> >>> Thanks,
> >>>       Jan
> >>>
> >>>
> >>>> The Thing is, no one know, what other nice Plugins will come in the
> >>>> future, but everytime, someone creates a Plugin which Needs to be
> >> friend,
> >>>> depends on only the next release that someone adds it. That means,
> that
> >>>> this Plugin will first work only for the next release, if someone
> >> decided
> >>>> to add this Plugin as a friend. Same happens for every other Plugins
> >> that
> >>>> Comes later.
> >>>>
> >>>> It is not that everytime a user want to use the newest IDE, often
> >> someone
> >>>> stays at the IDE if there is Nothing really new for him/her to Change
> >>>> update. That means, that he/she could miss the Plugin, if it is
> relevant
> >>>> for him. In this release.
> >>>>
> >>>> And what happens, if someone removes the Plugin as a friend? That
> >> happens
> >>>> for Geertjans KendoUI Plugin. The Plugin worked some versions before,
> >> not
> >>>> now anymore, because it was removed from being a friend.
> >>>>
> >>>> Making APIs public makes much more sense for 3rd-party Plugin
> >> developers.
> >>>> I think HTML, JS, CSS, C/C++ PHP and whatever is there is stable
> enough
> >> for
> >>>> years to say: yes, make them public. And will there some exceptions,
> >> that
> >>>> the devs figure out, someone can fix it Maybe as a patch or for the
> next
> >>>> release, which is acceptable.
> >>>>
> >>>>
> >>>> Cheers
> >>>>
> >>>> Chris
> >>>>
> >>>>
> >>>>
> >>>> Von: Laszlo Kishalmi
> >>>> Gesendet: Sonntag, 23. September 2018 04:45
> >>>> An: dev@netbeans.incubator.apache.org
> >>>> Betreff: Re: Public vs. Friend API Reloaded (Summary)
> >>>>
> >>>> Hi all,
> >>>> This list is what we have inside the current codebase (Without Yenta
> on
> >>>> other locations.)
> >>>> I put those here which have 10+ friend marked. (The complete list is
> >>>> attached)
> >>>> Upon this list it could be a good choice to try make the following
> >> public
> >>>> (maybe for NetBeans 10):
> >>>> • gsf.testrunner
> >>>> • gsf.testrunner.ui
> >>>> I know that a few external language plugins are using those as well,
> and
> >>>> the API is quite a good shape anyway.
> >>>> What do you think?
> >>>> Generated using: find . -name project.xml -exec grep -H -c friend\> {}
> >>>> \;|sort -r -gt : -k 2 |grep -v :0
> >>>> ./ide/dlight.nativeexecution/nbproject/project.xml:147
> >>>> ./ide/dlight.nativeexecution.nb/nbproject/project.xml:145
> >>>> ./ide/web.common/nbproject/project.xml:68
> >>>> ./ide/gsf.testrunner/nbproject/project.xml:40
> >>>> ./php/php.api.phpmodule/nbproject/project.xml:39
> >>>> ./java/java.api.common/nbproject/project.xml:39
> >>>> ./ide/options.editor/nbproject/project.xml:39
> >>>> ./java/maven/nbproject/project.xml:37
> >>>> ./enterprise/j2ee.common/nbproject/project.xml:34
> >>>> ./profiler/profiler.api/nbproject/project.xml:32
> >>>> ./profiler/lib.profiler/nbproject/project.xml:32
> >>>> ./java/maven.embedder/nbproject/project.xml:31
> >>>> ./webcommon/web.clientproject.api/nbproject/project.xml:29
> >>>> ./profiler/lib.profiler.common/nbproject/project.xml:29
> >>>> ./ide/gsf.testrunner.ui/nbproject/project.xml:28
> >>>> ./php/php.api.executable/nbproject/project.xml:27
> >>>> ./ide/html.editor.lib/nbproject/project.xml:26
> >>>> ./enterprise/j2ee.api.ejbmodule/nbproject/project.xml:25
> >>>> ./ide/web.browser.api/nbproject/project.xml:24
> >>>> ./ide/lib.terminalemulator/nbproject/project.xml:24
> >>>> ./profiler/lib.profiler.ui/nbproject/project.xml:23
> >>>> ./java/maven.model/nbproject/project.xml:23
> >>>> ./java/j2ee.core.utilities/nbproject/project.xml:23
> >>>> ./enterprise/websvc.jaxwsmodel/nbproject/project.xml:23
> >>>> ./ide/team.commons/nbproject/project.xml:22
> >>>> ./ide/html.editor/nbproject/project.xml:22
> >>>> ./profiler/profiler/nbproject/project.xml:21
> >>>> ./platform/libs.jna/nbproject/project.xml:21
> >>>> ./php/php.api.editor/nbproject/project.xml:21
> >>>> ./java/java.preprocessorbridge/nbproject/project.xml:20
> >>>> ./ide/web.common.ui/nbproject/project.xml:20
> >>>> ./ide/terminal/nbproject/project.xml:20
> >>>> ./ide/terminal.nb/nbproject/project.xml:20
> >>>> ./java/j2ee.persistenceapi/nbproject/project.xml:19
> >>>> ./enterprise/javaee.specs.support/nbproject/project.xml:19
> >>>> ./webcommon/javascript2.lexer/nbproject/project.xml:17
> >>>> ./ide/xml.multiview/nbproject/project.xml:17
> >>>> ./ide/versioning.util/nbproject/project.xml:17
> >>>> ./ide/code.analysis/nbproject/project.xml:17
> >>>> ./php/php.api.framework/nbproject/project.xml:16
> >>>> ./ide/xml.text/nbproject/project.xml:16
> >>>> ./ide/versioning.core/nbproject/project.xml:16
> >>>> ./webcommon/javascript2.types/nbproject/project.xml:15
> >>>> ./platform/core.startup.base/nbproject/project.xml:15
> >>>> ./ide/editor.settings.storage/nbproject/project.xml:15
> >>>> ./enterprise/websvc.clientapi/nbproject/project.xml:15
> >>>> ./enterprise/web.project/nbproject/project.xml:15
> >>>> ./websvccommon/websvc.jaxwsmodelapi/nbproject/project.xml:14
> >>>> ./webcommon/javascript2.editor/nbproject/project.xml:14
> >>>> ./platform/core.startup/nbproject/project.xml:14
> >>>> ./java/j2ee.persistence/nbproject/project.xml:14
> >>>> ./ide/xml.axi/nbproject/project.xml:14
> >>>> ./enterprise/websvc.jaxwsapi/nbproject/project.xml:14
> >>>> ./websvccommon/websvc.saas.api/nbproject/project.xml:13
> >>>> ./java/whitelist/nbproject/project.xml:13
> >>>> ./enterprise/websvc.core/nbproject/project.xml:13
> >>>> ./platform/o.n.core/nbproject/project.xml:12
> >>>> ./ide/web.webkit.debugging/nbproject/project.xml:12
> >>>> ./ide/dlight.terminal/nbproject/project.xml:12
> >>>> ./webcommon/javascript2.model/nbproject/project.xml:11
> >>>> ./php/php.api.annotation/nbproject/project.xml:11
> >>>> ./java/maven.indexer/nbproject/project.xml:11
> >>>> ./java/javaee.injection/nbproject/project.xml:11
> >>>> ./java/j2ee.metadata.model.support/nbproject/project.xml:11
> >>>> ./ide/hudson/nbproject/project.xml:11
> >>>> ./extide/options.java/nbproject/project.xml:11
> >>>> ./enterprise/j2ee.sun.dd/nbproject/project.xml:11
> >>>> ./enterprise/glassfish.common/nbproject/project.xml:11
> >>>> ./platform/o.n.bootstrap/nbproject/project.xml:10
> >>>> ./java/java.testrunner/nbproject/project.xml:10
> >>>> ./java/java.j2seproject/nbproject/project.xml:10
> >>>>
> >>>>
> >>
> ./ide/xml.schema.completion/test/unit/src/org/netbeans/modules/xml/schema/completion/resources/project.xml:10
> >>>> ./ide/jumpto/nbproject/project.xml:10
> >>>> ./enterprise/web.jsf/nbproject/project.xml:10
> >>>> ./enterprise/web.jsfapi/nbproject/project.xml:10
> >>>>
> >>>> On 09/21/2018 05:26 PM, Tim Boudreau wrote:
> >>>> You may want to survey modules on Github that use implementation
> >>>> dependencies or use Uenta to bypass them. For example, I've been
> >> tweaking
> >>>> the rust module from github, which does tag with a couple of csl
> >> modules.
> >>>> Those should count toward "friends".
> >>>>
> >>>> -Tim
> >>>>
> >>>> On Fri, Sep 21, 2018 at 8:01 PM Laszlo Kishalmi <
> >> laszlo.kisha...@gmail.com
> >>>> wrote:
> >>>>
> >>>> Dear all,
> >>>>
> >>>> I'd like to summarize whet happened on the "API Friendliness" issue:
> >>>>
> >>>> We collected a number of possible options on our previous discussions
> >> at:
> >>>>
> >>
> https://cwiki.apache.org/confluence/display/NETBEANS/Public+vs+Friend+API
> >>>> Commenting these options remained really silent though. This means our
> >>>> Friend APIs most likely stay as they are now.
> >>>>
> >>>> I must acknowledge that adding new friends to an existing API is
> easier
> >>>> than ever having NetBeans under Apache umbrella.
> >>>>
> >>>> I plan not to give up on making some APIs public though. Regarding the
> >>>> low interest of making something big around this area, I think the
> most
> >>>> viable solution is:
> >>>>
> >>>> Option 4: Make Module Public when There is more than a Certain Number
> of
> >>>> Friend Dependencies.
> >>>>
> >>>> So sometime in the future I'm going to create a list of how many
> friends
> >>>> a module does have and share the list with you.
> >>>>
> >>>>
> >>>> Thank you all who participated in this effort!
> >>>>
> >>>> Laszlo Kishalmi
> >>>>
> >>>>
> >>>> ---------------------------------------------------------------------
> >>>> To unsubscribe, e-mail: dev-unsubscr...@netbeans.incubator.apache.org
> >>>> For additional commands, e-mail:
> dev-h...@netbeans.incubator.apache.org
> >>>>
> >>>> For further information about the NetBeans mailing lists, visit:
> >>>> https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists
> >>>>
> >>>>
> >>>>
> >>>> --
> >>>> http://timboudreau.com
> >>>>
> >>>>
> >>>>
> >>>>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: dev-unsubscr...@netbeans.incubator.apache.org
> >> For additional commands, e-mail: dev-h...@netbeans.incubator.apache.org
> >>
> >> For further information about the NetBeans mailing lists, visit:
> >> https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists
> >>
> >>
> >>
> >>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@netbeans.incubator.apache.org
> For additional commands, e-mail: dev-h...@netbeans.incubator.apache.org
>
> For further information about the NetBeans mailing lists, visit:
> https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists
>
>
>
>

Reply via email to